// docs

Pede.ai PDP (Merchant)

Extrai merchant + catalogo do pede.ai por merchantId + CEP. O backend resolve a area automaticamente via /v1/extract/lookups/pede.ai/resolve-zip-code e retorna apenas URLs publicas sinteticas do pede.ai.

Nota importante: alguns campos podem retornar null em produção, dependendo da página de origem. Nesta documentação, os exemplos de output são preenchidos intencionalmente com valores não nulos para facilitar integração.

Quando a entidade consultada não existe na origem, o extract e a tool MCP retornam 200 com data: null e notFound: true. Esse caso é tratado como resposta concluída, não como erro de servidor.

Chamada HTTP

cURL
curl -X POST https://api.geckoapi.com.br/v1/extract \
  -H "Authorization: Bearer SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
  "target": "pede.ai",
  "type": "pdp",
  "merchantId": "35275",
  "zipCode": "45300-000"
}'

Chamada MCP

A mesma seam também aparece no MCP hospedado como uma tool dedicada. Os argumentos reaproveitam os campos do extract, mas target e type já ficam fixos pela tool.

Ver guia completo do MCP

Endpoint

POST /v1/mcp

Tool name

pede_ai_pdp

Auth

Bearer ou X-API-Key

pede_ai_pdp tools/call
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "pede_ai_pdp",
    "arguments": {
      "merchantId": "35275",
      "zipCode": "45300-000",
      "executionId": "exec_example_123"
    }
  }
}

Possibilidades de input

Campos suportados nesta API do POST /v1/extract, com regras específicas de obrigatoriedade e condicionais.

Campo Tipo Status Regra Default Exemplo
zipCode
CEP brasileiro usado em APIs com resolucao geografica automatica, como iFood PLP e pede.ai PLP/PDP. A API aceita com ou sem hifen e normaliza para 8 digitos.
string (CEP) Obrigatório Obrigatorio no pede.ai PDP. Aceita CEP com ou sem hifen; a API normaliza o valor e resolve a area automaticamente. - 80010-000
merchantId
Identificador interno do merchant usado no pede.ai PDP. Normalmente ele vem do resultado do PLP e deve ser combinado com zipCode.
string Obrigatório Obrigatorio no pede.ai PDP. Use o merchantId retornado pelo PLP e combine-o com zipCode. - 35275
target
Fonte alvo da extração.
enum Obrigatório Sempre obrigatorio no payload e deve ser pede.ai. - mercadolivre.com.br
type
Tipo da extração: pdp, idp, plp, quote, review ou places.
enum Obrigatório Sempre obrigatorio no payload e deve ser pdp. - pdp

Exemplos de request

Merchant por merchantId + CEP

Fluxo recomendado: chame o PLP primeiro para descobrir o merchantId e depois envie merchantId + zipCode para o PDP.

Merchant por merchantId + CEP
{
  "target": "pede.ai",
  "type": "pdp",
  "merchantId": "35275",
  "zipCode": "45300-000"
}

Schema de response (leaf paths)

Mapa de paths de saída com tipo esperado para esta API.

responseSchema
{
  "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"
}

Exemplo de response

responseExample
{
  "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": []
            }
          ]
        }
      ]
    }
  }
}

Referência completa de campos

Path Tipo Descrição Exemplo
data.areaId string areaId efetivamente usado na consulta, resolvido a partir do CEP ou fixado por override interno. 19590
data.data.acceptsCoupon boolean Campo data.data.acceptsCoupon retornado no payload de resposta. true
data.data.acceptsInPersonPayment boolean Campo data.data.acceptsInPersonPayment retornado no payload de resposta. true
data.data.acceptsNuPay boolean Campo data.data.acceptsNuPay retornado no payload de resposta. true
data.data.acceptsOnlinePayment boolean Campo data.data.acceptsOnlinePayment retornado no payload de resposta. true
data.data.acceptsPicPay boolean Campo data.data.acceptsPicPay retornado no payload de resposta. true
data.data.acceptsPix boolean Campo data.data.acceptsPix retornado no payload de resposta. true
data.data.acceptsScheduling boolean Campo data.data.acceptsScheduling retornado no payload de resposta. true
data.data.address.city string Campo data.data.address.city retornado no payload de resposta. Amargosa
data.data.address.latitude number Campo data.data.address.latitude retornado no payload de resposta. -13.0303
data.data.address.longitude number Campo data.data.address.longitude retornado no payload de resposta. -39.6031
data.data.address.neighborhood string Campo data.data.address.neighborhood retornado no payload de resposta. Centro
data.data.address.number string Campo data.data.address.number retornado no payload de resposta. 123
data.data.address.raw string Campo data.data.address.raw retornado no payload de resposta. Rua A, 123 - Centro, Amargosa - BA
data.data.address.state string Campo data.data.address.state retornado no payload de resposta. BA
data.data.address.street string Campo data.data.address.street retornado no payload de resposta. Rua A
data.data.address.zipCode string Campo data.data.address.zipCode retornado no payload de resposta. 45300-000
data.data.available boolean Campo data.data.available retornado no payload de resposta. true
data.data.categories[].id number Campo data.data.categories[].id retornado no payload de resposta. 77
data.data.categories[].name string Campo data.data.categories[].name retornado no payload de resposta. Tintas
data.data.cover string Campo data.data.cover retornado no payload de resposta. https://merchant-assets.pede.ai/decor-colors/cover.jpg
data.data.deliveryArea.acceptsFreeDelivery boolean Campo data.data.deliveryArea.acceptsFreeDelivery retornado no payload de resposta. false
data.data.deliveryArea.areaId string Area de entrega efetivamente usada na consulta do merchant. 19590
data.data.deliveryArea.areaNotServed boolean Campo data.data.deliveryArea.areaNotServed retornado no payload de resposta. false
data.data.deliveryArea.city string Campo data.data.deliveryArea.city retornado no payload de resposta. Amargosa
data.data.deliveryArea.cityId string Campo data.data.deliveryArea.cityId retornado no payload de resposta. 508
data.data.deliveryArea.deliveryFee number Campo data.data.deliveryArea.deliveryFee retornado no payload de resposta. 7
data.data.deliveryArea.freeDeliveryMinimum number Campo data.data.deliveryArea.freeDeliveryMinimum retornado no payload de resposta. 120
data.data.deliveryArea.minimumOrderValue number Campo data.data.deliveryArea.minimumOrderValue retornado no payload de resposta. 0
data.data.deliveryArea.neighborhood string Campo data.data.deliveryArea.neighborhood retornado no payload de resposta. Centro
data.data.deliveryArea.state string Campo data.data.deliveryArea.state retornado no payload de resposta. BA
data.data.deliveryTimeMinutes number Campo data.data.deliveryTimeMinutes retornado no payload de resposta. 35
data.data.deliveryTimeText string Campo data.data.deliveryTimeText retornado no payload de resposta. 30-40
data.data.description string Campo data.data.description retornado no payload de resposta. Tintas e acabamentos
data.data.logo string Campo data.data.logo retornado no payload de resposta. https://merchant-assets.pede.ai/decor-colors/logo.jpg
data.data.menu[].items[].categoryId string Campo data.data.menu[].items[].categoryId retornado no payload de resposta. 251538
data.data.menu[].items[].description string Campo data.data.menu[].items[].description retornado no payload de resposta. Galao 1,07 Kg - Ate 4m2
data.data.menu[].items[].fastOrder boolean Campo data.data.menu[].items[].fastOrder retornado no payload de resposta. false
data.data.menu[].items[].hasStartingPrice boolean Indica itens com preco "a partir de", quando o preco exato depende das variacoes. true
data.data.menu[].items[].hidden boolean Campo data.data.menu[].items[].hidden retornado no payload de resposta. false
data.data.menu[].items[].image string Campo data.data.menu[].items[].image retornado no payload de resposta. https://merchant-assets.pede.ai/1773946435COMP_158711-1600-auto.png
data.data.menu[].items[].itemId string Campo data.data.menu[].items[].itemId retornado no payload de resposta. 1823207
data.data.menu[].items[].merchantId string Campo data.data.menu[].items[].merchantId retornado no payload de resposta. 35275
data.data.menu[].items[].name string Campo data.data.menu[].items[].name retornado no payload de resposta. Tinta Borracha Liquida Solucao Total - Decor Colors
data.data.menu[].items[].originalPrice number Campo data.data.menu[].items[].originalPrice retornado no payload de resposta. 0
data.data.menu[].items[].outOfStock boolean Campo data.data.menu[].items[].outOfStock retornado no payload de resposta. false
data.data.menu[].items[].price number Preco normalizado do item. Quando hasStartingPrice=true, em producao esse campo pode ser nulo. 179.99
data.data.menu[].items[].startingPrice number Preco inicial quando o upstream marca o item como "a partir de". 179.99
data.data.menu[].items[].variations[].groupId string Campo data.data.menu[].items[].variations[].groupId retornado no payload de resposta. 810972
data.data.menu[].items[].variations[].name string Campo data.data.menu[].items[].variations[].name retornado no payload de resposta. Escolha a cor da sua tinta
data.data.menu[].items[].variations[].options[].name string Campo data.data.menu[].items[].variations[].options[].name retornado no payload de resposta. Atena
data.data.menu[].items[].variations[].options[].optionId string Campo data.data.menu[].items[].variations[].options[].optionId retornado no payload de resposta. 4200790
data.data.menu[].items[].variations[].options[].outOfStock boolean Campo data.data.menu[].items[].variations[].options[].outOfStock retornado no payload de resposta. false
data.data.menu[].items[].variations[].options[].price number Campo data.data.menu[].items[].variations[].options[].price retornado no payload de resposta. 0
data.data.menu[].name string Campo data.data.menu[].name retornado no payload de resposta. Borracha Liquida
data.data.menu[].sectionId string Campo data.data.menu[].sectionId retornado no payload de resposta. 251538
data.data.menuItemCount number Quantidade total de itens normalizados no cardapio. 1
data.data.menuSectionCount number Quantidade de secoes normalizadas no cardapio. 1
data.data.merchantId string Campo data.data.merchantId retornado no payload de resposta. 35275
data.data.name string Campo data.data.name retornado no payload de resposta. Decor Colors
data.data.rating number Campo data.data.rating retornado no payload de resposta. 4.8
data.data.ratingDisplay string Campo data.data.ratingDisplay retornado no payload de resposta. 4.8
data.data.slug string Campo data.data.slug retornado no payload de resposta. decor-colors
data.data.storeTypes[].id number Campo data.data.storeTypes[].id retornado no payload de resposta. 9
data.data.storeTypes[].name string Campo data.data.storeTypes[].name retornado no payload de resposta. Casa e construcao
data.extractedAt string (iso datetime) Campo data.extractedAt retornado no payload de resposta. 2026-04-17T18:15:00.000Z
data.locationResolution.areaId string areaId efetivamente resolvido para a consulta interna do pede.ai. 19590
data.locationResolution.city string Cidade resolvida a partir do CEP. Amargosa
data.locationResolution.cityId string cityId efetivamente resolvido para a consulta interna do pede.ai. 508
data.locationResolution.formattedZipCode string CEP formatado com hifen usado na URL publica sintetica. 45300-000
data.locationResolution.geocoderProvider string Provider usado na geocodificacao do CEP. brasilapi
data.locationResolution.latitude number Latitude associada ao CEP quando disponivel. -13.0303
data.locationResolution.longitude number Longitude associada ao CEP quando disponivel. -39.6031
data.locationResolution.matchStrategy string Estrategia textual usada para selecionar a melhor area do pede.ai. exact
data.locationResolution.neighborhood string Bairro/localidade textual retornado pelo geocoder. Centro
data.locationResolution.rankedCandidates[].active boolean Campo data.locationResolution.rankedCandidates[].active retornado no payload de resposta. true
data.locationResolution.rankedCandidates[].areaId string Campo data.locationResolution.rankedCandidates[].areaId retornado no payload de resposta. 19590
data.locationResolution.rankedCandidates[].city string Campo data.locationResolution.rankedCandidates[].city retornado no payload de resposta. Amargosa
data.locationResolution.rankedCandidates[].cityId string Campo data.locationResolution.rankedCandidates[].cityId retornado no payload de resposta. 508
data.locationResolution.rankedCandidates[].externalProvider string Campo data.locationResolution.rankedCandidates[].externalProvider retornado no payload de resposta. Leve.ai
data.locationResolution.rankedCandidates[].matchedLabel string Campo data.locationResolution.rankedCandidates[].matchedLabel retornado no payload de resposta. Centro
data.locationResolution.rankedCandidates[].matchStrategy string Campo data.locationResolution.rankedCandidates[].matchStrategy retornado no payload de resposta. exact
data.locationResolution.rankedCandidates[].minimumRate number Campo data.locationResolution.rankedCandidates[].minimumRate retornado no payload de resposta. 5
data.locationResolution.rankedCandidates[].neighborhood string Campo data.locationResolution.rankedCandidates[].neighborhood retornado no payload de resposta. Centro
data.locationResolution.rankedCandidates[].score number Campo data.locationResolution.rankedCandidates[].score retornado no payload de resposta. 400
data.locationResolution.rankedCandidates[].state string Campo data.locationResolution.rankedCandidates[].state retornado no payload de resposta. BA
data.locationResolution.rankedCandidates[].typeOperation string Campo data.locationResolution.rankedCandidates[].typeOperation retornado no payload de resposta. OPL
data.locationResolution.state string UF resolvida a partir do CEP. BA
data.locationResolution.stateName string Nome do estado resolvido a partir do CEP. Bahia
data.locationResolution.zipCode string CEP normalizado para 8 digitos usado na resolucao geografica. 45300000
data.merchantId string merchantId enviado no payload de entrada. 35275
data.requestUrl string Mesmo valor da URL publica sintetica usada no request. https://pede.ai/restaurante/35275?cep=45300-000
data.source string Campo data.source retornado no payload de resposta. pede.ai
data.type string Campo data.type retornado no payload de resposta. pdp
data.url string URL publica sintetica usada como identificador canonico do request. https://pede.ai/restaurante/35275?cep=45300-000
executionId string (uuid) Campo executionId retornado no payload de resposta. 88888888-2222-4222-8222-888888888888
requestId string (uuid) Campo requestId retornado no payload de resposta. 88888888-1111-4111-8111-888888888888

Erros comuns

Respostas com notFound: true não entram nesta tabela, porque retornam sucesso HTTP 200.

Status errorCode Quando acontece
400 INVALID_PAYLOAD JSON inválido ou violação das regras de validação do payload.
401 UNAUTHORIZED Header Authorization ausente ou token/chave inválida.
402 INSUFFICIENT_CREDITS Saldo de créditos insuficiente para a API solicitada.
403 FORBIDDEN Usuário sem acesso ou API temporariamente desabilitada.
409 EXECUTION_CONFLICT executionId conflita com uma execução em estado incompatível.
429 RATE_LIMIT_EXCEEDED / TOO_MANY_INFLIGHT_REQUESTS Limite de taxa ou limite de requisições em voo excedido.
5xx UPSTREAM_TIMEOUT / UPSTREAM_HTTP_ERROR / WORKER_INVOCATION_FAILED / WORKER_FUNCTION_ERROR / WORKER_INVALID_RESPONSE / INTERNAL_ERROR Falha de servidor no worker, provider/proxy ou gateway. Nesses casos os créditos são estornados automaticamente.