< Todos

Foody Delivery API v1.2

A Foody Delivery disponibiliza uma API que permite que outros sistemas se conectem à plataforma e automatizem diversas ações relacionadas aos pedidos.

O que é possível fazer via API

  • Inserir novos pedidos diretamente na Foody Delivery;
  • Alterar o status de pedidos, como pronto, finalizado, cancelado;
  • Consultar os detalhes de um pedido, incluindo informações do cliente, dados da coleta, dados da entrega e muito mais;
  • Consultar detalhes de pedidos em um intervalo de datas;
  • Acompanhar em tempo real a localização dos entregadores que estão em rota de entrega.

Em resumo: a API da Foody Delivery permite que empresas integrem seus sistemas para gerenciar pedidos e entregas de forma prática e automatizada.

O que tem de novo nesta versão?

  • Check Updates é um novo método disponível para verificar periodicamente (polling) os updates dos pedidos dentro da Foody Delivery.
  • Update Status é um método exclusivo para mudar o status dos pedidos;
  • Tracking novo método para acessar a geolocalização do entregador do pedido;
  • O formato das datas agora está mais completo incluindo o time zone (fuso horário), no formato yyyy-MM-dd’T’HH:mm:ssX;
    • Exemplo: dia 22/06/2020, hora 21:30:01 e fuso Brasília (-03:00) seria equivalente a 2020-06-22T21:30:01-03:00.
  • Campo ifoodLocalizer: para pedidos que vem do IFood, você pode informar o localizador do pedido no IFood. Assim o entregador consegue confirmar a entrega do pedido no IFood através do app da Foody Delivery;
  • Campo postalCode: possibilidade de enviar o CEP de entrega pela propriedade deliveryAddress.postalCode – Esta propriedade não é obrigatória, mas caso esteja presente no payload (estrutura de dados), precisa ser um CEP válido;
  • RateLimit: 100 requisições/minuto.
  • Campo deliveryDueDate: para envio do prazo de entrega no formato yyyy-MM-dd’T’HH:mm:ssX. Esta propriedade não é obrigatória, mas caso esteja presente no payload (estrutura de dados), precisa ser no formato yyyy-MM-dd’T’HH:mm:ssX, exemplo, 2020-06-22T21:30:01-03:00.

Headers

  • Authorization: <token de autorização>
  • Content-Type: application/json;charset=UTF-8

Token de autorização

Para obter o token de autorização você precisa acessar Menu ➡ Minha Conta ➡ APIs e Hooks e copiar o token da tela.

Adicionar pedido (Order)

Ao cadastrar um novo pedido na Foody Delivery, nem todas as informações ficam disponíveis imediatamente. Alguns dados só são preenchidos automaticamente pelo sistema depois, como por exemplo:

  • Data de entrega
  • Entregador (courier)

No momento da criação você vê apenas as informações básicas. Os detalhes finais são completados pela Foody Delivery após o processamento.

Rota (url): https://app.foodydelivery.com/rest/1.2/orders 
Method: POST

Payload Request (estrutura de dados para requisição)

{
  "id": "301",
  "status": "open",
  "deliveryFee": 5.0,
  "paymentMethod": "money",
  "notes": "semcebola",
  "courierFee": 4.0,
  "orderTotal": 84.5,
  "orderDetails": "1xpizzadecalabresa",
  "deliveryPoint": {
    "address": "RuaJoséNeves,590",
    "street": "RuaJoséNeves",
    "houseNumber": "590",
    "postalCode": "04650-140",
    "coordinates": {
      "lat": -23.657821664941558,
      "lng": -46.67431259551918
    },
    "city": "SãoPaulo",
    "region": "SP",
    "country": "BR",
    "complement": "sala03"
  },
  "customer": {
    "customerPhone": "+5511987521144",
    "customerName": "JosédaSilva",
    "customerEmail": "nome@empresa.com"
  },
  "date": "2020-06-18T14:13:27-03:00",
  "deliveryDueDate": "2020-06-18T15:13:27-03:00"
}

Payload Response (estrutura de dados de resposta):

{
  "uid": "0afa5b6c-135f-4e9a-9d00-5ff64c97d30a",
  "id": "301",
  "status": "open",
  "deliveryFee": 5.0,
  "paymentMethod": "money",
  "notes": "semcebola",
  "courierFee": 4.0,
  "orderTotal": 84.5,
  "orderDetails": "1xpizzadecalabresa",
  "deliveryPoint": {
    "address": "RuaJoséNeves,590",
    "street": "RuaJoséNeves",
    "houseNumber": "590",
    "postalCode": "04650-140",
    "coordinates": {
      "lat": -23.657821664941558,
      "lng": -46.67431259551918
    },
    "city": "SãoPaulo",
    "region": "SP",
    "country": "BR",
    "complement": "sala03"
  },
  "customer": {
    "customerPhone": "+5511987521144",
    "customerName": "JosédaSilva",
    "customerEmail": "nome@empresa.com"
  },
  "date": "2020-06-18T14:13:27-03:00",
  "deliveryDueDate": "2020-06-18T15:13:27-03:00"
}

Parâmetros (propriedades | atributos | campos | chaves | elementos)

NomeDescriçãoObrigatórioFormato
idIdentificador do pedidoSimTexto com tamanho máximo de 10 caracteres
dateData e hora de quando o pedido foi criadoNãoData no formato:
yyyy-MM-dd'T'HH:mm:ssXXX
Se este campo não for preenchido, a data corrente é usada. Exemplo:
2020-06-22T21:30:01-03:00
deliveryDueDateDate e hora de prazo de entrega do pedidoNãoTimestamp no formato:
yyyy-MM-dd'T'HH:mm:ssXXX
Se este campo não for preenchido, será aplicado o prazo de entrega padrão. Exemplo:
2020-06-22T21:30:01-03:00
statusSituação do pedidoSimTexto-Enum, deve ser um dos valores abaixo:
open | ready
deliveryFeeValor da entregaNãoNúmero decimal no formato 00.00
paymentMethodMeio de pagamento do pedidoNãoTexto-Enum, deve ser um dos valores abaixo:
money | card | online | on_credit | pixe_wallet
notesObservações do pedidoNãoTexto sem limite de caracteres.
courierFeeTaxa do entregadorNãoNúmero decimal no formato 00.00
orderTotalValor total do pedidoNãoNúmero decimal no formato 00.00
orderDetailsDetalhes do pedido (itens, quantidades, preços e etc)NãoTexto sem limite de caracteres. 
Preferencialmente deve descrever os itens do pedido de maneira estruturada.
Exemplo:
1x Macarrão a bolonhesa | R$ 25,991x Queijo ralado1x Pizza Grande | R$ 30,991/2 Calabresa1/2 Mussarela1x Coca cola 2 litros | R$ 12,49
ifoodLocalizerLocalizador do pedido (iFood)NãoTexto sem limite de caracteres. 
É importante ressaltar que o iFood atualmente emprega este localizador de pedidos como parte do processo de confirmação de entrega por parte dos entregadores. Esse localizador é composto por oito caracteres.
Exemplo:
12345678
deliveryPointEndereço de entrega do pedidoSimObjeto json, veja mais detalhes abaixo.
deliveryPoint.addressEndereço completo de entrega do pedidoSimTexto sem limite de caracteres. Preferencialmente deve estar no formato:
[logradouro],[número],[bairro]
Exemplo:
Avenida Paulista, 1000, Bela Vista
deliveryPoint.streetNome da rua da entrega do pedidoObrigatório somente quando o campo coordinates é preenchidoTexto sem limite de caracteres.
deliveryPoint.houseNumberNúmero da rua da entrega do pedidoObrigatório somente quando o campo coordinates é preenchidoTexto sem limite de caracteres.
deliveryPoint.postalCodeCEP da rua da entrega do pedidoNãoTexto no formato:
00000-000 ou 00000000
deliveryPoint.coordinatesCoordenadas do endereço de entrega do pedidoNãoCampo número (double) com latitude e longitude das coordenadas do ponto exato de entrega.

Obs: quando este campo é omitido, a Foody Delivery usa o campo deliveryPoint.address para obter as coordenadas.

Use este campo somente quando você tem as coordenadas exatas do ponto de entrega, caso contrário ele deve ser omitido. Ao usá-lo, você também deve preencher outros campos como street, city, region e etc.
deliveryPoint.cityNome da cidade da entrega do pedidoObrigatório somente quando o campo coordinates é preenchidoTexto sem limite de caracteres.
deliveryPoint.regionNome do estado da entrega do pedidoObrigatório somente quando o campo coordinates é preenchidoTexto sem limite de caracteres.
deliveryPoint.countryNome do país da entrega do pedidoObrigatório somente quando o campo coordinates é preenchidoTexto no formato ISO 3166-1 (exemplo: BR para Brasil).
deliveryPoint.complementComplemento da entrega do pedidoNãoTexto sem limite de caracteres.
customerCliente do pedidoNãoObjeto json, mais detalhes abaixo.
customer.customerPhoneTelefone do ClienteNãoTexto sem limite de caracteres. Preferencialmente no formato internacional:
+[país][cidade][número]
Exemplo:
+5511999998888
customer.customerNameNome do ClienteNãoTexto sem limite de caracteres.
customer.customerEmailEmail do ClienteNãoTexto sem limite de caracteres no formato de email.

O campo uid que consta no payload da response é o ID do pedido na Foody Delivery, este campo deve ser utilizado para resgatar (GET) ou atualizar (PUT) o pedido.

Resgatar pedido (Order)

O payload (estrutura de dados) deste endpoint contém mais informações que os outros métodos (adicionar e atualizar pedido). Isso acontece porque aqui é retornado também informações que são criadas ou atualizadas exclusivamente pela Foody Delivery.

Essas informações extras são adicionadas automaticamente pelo sistema da Foody Delivery para dar mais contexto sobre o pedido e auxiliar no acompanhamento do processo.

Exemplos de dados que podem aparecer:

  • courier: dados do entregador que foi atribuído ao pedido (quem vai buscar e entregar).
  • collectionPoint: ponto de coleta definido, como a loja, restaurante ou centro de distribuição.
  • datas do sistema: registros internos criados automaticamente, como horário de aceite do pedido, momento da coleta, horário de saída para entrega, entre outros.

Esses campos não precisam ser informados manualmente por quem integra com a API. Eles são controlados e gerados pela própria plataforma da Foody Delivery para garantir que todos os pedidos tenham informações consistentes e atualizadas em tempo real.

Rota (Url): https://app.foodydelivery.com/rest/1.2/orders/{uid}
Method: GET

Payload Response (estrutura de dados de resposta):

{
  "uid": "0afa5b6c-135f-4e9a-9d00-5ff64c97d30a",
  "id": "301",
  "status": "delivered",
  "deliveryFee": 5,
  "paymentMethod": "money",
  "notes": "semcebola",
  "courierFee": 4,
  "orderTotal": 84,
  "orderDetails": "1xpizzadecalabresa",
  "orderTrackerUrl": "https://app.foodydelivery.com/trk/58f37fe7-ddaf-46db-8918-e34d0b920062",
  "despatchMode": "manual",
  "deliveryPoint": {
    "address": "RuaJoséNeves,590",
    "street": "RuaJoséNeves",
    "houseNumber": "590",
    "postalCode": "04650-140",
    "coordinates": {
      "lat": -23.657821664941558,
      "lng": -46.67431259551918
    },
    "city": "SãoPaulo",
    "region": "SP",
    "country": "BRA",
    "complement": "sala03"
  },
  "collectionPoint": {
    "name": "DardisBistro",
    "address": "RuaJoséNeves,1000,VilaSãoPaulo",
    "postalCode": "04650-141",
    "coordinates": {
      "lat": -23.6563874,
      "lng": -46.6705633
    },
    "city": "SãoPaulo",
    "region": "SP",
    "country": "BR"
  },
  "customer": {
    "customerPhone": "+5511987521144",
    "customerName": "JosédaSilva",
    "customerEmail": "nome@empresa.com"
  },
  "courier": {
    "courierPhone": "+5511999999993",
    "courierName": "MariaHelena",
    "courierType": "internal"
  },
  "date": "2020-06-18T14:13:27-03:00",
  "readyDate": "2020-06-18T14:13:32-03:00",
  "despatchDate": "2020-06-18T14:13:35-03:00",
  "collectedDate": "2020-06-18T14:13:47-03:00",
  "deliveryDate": "2020-06-18T14:13:52-03:00",
  "creationDate": "2020-06-18T14:13:27-03:00",
  "updateDate": "2020-06-18T14:13:53-03:00",
  "deliveryDueDate": "2020-06-18T15:13:27-03:00"
}

Listar pedidos (Orders)

O limite máximo de resultados por requisição é de 500 pedidos, sempre ordenados pelo campo date (data de criação/registro do pedido).

Se sua requisição retornar exatamente 500 pedidos, significa que ainda podem existir outros pedidos além desse limite.
Nesse caso, é necessário fazer uma nova requisição para buscar os próximos resultados.

Como fazer isso:

  • Utilize a mesma consulta anterior;
  • Ajuste o parâmetro de data inicial (startDate) para um valor maior que o campo date do último pedido retornado na requisição anterior;
  • Assim, você conseguirá continuar de onde parou e trazer os próximos pedidos, sem repetir nem perder registros.

Dessa forma, você consegue paginar os pedidos de forma segura e garantir que todos os dados sejam recuperados corretamente.

Rota (Url): https://app.foodydelivery.com/rest/1.2/orders/?startDate={startDate}&endDate={endDate}
Method: GET

Parâmetros startDate e endDate devem estar no formato yyyy-MM-dd'T'HH:mm:ssXXX

O payload de response é uma lista de pedidos (Orders) sendo cada pedido um objeto idêntico ao resgate individual.

Atualizar pedido (Order)

Rota (Url): https://app.foodydelivery.com/rest/1.2/orders/{uid}
Method: PUT

Os payloads de request e response para esta operação são idênticos ao da operação de adicionar pedido (POST) excluindo os campos uid e date

Atualizar status (Order)

Método para atualizar o status de um pedido. Esse método permite alterar o estado atual de um pedido dentro do sistema da Foody Delivery. Ele é utilizado para indicar mudanças importantes no ciclo de vida do pedido, como quando ele está pronto, foi finalizado ou cancelado.

A atualização de status não é livre:

  • Você só pode atualizar um pedido para um dos seguintes estados:
    • ready → indica que o pedido foi preparado e está pronto para ser retirado ou entregue;
    • closed → indica que o pedido passou por todo o ciclo de vida;
    • cancelled → indica que o pedido foi cancelado e não será mais processado.

Essas restrições existem para garantir que o fluxo do pedido siga regras consistentes e compatíveis com a operação da plataforma, evitando transições inválidas ou confusas no acompanhamento.

💡 Exemplo prático:

  • Se houve algum problema (como cancelamento pelo cliente ou falta de produto), o status pode ser alterado para cancelled;
  • Quando a cozinha finaliza o preparo, o status pode ser atualizado para ready;
  • Após o pedido passar por todo o seu ciclo de vida, o status poderá ser atualizado para closed;

Rota (Url): https://app.foodydelivery.com/rest/1.2/orders/updatestatus/{uid}
Method: PUT

Payload Request (estrutura de dados para requisição)

{
  "status": "closed"
}

Checar atualizações (Order)

Método para verificar se existe alguma atualização em um conjunto de pedidos. Geralmente ele é usado em um polling para saber quais pedidos sofreram updates. A request deste método deve ser uma lista de UIDs de pedidos.

Não recomendamos o uso de polling, ao invés disso você pode utilizar nossos web-hooks para ser notificado sobre updates, verifique a documentação técnica dos hooks. Agora, se você precisa realmente usar polling, nós recomendamos que ele seja feito a cada 30 segundos ou mais, não mais frequente que isso.

Rota (Url): https://app.foodydelivery.com/rest/1.2/orders/checkupdates
Method: POST

Payload Request (estrutura de dados para requisição)

[
  "8530a496-00a9-42ba-ad15-aa4bfe3124b7",
  "d10e5858-0bb2-4a66-871b-548221ae673c",
  "efdc92dc-3025-45ae-9c37-78ab1d3be831"
]

Payload Response (estrutura de dados de resposta):

[
  {
    "uid": "8530a496-00a9-42ba-ad15-aa4bfe3124b7",
    "updateDate": "2020-06-18T10:40:20-03:00",
    "status": "open"
  },
  {
    "uid": "d10e5858-0bb2-4a66-871b-548221ae673c",
    "updateDate": "2020-06-18T10:40:27-03:00",
    "status": "ready"
  },
  {
    "uid": "efdc92dc-3025-45ae-9c37-78ab1d3be831",
    "updateDate": "2020-06-18T10:48:38-03:00",
    "status": "onGoing"
  }
]

Resgatar geolocalização do entregador

Método para acessar a geolocalização do entregador de um determinado pedido. Esse método permite visualizar a localização em tempo real do entregador associado a um pedido específico.

Caso o entregador esteja realizando uma rota com múltiplos pedidos ao mesmo tempo, a resposta também incluirá a rota completa, mostrando os pontos de coleta (onde ele busca os pedidos) e de entrega (endereços dos clientes).

Com essas informações adicionais, é possível:

  • Identificar em qual etapa da rota o entregador se encontra no momento;
  • Entender quais paradas já foram concluídas;
  • Saber exatamente a ordem de prioridade dos pedidos dentro daquela rota (campo position).

Exemplo prático

Imagine que o entregador tenha 3 entregas programadas na mesma rota:

  • Entrega 01 → position 1
  • Entrega 02 → position 2
  • Entrega 03 → position 3

Se você consultar a entrega 03, o sistema irá retornar:

  • A localização atual do entregador em tempo real;
  • A informação de que as entregas 01 e 02 ainda precisam ser feitas antes da entrega 03.

Dessa forma, você consegue não apenas ver onde está o entregador, mas também prever quando o pedido realmente será entregue, considerando a sequência da rota.

As informações de geolocalização e rota somente serão retornadas se o pedido consultado estiver com o status onGoing (A caminho).

Rota (Url): https://app.foodydelivery.com/rest/1.2/orders/tracking/{orderuid}
Method: GET

Payload Response (estrutura de dados de resposta):

{
  "status": "onGoing",
  "courierLocationCoordinates": {
    "lat": -23.6563874,
    "lng": -46.6705633
  },
  "pointsToCollect": [
    {
      "pointId": "5645599001018368",
      "pointName": "HamburgueriadoJosé",
      "pointType": "company",
      "address": "AvenidaPaulista,1300-BelaVista,SãoPaulo-SP,Brasil",
      "coordinates": {
        "lat": -23.5631708,
        "lng": -46.65423770000001
      },
      "position": 1,
      "status": "open"
    }
  ],
  "pointsToDelivery": [
    {
      "pointType": "order",
      "address": "RuaBarataRibeiro,161",
      "coordinates": {
        "lat": -23.556147397573575,
        "lng": -46.651863660343565
      },
      "position": 1,
      "status": "open"
    }
  ]
}

Lista de erros

HTTP StatusError CodeDescription
400E09Invalid dates
400E12Invalid address format
400E17Mandatory property
400E21The value for property is not valid
400E22Only orders on status open or ready can be updated
400E47No tracking data is available for this order
401E19Unauthorized access
403E04Order Limit exceeded
403E11API usage not allowed to Free Plan
403E25Need cancellation reason and cancellation reason for courier company, order already collected.
404E20Order not found
429EC_B010Too many requests, rate limit for this endpoint has been reached
500E18Unknown error

Lista de status

Status do PedidoDescrição
openPedido adicionado no Sistema da Foody
readyPedido pronto para ser despachado
dispatchedPedido despachado (atribuído) para entregadores
acceptedPedido aceito pelo entregador
onGoingPedido a caminho da entrega
deliveredPedido entregue
closedPedido finalizado
cancelledPedido cancelado
rejectedPedido rejeitado

Rate limit

Rota | Url | EndpointLimite
POST /rest/1.2/orders100 req/min
PUT /rest/1.2/orders/{uid}100 req/min
Sumário