Orders API
Crear pedido
Este endpoint cubre el flujo público inicial para integraciones dispatcher. Permite crear un pedido para un restaurante existente o para un restaurante externo enviado en el payload.
Requisitos para restaurante existente
- Enviar restaurantId.
- Enviar destino con deliveryAddress, deliveryLat y deliveryLng.
- Los datos de recogida pueden omitirse si el restaurante ya tiene ubicación configurada.
Requisitos para restaurante externo
- Enviar externalRestaurant con source, externalId, displayName y location.
- Opcionalmente enviar photoUrl y logoUrl como URLs públicas del restaurante.
- Enviar recogida completa: pickupAddress, pickupLat y pickupLng.
- Enviar destino con deliveryAddress, deliveryLat y deliveryLng.
Campos principales
Resumen de los campos relevantes para este endpoint.
| Campo | Tipo | Uso | Descripción |
|---|---|---|---|
dispatchOrderId | string | Opcional | Referencia de tu sistema para localizar el pedido en listados, logs o soporte. |
restaurantId | string | Restaurante existente | Identificador de restaurante facilitado durante el alta de la integración. |
externalRestaurant | object | Restaurante externo | Datos del restaurante cuando aún no existe en Operio, incluyendo foto o logo públicos si están disponibles. |
customerInfo | object | Opcional | Datos del cliente final: nombre, teléfono, email y notas. |
deliveryInfo | object | Obligatorio | Dirección y coordenadas de entrega. En restaurantes externos también incluye datos de recogida. |
paymentInfo | object | Opcional | Método de pago, estado del cobro, importe total, moneda e importe esperado en efectivo. |
Request JSON
{
"dispatchOrderId": "POS-93442",
"restaurantId": "rest_12345",
"customerInfo": {
"customerName": "Ana Perez",
"customerPhone": "+34 600 000 000",
"customerEmail": "ana@example.com",
"customerNotes": "Llamar si no responde"
},
"deliveryInfo": {
"deliveryAddress": "C. Cisne, 21-17, 03006 Alicante",
"deliveryLat": 38.346158,
"deliveryLng": -0.510089,
"deliveryNotes": "Piso 7, puerta 13"
},
"paymentInfo": {
"method": "cash",
"status": "pending",
"totalAmount": "18.50",
"currency": "EUR",
"cashExpectedAmount": "20.00"
}
} Respuesta 201
{
"data": {
"orderId": "ord_7G9K2Q",
"dispatchOrderId": "EXT-1001",
"currentStatus": "dispatcher_accepted",
"createdAt": "2026-06-16T10:30:00.000Z",
"updatedAt": "2026-06-16T10:30:00.000Z",
"customerInfo": {
"customerName": "Ana Perez",
"customerPhone": "+34 600 000 000",
"customerEmail": null,
"customerNotes": null
},
"deliveryInfo": {
"pickupAddress": "Av. de Orihuela, 27, 03007 Alicante",
"pickupLat": 38.344498,
"pickupLng": -0.509259,
"deliveryAddress": "C. Cisne, 21-17, 03006 Alicante",
"deliveryLat": 38.346158,
"deliveryLng": -0.510089,
"deliveryNotes": "Piso 7, puerta 13"
},
"paymentInfo": {
"method": "cash",
"status": "pending",
"totalAmount": "18.50",
"currency": "EUR",
"cashExpectedAmount": "20.00"
}
}
} Consola de prueba
Envía una petición de creación
Ajusta la URL base, pega tu token de dispatcher y prueba el payload seleccionado. También puedes copiar el ejemplo como cURL o JavaScript.
Errores esperados
Respuestas habituales que debe contemplar la integración.
ORDER_CREATE_INVALID_PAYLOAD Payload inválido
Body inválido no cubierto por una regla más específica.
ORDER_CREATE_RESTAURANT_ID_REQUIRED_FOR_DISPATCHER Falta restaurante
Dispatcher crea pedido para restaurante registrado sin restaurantId.
ORDER_CREATE_DISPATCHER_ID_REQUIRED_FOR_RESTAURANT Falta dispatcher
Restaurante crea pedido y no se puede resolver dispatcherId.
ORDER_CREATE_RESTAURANT_AND_EXTERNAL_MUTUALLY_EXCLUSIVE Restaurante duplicado
Se envían restaurantId y externalRestaurant a la vez.
ORDER_CREATE_DELIVERY_INFO_REQUIRED Falta deliveryInfo
La petición no incluye el bloque deliveryInfo.
ORDER_CREATE_DELIVERY_COORDINATES_REQUIRED Destino incompleto
Faltan deliveryAddress, deliveryLat o deliveryLng.
ORDER_CREATE_EXTERNAL_RESTAURANT_IDENTITY_REQUIRED Restaurante externo incompleto
externalRestaurant no trae source, externalId o displayName.
ORDER_CREATE_EXTERNAL_RESTAURANT_PICKUP_REQUIRED Recogida incompleta
Pedido externo sin pickupAddress, pickupLat o pickupLng.
ORDER_CREATE_PICKUP_COORDINATES_REQUIRED Recogida no resoluble
Pedido registrado sin pickup completo y restaurante sin ubicación completa configurada.
ORDER_CREATE_EXTERNAL_RESTAURANT_REQUIRES_DISPATCHER Perfil incorrecto
Token no dispatcher intenta crear externalRestaurant.
ORDER_CREATE_RESTAURANT_MEMBERSHIP_REQUIRED Membresía requerida
Usuario restaurante sin membresía válida.
ORDER_CREATE_RESTAURANT_ID_MISMATCH Restaurante no coincide
Restaurante autenticado intenta usar otro restaurantId.
ORDER_CREATE_DISPATCHER_RESTAURANT_RELATION_REQUIRED Relación no permitida
Dispatcher no vinculado con el restaurante registrado.
ORDER_CREATE_RESTAURANT_NOT_FOUND Restaurante no encontrado
restaurantId no existe.
ORDER_CREATE_ATOMIC_MISSING_ORDER_ID Creación incompleta
La operación de creación no devuelve orderId.
ORDER_CREATE_ATOMIC_FAILED Creación fallida
Error no clasificado durante la creación atómica del pedido.
Ejemplo de error
{
"error": {
"code": "ORDER_CREATE_EXTERNAL_RESTAURANT_PICKUP_REQUIRED",
"message": "pickupAddress, pickupLat and pickupLng are required for external restaurant orders"
}
}