Rutas y optimización
Cálculo de rutas, matrices de tiempos y propuestas de recorridos para aprobar.
Calcular una ruta
https://api.drometra.com/v1/routing/routesPide el token de acceso de una persona de tu empresa.
Cabeceras
- x-tenant-idobligatoriostring · uuid
- El identificador de tu empresa. El servidor comprueba que sigas siendo miembro activo de ella.
Cuerpo
- profileobligatorioenum: car | truck | bicycle | pedestrian
- coordinatesobligatorioarray de object
- vehicleobject
Respuesta · 200
- profileenum: car | truck | bicycle | pedestriansiempre
- array de objectsiempre
- objectsiempre
- distanceMetersintegersiempre
- durationSecondsintegersiempre
- estimatedbooleansiempre
- trafficIncludedbooleansiempre
- objectsiempre
- ferryMetersinteger
Puede responder con error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. El cuerpo de error se explica en Conceptos.
curl -X POST "https://api.drometra.com/v1/routing/routes" \
-H "Authorization: Bearer $DROMETRA_TOKEN" \
-H "x-tenant-id: $DROMETRA_TENANT" \
-H "Content-Type: application/json" \
-d '{
"profile": "…",
"coordinates": []
}'{
"profile": "car",
"waypoints": [
{
"latitude": 0,
"longitude": 0
}
],
"geometry": {
"type": "LineString",
"coordinates": [
[
null
]
]
},
"distanceMeters": 0,
"durationSeconds": 0,
"estimated": true,
"trafficIncluded": false,
"provenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {
"id": "…",
"status": "covered"
},
"roadNetwork": true
},
"ferryMeters": 0
}Calcular una matriz de tiempos
https://api.drometra.com/v1/routing/matricesPide el token de acceso de una persona de tu empresa.
Cabeceras
- x-tenant-idobligatoriostring · uuid
- El identificador de tu empresa. El servidor comprueba que sigas siendo miembro activo de ella.
Cuerpo
- profileobligatorioenum: car | truck | bicycle | pedestrian
- coordinatesobligatorioarray de object
- vehicleobject
Respuesta · 200
- profileenum: car | truck | bicycle | pedestriansiempre
- pointCountintegersiempre
- distancesMetersarray de array de integer o nullsiempre
- durationsSecondsarray de array de integer o nullsiempre
- estimatedbooleansiempre
- trafficIncludedbooleansiempre
- objectsiempre
Puede responder con error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. El cuerpo de error se explica en Conceptos.
curl -X POST "https://api.drometra.com/v1/routing/matrices" \
-H "Authorization: Bearer $DROMETRA_TOKEN" \
-H "x-tenant-id: $DROMETRA_TENANT" \
-H "Content-Type: application/json" \
-d '{
"profile": "…",
"coordinates": []
}'{
"profile": "car",
"pointCount": 27,
"distancesMeters": [
[
0
]
],
"durationsSeconds": [
[
0
]
],
"estimated": true,
"trafficIncluded": false,
"provenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {
"id": "…",
"status": "covered"
},
"roadNetwork": true
}
}Proponer recorridos optimizados
https://api.drometra.com/v1/routing/optimization-previewsPide el token de acceso de una persona de tu empresa.
Cabeceras
- x-tenant-idobligatoriostring · uuid
- El identificador de tu empresa. El servidor comprueba que sigas siendo miembro activo de ella.
- idempotency-keyobligatoriostring · uuid
- Un UUID nuevo por operación. Si repites la petición con la misma clave, el cambio no se aplica dos veces.
Cuerpo
- profileobligatorioenum: car | truck | bicycle | pedestrian
- depotobligatorioobject
- vehiclesobligatorioarray de object
- stopsobligatorioarray de object
- maxComputationMsinteger
- vehicleobject
Respuesta · 201
- idstring · uuidsiempre
- tenantIdstring · uuidsiempre
- stateenum: ready | approvedsiempre
- versionintegersiempre
- profileenum: car | truck | bicycle | pedestriansiempre
- objectsiempre
- array de objectsiempre
- objectsiempre
- objectsiempre
- createdAtstring · date-timesiempre
- approvedAtstring · date-time o nullsiempre
- routePlanIdstring · uuid o nullsiempre
Puede responder con error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. El cuerpo de error se explica en Conceptos.
curl -X POST "https://api.drometra.com/v1/routing/optimization-previews" \
-H "Authorization: Bearer $DROMETRA_TOKEN" \
-H "x-tenant-id: $DROMETRA_TENANT" \
-H "idempotency-key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"profile": "…",
"depot": {},
"vehicles": [],
"stops": []
}'{
"id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"state": "ready",
"version": 1,
"profile": "car",
"solution": {
"feasible": true,
"timedOut": true,
"optimal": false,
"routes": [
{
"vehicleId": "…",
"fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"orderedStops": [],
"distanceMeters": 0,
"durationSeconds": 0
}
],
"unassigned": [
{
"id": "…",
"reason": "capacity_exceeded"
}
],
"totalDistanceMeters": 0,
"totalDurationSeconds": 0,
"baselineDistanceMeters": 0,
"improvementMeters": 0
},
"roadRoutes": [
{
"vehicleId": "…",
"fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"route": {
"profile": "car",
"waypoints": [],
"geometry": {
"type": "LineString",
"coordinates": []
},
"distanceMeters": 0,
"durationSeconds": 0,
"estimated": true,
"trafficIncluded": false,
"provenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {},
"roadNetwork": true
},
"ferryMeters": 0
}
}
],
"matrixProvenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {
"id": "…",
"status": "covered"
},
"roadNetwork": true
},
"solver": {
"name": "…",
"maxComputationMs": 1000.5,
"optimal": false
},
"createdAt": "2026-10-21T14:02:31Z",
"approvedAt": "2026-10-21T14:02:31Z",
"routePlanId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d"
}Ver una propuesta de recorridos
https://api.drometra.com/v1/routing/optimization-previews/{id}Pide el token de acceso de una persona de tu empresa.
Cabeceras
- x-tenant-idobligatoriostring · uuid
- El identificador de tu empresa. El servidor comprueba que sigas siendo miembro activo de ella.
Parámetros de ruta
- idobligatoriostring · uuid
- ej. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d
Respuesta · 200
- idstring · uuidsiempre
- tenantIdstring · uuidsiempre
- stateenum: ready | approvedsiempre
- versionintegersiempre
- profileenum: car | truck | bicycle | pedestriansiempre
- objectsiempre
- array de objectsiempre
- objectsiempre
- objectsiempre
- createdAtstring · date-timesiempre
- approvedAtstring · date-time o nullsiempre
- routePlanIdstring · uuid o nullsiempre
Puede responder con error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. El cuerpo de error se explica en Conceptos.
curl -X GET "https://api.drometra.com/v1/routing/optimization-previews/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d" \
-H "Authorization: Bearer $DROMETRA_TOKEN" \
-H "x-tenant-id: $DROMETRA_TENANT" \
-H "Accept: application/json"{
"id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"state": "ready",
"version": 1,
"profile": "car",
"solution": {
"feasible": true,
"timedOut": true,
"optimal": false,
"routes": [
{
"vehicleId": "…",
"fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"orderedStops": [],
"distanceMeters": 0,
"durationSeconds": 0
}
],
"unassigned": [
{
"id": "…",
"reason": "capacity_exceeded"
}
],
"totalDistanceMeters": 0,
"totalDurationSeconds": 0,
"baselineDistanceMeters": 0,
"improvementMeters": 0
},
"roadRoutes": [
{
"vehicleId": "…",
"fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"route": {
"profile": "car",
"waypoints": [],
"geometry": {
"type": "LineString",
"coordinates": []
},
"distanceMeters": 0,
"durationSeconds": 0,
"estimated": true,
"trafficIncluded": false,
"provenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {},
"roadNetwork": true
},
"ferryMeters": 0
}
}
],
"matrixProvenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {
"id": "…",
"status": "covered"
},
"roadNetwork": true
},
"solver": {
"name": "…",
"maxComputationMs": 1000.5,
"optimal": false
},
"createdAt": "2026-10-21T14:02:31Z",
"approvedAt": "2026-10-21T14:02:31Z",
"routePlanId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d"
}Aprobar una propuesta de recorridos
https://api.drometra.com/v1/routing/optimization-previews/{id}/approvePide el token de acceso de una persona de tu empresa.
Cabeceras
- x-tenant-idobligatoriostring · uuid
- El identificador de tu empresa. El servidor comprueba que sigas siendo miembro activo de ella.
- idempotency-keyobligatoriostring · uuid
- Un UUID nuevo por operación. Si repites la petición con la misma clave, el cambio no se aplica dos veces.
Parámetros de ruta
- idobligatoriostring · uuid
- ej. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d
Cuerpo
- versionobligatoriointeger
Respuesta · 200
- idstring · uuidsiempre
- tenantIdstring · uuidsiempre
- previewIdstring · uuidsiempre
- versionintegersiempre
- profileenum: car | truck | bicycle | pedestriansiempre
- array de objectsiempre
- array de objectsiempre
- array de objectsiempre
- objectsiempre
- createdAtstring · date-timesiempre
Puede responder con error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. El cuerpo de error se explica en Conceptos.
curl -X POST "https://api.drometra.com/v1/routing/optimization-previews/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/approve" \
-H "Authorization: Bearer $DROMETRA_TOKEN" \
-H "x-tenant-id: $DROMETRA_TENANT" \
-H "idempotency-key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"version": 0
}'{
"id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"previewId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"version": 1,
"profile": "car",
"routes": [
{
"vehicleId": "…",
"fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"orderedStops": [
{
"id": "…",
"arrivalAt": "2026-10-21T14:02:31Z",
"serviceStartsAt": "2026-10-21T14:02:31Z",
"departureAt": "2026-10-21T14:02:31Z",
"loadAfter": 0
}
],
"distanceMeters": 0,
"durationSeconds": 0
}
],
"unassigned": [
{
"id": "…",
"reason": "capacity_exceeded"
}
],
"roadRoutes": [
{
"vehicleId": "…",
"fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"route": {
"profile": "car",
"waypoints": [],
"geometry": {
"type": "LineString",
"coordinates": []
},
"distanceMeters": 0,
"durationSeconds": 0,
"estimated": true,
"trafficIncluded": false,
"provenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {},
"roadNetwork": true
},
"ferryMeters": 0
}
}
],
"matrixProvenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {
"id": "…",
"status": "covered"
},
"roadNetwork": true
},
"createdAt": "2026-10-21T14:02:31Z"
}Ver un plan de recorridos
https://api.drometra.com/v1/routing/route-plans/{id}Pide el token de acceso de una persona de tu empresa.
Cabeceras
- x-tenant-idobligatoriostring · uuid
- El identificador de tu empresa. El servidor comprueba que sigas siendo miembro activo de ella.
Parámetros de ruta
- idobligatoriostring · uuid
- ej. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d
Respuesta · 200
- idstring · uuidsiempre
- tenantIdstring · uuidsiempre
- previewIdstring · uuidsiempre
- versionintegersiempre
- profileenum: car | truck | bicycle | pedestriansiempre
- array de objectsiempre
- array de objectsiempre
- array de objectsiempre
- objectsiempre
- createdAtstring · date-timesiempre
Puede responder con error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. El cuerpo de error se explica en Conceptos.
curl -X GET "https://api.drometra.com/v1/routing/route-plans/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d" \
-H "Authorization: Bearer $DROMETRA_TOKEN" \
-H "x-tenant-id: $DROMETRA_TENANT" \
-H "Accept: application/json"{
"id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"previewId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"version": 1,
"profile": "car",
"routes": [
{
"vehicleId": "…",
"fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"orderedStops": [
{
"id": "…",
"arrivalAt": "2026-10-21T14:02:31Z",
"serviceStartsAt": "2026-10-21T14:02:31Z",
"departureAt": "2026-10-21T14:02:31Z",
"loadAfter": 0
}
],
"distanceMeters": 0,
"durationSeconds": 0
}
],
"unassigned": [
{
"id": "…",
"reason": "capacity_exceeded"
}
],
"roadRoutes": [
{
"vehicleId": "…",
"fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
"route": {
"profile": "car",
"waypoints": [],
"geometry": {
"type": "LineString",
"coordinates": []
},
"distanceMeters": 0,
"durationSeconds": 0,
"estimated": true,
"trafficIncluded": false,
"provenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {},
"roadNetwork": true
},
"ferryMeters": 0
}
}
],
"matrixProvenance": {
"kind": "valhalla",
"engine": "…",
"engineVersion": "…",
"graphVersion": "…",
"coverage": {
"id": "…",
"status": "covered"
},
"roadNetwork": true
},
"createdAt": "2026-10-21T14:02:31Z"
}