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

Plataforma de negociação para pedidos

Negocie problemas pós-entrega com clientes — cancelamentos, devoluções e reembolsos através de propostas intermediadas.
  1. Consuma HANDSHAKE_DISPUTE via polling ou webhook
  2. Responda com /accept, /reject, ou /alternative antes de expiresAt
  3. Processe HANDSHAKE_SETTLEMENT confirmando resolução
Requisitos:
  • Responda obrigatoriamente — sem resposta ativa timeoutAction automaticamente
  • Uma resposta por disputeId (não reutilizável)
  • Analise cada negociação individualmente
  • Após entrega: Cancelamento total ou parcial
  • Durante preparo: Cancelamento total
  • Entrega atrasada: Cancelamento ou extensão de tempo
  • Reenvio: Itens faltantes (experimental)
Consulte Guia de implementação para exemplos de fluxo.
Entidade enviada no evento HANDSHAKE_DISPUTE contendo negociação, ação solicitada, evidências, prazo e ação automática de timeout. Inclui DisputeAlternative para reembolsos e Item/GarnishItem para cancelamentos parciais.Identificação e contexto
AtributoDescriçãoTipoObrigatório
idID da negociaçãouuid
parentDisputeIdID da negociação original (se contraproposta)uuid
createdAtData/hora de criaçãoDateTime
messageJustificativa do clienteString
Tipo de negociação
AtributoDescriçãoTipoObrigatório
actionPropósito da negociaçãoString
handshakeTypeTipo de negociaçãoString
handshakeGroupClassificaçãoString
Valores válidos para action:
  • CANCELLATION — Cancelamento total
  • PARTIAL_CANCELLATION — Cancelamento parcial
  • PROPOSED_AMOUNT_REFUND — Reembolso proposto
  • PROPOSED_ADDITIONAL_TIME — Extensão de tempo proposta
  • VOID — Sem ação
Valores válidos para handshakeType:
  • AFTER_DELIVERY — Cancelamento após cliente receber
  • DELAY — Cancelamento por entrega atrasada
  • PREPARATION_TIME — Cancelamento durante preparo
  • AFTER_DELIVERY_PARTIALLY — Cancelamento parcial após entrega
Prazo e automação
AtributoDescriçãoTipoObrigatório
expiresAtPrazo para respostaDateTime
timeoutActionAção se não responderString
Valores válidos para timeoutAction:
  • ACCEPT_CANCELLATION — Cancelar automaticamente
  • REJECT_CANCELLATION — Rejeitar cancelamento automaticamente
  • VOID — Sem ação automática
Conteúdo da negociação
AtributoDescriçãoTipoObrigatório
alternativesOpções de resposta disponíveisList of DisputeAlternative
metadata.itemItens para cancelamento parcialList of Item
metadata.garnishItemsSub-itens (complementos)List of GarnishItem
metadata.evidencesFotos/mídias do clienteList of Media
metadata.acceptCancellationReasonsMotivos válidos para aceitarList of String
Entidade enviada no evento HANDSHAKE_SETTLEMENT contendo status e motivo da resolução. Inclui SelectedDisputeAlternative para contrapropostas aceitas.
AtributoDescriçãoTipoObrigatório
idID do settlementuuid
disputeIdID da negociação resolvidauuid
statusResultado finalString
reasonJustificativa de rejeiçãoString
selectedDisputeAlternativeContraproposta (se status = ALTERNATIVE_REPLIED)SelectedDisputeAlternative
Valores válidos para status:
  • ACCEPTED — Negociação aceita
  • REJECTED — Negociação rejeitada
  • EXPIRED — Sem resposta até prazo
  • ALTERNATIVE_REPLIED — Contraproposta enviada e aceita
Opções de resolução alternativa acompanhando HandshakeDispute. Valores válidos para type: REFUND, BENEFIT, ADDITIONAL_TIME.
AtributoDescriçãoTipoObrigatório
idID da alternativauuid
typeTipo de resoluçãoString
metadata.maxAmountValor máximo (REFUND/BENEFIT)AmountCond
metadata.allowedsAdditionalTimeInMinutesOpções de extensão (minutos)List of IntCond
metadata.allowedsAdditionalTimeReasonsMotivos para atrasoList of StringCond
Contraproposta aceita acompanhando HandshakeSettlement. Valores válidos para type: REFUND, BENEFIT, ADDITIONAL_TIME.
AtributoDescriçãoTipoObrigatório
idID da alternativauuid
typeTipo de resoluçãoString
metadata.amountValor (REFUND/BENEFIT)AmountCond
metadata.additionalTimeInMinutesExtensão de tempointCond
metadata.reasonMotivo do atrasoStringCond
Foto enviada pelo cliente.
AtributoTipo
urlString (requer autenticação)
contentTypeString (MIME type)
Item para cancelamento parcial.
AtributoTipo
iduuid
uniqueIduuid
externalCodeString
quantityint
indexint
amountAmount
reasonString
Sub-item (complemento) para cancelamento parcial.
AtributoTipo
iduuid
parentUniqueIduuid
externalCodeString
quantityint
indexint
amountAmount
reasonString
Valor monetário conforme ISO 4217.
AtributoDescriçãoTipo
valueValor sem decimais (R$1,00 = 100)String
currencyCódigo de moeda (ex: BRL)String

ValorDescrição
AFTER_DELIVERYCancelamento após cliente receber
DELAYCancelamento por entrega atrasada
PREPARATION_TIMECancelamento durante preparo
AFTER_DELIVERY_PARTIALLYCancelamento parcial após entrega
ValorDescrição
CUSTOMER_ORDER_SUPPORTNegociação iniciada por cliente
ValorDescrição
CANCELLATIONCancelamento total
PARTIAL_CANCELLATIONCancelamento parcial
PROPOSED_AMOUNT_REFUNDCancelamento com opção de reembolso
ValorAção
ACCEPT_CANCELLATIONCancelar automaticamente
REJECT_CANCELLATIONRejeitar cancelamento automaticamente
VOIDSem ação automática
ValorDescrição
ACCEPTEDNegociação aceita
REJECTEDNegociação rejeitada
EXPIREDSem resposta até prazo
ALTERNATIVE_REPLIEDContraproposta enviada e aceita
ValorDescrição
REFUNDReembolso em dinheiro
BENEFITCrédito/benefício
ADDITIONAL_TIMEExtensão de tempo
Motivos para decisões de negociação. Use em corpos de requisição quando necessário.
MotivoContexto
HIGH_STORE_DEMANDLoja em capacidade máxima
UNKNOWN_ISSUEProblema não especificado
CUSTOMER_SATISFACTIONSatisfação do cliente
INVENTORY_CHECKVerificação de disponibilidade
SYSTEM_ISSUEProblema técnico
WRONG_ORDERPedido incorreto
PRODUCT_QUALITYQualidade do produto
LATE_DELIVERYEntrega atrasada
CUSTOMER_REQUESTSolicitação do cliente
POST https://merchant-api.ifood.com.br/order/v1.0/disputes/{disputeId}/acceptParâmetros:
NomeTipoDescrição
disputeIduuidID da dispute (URL)
reasonstringMotivo de metadata.acceptCancellationReasons
detailReasonstringDescrição (250 chars máx)
Exemplo de requisição:
curl -X POST "https://merchant-api.ifood.com.br/order/v1.0/disputes/dispute_001/accept" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"reason": "CUSTOMER_SATISFACTION", "detailReason": "Reembolso por cortesia"}'
Resposta (201 Created):
{
  "id": "settlement_001",
  "status": "ACCEPTED",
  "disputeId": "dispute_001",
  "createdAt": "2024-04-25T18:05:00Z"
}
Erros comuns:
StatusCódigoMotivo
401-Token inválido
404DISPUTE_NOT_FOUNDDispute não encontrada
422DISPUTE_ALREADY_ANSWEREDJá respondida
400INVALID_REASONMotivo inválido
POST https://merchant-api.ifood.com.br/order/v1.0/disputes/{disputeId}/rejectParâmetros:
NomeTipoDescrição
disputeIduuidID da dispute (URL)
reasonstringMotivo de negotiationReasons
Exemplo de requisição:
curl -X POST "https://merchant-api.ifood.com.br/order/v1.0/disputes/dispute_002/reject" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"reason": "INVENTORY_CHECK"}'
Resposta (201 Created):
{
  "id": "settlement_002",
  "status": "REJECTED",
  "disputeId": "dispute_002",
  "createdAt": "2024-04-25T18:08:00Z"
}
Erros comuns:
StatusCódigoMotivo
401-Token inválido
404DISPUTE_NOT_FOUNDDispute não encontrada
422DISPUTE_ALREADY_ANSWEREDJá respondida
400INVALID_REASONMotivo inválido
POST https://merchant-api.ifood.com.br/order/v1.0/disputes/{disputeId}/alternativeParâmetros:
NomeTipoDescrição
disputeIduuidID da dispute (URL)
typestringREFUND, BENEFIT ou ADDITIONAL_TIME
metadata.amountAmountValor (REFUND/BENEFIT)
metadata.additionalTimeInMinutesintMinutos (ADDITIONAL_TIME)
metadata.reasonstringMotivo do atraso (ADDITIONAL_TIME)
Exemplos por tipo:
curl -X POST "https://merchant-api.ifood.com.br/order/v1.0/disputes/dispute_001/alternative" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "REFUND",
    "metadata": {
      "amount": {
        "value": "5000",
        "currency": "BRL"
      }
    }
  }'
Resposta (201 Created):
{
  "id": "settlement_003",
  "status": "ALTERNATIVE_REPLIED",
  "disputeId": "dispute_003",
  "selectedDisputeAlternative": {
    "id": "alt_001",
    "type": "ADDITIONAL_TIME",
    "metadata": {
      "additionalTimeInMinutes": 30,
      "reason": "HIGH_STORE_DEMAND"
    }
  },
  "createdAt": "2024-04-25T18:12:00Z"
}
Erros comuns:
StatusCódigoMotivo
401-Token inválido
404DISPUTE_NOT_FOUNDDispute não encontrada
422DISPUTE_ALREADY_ANSWEREDJá respondida
400INVALID_AMOUNTValor fora do intervalo

CenáriohandshakeTypeactionRespostas
Total após entregaAFTER_DELIVERYCANCELLATIONAceitar / Rejeitar / REFUND
Total durante preparoPREPARATION_TIMECANCELLATIONAceitar / Rejeitar
Total (atraso)DELAYCANCELLATIONAceitar / Rejeitar / ADDITIONAL_TIME
Parcial após entregaAFTER_DELIVERY_PARTIALLYPARTIAL_CANCELLATIONAceitar / Rejeitar / REFUND
Consulte Guia de implementação para exemplos completos.
Sem resposta até expiresAt, timeoutAction é executada:
  • ACCEPT_CANCELLATION: Pedido cancelado
  • REJECT_CANCELLATION: Cancelamento rejeitado
  • VOID: Sem ação
Gera HANDSHAKE_SETTLEMENT com status: EXPIRED.
Publicado quando cliente inicia negociação elegível (cancelamento com critérios de negociação).Estrutura do evento
AtributoTipo
idstring
codestring (sempre "HSD")
fullCodestring (sempre "HANDSHAKE_DISPUTE")
orderIduuid
merchantIduuid
createdAtDateTime
metadataHandshakeDispute
Exemplos por cenário:
{
  "id": "evt_001",
  "code": "HSD",
  "fullCode": "HANDSHAKE_DISPUTE",
  "orderId": "ord_12345",
  "merchantId": "merchant_001",
  "createdAt": "2024-04-25T18:02:46.921Z",
  "metadata": {
    "id": "dispute_001",
    "action": "CANCELLATION",
    "handshakeType": "AFTER_DELIVERY",
    "handshakeGroup": "CUSTOMER_ORDER_SUPPORT",
    "message": "Comida chegou fria",
    "expiresAt": "2024-04-25T18:09:46Z",
    "timeoutAction": "REJECT_CANCELLATION",
    "createdAt": "2024-04-25T18:02:46Z",
    "alternatives": [
      {
        "id": "alt_001",
        "type": "REFUND",
        "metadata": {
          "maxAmount": {
            "currency": "BRL",
            "value": "5000"
          }
        }
      }
    ],
    "acceptCancellationReasons": ["PRODUCT_QUALITY", "CUSTOMER_SATISFACTION"],
    "evidences": [
      {
        "url": "https://merchant-api.ifood.com.br/orders/ord_12345/evidences/abc123",
        "contentType": "image/jpeg"
      }
    ]
  }
}
Publicado quando negociação é resolvida (aceita, rejeitada, contraproposta ou timeout).Estrutura do evento
AtributoTipo
idstring
codestring (sempre "HSS")
fullCodestring (sempre "HANDSHAKE_SETTLEMENT")
orderIduuid
merchantIduuid
createdAtDateTime
metadataHandshakeSettlement
Exemplos por resultado:
{
  "id": "evt_settlement_001",
  "code": "HSS",
  "fullCode": "HANDSHAKE_SETTLEMENT",
  "orderId": "ord_12345",
  "merchantId": "merchant_001",
  "createdAt": "2024-04-25T18:05:00Z",
  "metadata": {
    "id": "settlement_001",
    "disputeId": "dispute_001",
    "status": "ACCEPTED",
    "reason": "CUSTOMER_SATISFACTION",
    "createdAt": "2024-04-25T18:05:00Z"
  }
}
Esta página foi útil?
Avalie sua experiência no novo Developer portal: