Download OpenAPI specification:
Logistics operations API for the 4klyft platform.
This API provides comprehensive endpoints for managing:
All API endpoints (except /api/docs and /api/v1/iam/auth/*) require JWT Bearer token authentication.
Include the token in the Authorization header:
Authorization: Bearer <your-jwt-token>
API requests are rate-limited to ensure fair usage. Standard limits are:
Represents a geocoding result.
Geocoding converts addresses to coordinates (forward geocoding) or coordinates to addresses (reverse geocoding).
Returns structured address suggestions for the supplied query, biased toward an optional ISO country code.
| q required | string >= 2 characters Example: q=Keizersgracht 123 Amsterdam Partial address query (street, postal code, or city) |
| country | string = 2 characters Example: country=NL ISO 3166-1 alpha-2 country code to bias the results |
| limit | integer [ 1 .. 10 ] Example: limit=5 Maximum suggestions to return (1–10, default 5) |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "",
- "formatted": "",
- "street": "string",
- "streetLine2": "string",
- "city": "string",
- "province": "string",
- "postalCode": "string",
- "countryCode": "string",
- "coordinates": {
- "latitude": 0,
- "longitude": 0
}, - "provider": "",
- "placeId": "string"
}
]
}Convert an address string to geographic coordinates (forward geocoding).
Address to geocode
| address required | string Full address to geocode |
{- "address": "Keizersgracht 123, 1015 CJ Amsterdam, Netherlands"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "address": "Keizersgracht 123, 1015 CJ Amsterdam, Netherlands",
- "coordinates": {
- "latitude": 52.3676,
- "longitude": 4.9041
}, - "confidence": 0.95
}Convert geographic coordinates to an address (reverse geocoding).
Coordinates to reverse geocode
| latitude required | number <float> [ -90 .. 90 ] Latitude coordinate |
| longitude required | number <float> [ -180 .. 180 ] Longitude coordinate |
{- "latitude": 52.3676,
- "longitude": 4.9041
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "address": "Keizersgracht 123, 1015 CJ Amsterdam, Netherlands",
- "coordinates": {
- "latitude": 52.3676,
- "longitude": 4.9041
}, - "confidence": 0.95
}Forward-geocodes the supplied address and returns either valid:true with a normalised coordinate-bearing match, or valid:false with alternative suggestions.
The new AddressValidation resource
| street | string or null <= 255 characters |
| streetLine2 | string or null <= 255 characters |
| city | string or null <= 100 characters |
| province | string or null <= 100 characters |
| postalCode | string or null <= 20 characters |
| countryCode | string or null = 2 characters |
{- "street": "string",
- "streetLine2": "string",
- "city": "string",
- "province": "string",
- "postalCode": "string",
- "countryCode": "st"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "valid": false,
- "confidence": 0,
- "normalized": {
- "id": "",
- "formatted": "",
- "street": "string",
- "streetLine2": "string",
- "city": "string",
- "province": "string",
- "postalCode": "string",
- "countryCode": "string",
- "coordinates": {
- "latitude": 0,
- "longitude": 0
}, - "provider": "",
- "placeId": "string"
}, - "suggestions": [
- {
- "id": "",
- "formatted": "",
- "street": "string",
- "streetLine2": "string",
- "city": "string",
- "province": "string",
- "postalCode": "string",
- "countryCode": "string",
- "coordinates": {
- "latitude": 0,
- "longitude": 0
}, - "provider": "",
- "placeId": "string"
}
]
}A country the platform is available in.
Public reference data that powers the unauthenticated signup country selector. Backed by active country zones in the Addressing module — the set is controlled by activating/deactivating country zones.
The resource deliberately declares no #[ApiProperty(identifier: true)] so
API Platform does not synthesise an item-level Get operation alongside the
collection — countries are a flat reference list, not an addressable entity.
Public, unauthenticated list of the countries the platform is available in (active country zones). Used by the signup country selector. Each item exposes the ISO 3166-1 alpha-2 code and the country name.
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "code": "string",
- "name": "string"
}
]
}Represents a physical location in the system.
Locations are used to define delivery addresses, pickup points, warehouses, and other physical points of interest.
Retrieve a paginated list of locations with optional filters.
| type | string Enum: "warehouse" "customer" "pickup_point" "hub" "other" Example: type=warehouse Filter by location type |
| search | string Example: search=Amsterdam Search by name or address |
| page | integer >= 1 Default: 1 Example: page=1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 30 Example: itemsPerPage=30 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Amsterdam Warehouse",
- "address": "Keizersgracht 123, 1015 CJ Amsterdam, Netherlands",
- "coordinates": {
- "latitude": 52.3676,
- "longitude": 4.9041
}, - "type": "warehouse",
- "createdAt": "2024-06-14T10:30:00+00:00",
- "updatedAt": "2024-06-14T14:45:00+00:00"
}
]
}Create a new location. Coordinates can be provided directly or geocoded from the address.
Location creation data
| name required | string [ 2 .. 255 ] characters Location name |
| address required | string Full address of the location |
| type required | string Enum: "warehouse" "customer" "pickup_point" "hub" "other" Type of location |
| latitude | number or null <float> [ -90 .. 90 ] Latitude coordinate |
| longitude | number or null <float> [ -180 .. 180 ] Longitude coordinate |
{- "name": "Amsterdam Warehouse",
- "address": "Keizersgracht 123, 1015 CJ Amsterdam, Netherlands",
- "type": "warehouse",
- "latitude": 52.3676,
- "longitude": 4.9041
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Amsterdam Warehouse",
- "address": "Keizersgracht 123, 1015 CJ Amsterdam, Netherlands",
- "coordinates": {
- "latitude": 52.3676,
- "longitude": 4.9041
}, - "type": "warehouse",
- "createdAt": "2024-06-14T10:30:00+00:00",
- "updatedAt": "2024-06-14T14:45:00+00:00"
}Retrieve a single location by its UUID.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Location UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Amsterdam Warehouse",
- "address": "Keizersgracht 123, 1015 CJ Amsterdam, Netherlands",
- "coordinates": {
- "latitude": 52.3676,
- "longitude": 4.9041
}, - "type": "warehouse",
- "createdAt": "2024-06-14T10:30:00+00:00",
- "updatedAt": "2024-06-14T14:45:00+00:00"
}Update location details. Provide only the fields you want to change.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Location UUID |
Location update data (partial update supported)
| name | string [ 2 .. 255 ] characters Location name |
| address | string Full address of the location |
| type | string Enum: "warehouse" "customer" "pickup_point" "hub" "other" Type of location |
| latitude | number or null <float> Latitude coordinate |
| longitude | number or null <float> Longitude coordinate |
{- "name": "string",
- "address": "string",
- "type": "warehouse",
- "latitude": 0.1,
- "longitude": 0.1
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Amsterdam Warehouse",
- "address": "Keizersgracht 123, 1015 CJ Amsterdam, Netherlands",
- "coordinates": {
- "latitude": 52.3676,
- "longitude": 4.9041
}, - "type": "warehouse",
- "createdAt": "2024-06-14T10:30:00+00:00",
- "updatedAt": "2024-06-14T14:45:00+00:00"
}Retrieve a paginated list of zones enabled for the current tenant.
| zoneType | string Filter by zone type |
| enabled | boolean Filter by enabled status |
| search | string Search by zone name, code, or custom label |
| page | integer >= 1 Default: 1 Page number |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "zoneId": "string",
- "zoneCode": "string",
- "zoneName": "string",
- "zoneType": "string",
- "customLabel": "string",
- "enabled": true,
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "createdAt": "string",
- "updatedAt": "string"
}
]
}Enable a global zone for the current tenant.
The new TenantZone resource
| zoneId required | string Default: "" |
| customLabel | string or null |
{- "zoneId": "",
- "customLabel": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "zoneId": "string",
- "zoneCode": "string",
- "zoneName": "string",
- "zoneType": "string",
- "customLabel": "string",
- "enabled": true,
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "createdAt": "string",
- "updatedAt": "string"
}Retrieve a single tenant zone by its ID.
| id required | string <ulid> Tenant zone ID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "zoneId": "string",
- "zoneCode": "string",
- "zoneName": "string",
- "zoneType": "string",
- "customLabel": "string",
- "enabled": true,
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "createdAt": "string",
- "updatedAt": "string"
}Update the custom label or metadata of a tenant zone.
| id required | string <ulid> Tenant zone ID |
The updated TenantZone resource
| customLabel | string or null |
object or null |
{- "customLabel": "string",
- "metadata": {
- "property1": "string",
- "property2": "string"
}
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "zoneId": "string",
- "zoneCode": "string",
- "zoneName": "string",
- "zoneType": "string",
- "customLabel": "string",
- "enabled": true,
- "metadata": {
- "property1": "string",
- "property2": "string"
}, - "createdAt": "string",
- "updatedAt": "string"
}Retrieve a paginated list of zones with optional filters.
| type | string Enum: "continent" "country" "state" "city" "postal_group" "district" "custom" Filter by zone type |
| parentId | string Filter by parent zone ID |
| status | string Enum: "active" "inactive" Filter by status |
| search | string Search by name or code |
| page | integer >= 1 Default: 1 Page number |
| itemsPerPage | integer [ 1 .. 100 ] Default: 30 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "code": "string",
- "name": "string",
- "parentId": "string",
- "parentName": "string",
- "type": "string",
- "members": [
- "string"
], - "geometry": "string",
- "status": "string",
- "description": "string",
- "sortOrder": 0,
- "createdAt": "string",
- "updatedAt": "string"
}
]
}Create a new geographic zone.
The new Zone resource
| code required | string <= 64 characters |
| name required | string <= 255 characters |
| type required | string Enum: "continent" "country" "state" "city" "postal_group" "district" "custom" |
| parentId | string or null |
| members | Array of strings |
| geometry | string or null |
| description | string or null |
| sortOrder | integer Default: 0 |
{- "code": "string",
- "name": "string",
- "type": "continent",
- "parentId": "string",
- "members": [
- "string"
], - "geometry": "string",
- "description": "string",
- "sortOrder": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "code": "string",
- "name": "string",
- "parentId": "string",
- "parentName": "string",
- "type": "string",
- "members": [
- "string"
], - "geometry": "string",
- "status": "string",
- "description": "string",
- "sortOrder": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Retrieve a single zone by its ID.
| id required | string Zone identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "code": "string",
- "name": "string",
- "parentId": "string",
- "parentName": "string",
- "type": "string",
- "members": [
- "string"
], - "geometry": "string",
- "status": "string",
- "description": "string",
- "sortOrder": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Update zone details. Code is immutable.
| id required | string Zone identifier |
The updated Zone resource
| name | string <= 255 characters |
| type | string Enum: "continent" "country" "state" "city" "postal_group" "district" "custom" |
| parentId | string or null |
| members | Array of strings |
| geometry | string or null |
| description | string or null |
| sortOrder | integer Default: 0 |
{- "name": "string",
- "type": "continent",
- "parentId": "string",
- "members": [
- "string"
], - "geometry": "string",
- "description": "string",
- "sortOrder": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "code": "string",
- "name": "string",
- "parentId": "string",
- "parentName": "string",
- "type": "string",
- "members": [
- "string"
], - "geometry": "string",
- "status": "string",
- "description": "string",
- "sortOrder": 0,
- "createdAt": "string",
- "updatedAt": "string"
}