Rutas y optimización

Cálculo de rutas, matrices de tiempos y propuestas de recorridos para aprobar.

Calcular una ruta

POSThttps://api.drometra.com/v1/routing/routes

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.

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.

petición
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": []
  }'
respuesta · 200
{
  "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

POSThttps://api.drometra.com/v1/routing/matrices

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.

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.

petición
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": []
  }'
respuesta · 200
{
  "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

POSThttps://api.drometra.com/v1/routing/optimization-previews

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.
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.

petición
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": []
  }'
respuesta · 201
{
  "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

GEThttps://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.

petición
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"
respuesta · 200
{
  "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

POSThttps://api.drometra.com/v1/routing/optimization-previews/{id}/approve

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.
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.

petición
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
  }'
respuesta · 200
{
  "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

GEThttps://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.

petición
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"
respuesta · 200
{
  "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"
}