Contract snapshot 0.101.0 · Deployment and client release availability follow the integration note for your environment.
Start without credentials
Catalogue reads are public. Preserve entry kinds, keep/live modes, status notes, coverage basis, freshness and the response as-of date. Planned and preview entries cannot be assumed runnable.
Rates and free tools
Show published rates with credits, perUnits, unitLabel and cardVersion from pricing. A tool_free entry has no displayed price. Missing prices do not mean zero cost.
GET
/v1/catalogue/categories
List catalogue categories
Every catalogue category in page order, with how many cards and entries it has and how many entries are live, in preview, planned or degraded. Public and free.
| Status | Meaning |
|---|---|
| 200 | Success |
| 429 | Error. The `error.code` is one of: - `rate_limited`: retry advice `after_reset` |
| 500 | Error. The `error.code` is one of: - `internal`: retry advice `bounded` |
| 503 | Error. The `error.code` is one of: - `unavailable`: retry advice `bounded` |
Full response fields and reusable schemas are in the downloadable OpenAPI contract.
GET
/v1/catalogue/products
List catalogue cards
Data-product cards: what you get, entry count, "from N credits / unit" (or quote first, free tool, not available yet), coverage, freshness, keep/live badges and status. Filter by category, text and status. Public and free.
Parameters
[
{
"name": "category",
"in": "query",
"required": false,
"schema": {
"type": "string",
"title": "Category",
"examples": [
"quick_commerce"
],
"pattern": "^[a-z][a-z0-9_]{1,63}$"
},
"description": "Only this category."
},
{
"name": "q",
"in": "query",
"required": false,
"schema": {
"type": "string",
"title": "Query",
"examples": [
"price"
],
"minLength": 1,
"maxLength": 200
},
"description": "Only cards whose name, summary, data types or sources contain this text."
},
{
"name": "status",
"in": "query",
"required": false,
"schema": {
"type": "string",
"title": "Status",
"examples": [
"live"
],
"pattern": "^(live|preview|planned|degraded)$"
},
"description": "Only cards with this status: live, preview, planned or degraded."
}
]| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Error. The `error.code` is one of: - `invalid_request`: retry advice `fix_request` |
| 429 | Error. The `error.code` is one of: - `rate_limited`: retry advice `after_reset` |
| 500 | Error. The `error.code` is one of: - `internal`: retry advice `bounded` |
| 503 | Error. The `error.code` is one of: - `unavailable`: retry advice `bounded` |
Full response fields and reusable schemas are in the downloadable OpenAPI contract.
GET
/v1/catalogue/search
Search the catalogue
Search names, data types, sources and field names. A pasted product link or retailer product id also gets an intake answer: whether Rewalto already holds it, the same answer as POST /v1/catalogue/intake. Public and free.
Parameters
[
{
"name": "q",
"in": "query",
"required": true,
"schema": {
"type": "string",
"title": "Query",
"examples": [
"zepto price"
],
"minLength": 1,
"maxLength": 500
},
"description": "What to look for."
}
]| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Error. The `error.code` is one of: - `invalid_request`: retry advice `fix_request` |
| 429 | Error. The `error.code` is one of: - `rate_limited`: retry advice `after_reset` |
| 500 | Error. The `error.code` is one of: - `internal`: retry advice `bounded` |
| 503 | Error. The `error.code` is one of: - `unavailable`: retry advice `bounded` |
Full response fields and reusable schemas are in the downloadable OpenAPI contract.
GET
/v1/catalogue/entries/{id}
Get a catalogue entry
One dataset, recipe, workflow or tool in full: inputs and outputs (JSON Schema), sample rows, data dictionary, coverage table with holes, freshness, rate rows, rights, versions and, for a workflow, the recipes and datasets it uses. Public and free.
Parameters
[
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Id",
"description": "The entry id.",
"examples": [
"qc_price_history"
],
"pattern": "^[a-z][a-z0-9_]{1,63}$"
}
}
]| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Error. The `error.code` is one of: - `invalid_request`: retry advice `fix_request` |
| 404 | Error. The `error.code` is one of: - `not_found`: retry advice `fix_request` |
| 429 | Error. The `error.code` is one of: - `rate_limited`: retry advice `after_reset` |
| 500 | Error. The `error.code` is one of: - `internal`: retry advice `bounded` |
| 503 | Error. The `error.code` is one of: - `unavailable`: retry advice `bounded` |
Full response fields and reusable schemas are in the downloadable OpenAPI contract.
GET
/v1/catalogue/entries/{id}/coverage-grid
Get an entry's coverage grid
Coverage per pin code and IST day for every retailer the entry draws on, for the last `days` days (default 7, at most 31): readings per cell, holes (an expected pin with no readings) and days not computed (unknown, never shown as holes). Rows are pin codes; city is null until a pin-to-city map exists. Read from the hourly summary, never from the data itself. Public and free.
Parameters
[
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"title": "Id",
"description": "The entry id.",
"examples": [
"qc_price_history"
],
"pattern": "^[a-z][a-z0-9_]{1,63}$"
}
},
{
"name": "days",
"in": "query",
"required": false,
"schema": {
"type": "string",
"title": "Days",
"examples": [
"7"
],
"pattern": "^([1-9]|[12][0-9]|3[01])$"
},
"description": "IST days, ending today: 1 to 31. Default 7."
}
]| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Error. The `error.code` is one of: - `invalid_request`: retry advice `fix_request` |
| 404 | Error. The `error.code` is one of: - `not_found`: retry advice `fix_request` |
| 429 | Error. The `error.code` is one of: - `rate_limited`: retry advice `after_reset` |
| 500 | Error. The `error.code` is one of: - `internal`: retry advice `bounded` |
| 503 | Error. The `error.code` is one of: - `unavailable`: retry advice `bounded` |
Full response fields and reusable schemas are in the downloadable OpenAPI contract.