Merchant by merchantId + CEP
Recommended flow: call PLP first to discover merchantId, and then send merchantId + zipCode to PDP.
{
"target": "pede.ai",
"type": "pdp",
"merchantId": "35275",
"zipCode": "45300-000"
} // docs
Extracts merchant + catalog from pede.ai by merchantId + CEP. The backend resolves the area automatically via /v1/extract/lookups/pede.ai/resolve-zip-code and returns only synthetic pede.ai public URLs.
pede.ai:pdp · 5 credits per request
Standard credit cost. Your account pricing is shown in the sandbox.
Try this operation in the sandboxcurl -X POST https://api.geckoapi.com.br/v1/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"target": "pede.ai",
"type": "pdp",
"merchantId": "35275",
"zipCode": "45300-000"
}' Keep your API key on your server. See the quickstart for authentication and response handling.
The hosted MCP tool fixes target and type for this operation. Its remaining arguments use the same input rules as Extract.
POST /v1/mcp · Bearer or X-API-Key authentication
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "pede_ai_pdp",
"arguments": {
"merchantId": "35275",
"zipCode": "45300-000",
"executionId": "exec_example_123"
}
}
} Conditional fields depend on the alternatives and constraints in the rule column. Fields marked unsupported are omitted.
| Field | Type | Requirement | Rule | Default | Example |
|---|---|---|---|---|---|
| zipCode CEP used in APIs with automatic geographic resolution. API accepts with or without a hyphen and normalizes to 8 digits. | string (CEP) | Required | Mandatory in pede.ai PDP. Accepts CEP with or without hyphen; API normalizes the value and resolves the area automatically. | - | 45300-000 |
| merchantId Internal merchant identifier used in pede.ai PDP. Normally it comes from the result of PLP and must be combined with zipCode. | string | Required | Mandatory in pede.ai PDP. Use the merchantId returned by PLP and combine it with zipCode. | - | 35275 |
| target Target source for extraction. | enum | Required | Always mandatory in the payload and must be pede.ai. | - | pede.ai |
| type Extraction type: pdp, idp, plp, ilp, quote, review or places. | enum | Required | Always mandatory in the payload and must be pdp. | - | pdp |
Recommended flow: call PLP first to discover merchantId, and then send merchantId + zipCode to PDP.
{
"target": "pede.ai",
"type": "pdp",
"merchantId": "35275",
"zipCode": "45300-000"
} Leaf paths and expected types. Field names and enum values are part of the API contract.
{
"requestId": "string (uuid)",
"executionId": "string (uuid)",
"data.source": "string",
"data.type": "string",
"data.url": "string",
"data.requestUrl": "string",
"data.extractedAt": "string (iso datetime)",
"data.merchantId": "string",
"data.areaId": "string",
"data.locationResolution.zipCode": "string",
"data.locationResolution.formattedZipCode": "string",
"data.locationResolution.state": "string",
"data.locationResolution.stateName": "string",
"data.locationResolution.city": "string",
"data.locationResolution.neighborhood": "string",
"data.locationResolution.cityId": "string",
"data.locationResolution.areaId": "string",
"data.locationResolution.geocoderProvider": "string",
"data.locationResolution.latitude": "number",
"data.locationResolution.longitude": "number",
"data.locationResolution.matchStrategy": "string",
"data.locationResolution.rankedCandidates[].areaId": "string",
"data.locationResolution.rankedCandidates[].cityId": "string",
"data.locationResolution.rankedCandidates[].city": "string",
"data.locationResolution.rankedCandidates[].state": "string",
"data.locationResolution.rankedCandidates[].neighborhood": "string",
"data.locationResolution.rankedCandidates[].minimumRate": "number",
"data.locationResolution.rankedCandidates[].typeOperation": "string",
"data.locationResolution.rankedCandidates[].externalProvider": "string",
"data.locationResolution.rankedCandidates[].active": "boolean",
"data.locationResolution.rankedCandidates[].matchStrategy": "string",
"data.locationResolution.rankedCandidates[].matchedLabel": "string",
"data.locationResolution.rankedCandidates[].score": "number",
"data.data.merchantId": "string",
"data.data.name": "string",
"data.data.description": "string",
"data.data.slug": "string",
"data.data.logo": "string",
"data.data.cover": "string",
"data.data.available": "boolean",
"data.data.acceptsScheduling": "boolean",
"data.data.rating": "number",
"data.data.ratingDisplay": "string",
"data.data.deliveryTimeText": "string",
"data.data.deliveryTimeMinutes": "number",
"data.data.acceptsCoupon": "boolean",
"data.data.acceptsOnlinePayment": "boolean",
"data.data.acceptsInPersonPayment": "boolean",
"data.data.acceptsPix": "boolean",
"data.data.acceptsNuPay": "boolean",
"data.data.acceptsPicPay": "boolean",
"data.data.categories[].id": "number",
"data.data.categories[].name": "string",
"data.data.storeTypes[].id": "number",
"data.data.storeTypes[].name": "string",
"data.data.address.raw": "string",
"data.data.address.street": "string",
"data.data.address.number": "string",
"data.data.address.neighborhood": "string",
"data.data.address.city": "string",
"data.data.address.state": "string",
"data.data.address.zipCode": "string",
"data.data.address.latitude": "number",
"data.data.address.longitude": "number",
"data.data.deliveryArea.areaId": "string",
"data.data.deliveryArea.cityId": "string",
"data.data.deliveryArea.city": "string",
"data.data.deliveryArea.state": "string",
"data.data.deliveryArea.neighborhood": "string",
"data.data.deliveryArea.deliveryFee": "number",
"data.data.deliveryArea.minimumOrderValue": "number",
"data.data.deliveryArea.freeDeliveryMinimum": "number",
"data.data.deliveryArea.acceptsFreeDelivery": "boolean",
"data.data.deliveryArea.areaNotServed": "boolean",
"data.data.menuSectionCount": "number",
"data.data.menuItemCount": "number",
"data.data.menu[].sectionId": "string",
"data.data.menu[].name": "string",
"data.data.menu[].items[].itemId": "string",
"data.data.menu[].items[].merchantId": "string",
"data.data.menu[].items[].categoryId": "string",
"data.data.menu[].items[].name": "string",
"data.data.menu[].items[].description": "string",
"data.data.menu[].items[].image": "string",
"data.data.menu[].items[].price": "number",
"data.data.menu[].items[].originalPrice": "number",
"data.data.menu[].items[].hasStartingPrice": "boolean",
"data.data.menu[].items[].startingPrice": "number",
"data.data.menu[].items[].fastOrder": "boolean",
"data.data.menu[].items[].outOfStock": "boolean",
"data.data.menu[].items[].hidden": "boolean",
"data.data.menu[].items[].variations[].groupId": "string",
"data.data.menu[].items[].variations[].name": "string",
"data.data.menu[].items[].variations[].options[].optionId": "string",
"data.data.menu[].items[].variations[].options[].name": "string",
"data.data.menu[].items[].variations[].options[].price": "number",
"data.data.menu[].items[].variations[].options[].outOfStock": "boolean"
} Illustrative response. Product names, reviews and other source content retain their original language. Missing and null values do not imply zero stock, free shipping or zero reviews.
{
"requestId": "88888888-1111-4111-8111-888888888888",
"executionId": "88888888-2222-4222-8222-888888888888",
"data": {
"source": "pede.ai",
"type": "pdp",
"url": "https://pede.ai/restaurante/35275?cep=45300-000",
"requestUrl": "https://pede.ai/restaurante/35275?cep=45300-000",
"extractedAt": "2026-04-17T18:15:00.000Z",
"merchantId": "35275",
"areaId": "19590",
"locationResolution": {
"zipCode": "45300000",
"formattedZipCode": "45300-000",
"state": "BA",
"stateName": "Bahia",
"city": "Amargosa",
"neighborhood": "Centro",
"cityId": "508",
"areaId": "19590",
"geocoderProvider": "brasilapi",
"latitude": -13.0303,
"longitude": -39.6031,
"matchStrategy": "exact",
"rankedCandidates": [
{
"areaId": "19590",
"cityId": "508",
"city": "Amargosa",
"state": "BA",
"neighborhood": "Centro",
"minimumRate": 5,
"typeOperation": "OPL",
"externalProvider": "Leve.ai",
"active": true,
"matchStrategy": "exact",
"matchedLabel": "Centro",
"score": 400
}
]
},
"data": {
"merchantId": "35275",
"name": "Decor Colors",
"description": "Tintas e acabamentos",
"slug": "decor-colors",
"logo": "https://merchant-assets.pede.ai/decor-colors/logo.jpg",
"cover": "https://merchant-assets.pede.ai/decor-colors/cover.jpg",
"available": true,
"acceptsScheduling": true,
"rating": 4.8,
"ratingDisplay": "4.8",
"deliveryTimeText": "30-40",
"deliveryTimeMinutes": 35,
"acceptsCoupon": true,
"acceptsOnlinePayment": true,
"acceptsInPersonPayment": true,
"acceptsPix": true,
"acceptsNuPay": true,
"acceptsPicPay": true,
"categories": [
{
"id": 77,
"name": "Tintas",
"image": "https://merchant-assets.pede.ai/tintas.png",
"icon": "https://merchant-assets.pede.ai/tintas-icon.png"
}
],
"storeTypes": [
{
"id": 9,
"name": "Casa e construcao",
"icon": "https://merchant-assets.pede.ai/construcao.png",
"order": 2,
"status": "S"
}
],
"address": {
"raw": "Rua A, 123 - Centro, Amargosa - BA",
"street": "Rua A",
"number": "123",
"neighborhood": "Centro",
"city": "Amargosa",
"state": "BA",
"zipCode": "45300-000",
"latitude": -13.0303,
"longitude": -39.6031
},
"deliveryArea": {
"areaId": "19590",
"cityId": "508",
"city": "Amargosa",
"state": "BA",
"neighborhood": "Centro",
"deliveryFee": 7,
"minimumOrderValue": 0,
"freeDeliveryMinimum": 120,
"acceptsFreeDelivery": false,
"areaNotServed": false
},
"menuSectionCount": 1,
"menuItemCount": 1,
"menu": [
{
"sectionId": "251538",
"name": "Borracha Liquida",
"hasOffer": false,
"offerDiscount": 0,
"order": 999,
"items": [
{
"itemId": "1823207",
"merchantId": "35275",
"categoryId": "251538",
"name": "Tinta Borracha Liquida Solucao Total - Decor Colors",
"description": "Galao 1,07 Kg - Ate 4m2",
"image": "https://merchant-assets.pede.ai/1773946435COMP_158711-1600-auto.png",
"price": 179.99,
"originalPrice": 0,
"hasStartingPrice": true,
"startingPrice": 179.99,
"fastOrder": false,
"outOfStock": false,
"hidden": false,
"sizes": [],
"variations": [
{
"groupId": "810972",
"name": "Escolha a cor da sua tinta",
"minChoices": 1,
"maxChoices": 1,
"priceCalculation": "st",
"options": [
{
"optionId": "4200790",
"name": "Atena",
"price": 0,
"description": "Cor pronta para aplicacao",
"image": "https://merchant-assets.pede.ai/1773946845COMP_phpJbPPen",
"outOfStock": false
}
]
}
],
"removableOptions": []
}
]
}
]
}
}
} | Path | Type | Description | Example |
|---|---|---|---|
| data.areaId | string | areaId actually used in the query, resolved from CEP or fixed by internal override. | 19590 |
| data.data.acceptsCoupon | boolean | Field data.data.acceptsCoupon returned in the response payload. | true |
| data.data.acceptsInPersonPayment | boolean | Field data.data.acceptsInPersonPayment returned in the response payload. | true |
| data.data.acceptsNuPay | boolean | Field data.data.acceptsNuPay returned in the response payload. | true |
| data.data.acceptsOnlinePayment | boolean | Field data.data.acceptsOnlinePayment returned in the response payload. | true |
| data.data.acceptsPicPay | boolean | Field data.data.acceptsPicPay returned in the response payload. | true |
| data.data.acceptsPix | boolean | Field data.data.acceptsPix returned in the response payload. | true |
| data.data.acceptsScheduling | boolean | Field data.data.acceptsScheduling returned in the response payload. | true |
| data.data.address.city | string | Field data.data.address.city returned in the response payload. | Amargosa |
| data.data.address.latitude | number | Field data.data.address.latitude returned in the response payload. | -13.0303 |
| data.data.address.longitude | number | Field data.data.address.longitude returned in the response payload. | -39.6031 |
| data.data.address.neighborhood | string | Field data.data.address.neighborhood returned in the response payload. | Centro |
| data.data.address.number | string | Field data.data.address.number returned in the response payload. | 123 |
| data.data.address.raw | string | Field data.data.address.raw returned in the response payload. | Rua A, 123 - Centro, Amargosa - BA |
| data.data.address.state | string | data.data.address.state field returned in the response payload. | BA |
| data.data.address.street | string | Field data.data.address.street returned in the response payload. | Rua A |
| data.data.address.zipCode | string | Field data.data.address.zipCode returned in the response payload. | 45300-000 |
| data.data.available | boolean | Field data.data.available returned in the response payload. | true |
| data.data.categories[].id | number | Field data.data.categories[].id returned in the response payload. | 77 |
| data.data.categories[].name | string | Field data.data.categories[].name returned in the response payload. | Tintas |
| data.data.cover | string | Field data.data.cover returned in the response payload. | https://merchant-assets.pede.ai/decor-colors/cover.jpg |
| data.data.deliveryArea.acceptsFreeDelivery | boolean | data.data.deliveryArea.acceptsFreeDelivery field returned in the response payload. | false |
| data.data.deliveryArea.areaId | string | Delivery area actually used in the merchant query. | 19590 |
| data.data.deliveryArea.areaNotServed | boolean | data.data.deliveryArea.areaNotServed field returned in the response payload. | false |
| data.data.deliveryArea.city | string | Field data.data.deliveryArea.city returned in the response payload. | Amargosa |
| data.data.deliveryArea.cityId | string | Field data.data.deliveryArea.cityId returned in the response payload. | 508 |
| data.data.deliveryArea.deliveryFee | number | Field data.data.deliveryArea.deliveryFee returned in the response payload. | 7 |
| data.data.deliveryArea.freeDeliveryMinimum | number | Field data.data.deliveryArea.freeDeliveryMinimum returned in the response payload. | 120 |
| data.data.deliveryArea.minimumOrderValue | number | Field data.data.deliveryArea.minimumOrderValue returned in the response payload. | 0 |
| data.data.deliveryArea.neighborhood | string | data.data.deliveryArea.neighborhood field returned in the response payload. | Centro |
| data.data.deliveryArea.state | string | data.data.deliveryArea.state field returned in the response payload. | BA |
| data.data.deliveryTimeMinutes | number | data.data.deliveryTimeMinutes field returned in the response payload. | 35 |
| data.data.deliveryTimeText | string | Field data.data.deliveryTimeText returned in the response payload. | 30-40 |
| data.data.description | string | Field data.data.description returned in the response payload. | Tintas e acabamentos |
| data.data.logo | string | Field data.data.logo returned in the response payload. | https://merchant-assets.pede.ai/decor-colors/logo.jpg |
| data.data.menu[].items[].categoryId | string | Field data.data.menu[].items[].categoryId returned in the response payload. | 251538 |
| data.data.menu[].items[].description | string | Field data.data.menu[].items[].description returned in the response payload. | Galao 1,07 Kg - Ate 4m2 |
| data.data.menu[].items[].fastOrder | boolean | Field data.data.menu[].items[].fastOrder returned in the response payload. | false |
| data.data.menu[].items[].hasStartingPrice | boolean | Indicates items with price "a partir de", when the exact price depends on variations. | true |
| data.data.menu[].items[].hidden | boolean | Field data.data.menu[].items[].hidden returned in the response payload. | false |
| data.data.menu[].items[].image | string | Field data.data.menu[].items[].image returned in the response payload. | https://merchant-assets.pede.ai/1773946435COMP_158711-1600-auto.png |
| data.data.menu[].items[].itemId | string | Field data.data.menu[].items[].itemId returned in the response payload. | 1823207 |
| data.data.menu[].items[].merchantId | string | Field data.data.menu[].items[].merchantId returned in the response payload. | 35275 |
| data.data.menu[].items[].name | string | data.data.menu[].items[].name field returned in the response payload. | Tinta Borracha Liquida Solucao Total - Decor Colors |
| data.data.menu[].items[].originalPrice | number | Field data.data.menu[].items[].originalPrice returned in the response payload. | 0 |
| data.data.menu[].items[].outOfStock | boolean | Field data.data.menu[].items[].outOfStock returned in the response payload. | false |
| data.data.menu[].items[].price | number | Normalized price of the item. When hasStartingPrice=true, in production this field may be null. | 179.99 |
| data.data.menu[].items[].startingPrice | number | Starting price when upstream marks the item as "a partir de". | 179.99 |
| data.data.menu[].items[].variations[].groupId | string | Field data.data.menu[].items[].variations[].groupId returned in the response payload. | 810972 |
| data.data.menu[].items[].variations[].name | string | Field data.data.menu[].items[].variations[].name returned in the response payload. | Escolha a cor da sua tinta |
| data.data.menu[].items[].variations[].options[].name | string | Field data.data.menu[].items[].variations[].options[].name returned in the response payload. | Atena |
| data.data.menu[].items[].variations[].options[].optionId | string | Field data.data.menu[].items[].variations[].options[].optionId returned in the response payload. | 4200790 |
| data.data.menu[].items[].variations[].options[].outOfStock | boolean | Field data.data.menu[].items[].variations[].options[].outOfStock returned in the response payload. | false |
| data.data.menu[].items[].variations[].options[].price | number | Field data.data.menu[].items[].variations[].options[].price returned in the response payload. | 0 |
| data.data.menu[].name | string | Field data.data.menu[].name returned in the response payload. | Borracha Liquida |
| data.data.menu[].sectionId | string | data.data.menu[].sectionId field returned in the response payload. | 251538 |
| data.data.menuItemCount | number | Total quantity of standardized items on the menu. | 1 |
| data.data.menuSectionCount | number | Number of standardized sections in the menu. | 1 |
| data.data.merchantId | string | Field data.data.merchantId returned in the response payload. | 35275 |
| data.data.name | string | Field data.data.name returned in the response payload. | Decor Colors |
| data.data.rating | number | Field data.data.rating returned in the response payload. | 4.8 |
| data.data.ratingDisplay | string | Field data.data.ratingDisplay returned in the response payload. | 4.8 |
| data.data.slug | string | data.data.slug field returned in the response payload. | decor-colors |
| data.data.storeTypes[].id | number | Field data.data.storeTypes[].id returned in the response payload. | 9 |
| data.data.storeTypes[].name | string | Field data.data.storeTypes[].name returned in the response payload. | Casa e construcao |
| data.extractedAt | string (iso datetime) | data.extractedAt field returned in the response payload. | 2026-04-17T18:15:00.000Z |
| data.locationResolution.areaId | string | areaId effectively resolved to pede.ai's internal query. | 19590 |
| data.locationResolution.city | string | City resolved from CEP. | Amargosa |
| data.locationResolution.cityId | string | cityId effectively resolved to pede.ai internal query. | 508 |
| data.locationResolution.formattedZipCode | string | CEP formatted with hyphen used in synthetic public URL. | 45300-000 |
| data.locationResolution.geocoderProvider | string | Provider used in geocoding CEP. | brasilapi |
| data.locationResolution.latitude | number | Latitude associated with CEP when available. | -13.0303 |
| data.locationResolution.longitude | number | Longitude associated with CEP when available. | -39.6031 |
| data.locationResolution.matchStrategy | string | Textual strategy used to select the best area of pede.ai. | exact |
| data.locationResolution.neighborhood | string | Textual neighborhood/locality returned by the geocoder. | Centro |
| data.locationResolution.rankedCandidates[].active | boolean | Field data.locationResolution.rankedCandidates[].active returned in the response payload. | true |
| data.locationResolution.rankedCandidates[].areaId | string | data.locationResolution.rankedCandidates[].areaId field returned in the response payload. | 19590 |
| data.locationResolution.rankedCandidates[].city | string | Field data.locationResolution.rankedCandidates[].city returned in the response payload. | Amargosa |
| data.locationResolution.rankedCandidates[].cityId | string | Field data.locationResolution.rankedCandidates[].cityId returned in the response payload. | 508 |
| data.locationResolution.rankedCandidates[].externalProvider | string | Field data.locationResolution.rankedCandidates[].externalProvider returned in the response payload. | Leve.ai |
| data.locationResolution.rankedCandidates[].matchedLabel | string | Field data.locationResolution.rankedCandidates[].matchedLabel returned in the response payload. | Centro |
| data.locationResolution.rankedCandidates[].matchStrategy | string | Field data.locationResolution.rankedCandidates[].matchStrategy returned in the response payload. | exact |
| data.locationResolution.rankedCandidates[].minimumRate | number | Field data.locationResolution.rankedCandidates[].minimumRate returned in the response payload. | 5 |
| data.locationResolution.rankedCandidates[].neighborhood | string | Field data.locationResolution.rankedCandidates[].neighborhood returned in the response payload. | Centro |
| data.locationResolution.rankedCandidates[].score | number | Field data.locationResolution.rankedCandidates[].score returned in the response payload. | 400 |
| data.locationResolution.rankedCandidates[].state | string | Field data.locationResolution.rankedCandidates[].state returned in the response payload. | BA |
| data.locationResolution.rankedCandidates[].typeOperation | string | data.locationResolution.rankedCandidates[].typeOperation field returned in the response payload. | OPL |
| data.locationResolution.state | string | UF resolved from CEP. | BA |
| data.locationResolution.stateName | string | State name resolved from CEP. | Bahia |
| data.locationResolution.zipCode | string | CEP normalized to 8 digits used in geographic resolution. | 45300000 |
| data.merchantId | string | merchantId sent in input payload. | 35275 |
| data.requestUrl | string | Same value as `data.url`; never exposes the queried internal endpoint. | https://pede.ai/restaurante/35275?cep=45300-000 |
| data.source | string | Field data.source returned in the response payload. | pede.ai |
| data.type | string | Field data.type returned in the response payload. | pdp |
| data.url | string | URL publishes synthetic code used as the request's canonical identifier. | https://pede.ai/restaurante/35275?cep=45300-000 |
| executionId | string (uuid) | Field executionId returned in the response payload. | 88888888-2222-4222-8222-888888888888 |
| requestId | string (uuid) | Field requestId returned in the response payload. | 88888888-1111-4111-8111-888888888888 |
When supported by this operation, an entity not found upstream can return HTTP 200 with data: null and notFound: true. Check the documented response fields before interpreting an empty result. Source-specific behavior and exceptions are described above.
| HTTP status | Error code | Meaning |
|---|---|---|
| 400 | INVALID_PAYLOAD | Invalid JSON or a request that violates the documented validation rules. |
| 401 | UNAUTHORIZED | Missing authorization or an invalid API key or token. |
| 402 | INSUFFICIENT_CREDITS | The account has insufficient credits for this operation. |
| 403 | FORBIDDEN | The account does not have access, or the API is temporarily disabled. |
| 409 | EXECUTION_CONFLICT | The execution identifier conflicts with an incompatible execution state. |
| 429 | RATE_LIMIT_EXCEEDED / TOO_MANY_INFLIGHT_REQUESTS | A rate limit or simultaneous request limit was exceeded. |
| 5xx | UPSTREAM_TIMEOUT / UPSTREAM_HTTP_ERROR / WORKER_FUNCTION_ERROR | An upstream, worker or gateway failure. Failed requests follow the platform refund policy. |