Routes API

Asignar pedidos a riders en bulk

Crea rutas para varios riders en una sola peticion, con resultado independiente por asignacion.

Volver a todos los endpoints

Routes API

Asignar pedidos a riders en bulk

Cada item crea una route para un rider y puede incluir pedidos de varios restaurantes, incluidos restaurantes externos sin usuario, siempre que esos pedidos ya pertenezcan al dispatcher autenticado mediante order_budgets. Si una asignacion falla, el resto puede completarse y el error queda codificado en results[].error.

POST /api/routes/bulk 200 OK
Auth requerida Perfil: dispatcher

Campos principales

Resumen de los campos relevantes para este endpoint.

Campo Tipo Uso Descripción
dispatcherId uuid Obligatorio Dispatcher autenticado que solicita la asignacion. Debe coincidir con el token de la peticion.
assignments array Obligatorio Lista de grupos de asignacion. Maximo 100 grupos por peticion.
assignments[].riderId uuid Obligatorio Rider que recibira la route. Debe pertenecer al dispatcher autenticado y estar online.
assignments[].orderIds uuid[] Obligatorio Pedidos que se asignan al rider. Maximo 50 por grupo y 500 en total. Pueden pertenecer a restaurantes distintos.

Request JSON

{
  "dispatcherId": "11111111-1111-4111-8111-111111111111",
  "assignments": [
    {
      "riderId": "8c385706-6a67-4fba-84ea-0d653f5d3928",
      "orderIds": [
        "aaaaaaaa-1111-4111-8111-111111111111",
        "bbbbbbbb-2222-4222-8222-222222222222"
      ]
    },
    {
      "riderId": "9f496817-7b78-4acb-9d33-1e764f6e4a10",
      "orderIds": [
        "cccccccc-3333-4333-8333-333333333333"
      ]
    }
  ]
}

Respuesta con exito parcial

{
  "data": {
    "results": [
      {
        "assignmentIndex": 0,
        "status": "created",
        "routeId": "44444444-4444-4444-8444-444444444444",
        "riderId": "8c385706-6a67-4fba-84ea-0d653f5d3928",
        "orderIds": [
          "aaaaaaaa-1111-4111-8111-111111111111",
          "bbbbbbbb-2222-4222-8222-222222222222"
        ],
        "route": {
          "routeId": "44444444-4444-4444-8444-444444444444",
          "riderId": "8c385706-6a67-4fba-84ea-0d653f5d3928",
          "orderIds": [
            "aaaaaaaa-1111-4111-8111-111111111111",
            "bbbbbbbb-2222-4222-8222-222222222222"
          ],
          "riderBudgetTotalAmount": "7.80",
          "riderBudgetCurrency": "EUR",
          "createdAt": "2026-06-17T10:00:00.000Z",
          "updatedAt": "2026-06-17T10:00:00.000Z"
        }
      },
      {
        "assignmentIndex": 1,
        "status": "failed",
        "riderId": "9f496817-7b78-4acb-9d33-1e764f6e4a10",
        "orderIds": [
          "cccccccc-3333-4333-8333-333333333333"
        ],
        "error": {
          "code": "ROUTE_BULK_RIDER_OFFLINE",
          "message": "Rider must be online before assigning a route"
        }
      }
    ],
    "summary": {
      "requested": 2,
      "created": 1,
      "alreadyExisting": 0,
      "failed": 1
    }
  }
}

Consola de prueba

Prueba una asignacion bulk

Pega un token dispatcher, ajusta el payload y envía una asignacion bulk desde esta página. La petición impacta rutas reales asociadas al token.

Campos del payload

La respuesta aparecerá aquí.

Errores esperados

Respuestas habituales que debe contemplar la integración.

400
ROUTE_BULK_INVALID_PAYLOAD

Payload invalido

El body no cumple el esquema esperado o supera los limites: 100 asignaciones, 50 pedidos por asignacion o 500 pedidos totales.

401
AUTH_MISSING_TOKEN

Token requerido

No se ha enviado token en Authorization ni x-api-token.

401
AUTH_INVALID_AUTHORIZATION_HEADER

Cabecera Authorization invalida

La cabecera Authorization no tiene un formato valido.

401
AUTH_INVALID_TOKEN

Token invalido

Token inexistente, expirado o no resoluble.

403
AUTH_DISPATCHER_ROLE_REQUIRED

Rol dispatcher requerido

La cuenta autenticada no tiene rol dispatcher.

403
ROUTE_BULK_DISPATCHER_MISMATCH

Dispatcher no coincide

dispatcherId no coincide con el dispatcher autenticado.

200
ROUTE_BULK_DUPLICATE_RIDER_IN_REQUEST

Rider duplicado en el lote

Un mismo riderId aparece en mas de un item. Agrupa todos sus pedidos en una unica asignacion.

200
ROUTE_BULK_DUPLICATE_ORDER_IN_REQUEST

Pedido duplicado en el lote

Un mismo orderId aparece en mas de una asignacion del mismo lote.

200
ROUTE_BULK_RIDER_OFFLINE

Rider offline

El rider no esta online segun la presencia vigente y no puede recibir una route.

200
ROUTE_BULK_RIDER_NOT_FOUND

Rider no encontrado

El rider no existe o no pertenece al dispatcher autenticado.

200
ROUTE_BULK_RIDER_ACTIVE_ROUTE

Rider ocupado

El rider ya tiene una route activa con pedidos no cerrados.

200
ROUTE_BULK_ORDER_NOT_FOUND

Pedido no encontrado

El pedido no existe o no pertenece al dispatcher autenticado mediante order_budgets.

200
ROUTE_BULK_ORDER_NOT_ASSIGNABLE_STATUS

Estado no asignable

El pedido no esta en dispatcher_accepted. Solo pedidos aceptados por el dispatcher pueden entrar en una route nueva.

200
ROUTE_BULK_ORDER_ACTIVE_ROUTE

Pedido ya asignado

El pedido ya esta en una route activa y no puede asignarse de nuevo.

200
ROUTE_BULK_ASSIGNMENT_FAILED

Asignacion fallida

Error no clasificado durante una asignacion concreta. El resto del lote puede continuar.

429
RATE_LIMIT_EXCEEDED

Too Many Requests

Se ha superado el limite de peticiones para esta ruta.

500
ROUTE_BULK_ASSIGNMENT_FAILED

Error interno

La operacion bulk no pudo ejecutarse por un error interno antes de devolver resultados por item.

Ejemplo de error por item

{
  "data": {
    "results": [
      {
        "assignmentIndex": 0,
        "status": "failed",
        "riderId": "8c385706-6a67-4fba-84ea-0d653f5d3928",
        "orderIds": [
          "aaaaaaaa-1111-4111-8111-111111111111"
        ],
        "error": {
          "code": "ROUTE_BULK_ORDER_ACTIVE_ROUTE",
          "message": "One or more orders are already assigned to an active route"
        }
      }
    ],
    "summary": {
      "requested": 1,
      "created": 0,
      "alreadyExisting": 0,
      "failed": 1
    }
  }
}