Como funciona Integre o módulo Merchant e gerencie suas lojas em tempo real. Fluxo de integração 1. Descoberta Descubra quais lojas você pode gerenciar: GET /merchants — Lista todas as lojas vinculadas ao tokenGET /merchants/{merchantId} — Obtém detalhes completos de uma loja2. Monitoramento Verifique o status operacional em tempo real: GET /merchants/{merchantId}/status — Consulta disponibilidade da lojaPossíveis estados: OK — Pronta para receber pedidosWARNING — Online com restriçõesCLOSED — Fechada (esperado, fora do horário)ERROR — Problema a investigar3. Gerenciamento operacional Configure horários de funcionamento e pausas temporárias: Horários de funcionamento: PUT /merchants/{merchantId}/opening-hours — Configura horários semanaisGET /merchants/{merchantId}/opening-hours — Consulta horários configuradosInterrupções (pausas temporárias): POST /merchants/{merchantId}/interruptions — Cria pausa no recebimento de pedidosGET /merchants/{merchantId}/interruptions — Lista pausas ativasDELETE /merchants/{merchantId}/interruptions/{interruptionId} — Remove pausa e reabre loja4. Coleta (Lojas Groceries) Gere QR codes para check-in de entregadores: POST /merchants/checkin-qrcode — Gera PDF com QR codes para impressãoFluxo típico de monitoramento: Listar todas as lojas vinculadas ao seu token A cada 30 segundos: Consultar status de cada loja Se status = ERROR: Investigar validações específicas Se necessário pausar: Criar interrupção Para lojas Groceries: Gerar e manter QR codes impressos Consulta de lojas Listar todas as lojas Para listar todas as lojas vinculadas ao seu token:
curl --location 'https://merchant-api.ifood.com.br/merchant/v1.0/merchants' \
--header 'Authorization: Bearer TOKEN' Parâmetros de query (opcionais): page — Número da página (começando em 1)size — Quantidade de lojas por página (padrão: 100)Response 200:
[
{
"id" : "550e8400-e29b-41d4-a716-446655440000" ,
"name" : "Pizzaria Central" ,
"corporateName" : "Pizzaria Central LTDA"
},
{
"id" : "550e8400-e29b-41d4-a716-446655440001" ,
"name" : "Burger King #42" ,
"corporateName" : "Restaurant Brands International Brazil"
}
] Campos retornados: Campo Tipo Descrição iduuidIdentificador único namestringNome exibido no app corporateNamestringRazão social
Códigos de erro: HTTP Código Descrição 401UnauthorizedToken de acesso inválido ou expirado 500InternalServerErrorErro ao buscar lista de lojas
Autenticação Use o token Bearer fornecido durante o onboarding. O token determina quais lojas você pode acessar via API.
Obter detalhes de uma loja Para obter informações completas sobre uma loja específica, use:
curl --location 'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/550e8400-e29b-41d4-a716-446655440000' \
--header 'Authorization: Bearer TOKEN' Response 200:
{
"id" : "550e8400-e29b-41d4-a716-446655440000" ,
"name" : "Pizzaria Central" ,
"corporateName" : "Pizzaria Central LTDA" ,
"description" : "Pizzaria especializada em pizza napoletana" ,
"averageTicket" : 85.50 ,
"exclusive" : false ,
"type" : "RESTAURANT" ,
"status" : "AVAILABLE" ,
"createdAt" : "2024-01-15T10:30:00" ,
"address" : {
"street" : "Rua das Flores" ,
"number" : "123" ,
"city" : "São Paulo" ,
"state" : "SP" ,
"postalCode" : "01310-100" ,
"country" : "BR" ,
"district" : "Centro" ,
"latitude" : -23.5505 ,
"longitude" : -46.6333
},
"operations" : {
"name" : "delivery" ,
"salesChannel" : {
"name" : "ifood-app" ,
"enabled" : true
}
}
} Campos retornados: Campo Tipo Descrição iduuidIdentificador único da loja namestringNome exibido aos clientes corporateNamestringRazão social / nome legal descriptionstringDescrição da loja averageTicketnumberTicket médio exclusivebooleanSe a loja é exclusiva typestringRESTAURANT, STORE, GROUPstatusstringAVAILABLE, UNAVAILABLE, DISABLEDcreatedAtstringData de criação (ISO 8601) address.streetstringRua address.numberstringNúmero address.citystringCidade address.statestringEstado address.postalCodestringCEP address.countrystringPaís address.districtstringBairro address.latitudenumberLatitude address.longitudenumberLongitude operations.namestringdelivery, indooroperations.salesChannelobjectifood-app e outros
Códigos de erro: HTTP Código Descrição Solução 401UnauthorizedToken inválido ou expirado Verifique o token 403ForbiddenSem permissão para esta loja Token não vinculado 500InternalServerErrorErro ao buscar detalhes Tente novamente
Próximo passo: Verificar disponibilidade Após obter os detalhes da loja, use a API de Status para verificar em tempo real se a loja pode receber pedidos. Status da loja Requisitos operacionais A loja receberá pedidos quando atender esses requisitos: Dentro do horário de funcionamento — Configurado via API de Opening Hours Catálogo ativo — Ao menos um cardápio habilitadoÁrea de entrega — Uma zona de entrega configuradaSem interrupções — Nenhuma pausa ativaPolling ativo — Polling a cada 30 segundos para validar conectividadeFrequência mínima de polling A plataforma espera que você faça requisições HTTP a cada 30 segundos como forma de validar que sua integração está ativa. Sem polling regular, a loja pode ser marcada como offline e parar de receber pedidos.
Verificar disponibilidade Para saber se uma loja está operacional e pronta para receber pedidos, use:
curl --location 'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/550e8400-e29b-41d4-a716-446655440000/status' \
--header 'Authorization: Bearer TOKEN' Parâmetros de path: merchantId (obrigatório): ID da lojaResponse 200:
[
{
"operation" : "delivery" ,
"salesChannel" : "ifood-app" ,
"available" : true ,
"state" : "OK" ,
"validations" : [
{
"id" : "val-001" ,
"code" : "is-connected" ,
"state" : "OK" ,
"message" : {
"title" : "Conectado" ,
"subtitle" : "Loja está respondendo" ,
"description" : "Polling recebido nos últimos 30 segundos"
}
},
{
"id" : "val-002" ,
"code" : "opening-hours" ,
"state" : "OK" ,
"message" : {
"title" : "Horário válido" ,
"subtitle" : "Dentro do horário de funcionamento" ,
"description" : "Loja está dentro do horário configurado"
}
}
],
"message" : {
"title" : "Loja Online" ,
"subtitle" : "Pronta para receber pedidos" ,
"description" : "Todas as validações passaram com sucesso"
}
}
] Campos principais: Campo Tipo Descrição statestringOK, WARNING, CLOSED, ERRORavailablebooleanLoja disponível para receber pedidos validations[]arrayDetalhes por validação messageobjectMensagem geral do status
Interpretando o estado Estado Significado OKOnline e pronta para receber pedidos WARNINGOnline com restrições (investigar validações) CLOSEDFechada (fora do horário configurado) ERROROffline (investigar validações para resolver)
Entender validações Cada validação indica um requisito operacional. Estado OK significa tudo pronto. Estados WARNING ou ERROR requerem ação. Validações comuns: is-connected — Polling ativo nos últimos 30sopening-hours — Dentro do horário configuradounavailabilities — Pausas ativas. Use a API de Interrupções para remover. radius-restriction — Sem entregadores na área (expanda a zona)payout-blocked — Resolver via Portal do Parceiroterms-service-violation — Entre em contato com suporteO campo message fornecerá detalhes específicos sobre como resolver cada problema. Resposta com problemas (estado ERROR)Quando há problemas, o endpoint retorna validações com detalhes:
[
{
"operation" : "delivery" ,
"salesChannel" : "ifood-app" ,
"available" : false ,
"state" : "ERROR" ,
"reopenable" : {
"identifier" : "cca57aab-5ac0-4af4-a04d-48261350bebc" ,
"type" : "UNAVAILABILITY" ,
"reopenable" : true
},
"validations" : [
{
"id" : "val-001" ,
"code" : "is-connected" ,
"state" : "OK"
},
{
"id" : "val-003" ,
"code" : "unavailabilities" ,
"state" : "ERROR" ,
"message" : {
"title" : "Loja em pausa" ,
"subtitle" : "Existem interrupções ativas" ,
"description" : "Use a API de Interrupções para remover"
}
}
]
}
] Verificar status por operação específica Para obter o status de uma operação específica (ex: delivery):
curl --location 'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/550e8400-e29b-41d4-a716-446655440000/status/delivery' \
--header 'Authorization: Bearer TOKEN' Este endpoint retorna a mesma estrutura de resposta acima, mas apenas para a operação especificada. Códigos de erro: HTTP Código Descrição Solução 400BadRequestOperação inválida Verifique se o nome da operação está correto 401UnauthorizedToken inválido Verifique seu token de acesso 403ForbiddenSem permissão para esta loja Token não está vinculado a esta loja 500InternalServerErrorErro ao buscar status Tente novamente ou contacte suporte
Dúvidas sobre o status? Se tiver dúvidas sobre um status específico ou precisar resolver um bloqueio, abra um chamado no Portal do Parceiro. Remover bloqueios e pausas Quando a resposta do status retorna state: "ERROR" com reopenable: true, você pode remover a pausa usando a API de Interrupções :
curl --location --request DELETE \
'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/550e8400-e29b-41d4-a716-446655440000/interruptions/{interruptionId}' \
--header 'Authorization: Bearer TOKEN' Se reopenable: false, a loja está sob penalidade automática. Consulte o campo message na resposta de status para saber quando poderá reabrir. Para violações de Termos de Serviço, abra um chamado no Portal do Parceiro. Interrupções Pause temporariamente o recebimento de pedidos sem alterar o horário de funcionamento. Listar pausas
curl --location 'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/{merchantId}/interruptions' \
--header 'Authorization: Bearer TOKEN' Retorna array com id, description, start, e end para cada pausa ativa. Criar pausa
curl --location --request POST \
'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/{merchantId}/interruptions' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"description": "Manutenção do equipamento",
"start": "2025-02-05T14:00:00Z",
"end": "2025-02-05T15:30:00Z"
}' Campos obrigatórios: description — motivo (até 255 caracteres)start e end — datas em ISO 8601 (timezone local da loja)Validações: Duração mínima 1 minuto, máxima 7 dias. Pausas não podem se sobrepor.Response 201 retorna o objeto da pausa criada com seu id. Remover pausa
curl --location --request DELETE \
'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/{merchantId}/interruptions/{interruptionId}' \
--header 'Authorization: Bearer TOKEN' Response 204 indica sucesso. A pausa é removida imediatamente. Horário de funcionamento Configure quando a loja está aberta para receber pedidos. Use a API de Opening Hours para gerenciar horários por dia da semana. Escopo da API Esta API gerencia apenas o horário padrão do iFood Marketplace. Para novos negócios, catálogo digital ou horários especiais, use o Portal do Parceiro . Consultar horários
curl --location 'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/{merchantId}/opening-hours' \
--header 'Authorization: Bearer TOKEN' Retorna array de turnos (shifts) com id, dayOfWeek (MONDAY-SUNDAY), start (HH:MM:SS), e duration (minutos). Atualizar horários
curl --location --request PUT \
'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/{merchantId}/opening-hours' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"storeId": "{merchantId}",
"shifts": [
{
"dayOfWeek": "MONDAY",
"start": "09:00:00",
"duration": 360
},
{
"dayOfWeek": "FRIDAY",
"start": "05:00:00",
"duration": 420
}
]
}' Campos obrigatórios: storeId — ID da lojashifts[] — Array de turnosCada turno requer: dayOfWeek — MONDAY a SUNDAYstart — Abertura em HH:MM:SS (00:00:00 a 23:59:59)duration — Duração em minutosValidações: Dias não incluídos ficarão fechados. Múltiplos turnos no mesmo dia são permitidos mas não podem se sobrepor. Duração mínima é 1 minuto.Response 201 retorna os turnos criados. Dica: Para pausas temporárias, use Interrupções em vez de alterar horários permanentes.Exemplo: Múltiplos turnos Uma pizzaria pode ter horários diferentes na sexta-feira (pré-expediente, almoço, jantar):
{
"storeId" : "09e9a8c8-fda3-4991-acfc-43b15397caf6" ,
"shifts" : [
{ "dayOfWeek" : "MONDAY" , "start" : "09:00:00" , "duration" : 360 },
{ "dayOfWeek" : "TUESDAY" , "start" : "09:00:00" , "duration" : 360 },
{ "dayOfWeek" : "FRIDAY" , "start" : "05:00:00" , "duration" : 420 },
{ "dayOfWeek" : "FRIDAY" , "start" : "13:00:00" , "duration" : 300 },
{ "dayOfWeek" : "FRIDAY" , "start" : "19:00:00" , "duration" : 210 }
]
} Check-in do entregador Entregadores usam QR codes para fazer check-in nas lojas Groceries (supermercados, mercados, farmácias, petshops) e começar a coletar pedidos. Gerar QR codes para check-in Gere PDFs com QR codes prontos para impressão (disponível apenas para lojas Groceries):
curl --location --request POST \
'https://merchant-api.ifood.com.br/merchant/v1.0/merchants/checkin-qrcode' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data '{"merchantIds": ["id1", "id2", "id3"]}' Campo obrigatório: merchantIds[] — Array de IDs de lojas (máximo 20)Response 200: PDF binário pronto para impressão.Disponível apenas para lojas Groceries. Solicite novos QR codes a qualquer momento sem duplicação. Próximos passos Saiba mais sobre Merchant Endpoints — Referência técnica de todos os endpointsOperações — Configure tipos de operação da lojaBoas práticas — Padrões recomendados e resolução de problemasHomologação — Critérios para validar sua integraçãoExplore outros módulos Referência da API e suporte Esta página foi útil? Sim Não
Avalie sua experiência no novo Developer portal: Avaliar agora