Documentação para integração com o sistema NostFood
Bem-vindo à documentação da API do NostFood. Esta API permite que você integre seu sistema com a plataforma NostFood para consultar pedidos, usuários e produtos.
https://nostfood.com/api/public/
A API oferece 8 endpoints principais organizados em 3 recursos:
Todas as respostas são retornadas em formato JSON com a seguinte estrutura:
{
"success": true,
"data": { ... },
"message": "Mensagem opcional"
}
Para acessar a API, você precisa incluir sua chave API em todas as requisições através do header X-API-Key.
curl -X GET "https://nostfood.com/api/public/pedidos.php" \ -H "X-API-Key: f37c69fc95815aa030229acc8ab6fe63385312a80300a99c611322c913e5be28"
Cada API Key pode ter permissões granulares para diferentes recursos:
401 - API Key não fornecida:
{
"success": false,
"message": "API Key não fornecida. Use o header X-API-Key"
}
401 - API Key inválida:
{
"success": false,
"message": "API Key inválida"
}
403 - API Key desativada:
{
"success": false,
"message": "API Key desativada"
}
403 - API Key expirada:
{
"success": false,
"message": "API Key expirada"
}
403 - Sem permissão:
{
"success": false,
"message": "Sem permissão para acessar pedidos"
}
/api/public/pedidos.php
Retorna a lista de pedidos do lojista autenticado via API Key.
status - Filtrar por status (confirmado, preparando, enviado, entregue, cancelado)data_inicio - Data inicial (formato: YYYY-MM-DD)data_fim - Data final (formato: YYYY-MM-DD)limit - Limite de resultados (padrão: 100, máximo: 1000)offset - Pular registros para paginaçãocurl -X GET "https://nostfood.com/api/public/pedidos.php?status=confirmado&limit=10" \ -H "X-API-Key: sua_chave_api_aqui"
{
"success": true,
"data": {
"pedidos": [
{
"id": 123,
"order_number": "PED-20251106-1234",
"customer_name": "João Silva",
"customer_email": "joao@example.com",
"customer_phone": "5511999999999",
"customer_address": "Rua das Flores, 123",
"customer_number": "123",
"customer_neighborhood": "Centro",
"customer_city": "São Paulo",
"customer_state": "SP",
"customer_cep": "01000-000",
"customer_complemento": "Apto 45",
"items": [
{
"id": 1,
"name": "Pizza Margherita",
"quantity": 2,
"price": 45.00,
"subtotal": 90.00,
"customizations": []
}
],
"subtotal": 90.00,
"delivery": 5.00,
"total": 95.00,
"status": "confirmado",
"payment_method": "pix",
"created_at": "2025-11-06 14:30:00",
"hora_preparado": null,
"hora_enviado": null,
"hora_pronto": null,
"hora_aprovado": "2025-11-06 14:31:00",
"hora_confirmado": "2025-11-06 14:31:00"
}
],
"total": 150,
"limit": 10,
"offset": 0,
"has_more": true
},
"message": "Pedidos recuperados com sucesso"
}
/api/public/criar-pedido.php
Cria um novo pedido no sistema do lojista.
customer_name (string) - Nome do clientecustomer_phone (string) - Telefone do clientecustomer_address (string) - Endereço de entregaitems (array) - Array de itens do pedidototal (float) - Valor total do pedidopayment_method (string) - Método de pagamentocustomer_email (string) - Email do clientecustomer_number (string) - Número do endereçocustomer_neighborhood (string) - Bairrocustomer_city (string) - Cidadecustomer_state (string) - Estado (UF)customer_cep (string) - CEPcustomer_complemento (string) - Complementosubtotal (float) - Subtotal (se não informado, usa o total)delivery (float) - Taxa de entrega (padrão: 0)status (string) - Status inicial (padrão: "pendente")curl -X POST "https://nostfood.com/api/public/criar-pedido.php" \
-H "Content-Type: application/json" \
-H "X-API-Key: sua_chave_api_aqui" \
-d '{
"customer_name": "João Silva",
"customer_phone": "5511999999999",
"customer_email": "joao@example.com",
"customer_address": "Rua das Flores, 123",
"customer_number": "123",
"customer_neighborhood": "Centro",
"customer_city": "São Paulo",
"customer_state": "SP",
"customer_cep": "01000-000",
"items": [
{
"id": 89,
"name": "Pizza Margherita",
"quantity": 2,
"price": 45.00,
"customizations": []
}
],
"subtotal": 90.00,
"delivery": 5.00,
"total": 95.00,
"payment_method": "pix"
}'
{
"success": true,
"data": {
"pedido_id": "498",
"order_number": "API-20251106-2855",
"status": "pendente"
},
"message": "Pedido criado com sucesso"
}
order_number é gerado automaticamente no formato API-YYYYMMDD-#### e pode ser usado para rastrear o pedido.
/api/public/atualizar-pedido.php
Atualiza o status de um pedido existente do lojista autenticado.
status (string) - Novo status do pedidopedido_id (int) OU order_number (string) - Identificador do pedidopendente, confirmado, aprovado, em_preparo, pronto, saiu_entrega, enviado, entregue, cancelado, rejeitadocurl -X POST "https://nostfood.com/api/public/atualizar-pedido.php" \
-H "Content-Type: application/json" \
-H "X-API-Key: sua_chave_api_aqui" \
-d '{
"order_number": "API-20251106-2855",
"status": "em_preparo"
}'
{
"success": true,
"data": {
"pedido_id": 498,
"order_number": "API-20251106-2855",
"status_anterior": "confirmado",
"status_novo": "em_preparo"
},
"message": "Pedido atualizado com sucesso"
}
/api/public/cancelar-pedido.php
Cancela um pedido existente do lojista autenticado (status final: cancelado).
pedido_id (int) OU order_number (string) - Identificador do pedidomotivo (string) - Motivo do cancelamentocurl -X POST "https://nostfood.com/api/public/cancelar-pedido.php" \
-H "Content-Type: application/json" \
-H "X-API-Key: sua_chave_api_aqui" \
-d '{
"pedido_id": 498,
"motivo": "Cliente solicitou cancelamento"
}'
{
"success": true,
"data": {
"pedido_id": 498,
"order_number": "API-20251106-2855",
"status_anterior": "em_preparo",
"status_novo": "cancelado",
"motivo": "Cliente solicitou cancelamento"
},
"message": "Pedido cancelado com sucesso"
}
/api/public/usuarios.php
Retorna a lista de usuários/clientes que se cadastraram através do seu lojista.
email - Buscar por email (busca parcial)limit - Limite de resultados (padrão: 100, máximo: 1000)offset - Pular registros para paginaçãocurl -X GET "https://nostfood.com/api/public/usuarios.php?limit=10" \ -H "X-API-Key: sua_chave_api_aqui"
{
"success": true,
"data": {
"usuarios": [
{
"id": 456,
"name": "Maria Santos",
"email": "maria@exemplo.com",
"phone": "5511988888888",
"cep": "01000-000",
"address": "Rua das Palmeiras",
"number": "456",
"neighborhood": "Jardins",
"complemento": "Casa 2",
"city": "São Paulo",
"state": "SP",
"created_at": "2024-12-01 10:00:00",
"total_pedidos": 15,
"total_gasto": 850.00,
"ultimo_pedido": "2025-11-05 18:30:00"
}
],
"total": 230,
"limit": 10,
"offset": 0,
"has_more": true
},
"message": "Usuários recuperados com sucesso"
}
/api/public/criar-usuario.php
Cadastra um novo usuário/cliente no sistema.
name (string) - Nome completo do usuárioemail (string) - Email único do usuáriophone (string) - Telefonepassword (string) - Senha (se não fornecida, é gerada automaticamente)cep (string) - CEPaddress (string) - Endereçonumber (string) - Númeroneighborhood (string) - Bairrocomplemento (string) - Complementocity (string) - Cidadestate (string) - Estado (UF)curl -X POST "https://nostfood.com/api/public/criar-usuario.php" \
-H "Content-Type: application/json" \
-H "X-API-Key: sua_chave_api_aqui" \
-d '{
"name": "Maria Santos",
"email": "maria@exemplo.com",
"phone": "5511988888888",
"cep": "01000-000",
"address": "Rua das Palmeiras",
"number": "456",
"neighborhood": "Jardins",
"city": "São Paulo",
"state": "SP"
}'
{
"success": true,
"data": {
"user_id": "50",
"email": "maria@exemplo.com",
"senha_gerada": "a8f4c92d"
},
"message": "Usuário criado com sucesso"
}
senha_gerada. Envie essa senha para o usuário por email ou outro meio seguro.
/api/public/produtos.php
Retorna o catálogo completo de produtos do lojista, incluindo categoria, subcategoria e customizações.
categoria_id - Filtrar por categoriaativo - Filtrar por status (1 = ativo, 0 = inativo)limit - Limite de resultados (padrão: 100, máximo: 1000)offset - Pular registros para paginaçãocurl -X GET "https://nostfood.com/api/public/produtos.php?ativo=1&limit=10" \ -H "X-API-Key: sua_chave_api_aqui"
{
"success": true,
"data": {
"produtos": [
{
"id": 89,
"nome": "Hambúrguer Artesanal",
"descricao": "Pão brioche, blend 180g, queijo cheddar",
"preco": 32.00,
"preco_promocional": null,
"imagem_url": "https://exemplo.com/imagem.jpg",
"ativo": true,
"categoria_id": 5,
"categoria_nome": "Lanches",
"subcategory_id": 12,
"subcategoria_nome": "Hambúrgueres Especiais",
"ordem": 1,
"created_at": "2025-01-15 10:00:00",
"updated_at": "2025-11-06 08:30:00",
"subprodutos": [
{
"id": 1,
"nome": "Ponto da Carne",
"descricao": "Escolha o ponto da carne",
"tipo": "single",
"obrigatorio": true,
"min_opcoes": 1,
"max_opcoes": 1,
"ordem": 1,
"opcoes": [
{
"id": 1,
"nome": "Mal Passado",
"descricao": null,
"preco_adicional": 0.00,
"incluido": false,
"ordem": 1,
"disponivel": true
},
{
"id": 2,
"nome": "Ao Ponto",
"descricao": null,
"preco_adicional": 0.00,
"incluido": true,
"ordem": 2,
"disponivel": true
},
{
"id": 3,
"nome": "Bem Passado",
"descricao": null,
"preco_adicional": 0.00,
"incluido": false,
"ordem": 3,
"disponivel": true
}
]
},
{
"id": 2,
"nome": "Adicionais",
"descricao": "Escolha até 3 adicionais",
"tipo": "multiple",
"obrigatorio": false,
"min_opcoes": 0,
"max_opcoes": 3,
"ordem": 2,
"opcoes": [
{
"id": 4,
"nome": "Bacon Extra",
"descricao": null,
"preco_adicional": 5.00,
"incluido": false,
"ordem": 1,
"disponivel": true
},
{
"id": 5,
"nome": "Cheddar Extra",
"descricao": null,
"preco_adicional": 4.00,
"incluido": false,
"ordem": 2,
"disponivel": true
}
]
}
]
}
],
"total": 45,
"limit": 10,
"offset": 0,
"has_more": true
},
"message": "Produtos recuperados com sucesso"
}
Cada produto retorna 4 componentes principais:
single (selecionar apenas 1) ou multiple (selecionar várias). Use os campos min_opcoes e max_opcoes para validar a seleção.
/api/public/criar-produto.php
Cria um novo produto no catálogo com estrutura completa incluindo categoria, subcategoria e grupos de customização.
name ou nome (string) - Nome do produtoprice ou preco (float) - Preço do produtocategory_id (int) OU categoria_nome (string) - ID da categoria existente ou nome para criar novadescription ou descricao (string) - Descrição do produtooriginal_price ou preco_promocional (float) - Preço original (para produtos em promoção)image_url ou imagem_url (string) - URL da imagemactive ou ativo (boolean) - Status (padrão: true)sort_order ou ordem (int) - Ordem de exibição (padrão: 0)categoria_descricao (string) - Descrição da categoria (ao criar nova)categoria_ordem (int) - Ordem da categoria (ao criar nova)subcategory_id (int) OU subcategoria_nome (string) - ID ou nome da subcategoriamin_quantity (int) - Quantidade mínima da subcategoriamax_quantity (int) - Quantidade máxima da subcategoriasubprodutos (array) - Array de grupos de customizaçãoCada grupo de customização no array subprodutos pode conter:
nome (string) - Nome do grupo (ex: "Tamanho", "Adicionais")descricao (string) - Descrição do grupotipo (string) - Tipo: "single" ou "multiple"obrigatorio (boolean) - Se é obrigatório selecionarmin_opcoes (int) - Mínimo de opções a selecionarmax_opcoes (int) - Máximo de opções a selecionarordem (int) - Ordem de exibiçãoopcoes (array) - Array de opções do grupoCada opção no array opcoes pode conter:
nome (string) - Nome da opçãodescricao (string) - Descrição da opçãopreco_adicional (float) - Valor adicionalincluido (boolean) - Se vem incluído por padrãoordem (int) - Ordem de exibiçãodisponivel (boolean) - Se está disponível (padrão: true)curl -X POST "https://nostfood.com/api/public/criar-produto.php" \
-H "Content-Type: application/json" \
-H "X-API-Key: sua_chave_api_aqui" \
-d '{
"nome": "Hambúrguer Artesanal Supreme",
"descricao": "Blend 180g, pão brioche, queijos nobres",
"preco": 42.90,
"preco_promocional": 38.90,
"imagem_url": "https://exemplo.com/burger-supreme.jpg",
"categoria_nome": "Lanches Premium",
"categoria_descricao": "Lanches artesanais premium",
"subcategoria_nome": "Hambúrgueres Especiais",
"ativo": true,
"ordem": 1,
"subprodutos": [
{
"nome": "Ponto da Carne",
"descricao": "Escolha como deseja sua carne",
"tipo": "single",
"obrigatorio": true,
"min_opcoes": 1,
"max_opcoes": 1,
"ordem": 1,
"opcoes": [
{
"nome": "Mal Passado",
"preco_adicional": 0,
"incluido": false,
"ordem": 1
},
{
"nome": "Ao Ponto",
"preco_adicional": 0,
"incluido": true,
"ordem": 2
},
{
"nome": "Bem Passado",
"preco_adicional": 0,
"incluido": false,
"ordem": 3
}
]
},
{
"nome": "Adicionais",
"descricao": "Adicione até 3 extras",
"tipo": "multiple",
"obrigatorio": false,
"min_opcoes": 0,
"max_opcoes": 3,
"ordem": 2,
"opcoes": [
{
"nome": "Bacon Crocante",
"preco_adicional": 6.00,
"incluido": false,
"ordem": 1,
"disponivel": true
},
{
"nome": "Queijo Cheddar",
"preco_adicional": 4.50,
"incluido": false,
"ordem": 2,
"disponivel": true
},
{
"nome": "Cebola Caramelizada",
"preco_adicional": 3.00,
"incluido": false,
"ordem": 3,
"disponivel": true
}
]
},
{
"nome": "Molhos Especiais",
"descricao": "Escolha o molho de sua preferência",
"tipo": "single",
"obrigatorio": false,
"min_opcoes": 0,
"max_opcoes": 1,
"ordem": 3,
"opcoes": [
{
"nome": "Molho da Casa",
"preco_adicional": 0,
"incluido": true,
"ordem": 1
},
{
"nome": "Molho Barbecue",
"preco_adicional": 2.00,
"incluido": false,
"ordem": 2
}
]
}
]
}'
{
"success": true,
"data": {
"product_id": "1769",
"name": "Hambúrguer Artesanal Supreme",
"price": 42.9
},
"message": "Produto criado com sucesso"
}
categoria_nome e a categoria não existir, ela será criada automaticamentesubcategoria_nome e a subcategoria não existir, ela será criada automaticamentename ou nomeprice ou precodescription ou descricaoactive ou ativoPara integrações com terceiros, recomendamos o modelo híbrido: webhook para tempo real e polling para reconciliação.
2xx em até 10 segundosOs eventos abaixo cobrem os fluxos de envio/recebimento de pedidos e catálogo:
| Evento | Descrição | Direção |
|---|---|---|
order.created |
Novo pedido criado | NostFood → Parceiro |
order.updated |
Alteração de status ou dados relevantes do pedido | NostFood → Parceiro |
order.cancelled |
Pedido cancelado/rejeitado | NostFood → Parceiro |
catalog.product.created |
Produto criado | NostFood → Parceiro |
catalog.product.updated |
Produto atualizado (incluindo subprodutos) | NostFood → Parceiro |
catalog.category.created |
Categoria criada | NostFood → Parceiro |
catalog.category.updated |
Categoria atualizada | NostFood → Parceiro |
catalog.subcategory.created |
Subcategoria criada | NostFood → Parceiro |
catalog.subcategory.updated |
Subcategoria atualizada | NostFood → Parceiro |
catalog.subproduct_group.created |
Grupo de customização criado | NostFood → Parceiro |
catalog.subproduct_group.updated |
Grupo de customização atualizado | NostFood → Parceiro |
catalog.subproduct_option.created |
Opção de customização criada | NostFood → Parceiro |
catalog.subproduct_option.updated |
Opção de customização atualizada | NostFood → Parceiro |
Todos os eventos webhook seguem envelope padrão:
{
"event_id": "evt_01JVW9B7N7Y8K2A4F4M1Q9R2ZX",
"event_type": "order.updated",
"occurred_at": "2026-05-15T19:55:31Z",
"delivery_attempt": 1,
"lojista_id": 32,
"resource": {
"type": "order",
"id": "498"
},
"data": {
"order_number": "API-20260515-2855",
"status": "em_preparo",
"previous_status": "confirmado",
"total": 95.0
}
}
X-NostFood-Event: nome do evento (ex: order.updated)X-NostFood-Delivery-Id: id único da tentativa de entregaX-NostFood-Timestamp: timestamp UNIX em segundosX-NostFood-Signature: assinatura HMAC SHA-256 do corpo brutoAssinatura recomendada: sha256=HMAC_SHA256(raw_body, webhook_secret). O parceiro deve validar assinatura e recusar payload sem assinatura válida.
2xx: evento aceito, não reenviar4xx/5xx ou timeout: reentrega automáticaevent_id e X-NostFood-Delivery-IdMesmo com webhook habilitado, mantenha polling periódico para garantir consistência:
GET /api/public/pedidos.php com status, data_inicio, data_fim, limit, offsetGET /api/public/produtos.php com categoria_id, ativo, limit, offsetSugestão operacional: executar polling a cada 60-120 segundos, buscando uma janela retroativa de pelo menos 5 minutos para cobrir atrasos de rede e retries.
criar-pedido.php e criar-produto.php). O webhook cobre a distribuição de eventos de saída em tempo real.
| Código HTTP | Significado | Descrição |
|---|---|---|
200 |
OK | Requisição GET bem-sucedida |
201 |
Created | Recurso criado com sucesso (POST) |
400 |
Bad Request | Parâmetros inválidos ou faltantes |
401 |
Unauthorized | Chave API inválida ou ausente |
403 |
Forbidden | Sem permissão para acessar este recurso |
404 |
Not Found | Recurso não encontrado |
429 |
Too Many Requests | Limite de requisições excedido |
500 |
Internal Server Error | Erro interno do servidor |
{
"success": false,
"message": "Chave API inválida ou expirada"
}
Acesse o painel administrativo → API Externa → Permitir Consultas → Nova Chave
Suas chaves ativas aparecem mascaradas no formato: f37c69fc...13e5be28
Você pode ver:
Todos os acessos à API são registrados e você pode visualizar:
Entre em contato com o suporte do NostFood ou acesse o painel administrativo para gerenciar suas chaves API.