curl --request POST \
--url https://app.unitedlogistics.com.do/api/v1/trips/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"external_id": 9876543,
"vehicle_external_id": 12345,
"start_date": "2026-05-26T08:32:00.000Z",
"stop_date": "2026-05-26T10:14:00.000Z",
"distance_km": 82.4,
"max_speed_kph": 104.2
},
{
"external_id": 9876544,
"vehicle_external_id": 12345,
"start_date": "2026-05-26T12:05:00.000Z",
"stop_date": "2026-05-26T12:48:00.000Z",
"distance_km": 31.7
}
]
'{
"inserted": 18,
"updated": 2,
"ids": [
482219,
482220,
482221
]
}{
"error": {
"code": "bad_request",
"message": "Invalid trip payload.",
"details": {
"fieldErrors": {
"start_date": [
"start_date must be ISO 8601 datetime"
]
}
}
}
}{
"error": {
"code": "unauthorized",
"message": "API key missing or invalid."
}
}{
"error": {
"code": "forbidden",
"message": "No tienes permisos para modificar viajes."
}
}{
"error": {
"code": "not_found",
"message": "El vehículo especificado no existe en esta organización."
}
}{
"error": {
"code": "too_many_requests",
"message": "Rate limit exceeded."
}
}Trips
Bulk import trips
Imports a single trip or an array of up to 1000 trips for your organization. Idempotent on (external_id, org_id): trips that already exist are updated, the rest are inserted — so you can safely re-send the same batch. Every vehicle_external_id must belong to the API key’s org. Duplicate external_ids within one request are collapsed (last one wins).
POST
/
trips
/
bulk
curl --request POST \
--url https://app.unitedlogistics.com.do/api/v1/trips/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"external_id": 9876543,
"vehicle_external_id": 12345,
"start_date": "2026-05-26T08:32:00.000Z",
"stop_date": "2026-05-26T10:14:00.000Z",
"distance_km": 82.4,
"max_speed_kph": 104.2
},
{
"external_id": 9876544,
"vehicle_external_id": 12345,
"start_date": "2026-05-26T12:05:00.000Z",
"stop_date": "2026-05-26T12:48:00.000Z",
"distance_km": 31.7
}
]
'{
"inserted": 18,
"updated": 2,
"ids": [
482219,
482220,
482221
]
}{
"error": {
"code": "bad_request",
"message": "Invalid trip payload.",
"details": {
"fieldErrors": {
"start_date": [
"start_date must be ISO 8601 datetime"
]
}
}
}
}{
"error": {
"code": "unauthorized",
"message": "API key missing or invalid."
}
}{
"error": {
"code": "forbidden",
"message": "No tienes permisos para modificar viajes."
}
}{
"error": {
"code": "not_found",
"message": "El vehículo especificado no existe en esta organización."
}
}{
"error": {
"code": "too_many_requests",
"message": "Rate limit exceeded."
}
}Authorizations
Authorization: Bearer ulk__. Cree la clave en Configuración → API.
Body
application/json
- object
- object[]
Provider trip id (legacy trip_id). Unique per org_id.
Example:
9876543
Provider vehicle id (legacy vehicle_id).
Example:
12345
ISO 8601 timestamp when the trip started.
Example:
"2026-05-26T08:32:00.000Z"
Telematics provider slug. Defaults to karma.
Required string length:
1 - 64Example:
"karma"
Provider driver id, if known.
Example:
4421
Maximum string length:
255Example:
"GPS-DEV-001"
Denormalized vehicle number at the time of the trip.
Maximum string length:
255Example:
"UL-021"
Required range:
-90 <= x <= 90Required range:
-180 <= x <= 180Required range:
x >= 0Required range:
-90 <= x <= 90Required range:
-180 <= x <= 180Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
0 <= x <= 100Required range:
0 <= x <= 100