Buscar en la documentación
ctrl+4K
Módulos
Authentication
Merchant
Catalog
Order
Events
Logistics
Shipping
Review
Financial
Soluciones

Plataforma de negociación de órdenes

Negocie problemas post-entrega con clientes — cancelaciones, devoluciones, reembolsos a través de propuestas mediadas.
  1. Consuma HANDSHAKE_DISPUTE vía polling o webhook
  2. Responda con /accept, /reject, o /alternative antes de expiresAt
  3. Procese HANDSHAKE_SETTLEMENT confirmando resolución
Requisitos:
  • Debe responder a cada disputa — sin respuesta activa timeoutAction automáticamente
  • Una respuesta por disputeId (no reutilizable)
  • Analice cada negociación individualmente
  • Después de entrega: Solicitud de cancelación total o parcial
  • Durante preparación: Solicitud de cancelación total
  • Entrega atrasada: Cancelación o solicitud de extensión de tiempo
  • Reenvío: Items faltantes (experimental)
Ver guía de implementación para ejemplos de flujo.
Entidad enviada en evento HANDSHAKE_DISPUTE conteniendo negociación, acción solicitada, evidencia, plazo y acción automática de timeout. Incluye DisputeAlternative para reembolsos e Item/GarnishItem para cancelaciones parciales.Identificación y contexto
AtributoDescripciónTipoRequerido
idID de negociaciónuuid
parentDisputeIdID de negociación original (si contrapropuesta)uuid
createdAtMarca de tiempo de creaciónDateTime
messageJustificación del clienteString
Tipo de negociación
AtributoDescripciónTipoRequerido
actionPropósito de negociaciónString
handshakeTypeTipo de negociaciónString
handshakeGroupClasificaciónString
Valores válidos para action:
  • CANCELLATION — Cancelación total
  • PARTIAL_CANCELLATION — Cancelación parcial
  • PROPOSED_AMOUNT_REFUND — Reembolso propuesto
  • PROPOSED_ADDITIONAL_TIME — Extensión de tiempo propuesta
  • VOID — Sin acción
Valores válidos para handshakeType:
  • AFTER_DELIVERY — Cancelación después de que el cliente recibe
  • DELAY — Cancelación por entrega atrasada
  • PREPARATION_TIME — Cancelación durante preparación
  • AFTER_DELIVERY_PARTIALLY — Cancelación parcial después de entrega
Plazo y automatización
AtributoDescripciónTipoRequerido
expiresAtPlazo para respuestaDateTime
timeoutActionAcción si no respondeString
Valores válidos para timeoutAction:
  • ACCEPT_CANCELLATION — Aceptar automáticamente cancelación
  • REJECT_CANCELLATION — Rechazar automáticamente cancelación
  • VOID — Sin acción automática
Contenido de negociación
AtributoDescripciónTipoRequerido
alternativesOpciones de respuesta disponiblesList of DisputeAlternative
metadata.itemItems para cancelación parcialList of Item
metadata.garnishItemsSub-items (complementos)List of GarnishItem
metadata.evidencesFotos/medios del clienteList of Media
metadata.acceptCancellationReasonsRazones válidas para aceptarList of String
Entidad enviada en evento HANDSHAKE_SETTLEMENT conteniendo estado de resolución y razón. Incluye SelectedDisputeAlternative para contrapropostas aceptadas.
AtributoDescripciónTipoRequerido
idID de liquidaciónuuid
disputeIdID de negociación resueltauuid
statusResultado finalString
reasonJustificación de rechazoString
selectedDisputeAlternativeContrapropuesta (si status = ALTERNATIVE_REPLIED)SelectedDisputeAlternative
Valores válidos para status:
  • ACCEPTED — Negociación aceptada
  • REJECTED — Negociación rechazada
  • EXPIRED — Sin respuesta hasta el plazo
  • ALTERNATIVE_REPLIED — Contrapropuesta enviada y aceptada
Opciones de resolución alternativa acompañando HandshakeDispute. Valores válidos para type: REFUND, BENEFIT, ADDITIONAL_TIME.
AtributoDescripciónTipoRequerido
idID de alternativauuid
typeTipo de resoluciónString
metadata.maxAmountCantidad máxima (REFUND/BENEFIT)AmountCond
metadata.allowedsAdditionalTimeInMinutesOpciones de extensión (minutos)List of IntCond
metadata.allowedsAdditionalTimeReasonsRazones para demoraList of StringCond
Contrapropuesta aceptada acompañando HandshakeSettlement. Valores válidos para type: REFUND, BENEFIT, ADDITIONAL_TIME.
AtributoDescripciónTipoRequerido
idID de alternativauuid
typeTipo de resoluciónString
metadata.amountCantidad (REFUND/BENEFIT)AmountCond
metadata.additionalTimeInMinutesExtensión de tiempointCond
metadata.reasonRazón de demoraStringCond
Foto enviada por cliente.
AtributoTipo
urlString (requiere autenticación)
contentTypeString (tipo MIME)
Item para cancelación parcial.
AtributoTipo
iduuid
uniqueIduuid
externalCodeString
quantityint
indexint
amountAmount
reasonString
Sub-item (complemento) para cancelación parcial.
AtributoTipo
iduuid
parentUniqueIduuid
externalCodeString
quantityint
indexint
amountAmount
reasonString
Valor monetario conforme ISO 4217.
AtributoDescripciónTipo
valueCantidad sin decimales ($1.00 = 100)String
currencyCódigo de moneda (ej: USD)String

ValorDescripción
AFTER_DELIVERYCancelación después de recibir
DELAYCancelación por entrega atrasada
PREPARATION_TIMECancelación durante preparación
AFTER_DELIVERY_PARTIALLYCancelación parcial después de entrega
ValorDescripción
CUSTOMER_ORDER_SUPPORTNegociación iniciada por cliente
ValorDescripción
CANCELLATIONCancelación total
PARTIAL_CANCELLATIONCancelación parcial
PROPOSED_AMOUNT_REFUNDCancelación con opción de reembolso
ValorAcción
ACCEPT_CANCELLATIONCancelar automáticamente
REJECT_CANCELLATIONRechazar cancelación automáticamente
VOIDSin acción automática
ValorDescripción
ACCEPTEDNegociación aceptada
REJECTEDNegociación rechazada
EXPIREDSin respuesta antes de plazo
ALTERNATIVE_REPLIEDContrapropuesta enviada y aceptada
ValorDescripción
REFUNDReembolso en dinero
BENEFITCrédito/beneficio
ADDITIONAL_TIMEExtensión de tiempo
Razones para decisiones de negociación. Use en cuerpos de solicitud cuando sea necesario.
RazónContexto
HIGH_STORE_DEMANDTienda en capacidad máxima
UNKNOWN_ISSUEProblema no especificado
CUSTOMER_SATISFACTIONSatisfacción del cliente
INVENTORY_CHECKVerificación de disponibilidad
SYSTEM_ISSUEProblema técnico
WRONG_ORDERPedido incorrecto
PRODUCT_QUALITYPreocupación de calidad
LATE_DELIVERYEntrega atrasada
CUSTOMER_REQUESTSolicitud del cliente
POST https://merchant-api.ifood.com.br/order/v1.0/disputes/{disputeId}/acceptParámetros:
NombreTipoDescripción
disputeIduuidID de disputa (URL)
reasonstringRazón de metadata.acceptCancellationReasons
detailReasonstringDescripción (máx 250 caracteres)
Ejemplo de solicitud:
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 cortesía"}'
Respuesta (201 Created):
{
  "id": "settlement_001",
  "status": "ACCEPTED",
  "disputeId": "dispute_001",
  "createdAt": "2024-04-25T18:05:00Z"
}
Errores comunes:
EstadoCódigoRazón
401-Token inválido
404DISPUTE_NOT_FOUNDDisputa no encontrada
422DISPUTE_ALREADY_ANSWEREDYa respondida
400INVALID_REASONRazón inválida
POST https://merchant-api.ifood.com.br/order/v1.0/disputes/{disputeId}/rejectParámetros:
NombreTipoDescripción
disputeIduuidID de disputa (URL)
reasonstringRazón de negotiationReasons
Ejemplo de solicitud:
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"}'
Respuesta (201 Created):
{
  "id": "settlement_002",
  "status": "REJECTED",
  "disputeId": "dispute_002",
  "createdAt": "2024-04-25T18:08:00Z"
}
Errores comunes:
EstadoCódigoRazón
401-Token inválido
404DISPUTE_NOT_FOUNDDisputa no encontrada
422DISPUTE_ALREADY_ANSWEREDYa respondida
400INVALID_REASONRazón inválida
POST https://merchant-api.ifood.com.br/order/v1.0/disputes/{disputeId}/alternativeParámetros:
NombreTipoDescripción
disputeIduuidID de disputa (URL)
typestringREFUND, BENEFIT o ADDITIONAL_TIME
metadata.amountAmountCantidad (REFUND/BENEFIT)
metadata.additionalTimeInMinutesintMinutos (ADDITIONAL_TIME)
metadata.reasonstringRazón de demora (ADDITIONAL_TIME)
Ejemplos 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"
      }
    }
  }'
Respuesta (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"
}
Errores comunes:
EstadoCódigoRazón
401-Token inválido
404DISPUTE_NOT_FOUNDDisputa no encontrada
422DISPUTE_ALREADY_ANSWEREDYa respondida
400INVALID_AMOUNTCantidad fuera de rango

EscenariohandshakeTypeactionRespuestas
Total después de entregaAFTER_DELIVERYCANCELLATIONAceptar / Rechazar / REFUND
Total durante preparaciónPREPARATION_TIMECANCELLATIONAceptar / Rechazar
Total (atrasado)DELAYCANCELLATIONAceptar / Rechazar / ADDITIONAL_TIME
Parcial después de entregaAFTER_DELIVERY_PARTIALLYPARTIAL_CANCELLATIONAceptar / Rechazar / REFUND
Ver guía de implementación para ejemplos completos.
Si no hay respuesta antes de expiresAt, timeoutAction se ejecuta:
  • ACCEPT_CANCELLATION: Pedido cancelado
  • REJECT_CANCELLATION: Cancelación rechazada
  • VOID: Sin acción
Genera HANDSHAKE_SETTLEMENT con status: EXPIRED.
Publicado cuando cliente inicia negociación elegible (cancelación que cumple criterios).Estructura del evento
AtributoTipo
idstring
codestring (siempre "HSD")
fullCodestring (siempre "HANDSHAKE_DISPUTE")
orderIduuid
merchantIduuid
createdAtDateTime
metadataHandshakeDispute
Ejemplos por escenario:
{
  "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 llegó fría",
    "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 cuando negociación se resuelve (aceptada, rechazada, contrapropuesta o timeout).Estructura del evento
AtributoTipo
idstring
codestring (siempre "HSS")
fullCodestring (siempre "HANDSHAKE_SETTLEMENT")
orderIduuid
merchantIduuid
createdAtDateTime
metadataHandshakeSettlement
Ejemplos 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 fue útil?
Evalúa tu experiencia en el nuevo portal de desarrolladores: