This method allows a carrier to create a warehouse announcement from one or more time windows, optionally adding purchase order numbers on top of those already attached to the time windows.
It supports two related capabilities in a single request:
Consolidating multiple time windows into one announcement (for example, combining several deliveries to the same warehouse into a single booking).
Adding additional purchase order numbers to the announcement beyond any purchase orders already carried by the time windows.
Authorization and access
Authorization process is described here. Each API request must also consist of unique Api-key obtained during application registration together with client_id and client_secret.
Url parameters and connection settings
- URL: https://api.platform.trans.eu
- Endpoint: /ext/dock-scheduler-api/v2/announcement
- Http Method: POST
Headers
- Accept: application/json
- Content-type: application/json
- Authorization: Bearer {access_token}
- Api-key: {unique_app_api-key}
Where the time window id comes from
Each announcement is built from one or more time window ids. To obtain them, and to confirm which time slots are actually bookable within a time window, use the flow described in Generate a warehouse announcement as a carrier — specifically:
- Filter available time windows to find the relevant timeWindowId (and its validity dates).
- Retrieve the available slots for that window using Get time slots with time window id
(/ext/dock-scheduler-api/v2/time-window/{id}/possible).
Choosing the time slot
Because an announcement is created from a time window, the chosen time slot must be specified. There are two equivalent ways to do this:
Option A — start time and end time:
"date_from": "2026-05-22T12:20:00Z",
"date_to": "2026-05-22T12:30:00Z"Option B — start time and operation duration:
"date_from": "2026-05-22T12:20:00Z",
"operation_time": "PT10M"operation_time uses ISO 8601 duration format (for example PT10M = 10 minutes, PT30M = 30 minutes).
General notes
- Announcements from a time window can only be created as a carrier, not as a shipper.
- As a carrier, providing carrier details (id, legal_name, type, etc.) is not mandatory — the carrier assigned to the booking is treated as the booking party in this scenario.
- operation_type cannot be null. Allowed values:
loading,unloading(lowercase).
Consolidating multiple time windows
You can combine several time windows into a single announcement by supplying more than one entry in the time_windows array:
"time_windows": [
{
"id": 120205
},
{
"id": 120206
}
]All purchase orders attached to the consolidated time windows become part of the resulting booking as its main purchase orders. See Purchase orders: main vs. additional below for how this interacts with additional_purchase_orders.
Validation rules for consolidation
When two or more time windows are consolidated, they must satisfy all of the following conditions. Failing any one of them returns 400 Bad Request (see Error handling for the exact response bodies).
- Ramp intersection — the time windows must share at least one common ramp. For example, if window X allows ramps 1, 2, 3 and window Y allows ramps 3, 4, they intersect on ramp 3. If window Y allowed only ramp 4, there would be no intersection. A time window whose ramp is set to any intersects with any other time window regardless of its assigned ramps.
- Same warehouse — all consolidated time windows must belong to the same warehouse.
- Operation time intersection — the operation_time in the request must be compatible with the maximum operation time shared across the time windows. If the request specifies
PT10Mbut at least one time window is configured for a 30-minute operation, the request is rejected. - Date/time intersection — the time windows must overlap in time. Windows of 13:00–15:00 and 15:30–17:00 cannot be consolidated. However, a time window with an open range (a full day, or multiple days) intersects with a narrower window whose slot falls inside that range.
- Matching operation type — all consolidated time windows must have the same operation type. A window configured for
loadingcannot be consolidated with one configured forunloading.
Ramp id when consolidating
For a carrier, providing a ramp.id is not mandatory. If you do include a ramp.id while consolidating, it must be a ramp common to all time windows in the announcement. When ramp is left unspecified (or the windows use “any”), the platform resolves an eligible shared ramp automatically.
Purchase orders: main vs. additional
There is an important distinction between purchase orders that arrive via a time window and those supplied in additional_purchase_orders:
- Purchase orders already attached to a consolidated time window are added to the booking as main purchase orders — they are consumed as part of consolidating that window
- additional_purchase_orders are for purchase orders that are not represented by any time window in the request.
Worked example (consolidation + additional PO): An announcement is built from two time windows — window A carries PO101, window B carries PO202 — and the request also supplies PO303 in additional_purchase_orders. All three purchase orders become part of the booking, but only PO303 is an additional purchase order; PO101 and PO202 are main purchase orders carried in by their windows.
Additional POs cannot substitute for a time window. Supplying a purchase order in additional_purchase_orders does not consolidate the time window that owns it. If window 123 carries PO11 and window 124 carries PO22, and the request includes only time window id 123 while passing PO22 as an additional PO, then only window 123 is consumed; PO22 is attached as an additional purchase order and window 124 is not consolidated. To consolidate window 124, its id must be present in the time_windows array.
JSON request body example
{
"additional_purchase_orders": [
{
"number": "PO-API-5050"
}
],
"carrier": {
"contact_phone": {
"number": "555123456",
"prefix": "+48"
},
"email": "dispatch@fastfreight.pl",
"id": 10542,
"legal_name": "Fast Freight Logistics Sp. z o.o.",
"subcontractor": {
"contact_phone": {
"number": "987654321",
"prefix": "+48"
},
"email": "contact@subcarrier.pl",
"legal_name": "SubCarrier Transport LLC",
"telephone": "+48987654321"
},
"telephone": "+48555123456",
"type": "REGISTERED"
},
"date_from": "2026-05-12T12:52:11.778Z",
"driver": {
"account_id": 8821,
"contact_phone": { "number": "600111222", "prefix": "+48" },
"country": "47_poland",
"first_document": {
"issuing_authority": "Prezydent Miasta Wrocławia",
"number": "ABC123456",
"type": "IDENTITY_CARD"
},
"full_name": "Jan Kowalski",
"languages": "1_pl",
"phone_number": "+48600111222",
"second_document": {
"issuing_authority": "Wydział Komunikacji",
"number": "PRAWO-123",
"type": "IDENTITY_CARD"
}
},
"external_reference_number": "EXT-REF-2026-001",
"operation_time": "PT30M",
"operation_type": "loading",
"ramp": {
"id": 15
},
"time_windows": [
{
"id": 30401
}
],
"vehicle": {
"combustion_norm": "8_euro_6",
"trailer_plate_number": "DW 9988A",
"truck_plate_number": "DW 1122B",
"vehicle_manufacturer": "459_scania"
}
}Note on ramp.id in this example: the value 15 is illustrative. As explained under Consolidating multiple time windows, a carrier is not required to supply a ramp; if one is supplied while consolidating, it must be common to every time window in the announcement.
Minimum required payload as a carrier
{
"date_from": "2026-05-22T12:20:00Z",
"date_to": "2026-05-22T12:30:00Z",
"operation_type": "loading",
"time_windows": [
{
"id": 114234
}
]
}Response
A successful call returns the created announcement object with status: "INITIAL". An abridged example:
{
"id": 121631,
"status": "INITIAL",
"stage": null,
"vehicle": null,
"ramp": {
"warehouse": {
"id": 23706,
"name": "10 minute warehouse",
"address": {
"coordinates": { "latitude": 50.40502, "longitude": 16.51226 },
"street": "Zdrojowa",
"number": "5",
"locality": "Polanica-Zdrój",
"postal_code": "57-320",
"country": "pl",
"id": 23844
},
"time_zone": { "id": "Europe/Warsaw", "offset": "+02:00", "offset_minutes": 120 }
},
"id": 28744,
"name": "Rampa 1",
"ramp_type": "RAMP",
"operation_type": "any"
},
"carrier": {
"id": 1079413,
"type": "REGISTERED",
"legal_name": "(P3DT) TFC Carrier Test"
},
"shipper": {
"id": 1079411,
"legal_name": "(P3DT) CargoON Test"
},
"date_from": "2026-05-22T12:20:00",
"date_to": "2026-05-22T12:30:00",
"operation_time": "PT10M",
"operation_type": "loading",
"reference_number": "DS/F9DFD5D/6",
"forward_permissions": {
"allow": true,
"disallow": null,
"require_carrier_data": true
},
"time_windows": [
[]
],
"additional_purchase_orders": [
[]
]
}In the response, time_windows and additional_purchase_orders are returned as arrays of empty arrays — for example [[]], or [[], []] when two time windows were consolidated, and [[], [], []] for three.
Error handling
Consolidation failures return 400 Bad Request with a DomainValidationException body. The detail field identifies which rule was violated.
No ramp intersection between time windows:
{
"detail": "Time windows must have ramps intersection",
"error_code": "C6718B0731F24C4A888B0B3F43A317ED",
"status": 400,
"timestamp": "2026-07-20T09:30:17.481346964",
"title": "Bad Request",
"type": "DomainValidationException",
"service_code": 5313
}Time windows belong to different warehouses:
{
"detail": "Time windows must have the same warehouse id. Time windows with different warehouse [120228]",
"error_code": "786C04D463AF4F288EF250385C131211",
"status": 400,
"timestamp": "2026-07-20T09:48:11.802588068",
"title": "Bad Request",
"type": "DomainValidationException",
"service_code": 5313
}Requested operation time incompatible with the time windows’ intersection:
{
"detail": "Carrier cannot get possible slot with operation time different from time windows intersection max operation time",
"error_code": "176687413C80466DB298C74F98071B40",
"status": 400,
"timestamp": "2026-07-20T09:47:11.474046216",
"title": "Bad Request",
"type": "DomainValidationException",
"service_code": 5313
}No date/time intersection between time windows:
{
"detail": "Time windows must have date time intersection",
"error_code": "EE645A14ED9A49AA8AD6780A793645E5",
"status": 400,
"timestamp": "2026-07-20T09:53:14.419942363",
"title": "Bad Request",
"type": "DomainValidationException",
"service_code": 5313
}Time windows have different operation types:
{
"detail": "Time windows [120206] have different operation type",
"error_code": "D5219A90A97B4E939198F692366908C8",
"status": 400,
"timestamp": "2026-07-20T10:13:21.082019539",
"title": "Bad Request",
"type": "DomainValidationException",
"service_code": 5313
}