Envío de pedidos realizados en la plataforma iFood: Este módulo permite que los comerciantes envíen pedidos realizados en la plataforma iFood (Pedidos que ya tienen un orderId). Esto es especialmente útil para los comerciantes que tienen sus propios repartidores, pero que pueden necesitar el servicio de entrega de iFood en situaciones de sobrecarga o falta de repartidores.Para utilizar este tipo de servicio debe ser contratado a través del menú Servicios del Portal del Socio. De lo contrario, no será posible registrar pedidos, verificar la disponibilidad de entrega o solicitar un repartidor.
Elegibilidad
Este tipo de entrega no está disponible para cualquier pedido. El pedido solo será elegible cuando cumpla con algunos criterios como:
El comerciante está en un modelo de negocio que permite esta solicitud (si el comerciante es de servicio completo, el pedido ya es entregado por nuestra logística y no es posible solicitar un repartidor asociado)
El pedido es para entrega a domicilio (no es posible solicitar en los pedidos Para Recoger)
El área de entrega está cubierta por los repartidores asociados
Envío de pedidos realizados a través de otros canales de venta: El módulo también permite que los comerciantes envíen pedidos que se han realizado a través de otros canales de venta, como teléfono, WhatsApp, aplicación o sitio web propio (Pedidos que no tienen un orderId preexistente). Para obtener más información sobre Sob Demanda, visite https://news.ifood.com.br/entrega-facil-o-delivery-do-ifood-fora-do-app/
Definiciones
Pedidos en la plataforma iFood y fuera de ella
Los pedidos en la plataforma iFood son aquellos que ya tienen un orderId, que contiene la información necesaria del restaurante y del cliente para realizar la cotización y solicitud.Por otro lado, los pedidos fuera de la plataforma iFood no tienen un orderId preexistente, ya que no se originan internamente. En este caso, se necesitan información adicional para realizar la cotización y solicitud.
Contratación de Servicio
Para utilizar el módulo, Sob Demanda se debe contratar a través del menú Servicios del Portal de Aliados. En caso contrario, no será posible registrar pedidos, consultar disponibilidad de entrega o solicitar domiciliario.
Criterios para homologación
Estos criterios son aplicables solo para las integradoras que desean integrar exclusivamente con el módulo Shipping al contratar servicios de entrega para pedidos fuera de la plataforma iFood. Para las integradoras que también desean utilizar el módulo de Orders, se aplica el criterio de homologación de Orders.Para aquellas que ya están homologadas, aunque no es obligatorio, se recomienda que para utilizar el módulo Shipping también se realice la homologación, con el fin de validar si las solicitudes se están realizando correctamente y detectar posibles problemas.
El aplicativo debe ser capaz de
Hacer requests al endpoint de /polling regularmente cada 30 segundos;
Enviar /acknowledgment para todos los eventos recibidos inmediatamente después del request de polling;
Recibir, confirmar y enviar un pedido Sob Demanda para ahora (orderType = DELIVERY / orderTiming = IMMEDIATE / salesChannel = POS);
Recibir y cancelar un pedido de entrega para ahora (orderType = DELIVERY / orderTiming = IMMEDIATE / salesChannel = POS). Es obligatorio disponibilizar una lista con todos los códigos/motivos de cancelación previstos en la documentación;
Actualizar el estado de un pedido cancelado por el cliente o iFood;
Actualizar el estado de un pedido que puede haber sido confirmado/cancelado por otra aplicación como por ejemplo: Gestor de Pedidos;
Recibir el mismo evento más de una vez en el polling y descartarlo si este evento se entregó más de una vez;;
Aceptar o rechazar un cambio de dirección.
Debe ser capaz de verificar el código de recolección y saber si el código ha sido validado.
Requerimientos no funcionales
Renovar el token solamente cuando esté a punto de vencer o inmediatamente después de que venza.
La aplicación debe respetar las políticas de rate limit de cada endpoint.
Deseable:
El comando impreso siguiendo el modelo sugerido en la documentación es un requisito deseable.
Informar en pantalla y/o comando impreso la información para indicar donde el domiciliario debe dejar el pedido (que viene en el campo delivery.observations)
Pedidos fuera de la plataforma iFood
Flujo de integración
Disponibilidad de Entrega
Antes de registrar un pedido fuera de iFood, es importante consultar la disponibilidad de entrega. Es posible que la dirección no esté dentro del área de cobertura e incluso si la dirección está dentro del área, es posible que haya alguna indisponibilidad temporal en la región, como un radio de entrega temporalmente reducido. A través de esta consulta también es posible obtener el período de tiempo estimado para la entrega del pedido e informar al cliente.
Este paso no es obligatorio, pero realizar la consulta antes de registrar el pedido evita que se produzcan errores y permiten que la tienda planifique con antelación la preparación del pedido.
Para consultar la disponibilidad logística, solo debes realizar la solicitud GET /deliveryAvailabilities pasando los siguientes parámetros:
merchantId - ID de la tienda que va a solicitar la entrega
latitude - coordenada latitudinal de la dirección de entrega
longitude - coordenada longitudinal de la dirección de entrega
Este endpoint devuelve el http status code 400 Bad Request si la logística no está disponible para entregar el pedido en esta ubicación o en esa tienda.
Nombre
Descripción
BadRequest
Validación de modelo
BadRequestMerchant
Socio no disponible
DeliveryDistanceTooHigh
La dirección de entrega excede el área logística atendida por iFood
OffOpeningHours
El pedido está fuera del horario de operación de la logística de iFood
OriginNotFound
Aún no entregamos en tu región, ya que tu tienda está fuera del área logística de iFood
ServiceAreaMismatch
La dirección de entrega está fuera de nuestra área de cobertura
HighDemand
La logística de iFood está temporalmente no disponible. Por favor, intenta de nuevo más tarde
MerchantStatusAvailability
Restaurante con pendencia, contacte el Soporte de Sob Demanda
InvalidPaymentMethods
El método de pago elegido por el cliente no es aceptado por la máquina de iFood
NRELimitExceeded
Su tienda tiene muchos repartidores asociados esperando. Libere repartidores para que pueda solicitar la entrega Sob Demanda.
{"code": "DeliveryDistanceTooHigh","message": "Sob Demanda no disponible: la dirección de entrega está a más de 10 km de tu tienda.","details": ["Delivery distance too high"]}
Este endpoint devuelve el http status code 500 Internal Server Error en caso que haya alguna falla al registrar ese pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
{"code": "InternalServerError","message": "Lo sentimos, tuvimos un problema. Inténtalo de nuevo más tarde.","details": ["Internal server error"]}
Registro de Pedidos
Para registrar un pedido y solicitar un domiciliario aliado, sólo debes hacer la solicitud POST /orders pasando en el body la información del pedido.
Importante! Un domiciliario aliado se asignará automáticamente después de registrar exitosamente un pedido a través de este endpoint. Si la entrega no es posible, el pedido no es registrado y se vuelve un error.
Código de Confirmación de Entrega
Para garantizar la seguridad de las entregas y evitar casos de pedidos perdidos, se generará un código de confirmación de entrega. Este código consta de los últimos 4 dígitos del número de teléfono del consumidor final proporcionado en el pedido. El repartidor de iFood solicitará esta secuencia de números al realizar la entrega.
No quiero que mi pedido tenga un Código de Confirmación de Entrega
Si no tiene acceso al número de teléfono del cliente o no desea proporcionarlo, deberá enviar customer.phone.type="STORE" para que no se solicite el código de confirmación de entrega.
Cómo habilitar el Código de Confirmación de Entrega
Para que el pedido tenga habilitado el código de confirmación de entrega, se debe proporcionar el número de teléfono del cliente y este número de teléfono debe ser válido, ya que solo así el clientepodrá proporcionar el código de confirmación de entrega correcto al repartidor de iFood.
¡Atención! El consumidor final debe ser informado de que el repartidor de iFood solicitará el código de confirmación y que este código se refiere a los últimos 4 dígitos de su número de teléfono. Si el consumidor no conoce el código en el momento de la entrega, el pedido será cancelado, lo que resultará en una mala experiencia para el cliente y pérdidas para el restaurante.
Socios que utilizan la página de seguimiento de iFood
El código de confirmación estará disponible en la página de seguimiento de iFood para que el consumidor final pueda proporcionar el código correcto al repartidor de iFood.
Socios que no utilizan la página de seguimiento de iFood
Para proporcionar el código de confirmación en caso de que no utilice la página de seguimiento de iFood, será necesario consumir el atributo metadata.CODE del evento DELIVERY_DROP_CODE_REQUESTED para que el código se pase al consumidor final. Este evento se propagará solo en situaciones donde el código de confirmación sea obligatorio, por lo tanto, si el evento no se envía, significa que no será necesaria la confirmación de entrega.
¡Atención! Cuando se valide el código de confirmación de entrega, propagaremos el evento DELIVERY_DROP_CODE_VALIDATION_SUCCESS. Si este evento no se envía, el código no habrá sido validado.
Detalles del pedido
A continuación, se muestran todos los campos de pedido que se registrarán en iFood.Nota: Los campos marcados con un asterisco (*) son obligatorios.
Nombre
Tipo
Descripción
customer*
object
Datos del cliente.
customer.name*
string
Escribe el nombre del cliente. Formato: Libre, con límite de 50 caracteres.
customer.phone*
object
Datos del teléfono del cliente.
customer.phone.type
string
Tipo de teléfono del cliente. Los valores posibles son STORE o CUSTOMER. Si no se envía, será CUSTOMER.
customer.phone.countryCode*
string
Especifica el código de país. Formato: Un número de 2 dígitos. Ejm: 55. No es necesario si customer.phone.type es STORE.
customer.phone.areaCode*
string
Escribe el código de área de una localidad. Formato: Un número de 2 dígitos. Ej: 41. No es necesario si customer.phone.type es STORE.
customer.phone.Number*
string
Escribe el número de teléfono del cliente. Formato: Un número de 7 a 9 dígitos Ej: 995663945. No es necesario si customer.phone.type es STORE.
delivery*
object
Datos de entrega del cliente.
delivery.merchantFee*
float
Tarifa de cobro realizada por el aliado
delivery.preparationTime
integer
Escribe el tiempo de preparación del pedido en segundos
delivery.quoteId
string
ID de la cotización solicitada anteriormente para solicitar la entrega
delivery.deliveryAddress
object
Detalles de la dirección de entrega del cliente.
delivery.deliveryAddress.postalCode*
string
Escribe el código postal de la dirección de entrega del cliente. Formato: Un número de 8 dígitos. Ej: 82510290
delivery.deliveryAddress.streetNumber*
string
Escribe el número de dirección de entrega delservicio para el cliente.
delivery.deliveryAddress.streetName*
string
Escribe el nombre de la calle del cliente. Formato: Libre, con límite de 50 caracteres.
delivery.deliveryAddress.complement
string
Escribe el complemento del cliente (bloque, departamento, etc.). Formato: Libre, con límite de 50 caracteres.
delivery.deliveryAddress.reference
string
Escribe el punto de referencia del cliente Formato: Libre, con límite de 70 caracteres.
delivery.deliveryAddress.neighborhood*
string
Escribe el barrio de la dirección del cliente. Formato: Libre, con límite de 50 caracteres.
delivery.deliveryAddress.city*
string
Escribe la ciudad de la dirección del cliente. Formato: Libre, con un mínimo de 2 y un máximo de 50 caracteres.
delivery.deliveryAddress.state*
string
Escribe el estado de la dirección del cliente. Formato: Dos letras, que representan las siglas del estado correspondiente. Ej: SP
delivery.deliveryAddress.country*
string
Escribe el país de la dirección del cliente. Formato: Dos letras Ej: CO
delivery.deliveryAddress.coordinates*
object
Datos de las coordenadas de la dirección
delivery.deliveryAddress.coordinates.latitude*
float
Escribe la latitud de la dirección del cliente.
delivery.deliveryAddress.coordinates.longitude*
float
Escribe la longitud de la dirección del cliente.
items*
array of objects
Datos de cada artículo del pedido.
items.id*
uuid
Identificación del artículo
items.name*
string
Escribe el nombre del artículo Formato: Libre, con límite de 50 caracteres.
items.externalCode
string
Código de artículo en su aplicación
items.quantity*
integer
Escribe la cantidad del artículo. El valor debe ser mayor que cero
items.unitPrice*
float
Representa el precio unitario de cada artículo. El valor debe ser mayor o igual a cero
items.options
array of objects
Datos complementarios
items.options.id*
uuid
Informa el identificador del complemento
items.options.name*
string
Escribe el nombre del complemento. Formato: Libre, con límite de 50 caracteres.
items.options.externalCode
string
Código de artículo en su aplicación
items.options.index*
integer
Escribe el índice en el array de las guarniciones
items.options.quantity*
integer
Escribe la cantidad de aquella guarnición
items.options.unitPrice*
float
Escribe el precio unitario de la guarnición
items.options.price*
float
Escribe el precio total de la guarnición options.price = options.quantity * options.unitPrice
items.price*
float
Escribe el precio total del precio del producto = quantity * unitPrice. El valor debe ser mayor o igual a cero
items.optionsPrice*
float
Escribe el precio total de las guarniciones. El valor debe ser mayor o igual a cero
items.totalPrice*
float
Escribe el precio total totalPrice = price + optionsPrice. El valor debe ser mayor o igual a cero
payments
object
Informar métodos de pago
payments.methods
array of objects
Métodos de pago. Obligatorio cuando la forma de pago sea OFFLINE
payments.methods.method*
string
CREDIT, DEBIT o CASH (solo 1 opción)
payments.methods.type*
string
Tipo de pago ej. OFFLINE
payments.methods.value*
float
Monto pagado a través del método informado
payments.methods.card
object
Tarjeta de crédito/débito. Obligatorio cuando el método sea CREDIT/DEBIT
payments.methods.card.brand*
string
Marca de tarjeta de crédito/débito
payments.methods.cash
object
Pago en efectivo. Obligatorio cuando el método sea CASH
payments.methods.cash.changeFor*
float
Cambio para cuánto. Valor en efectivo físico que el conductor deberá recibir.
displayId
string
ID amigable para facilitar la identificación del pedido por la tienda y el conductor. Formato: Hasta 4 dígitos alfanuméricos. Ej: A4BC
metadata
object
Metadatos para información adicional, requeridos, identificación de pedidos.Ej: M3019, idPDV501248, identificadorPOS Formato: Límite de 20
Pagos offline el repartidor recibirá el valor del pedido en la entrega a través de la maquinita de iFood o en efectivo dependiendo del método enviado, es necesario enviar el objeto de pago.
Es necesario que la cotización tenga este método de pago en la lista de paymentMethods, de lo contrario se devolverá un error.Pagos en línea no procesamos pagos en línea, este pago es recaudado por el Comerciante, por lo que no es necesario enviar el objeto de pago.
Tiempo de Preparación
Para mejorar la eficiencia y la satisfacción del cliente, el campo delivery.preparationTime puede ser utilizado para indicar el tiempo necesario para preparar el pedido antes de la asignación del repartidor. Este campo es opcional y, si no se envía, se mantendrá el modelo actual de asignación inmediata.Cómo utilizar el Tiempo de Preparación
Sin Tiempo de Preparación Informado: Si no se envía el campo delivery.preparationTime, la asignación del repartidor ocurrirá inmediatamente después de la confirmación del pedido, siguiendo el modelo actual.
Con Tiempo de Preparación Informado: Cuando se envíe el campo delivery.preparationTime, la asignación del repartidor se realizará solo después del tiempo de preparación especificado. En este caso, el campo delivery.preparationTime debe enviarse con el valor correspondiente al tiempo necesario en segundos. Por ejemplo, si el tiempo de preparación es de 15 minutos, envíe delivery.preparationTime=900. Esto permite que el restaurante tenga el tiempo necesario para preparar el pedido antes de que se asigne el repartidor.
¡Atención! Es importante que el tiempo de preparación informado sea lo más preciso posible para evitar retrasos en la entrega y garantizar una buena experiencia para el cliente. Informar un tiempo de preparación incorrecto puede resultar en una mala experiencia para el cliente y pérdidas para el restaurante, como el cierre por acumulación de repartidores.
Metadata
El campo metadata, permite agregar información complementaria al pedido, esta información no se pasa a la aplicación del conductor o al gestor de pedidos
/shipping/v1.0/merchants/<merchantId>/orders
Respuestas
Éxito
Este endpoint devuelve el http status code 202 Accepted si el pedido se registra correctamente y el domiciliario aliado se asigna sin problemas. El body de la respuesta contiene:
id - ID del pedido creado
trackingUrl - URL de la página de seguimiento del pedido
¿El pedido fuera de iFood registrado está disponible en el polling?
Sí. El pedido que se registró para ser entregado por uno de los domiciliarios aliados de iFood es procesado por nuestra infraestructura y está disponible en el polling de la API de Order. El campo salesChannel="POS" identifica los pedidos que se importaron y provienen de otro canal de adquisición.
¿Es posible rastrear un pedido entregado por Sob Demanda?
Sí. Después de que el pedido se registre con éxito, se devuelve el ID del pedido, que se puede consultar en el endpoint del tracking de la API del Order.
Errores
Este endpoint devuelve el http status code 400 Bad Request en caso que la logística no esté disponible para entregar el pedido o ocurra alguna falla al registrar ese pedido.
Nombre
Descripción
BadRequest
Validación de modelo
BadRequestCustomer
Cliente no disponible
BadRequestMerchant
Socio no disponible
DeliveryDistanceTooHigh
La dirección de entrega excede el área logística atendida por iFood
HighDemand
La logística de iFood está temporalmente no disponible. Por favor, intenta de nuevo más tarde
MerchantEasyDeliveryDisabled
El servicio no está disponible
OffOpeningHours
El pedido está fuera del horario de operación de la logística de iFood
OriginNotFound
Aún no entregamos en tu región, ya que tu tienda está fuera del área logística de iFood
PaymentMethodNotFound
El método de pago elegido por el cliente no es aceptado por la máquina de iFood
PaymentTotalInvalid
El valor pagado a través del método informado no coincide con el valor total de la compra (los valores de “value” y “totalPrice” no coinciden)
ServiceAreaMismatch
La dirección de entrega está fuera de nuestra área de cobertura
NRELimitExceeded
Su tienda tiene muchos repartidores asociados esperando. Libere repartidores para que pueda solicitar la entrega Sob Demanda.
{"code": "DeliveryDistanceTooHigh","message": "Sob Demanda no disponible: la dirección de entrega está a más de 10 km de tu tienda.","details": ["Delivery distance too high"]}
Este endpoint retorna o http status code 500 Internal Server Error si ocurre alguna falla al registrar el pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
{"code": "InternalServerError","message": "Lo sentimos, tuvimos un problema. Inténtalo de nuevo más tarde.","details": ["Internal server error"]}
Confirmación o cambio de dirección de entrega
A través de este flujo, el cliente podrá confirmar su dirección o solicitar un cambio en la misma. En los casos en que haya un cambio en la dirección de entrega, se llevará a cabo un proceso de validación por parte del socio, donde se decidirá la aprobación o el rechazo de la solicitud.
Socios que utilizan la página de seguimiento de iFood
Los clientes que siguen sus pedidos a través de la página de seguimiento proporcionada por iFood tienen la opción de confirmar la dirección de entrega o solicitar su cambio.
Para que esto sea posible, es necesario que el pedido no haya sido creado con el atributo customer.phone.type="STORE".
¡Atención! Asegúrese de enviar el número de teléfono correcto del cliente, utilizado como WhatsApp, para que se envíe el código de confirmación de cambio (OTP).
Este procedimiento es fundamental para garantizar la seguridad del socio, del cliente y de la entrega.
Socios que no utilizan la página de seguimiento de iFood
Los socios que opten por crear su propia experiencia de confirmación o solicitud de cambio de dirección de entrega deben
implementar los endpoints responsables de este flujo.
¡Atención! En este flujo, iFood no realiza ningún proceso de confirmación de cambio con envío de un código OTP. La responsabilidad
de validar y garantizar este proceso recae en el socio.
Confirmación de dirección
Para confirmar la dirección, simplemente realice la solicitud POST /userConfirmAddress pasando los siguientes parámetros:
orderId - ID del pedido que tendrá la dirección confirmada
/shipping/v1.0/orders/:orderId/userConfirmAddress
Respuestas
Éxito
Este endpoint devuelve HTTP Status 202, sin nada en el cuerpo de la respuesta
El polling recibirá un evento de DELIVERY_ADDRESS_CHANGE_USER_CONFIRMED cuando la solicitud sea exitosa.
Error
Este endpoint devuelve el código de estado HTTP 400 Bad Request si no se proporcionan los parámetros esperados.
Nombre
Descripción
BadRequest
Validación de modelo
{"code": "BadRequest","message": "Hubo un problema al leer la información. Verifique la información enviada.","details": ["El campo 'OrderID' debe estar en formato uuid." ]}
Este endpoint devuelve el código de estado HTTP 404 Not Found si el pedido no se encuentra, está completado o cancelado, o fue creado hace más de 8 horas.
Nombre
Descripción
OrderNotFound
Pedido no encontrado
{"code": "OrderNotFound","message": "Pedido no encontrado.","details": []}
Este endpoint devuelve el código de estado HTTP 409 Operation Conflict si hay un conflicto en la operación, como intentar confirmar la dirección de un
pedido con cambio pendiente/confirmado/rechazado.
Nombre
Descripción
ChangeAddressOperationConflict
Conflicto en las operaciones de cambio de dirección.
{"code": "ChangeAddressOperationConflict","message": "Existe un conflicto en la confirmación/solicitud de cambio de dirección de este pedido, ya puede tener la dirección confirmada por el cliente, o una solicitud de cambio pendiente/concluida","details": []}
Este endpoint devuelve el código de estado HTTP 500 Internal Server Error si ocurre algún error al registrar este pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
Solicitud de cambio de dirección
Cuando se solicite un cambio en la dirección de entrega, se generará un evento DELIVERY_ADDRESS_CHANGE_REQUESTED
y se enviará a través del polling. Este evento indica que se ha solicitado el cambio de dirección, y la nueva dirección solicitada estará disponible en el atributo metadata.address.
¡Importante! Después de enviar la solicitud de cambio de dirección de entrega, el socio tendrá hasta 15 minutos para aceptar o rechazar la solicitud. Si no se toma ninguna acción dentro de ese tiempo, la solicitud será rechazada automáticamente.
Para solicitar el cambio de dirección, simplemente realice la solicitud POST /deliveryAddressChangeRequest pasando los siguientes parámetros:Los parámetros marcados con * son obligatorios
orderId* el ID del pedido que tendrá la dirección confirmada
streetName* nombre de la calle a la que se cambiará la dirección.
streetNumber número de la callea la que se cambiará la dirección.
complement complemento de la dirección a la que se cambiará.
reference referencia de la dirección a la que se cambiará.
neighborhood* barrio al que se cambiará la dirección.
city* ciudad a la que se cambiará la dirección.
state* estado al que se cambiará la dirección.
country* país al que se cambiará la dirección.
coordinates* coordenadas a las que se cambiará la dirección.
coordinates.latitude* latitud a la que se cambiará la dirección.
coordinates.longitude* longitud a la que se cambiará la dirección.
Este endpoint devuelve HTTP Status 202, sin nada en el cuerpo de la respuesta
El polling recibirá un evento de DELIVERY_ADDRESS_CHANGE_REQUESTED cuando la solicitud sea exitosa.
Error
Este endpoint devuelve el código de estado HTTP 400 Bad Request si no se proporcionan los parámetros esperados.
Nombre
Descripción
BadRequest
Validación de modelo
MaxDistanceHigherThanAllowed
Si el cambio de dirección supera los 500m.
{"code": "BadRequest","message": "Hubo un problema al leer la información. Verifique la información enviada.","details": ["El campo 'StreetName' es obligatorio.","El campo 'Neighborhood' es obligatorio.","El campo 'City' es obligatorio.","El campo 'State' es obligatorio.","El campo 'Country' es obligatorio.","El campo 'Latitude' es obligatorio.","El campo 'Longitude' es obligatorio." ]}
Este endpoint devuelve el código de estado HTTP 404 Not Found si el pedidono se encuentra, está completado o cancelado, o fue creado hace más de 8 horas.
Nombre
Descripción
OrderNotFound
Pedido no encontrado
{"code": "OrderNotFound","message": "Pedido no encontrado.","details": []}
Este endpoint devuelve el código de estado HTTP 409 Operation Conflict si hay un conflicto en la operación, como intentar confirmar la dirección de un
pedido con cambio pendiente/confirmado/rechazado.
Nombre
Descripción
ChangeAddressOperationConflict
Conflicto en las operaciones de cambio de dirección.
{"code": "ChangeAddressOperationConflict","message": "Existe un conflicto en la confirmación/solicitud de cambio de dirección de este pedido, ya puede tener la dirección confirmada por el cliente, o una solicitud de cambio pendiente/concluida","details": []}
Este endpoint devuelve el código de estado HTTP 500 Internal Server Error si ocurre algún error al registrar este pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
Aprobación de cambio de dirección
Para aprobar el cambio de dirección, simplemente realice la solicitud POST /acceptDeliveryAddressChange pasando los siguientes parámetros:
orderId - ID del pedido que tendrá la dirección de entrega modificada
Este endpoint devuelve HTTP Status 202, sin nada en el cuerpo de la respuesta
El polling recibirá un evento de DELIVERY_ADDRESS_CHANGE_ACCEPTED cuando la solicitud sea exitosa.
Error
Este endpoint devuelve el código de estado HTTP 400 Bad Request si no se proporcionan los parámetros esperados.
Cuando el nombre del error es RegionMismatch, se enviará un evento DELIVERY_ADDRESS_CHANGE_DENIED con la acción="region-mismatch"
Nombre
Descripción
BadRequest
Validación de modelo
RegionMismatch
La nueva dirección no está en la misma región que la original
{"code": "BadRequest","message": "Hubo un problema al leer la información. Verifique la información enviada.","details": ["Campo 'OrderID' debe estar en formato uuid." ]}
Este endpoint devuelve el código de estado HTTP 404 Not Found si no se encuentra el pedido, está completado o cancelado, o fue creado hace más de 8 horas.
Nombre
Descripción
OrderNotFound
Pedido no encontrado
{"code": "OrderNotFound","message": "Pedido no encontrado.","details": []}
Este endpoint devuelve el código de estado HTTP 409 Operation Conflict si hay un conflicto en la operación, como intentar confirmar la dirección de un
pedido con cambio pendiente/confirmado/rechazado.
Nombre
Descripción
ChangeAddressOperationConflict
Conflicto en las operaciones de cambio de dirección.
ChangeAddressOperationNotStarted
No hay un cambio de dirección pendiente.
{"code": "ChangeAddressOperationConflict","message": "Existe un conflicto en la confirmación/solicitud de cambio de dirección de este pedido, ya puede tener la direcciónconfirmada por el cliente, o una solicitud de cambio pendiente/concluida","details": []}
Este endpoint devuelve el código de estado HTTP 500 Internal Server Error si hay algún error al registrar este pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
Rechazo de cambio de dirección
Para rechazar el cambio de dirección, simplemente realice la solicitud POST /denyDeliveryAddressChange pasando los siguientes parámetros:
orderId - ID del pedido que tendrá la solicitud de cambio de dirección rechazada
Este endpoint devuelve HTTP Status 202, sin nada en el cuerpo de la respuesta
El polling recibirá un evento de DELIVERY_ADDRESS_CHANGE_DENIED cuando la solicitud sea exitosa.
Error
Este endpoint devuelve el código de estado HTTP 400 Bad Request si no se proporcionan los parámetros esperados.
Nombre
Descripción
BadRequest
Validación de modelo
{"code": "BadRequest","message": "Hubo un problema al leer la información. Verifique la información enviada.","details": ["Campo ‘OrderID’ debe estar en formato uuid." ]}
Este endpoint devuelve el código de estado HTTP 404 Not Found si no se encuentra el pedido, está completado o cancelado, o fue creado hace más de 8 horas.
Nombre
Descripción
OrderNotFound
Pedido no encontrado
{"code": "OrderNotFound","message": "Pedido no encontrado.","details": []}
Este endpoint devuelve el código de estado HTTP 409 Operation Conflict si hay un conflicto en la operación, como intentar confirmar la dirección de un
pedido con cambio pendiente/confirmado/rechazado.
Nombre
Descripción
ChangeAddressOperationConflict
Conflicto en las operaciones de cambio de dirección.
ChangeAddressOperationNotStarted
No hay un cambio de dirección pendiente.
{"code": "ChangeAddressOperationConflict","message": "Existe un conflicto en la confirmación/solicitud de cambio de dirección de este pedido, ya puede tener la dirección confirmada por el cliente, o una solicitud de cambio pendiente/concluida","details": []}
Este endpoint devuelve el código de estado HTTP 500 Internal Server Error si hay algún error al registrar este pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
Cancelación
Para cancelar una solicitud de entrega para pedidos que no son de la plataforma iFood, es crucial entender algunas condiciones. En primer lugar, solo los pedidos con el atributo salesChannel definido como POS pueden ser cancelados. Cualquier pedido que no se ajuste a este contexto no podrá ser cancelado a través del módulo de Shipping.Para obtener la lista de códigos de cancelación válidos para un pedido, puedes usar el endpoint GET /cancellationReasons.
Este endpoint retorna el código de estado HTTP 200 OK si el pedido puede ser cancelado, junto con sus posibles códigos y descripciones de cancelación. Si el pedido ya no puede ser cancelado, el endpoint retornará el código de estado HTTP 204 No Content. El cuerpo de la respuesta contiene:
cancelCodeId - Código de la razón de la cancelación
description - Descripción de la razón de la cancelación
[{"cancelCodeId": "817","description": "O cliente cancelou o pedido pelo restaurante"}]
Erros
Este endpoint devuelve el código de estado HTTP 500 Internal Server Error si ocurre algún fallo al solicitar la cancelación de la entrega.
Nombre
Descripción
InternalServerError
Error interno del servidor
{"code": "InternalServerError","message": "Error interno del servidor"}
Para realizar la cancelación, debes hacer una solicitud al endpoint POST /cancel, pasando los siguientes parámetros:
orderID - Id del pedido
reason - Texto con la descripción del motivo
cancellationCode - Código de cancelación
/shipping/v1.0/orders/<orderId>/cancel
Respuestas
Éxito
Este endpoint devuelve HTTP Status 202, sin nada en el cuerpo de la respuesta
El polling recibirá un evento de CANCELLATION_REQUESTED cuando la solicitud sea exitosa y posteriormente los eventos de CANCELLED o CANCELLATION_REQUEST_FAILED en caso de éxito o fracaso.
Error
Este endpoint devuelve el código de estado http 400 Bad Request si no se proporcionan los parámetros esperados.
Nombre
Descripción
BadRequest
Validación de modelo
{"code": "BadRequest","message": "Hubo un problema al leer la información. Verifique la información enviada.","details": ["El campo 'OrderID' debe estar en formato uuid." ]}
Este endpoint devuelve el código de estado http 500 Internal Server Error en caso de que ocurra algún fallo al solicitar la cancelación de la entrega.
Nombre
Descripción
InternalServerError
Error interno del servidor
{"code": "InternalServerError","message": "Ops. Hubo un fallo. Intente de nuevo en unos momentos.","details": ["Error interno del servidor"]}
Nivel de confianza en la entrega
Para mejorar la seguridad de su entrega, hemos desarrollado un conjunto de reglas que nos permiten calificar el nivel de confianza en la entrega. Esta calificación se basa en los parámetros informados durante la creación del pedido y en el cambio o confirmación de la dirección realizados por el cliente después de la creación del pedido.
Tendremos los siguientes niveles de confianza en la entrega
Nombre
Descripción
LOW
Bajo
MODERATE
Moderado
HIGH
Alto
VERY_HIGH
Muy alto
El cálculo del nivel de confianza en la entrega se basará en las siguientes reglas
Nombre
Descripción
customer_phone_valid
(El teléfono informado es diferente de customer.phone.type="STORE") y (no son solo números repetidos o números en secuencia (ej: 123456789)) y (el teléfono tiene más de 11 dígitos).
customer_phone_is_fixed
El teléfonoes un teléfono fijo con 8 dígitos.
customer_address_confirmed
La dirección de entrega fue confirmada por el cliente final.
customer_address_change_requested
El cliente solicitó un cambio en la dirección de entrega.
customer_address_change_approved
El socio aprobó el cambio de dirección de entrega.
customer_address_change_denied
El socio rechazó el cambio de dirección de entrega.
Ejemplos de cómo serían los niveles de confianza en la entrega
El pedido con customer_phone_is_valid:false tendrá una puntuación LOW.El pedido con customer_phone_is_fixed:true tendrá una puntuación MODERATE.El pedido con customer_phone_is_fixed:true y customer_address_confirmed:true tendrá una puntuación VERY_HIGH.El pedido con customer_phone_is_valid:true tendrá una puntuación HIGH.El pedido con customer_phone_is_valid:true y customer_address_change_requested:true y merchant_address_change_approved:true tendrá una puntuación VERY_HIGH .El pedido con customer_phone_is_valid:true y customer_address_change_requested:true y merchant_address_change_denied:true tendrá una puntuación LOW.
El nivel de confianza en la entrega puede cambiar después de la creación del pedido. Las acciones realizadas después de la creación del pedido, como la confirmación de la dirección o la solicitud de cambio de dirección, tienen un impacto directo en el nivel de confianza en la entrega.
Consulta del nivel de confianza en la entrega
Para descubrir cuál es el nivel de confianza en la entrega de su pedido, simplemente envíe la solicitud GET /safeDelivery pasando los siguientes parámetros.
orderId - ID del pedido que tendrá consultado el nivel de seguridad en la entrega.
/shipping/v1.0/orders/:orderId/safeDelivery
Respuestas
Éxito
Este endpoint devuelve el código de estado http 200 OK si el pedido es elegible para seguridad en la entrega. El cuerpo de la respuesta contiene:
rules - Contiene un mapa deltipo [string]boolean que contiene la regla y la situación.
score - Nivel de confianza en la entrega del pedido generado en base a las reglas definidas en el campo rules.
Este endpoint devuelve el código de estado http 400 Bad Request si no se proporcionan los parámetros esperados.
Nombre
Descripción
BadRequest
Validación de modelo
OrderWithoutSafeDelivery
Pedido sin reglas de confianza en la entrega.
BadRequest
{"code": "BadRequest","message": "Hubo un problema al leer la información. Verifique la información enviada.","details": ["El campo 'OrderID' debe estar en formato uuid." ]}
OrderWithoutSafeDelivery
{"code": "OrderWithoutSafeDelivery","message": "Pedido sin reglas de confianza en la entrega.","details": []}
Este endpoint devuelve el código de estado http 404 Not Found si no se encuentra el pedido.
Nombre
Descripción
OrderNotFound
Pedido no encontrado
{"code": "OrderNotFound","message": "Pedido no encontrado.","details": []}
Este endpoint devuelve el código de estado http 500 Internal Server Error si hay un fallo al consultar este pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
{"code": "InternalServerError","message": "Ops. Hubo un fallo. Intente de nuevo en unos momentos.","details": ["Internal server error"]}
Pedidos en la plataforma iFood
Flujo de integración
Disponibilidad de entrega
Antes de registrar una solicitud de entrega es importante consultar la cotización/disponibilidad de entrega. Es posible que la dirección no esté dentro del área de cobertura y aunque la dirección esté dentro del área, puede haber alguna indisponibilidad temporal en la región, como un radio de entrega reducido temporalmente. A través de esta consulta también es posible obtener la ventana de tiempo estimada para la entrega del pedido para informar al cliente.
Este paso no es obligatorio, pero realizar la consulta antes de registrar el pedido evita que ocurran errores y permite que la tienda se planifique en la preparación del pedido.
Para consultar la cotización de la logística para un pedido preexistente dentro de la plataforma iFood, simplemente realiza la solicitud GET /deliveryAvailabilities pasando los siguientes parámetros:
orderId - ID del pedido ya existente en la plataforma iFood para solicitar la entrega
Este endpoint devuelve el código de estado http 400 Bad Request si la logística no está disponible para entregar el pedido en esta ubicación o para este comerciante.
Nombre
Descripción
BadRequest
Validación de modelo
BadRequestMerchant
Socio no disponible
DeliveryDistanceTooHigh
La dirección de entrega excede el área logística atendida por iFood
OffOpeningHours
El pedido está fuera del horario de operación de la logística de iFood
OriginNotFound
Aún no entregamos en tu región, ya que tu tienda está fuera del área logística de iFood
ServiceAreaMismatch
La dirección de entrega está fuera de nuestra área de cobertura
HighDemand
La logística de iFood está temporalmente no disponible. Por favor, intenta de nuevo más tarde
MerchantStatusAvailability
Restaurante con pendencia, contacte el Soporte de Sob Demanda
InvalidPaymentMethods
El método de pago elegido por el cliente no es aceptado por la máquina de iFood
SaturatedOfflinePayment
En este instante, la opción de pago a la entrega no está disponible
NRELimitExceeded
Su tienda tiene muchos repartidores asociados esperando. Libere repartidores para que pueda solicitar la entrega Sob Demanda.
{"code": "DeliveryDistanceTooHigh","message": "Sob Demanda no disponible: la dirección de entrega está a más de 10 Km de su tienda.","details": ["Delivery distance too high"]}
Este endpoint devuelve el código de estado http 500 Internal Server Error en caso de que ocurra algún fallo al registrar este pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
{"code": "InternalServerError","message": "Ops. Hubo un fallo. Intente de nuevo en unos momentos.","details": ["Error interno del servidor"]}
Solicitar la entrega
Para solicitar el repartidor de acuerdo con la cotización devuelta, utiliza el siguiente endpoint POST /requestDriver pasando en el cuerpo la información del pedido.Este endpoint es asíncrono. Cuando tu solicitud sea procesada, recibirás un evento REQUEST_DRIVER confirmando que la solicitud se ha realizado y luego el resultado de la solicitud, que puede ser: REQUEST_DRIVER_SUCCESS o REQUEST_DRIVER_FAILED.
¡Atención! Un repartidor asociado será asignado automáticamente después de la solicitud a través de este endpoint. Si no es posible realizar la entrega, la solicitud de entrega no se registra y se devuelve un error.
orderId - ID del pedido ya existente en la plataforma iFood para solicitar la entrega
quoteId - ID de la cotización solicitada anteriormente para solicitar la entrega
/shipping/v1.0/orders/<orderId>/requestDriver
Respuestas
Éxito
Este endpoint devuelve el código de estado http 202 Accepted si la solicitud se registra con éxito.
Errores
Este endpoint devuelve el código de estado http 400 Bad Request si la logística no está disponible para entregar el pedido o si ocurre algún fallo al registrar este pedido.
Nombre
Descripción
BadRequest
Validación de modelo
BadRequestCustomer
Cliente no disponible
BadRequestMerchant
Socio no disponible
DeliveryDistanceTooHigh
La dirección de entrega excede el área logística atendida por iFood
HighDemand
La logística de iFood está temporalmente no disponible. Por favor, intenta de nuevo más tarde
MerchantEasyDeliveryDisabled
El servicio no está disponible
OffOpeningHours
El pedido está fuera del horario de operación de la logística de iFood
OriginNotFound
Aún no entregamos en tu región, ya que tu tienda está fuera del área logística de iFood
ServiceAreaMismatch
La dirección de entrega está fuera de nuestra área de cobertura
MerchantStatusAvailability
Restaurante con pendencia, contacte el Soporte de Sob Demanda
InvalidPaymentMethods
El método de pago elegido por el cliente no es aceptado por la máquina de iFood
SaturatedOfflinePayment
En este instante, la opción de pago a la entrega no está disponible
NRELimitExceeded
Su tienda tiene muchos repartidores asociados esperando. Libere repartidores para que pueda solicitar la entrega Sob Demanda.
{"code": "DeliveryDistanceTooHigh","message": "Sob Demanda no disponible: la dirección de entrega está a más de 10 Km de su tienda.","details": ["Delivery distance too high"]}
Este endpoint devuelve el código de estado http 500 Internal Server Error en caso de que ocurra algún fallo al registrar este pedido.
Nombre
Descripción
InternalServerError
Error interno del servidor
{"code": "InternalServerError","message": "Ops. Hubo un fallo. Intente de nuevo en unos momentos.","details": ["Error interno del servidor"]}
Cancelación
Para cancelar la solicitud de un repartidor iFood sin la necesidad de cancelar el pedido, la cancelación de la entrega debe realizarse a través del endpoint POST /orders/{id}/cancelRequestDriver.La cancelación solo se llevará a cabo si se solicita antes de la aceptación del repartidor, en este caso no se cobrará ninguna tarifa a la tienda. Si es necesario realizar la cancelación después de la aceptación del repartidor, debe seguir las reglas establecidas en Cancelación de pedido.
El endpoint es asíncrono. Cuando tu solicitud sea procesada, la tienda recibirá un evento DELIVERY_CANCELLATION_REQUEST_ACCEPTED, en caso de éxito, o DELIVERY_CANCELLATION_REQUEST_REJECTED, en caso de fallo. Consulta todos los detalles de estos eventos en esta sección.
Importante
La acción es irreversible. Después de cancelar la solicitud de un repartidor, no será posible revertir este servicio.
Para que se solicite un nuevo repartidor, se debe realizar una nueva solicitud de repartidor.
Este endpoint devuelve HTTP Status 202, sin nada en el cuerpo de la respuesta
El polling recibirá un evento de DELIVERY_CANCELLATION_REQUESTED cuando la solicitud se envíe con éxito.
Error
Este endpoint devuelve el código de estado http 400 Bad Request si no se proporcionan los parámetros esperados.
Nombre
Descripción
BadRequest
Validación de modelo
{"code": "BadRequest","message": "Hubo un problema al leer la información. Verifique la información enviada.","details": ["El campo 'OrderID' debe estar en formato uuid." ]}
Este endpoint devuelve el código de estado http 500 Internal Server Error en caso de que ocurra algún fallo al solicitar la cancelación de la entrega.
Nombre
Descripción
InternalServerError
Error interno del servidor
{"code": "InternalServerError","message": "Ops. Hubo un fallo. Intente de nuevo en unos momentos.","details": ["Error interno del servidor"]}