Buscar na documentação
ctrl+4K
Módulos
Authentication
Merchant
Catalog
Order
Events
Logistics
Shipping
Review
Financial
Soluções

Critérios de homologação

Este é seu checklist de sign-off antes de ir para produção. Valide que sua integração funciona com os 4 endpoints principais.Garanta que existam avaliações recentes (pelo menos 2-3 dias antes da data agendada) para testar todos os cenários.
Endpoint: GET /merchants/{merchantId}/reviews
curl -X GET "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/reviews?page=1&pageSize=10&addCount=true" \
  -H "Authorization: Bearer {JWT_TOKEN}"
Resposta esperada (200 OK):
{
  "page": 1,
  "size": 10,
  "reviews": [
    {
      "id": "...",
      "status": "NOT_REPLIED",
      "visibility": "PUBLIC",
      "version": "v2",
      "replies": [],
      "score": 3.0,
      "comment": "...",
      "createdAt": "...",
      "order": {...},
      "questions": [...]
    }
  ],
  "total": 45,
  "pageCount": 5
}
ValidaçãoEsperadoStatus
Status 200Sucesso[ ]
Campos obrigatóriosid, status, replies[], version, visibility presentes[ ]
Paginaçãopage, size, total, pageCount corretos[ ]
curl -X GET "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/reviews?page=1&pageSize=10&dateFrom=2025-01-01T00:00:00Z&dateTo=2025-03-31T23:59:59Z" \
  -H "Authorization: Bearer {JWT_TOKEN}"
ValidaçãoEsperadoStatus
Filtro dataRetorna apenas reviews no período[ ]
curl -X GET "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/reviews?pageSize=100" \
  -H "Authorization: Bearer {JWT_TOKEN}"
Resposta esperada (400 Bad Request):
{
  "error": "pageSize must be <= 50",
  "status": 400
}
ValidaçãoEsperadoStatus
pageSize > 50Retorna 400[ ]
Lista vaziareviews: [] quando não há[ ]
Endpoint: GET /merchants/{merchantId}/reviews/{reviewId}
curl -X GET "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/reviews/{reviewId}" \
  -H "Authorization: Bearer {JWT_TOKEN}"
Resposta esperada (200 OK):
{
  "id": "a26c8718-b1f5-44a0-8f06-ecc71ddfcd5a",
  "status": "NOT_REPLIED",
  "visibility": "PUBLIC",
  "version": "v2",
  "score": 3.0,
  "comment": "Comida chegou fria",
  "customerName": "João",
  "createdAt": "2025-03-01T10:30:00Z",
  "replies": [
    {
      "text": "Obrigado pelo feedback!",
      "from": "MERCHANT",
      "createdAt": "2025-03-01T14:00:00Z"
    }
  ],
  "order": {
    "id": "...",
    "shortId": "1234",
    "createdAt": "2025-03-01T10:00:00Z"
  },
  "questions": [
    {
      "id": "...",
      "type": "CHOICE",
      "title": "Do que você gostou?",
      "answers": [{"id": "...", "title": "Entrega"}]
    }
  ],
  "surveyId": "..."
}
ValidaçãoEsperadoStatus
Status 200Sucesso[ ]
Campos V2Todos os campos presentes[ ]
Array repliesfrom é MERCHANT ou CUSTOMER[ ]
curl -X GET "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/reviews/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer {JWT_TOKEN}"
ValidaçãoEsperadoStatus
ID inexistenteRetorna 404 Not Found[ ]
Endpoint: POST /merchants/{merchantId}/reviews/{reviewId}/answersPrimeiro, encontre uma review com status: "NOT_REPLIED" usando o teste anterior.
curl -X POST "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/reviews/{reviewId}/answers" \
  -H "Authorization: Bearer {JWT_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"text": "Obrigado pelo feedback! Vamos melhorar o tempo de entrega."}'
Resposta esperada (201 Created):
{
  "createdAt": "2025-03-01T15:00:00Z",
  "reviewId": "a26c8718-b1f5-44a0-8f06-ecc71ddfcd5a",
  "text": "Obrigado pelo feedback! Vamos melhorar o tempo de entrega."
}
ValidaçãoEsperadoStatus
Texto válido (10-300)Status 201 Created[ ]
Response contém createdAt, reviewId, textCampos presentes[ ]
Se a review está em PUBLISHED, tente responder:
curl -X POST "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/reviews/{reviewId}/answers" \
  -H "Authorization: Bearer {JWT_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"text": "Texto de resposta"}'
Resposta esperada (409 Conflict ou 422 Unprocessable):
{
  "error": "Review must have status NOT_REPLIED to receive an answer",
  "status": 409
}
ValidaçãoEsperadoStatus
Status ≠ NOT_REPLIEDRetorna 409 ou 422[ ]
# Muito curto (< 10 chars)
curl -X POST "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/reviews/{reviewId}/answers" \
  -H "Authorization: Bearer {JWT_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"text": "Obrigado"}'
Resposta esperada (400 Bad Request):
{
  "error": "text must be between 10 and 300 characters",
  "status": 400
}
ValidaçãoEsperadoStatus
Texto < 10 charsRetorna 400[ ]
Texto > 300 charsRetorna 400[ ]
Endpoint: GET /merchants/{merchantId}/summary
curl -X GET "https://merchant-api.ifood.com.br/review/v2.0/merchants/{merchantId}/summary" \
  -H "Authorization: Bearer {JWT_TOKEN}"
Resposta esperada (200 OK):
{
  "totalReviewsCount": 142,
  "validReviewsCount": 53,
  "score": 4.3
}
ValidaçãoEsperadoStatus
Status 200Sucesso[ ]
Campo totalReviewsCountInteger ≥ 0[ ]
Campo validReviewsCountInteger ≤ totalReviewsCount[ ]
Campo scoreNumber entre 1.0 e 5.0[ ]

Validar cálculo

  • totalReviewsCount: Deve ser ≥ ao número de reviews listados
  • validReviewsCount: Deve ser ≤ ao total (exclui antigas e privadas)
  • score: Deve ser a média das reviews válidas
Sua aplicação deve incluir link para a Política de Avaliações do iFood.
Antes de enviar para produção:
  • Lista de avaliações retorna todas as reviews
  • Filtro por data funciona
  • Paginação está correta
  • Detalhes completos de uma review
  • Resposta criada com sucesso (201)
  • Rejeição de status inválido (409)
  • Rejeição de texto inválido (400)
  • Summary com cálculo correto
  • Link de Política de Avaliações visível na UI
  • Tratamento de erros 401/403/404
  • Tratamento de rate limit 429
  • Endpoints — Referência completa com best practices
  • Fluxo — Entenda o ciclo de vida
Esta página foi útil?
Avalie sua experiência no novo Developer portal: