This is the endpoint to list all the releases since a specific time. It is replaced with GET /v1/plannings?released_since={date-time}. You can find the full specification of the new v1 endpoint here.
Full path of the old URL: GET https://api.conundra.eu/planning/v0/releases?released_since=2024-11-29T10:00:00.000Z
Full path of the new URL: GET https://api.conundra.eu/planning/v1/plannings?released_since=2024-11-29T10:00:00.000Z
- The version changed from
v0tov1 - The resource path changed from
releasestoplannings
- The v1 endpoint can also be used to fetch non-released plannings. The
released_sinceparameter is optional, and if not specified the endpoint will return all plannings. - The v1 endpoint is limited by default to
100results and uses cursor based paging to fetch additional pages.
Old response:
{
"releases": [
{
"release_metadata": {
"planning_business_id": "86b54c9d-21d7-4b37-af3d-25f03886153b",
"released_at": "2024-11-30T10:00:00Z"
}
}
]
}New Response:
{
"plannings": [
{
"id": "86b54c9d-21d7-4b37-af3d-25f03886153b",
"created_at": "2024-11-30T08:15:00Z",
"released_at": "2024-11-30T10:00:00Z"
}
],
"cursor": {
"self": "c2VsZl9fcGFnZQ",
"prev": "cHJldmlvdXNfX3BhZ2U",
"next": "bmV4dF9fcGFnZQ"
}
}- The top level property in the response is now the
planningsarray, so:releases[].release_metadata.planning_business_idreplaced byplannings[].idreleases[].release_metadata.released_atreplaced byplannings[].released_at
- As mentioned before, the v1 endpoint is using cursor based paging, so the result list is limited and the response contains an extra property
cursor, which contains the cursors necessary to fetch additional pages.
This is the endpoint to fetch the details of the latest release of a given planning. It is replaced with GET /v1/plannings/{id}/releases/latest. You can find the full specification of the new v1 endpoint here.
Full path of the old URL: GET https://api.conundra.eu/planning/v0/plannings/86b54c9d-21d7-4b37-af3d-25f03886153b/releases/latest
Full path of the new URL: GET https://api.conundra.eu/planning/v1/plannings/86b54c9d-21d7-4b37-af3d-25f03886153b/releases/latest
- The version changed from
v0tov1
Old response:
{
"release_metadata": {
"planning_business_id": "86b54c9d-21d7-4b37-af3d-25f03886153b",
"released_at": "2024-11-30T10:00:00"
},
"trips": [
{
"id": "4f3abf12-23a2-4039-83db-b6dc7935395d",
"proposed_execution": {
"executors": [
{
"id": "EMP-18",
"name": "Patrick Simmons"
}
],
"transport_resources": [
{
"id": "TR-14",
"type": "tractor",
"license_plate": "2-QBD-124"
}
],
"custom_data": {
"shop_manager": "John Smith"
}
},
"stops": [
{
"id": "4f3abf12-23a2-4039-83db-b6dc7935395d",
"location": {
"business_id": "LOC_001",
"name": "Conundra (Oosterzele)",
"type": "CUSTOMER",
"address": {
"geo_point": {
"latitude": 50.9514048,
"longitude": 3.8067878
},
"address_line": "Voordries 41b",
"city": "Oosterzele",
"zip_code": "9860",
"country_code": "BE"
}
},
"deliveries": [
{
"order": {
"business_id": "D_445",
"description": "special delivery",
"capacities": [
{
"type": "weight",
"value": 20.02
}
],
"custom_data": {
"shop_manager": "John Smith"
}
},
"timings": {
"arrival_at": "2024-12-01T10:30:00Z",
"earliest_arrival_at": "2024-12-01T10:00:00Z",
"latest_arrival_at": "2024-12-01T12:00:00Z",
"service_time": "PT15M",
"wait_time": "PT30M",
"departure_at": "2024-12-01T11:15:00Z"
}
}
],
"pickups": [
{
"order": {
"business_id": "P_751",
"description": "special pickup",
"capacities": [
{
"type": "weight",
"value": 20.02
}
],
"custom_data": {
"shop_manager": "John Smith"
}
},
"timings": {
"arrival_at": "2024-12-01T10:30:00Z",
"earliest_arrival_at": "2024-12-01T10:00:00Z",
"latest_arrival_at": "2024-12-01T12:00:00Z",
"service_time": "PT15M",
"wait_time": "PT30M",
"departure_at": "2024-12-01T11:15:00Z"
}
}
],
"timings": {
"arrival_at": "2024-12-01T10:30:00Z",
"service_time": "PT15M",
"wait_time": "PT30M",
"departure_at": "2024-12-01T11:15:00Z"
}
}
],
"breaks": [
{
"at": "2024-12-01T11:15:30Z",
"duration": "PT45M"
}
]
}
]
}New Response:
{
"release_metadata": {
"planning_id": "86b54c9d-21d7-4b37-af3d-25f03886153b",
"released_at": "2024-11-30T10:00:00"
},
"routes": [
{
"id": "d2c6013e-9194-46ac-a44c-855abf1176ca",
"resource_combination": {
"id": "5a4e8c43-80c0-4d5b-8f7e-32ec94f25d79",
"employee": {
"business_id": "EMP-18",
"name": "Patrick Simmons",
"custom_data": {
"shop_manager": "John Smith"
}
},
"transport_resources": [
{
"business_id": "TR-14",
"license_plate": "2-QBD-124",
"custom_data": {
"shop_manager": "John Smith"
}
}
]
},
"start": {
"location": {
"business_id": "LOC_001",
"name": "Conundra (Oosterzele)",
"type": "CUSTOMER",
"geo_point": {
"latitude": 50.9514048,
"longitude": 3.8067878
},
"address": {
"address_line": "Voordries 41b",
"city": "Oosterzele",
"zip_code": "9860",
"country_code": "BE"
}
},
"timings": {
"arrival_at": "2024-12-01T10:30:00Z",
"service_time": "PT45M",
"departure_at": "2024-12-01T11:15:00Z"
}
},
"end": {
"location": {
"business_id": "LOC_001",
"name": "Conundra (Oosterzele)",
"type": "CUSTOMER",
"geo_point": {
"latitude": 50.9514048,
"longitude": 3.8067878
},
"address": {
"address_line": "Voordries 41b",
"city": "Oosterzele",
"zip_code": "9860",
"country_code": "BE"
}
},
"timings": {
"arrival_at": "2024-12-01T10:30:00Z",
"service_time": "PT45M",
"departure_at": "2024-12-01T11:15:00Z"
}
},
"breaks": [
{
"at": "2024-12-01T11:15:30Z",
"duration": "PT45M"
}
],
"trips": [
{
"stops": [
{
"location": {
"business_id": "LOC_001",
"name": "Conundra (Oosterzele)",
"type": "CUSTOMER",
"geo_point": {
"latitude": 50.9514048,
"longitude": 3.8067878
},
"address": {
"address_line": "Voordries 41b",
"city": "Oosterzele",
"zip_code": "9860",
"country_code": "BE"
}
},
"deliveries": [
{
"order": {
"business_id": "D_445",
"description": "special delivery",
"capacities": [
{
"type": "weight",
"value": 20.02
}
],
"custom_data": {
"shop_manager": "John Smith"
}
},
"timings": {
"arrival_at": "2024-12-01T10:30:00Z",
"earliest_arrival_at": "2024-12-01TT10:00:00Z",
"latest_arrival_at": "2024-12-01TT12:00:00Z",
"service_time": "PT15M",
"wait_time": "PT30M",
"departure_at": "2024-12-01TT11:15:00Z"
}
}
],
"pickups": [
{
"order": {
"business_id": "P_751",
"description": "special pickup",
"capacities": [
{
"type": "weight",
"value": 20.02
}
],
"custom_data": {
"shop_manager": "John Smith"
}
},
"timings": {
"arrival_at": "2024-12-01T10:30:00Z",
"earliest_arrival_at": "2024-12-01T10:00:00Z",
"latest_arrival_at": "2024-12-01T12:00:00Z",
"service_time": "PT15M",
"wait_time": "PT30M",
"departure_at": "2024-12-01T11:15:00Z"
}
}
],
"timings": {
"arrival_at": "2024-12-01T10:30:00Z",
"service_time": "PT15M",
"wait_time": "PT30M",
"departure_at": "2024-12-01T11:15:00Z"
}
}
]
}
]
}
]
}release_metadata.planning_business_idrenamed torelease_metadata.planning_id. (The contents of this field are still the same)- The root level of the response is now
routesinstead oftrips. Theroutesin v1 contain 1 or more trips for the route. So the meaning of a trip in v0 is not the same as in v1. In v0 a trip contains all the stops to be executed by theresource_combination(new term, see further). In v1 the route is actually what contains everything to be executed by theresource_combination. So you can see thetripin v0 to be equivalent toroutein v1. Aroutein v1 is then further subdivided in trips, which are independently executable parts. ( see: example) - The
proposed_executionon a trip in v0 has been moved and renamed toresource_combinationon a route in v1. In v0 a trip was fully executed by theproposed_execution. In v1 a route is fully executed by theresource_combination, so all trips in that route are planned to be executed by thatresource_combination. It has been renamed to align more with the term from Resource Management. Other changes to this block are:executorshas been renamed toemployeeand has changed from an array to an object, since only 1 employee can be assigned to a resource combination.executors.idhas been renamed toemployee.business_idtransport_resource.idhas been renamed totransport_resource.business_idcustom_dataused to be on the root level of theproposed_executionobject in v0, but is now available onemployeeand on everytransport_resourcein v1, since specific custom data is possible.
- The
geo_pointwas part of theaddressin v0, but has been moved up 1 level to thelocationobject. This is to avoid confusion about consistency of ageo_pointand an address. An address might differ from the actualgeo_pointdue to bad resolving or manual input errors. Thegeo_pointis what is used in the planning process. This change applies to alladdressobjects in v1 (route.start,route.end,trips.stops) breakswhere on the roottripsobject in v0 and can now be found on therouteobject.