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:
Closed catalog of subscribable webhook events.
The catalog is derived from {@see NotificationTopic} and grouped as
module → aggregate → event so the UI can render a three-tier tree
picker. The endpoint is a singleton (no identifier) — clients always
GET the full tree.
Retrieve a paginated list of webhook delivery records with optional filters.
| endpointId | string <uuid> Example: endpointId=01912345-6789-7abc-def0-123456789abc Filter by webhook endpoint UUID |
| status | string Enum: "pending" "sending" "succeeded" "failed" "cancelled" Example: status=succeeded Filter by delivery status |
| eventType | string Example: eventType=shipment.delivered Filter by event type |
| dateFrom | string <date> Example: dateFrom=2024-06-01 Filter deliveries from this date (inclusive) |
| dateTo | string <date> Example: dateTo=2024-06-30 Filter deliveries up to this date (inclusive) |
| 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",
- "endpointId": "01912345-6789-7abc-def0-123456789abc",
- "eventType": "shipment.delivered",
- "status": "pending",
- "attemptCount": 1,
- "maxAttempts": 5,
- "lastResponseCode": 200,
- "lastResponseBody": "{\"status\": \"received\"}",
- "lastDurationMs": 150,
- "lastError": "Connection timeout",
- "nextRetryAt": "2024-06-15T14:35:00+00:00",
- "firstAttemptAt": "2024-06-15T14:30:00+00:00",
- "lastAttemptAt": "2024-06-15T14:30:00+00:00",
- "succeededAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-06-15T14:30:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}
]
}Retrieve a single webhook delivery by its UUID. Returns full details including attempt history.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Webhook delivery UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "endpointId": "01912345-6789-7abc-def0-123456789abc",
- "eventType": "shipment.delivered",
- "status": "pending",
- "attemptCount": 1,
- "maxAttempts": 5,
- "lastResponseCode": 200,
- "lastResponseBody": "{\"status\": \"received\"}",
- "lastDurationMs": 150,
- "lastError": "Connection timeout",
- "nextRetryAt": "2024-06-15T14:35:00+00:00",
- "firstAttemptAt": "2024-06-15T14:30:00+00:00",
- "lastAttemptAt": "2024-06-15T14:30:00+00:00",
- "succeededAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-06-15T14:30:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Manually retry a failed webhook delivery. The delivery will be queued for immediate retry.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Webhook delivery UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "endpointId": "01912345-6789-7abc-def0-123456789abc",
- "eventType": "shipment.delivered",
- "status": "pending",
- "attemptCount": 1,
- "maxAttempts": 5,
- "lastResponseCode": 200,
- "lastResponseBody": "{\"status\": \"received\"}",
- "lastDurationMs": 150,
- "lastError": "Connection timeout",
- "nextRetryAt": "2024-06-15T14:35:00+00:00",
- "firstAttemptAt": "2024-06-15T14:30:00+00:00",
- "lastAttemptAt": "2024-06-15T14:30:00+00:00",
- "succeededAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-06-15T14:30:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Retrieve a paginated list of webhook endpoints with optional filters.
| status | string Enum: "active" "paused" "failed" "disabled" Example: status=active Filter by endpoint status |
| 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",
- "description": "Order management system notifications",
- "status": "active",
- "events": [
- "shipping.shipment.delivered",
- "shipping.shipment.cancelled"
], - "headers": {
- "X-Custom-Header": "value"
}, - "secret": "whsec_abc123...",
- "failureCount": 0,
- "lastSuccessAt": "2024-06-15T14:30:00+00:00",
- "lastFailureAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}
]
}Create a new webhook endpoint subscription. The endpoint will be active immediately after creation.
Webhook endpoint configuration
| url required | string <uri> URL to receive webhook payloads |
| events required | Array of strings List of events to subscribe to. See GET /webhooks/events for the full catalog. |
| description | string or null <= 255 characters Human-readable description of the endpoint |
object or null Custom headers to include in webhook requests |
{- "events": [
- "shipping.shipment.delivered",
- "shipping.shipment.cancelled"
], - "description": "Order management system notifications",
- "headers": {
- "X-Custom-Header": "value"
}
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "description": "Order management system notifications",
- "status": "active",
- "events": [
- "shipping.shipment.delivered",
- "shipping.shipment.cancelled"
], - "headers": {
- "X-Custom-Header": "value"
}, - "secret": "whsec_abc123...",
- "failureCount": 0,
- "lastSuccessAt": "2024-06-15T14:30:00+00:00",
- "lastFailureAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Retrieve a single webhook endpoint by its UUID. Returns full details including event subscriptions.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Webhook endpoint UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "description": "Order management system notifications",
- "status": "active",
- "events": [
- "shipping.shipment.delivered",
- "shipping.shipment.cancelled"
], - "headers": {
- "X-Custom-Header": "value"
}, - "secret": "whsec_abc123...",
- "failureCount": 0,
- "lastSuccessAt": "2024-06-15T14:30:00+00:00",
- "lastFailureAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Update webhook endpoint configuration. Only provided fields will be updated.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Webhook endpoint UUID |
Webhook endpoint update data
| url | string <uri> URL to receive webhook payloads |
| events | Array of strings List of events to subscribe to |
| description | string or null Human-readable description |
object or null Custom headers to include |
{- "events": [
- "string"
], - "description": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "description": "Order management system notifications",
- "status": "active",
- "events": [
- "shipping.shipment.delivered",
- "shipping.shipment.cancelled"
], - "headers": {
- "X-Custom-Header": "value"
}, - "secret": "whsec_abc123...",
- "failureCount": 0,
- "lastSuccessAt": "2024-06-15T14:30:00+00:00",
- "lastFailureAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Temporarily pause webhook delivery to this endpoint. Events will be queued and delivered when resumed.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Webhook endpoint UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "description": "Order management system notifications",
- "status": "active",
- "events": [
- "shipping.shipment.delivered",
- "shipping.shipment.cancelled"
], - "headers": {
- "X-Custom-Header": "value"
}, - "secret": "whsec_abc123...",
- "failureCount": 0,
- "lastSuccessAt": "2024-06-15T14:30:00+00:00",
- "lastFailureAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Resume webhook delivery to a paused endpoint. Queued events will be delivered.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Webhook endpoint UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "description": "Order management system notifications",
- "status": "active",
- "events": [
- "shipping.shipment.delivered",
- "shipping.shipment.cancelled"
], - "headers": {
- "X-Custom-Header": "value"
}, - "secret": "whsec_abc123...",
- "failureCount": 0,
- "lastSuccessAt": "2024-06-15T14:30:00+00:00",
- "lastFailureAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Generate a new signing secret for the webhook endpoint. The old secret becomes invalid immediately.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Webhook endpoint UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "description": "Order management system notifications",
- "status": "active",
- "events": [
- "shipping.shipment.delivered",
- "shipping.shipment.cancelled"
], - "headers": {
- "X-Custom-Header": "value"
}, - "secret": "whsec_abc123...",
- "failureCount": 0,
- "lastSuccessAt": "2024-06-15T14:30:00+00:00",
- "lastFailureAt": "2024-06-15T14:30:00+00:00",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Send a test payload to the webhook endpoint to verify connectivity and configuration.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Webhook endpoint UUID |
The new WebhookEndpoint resource
| eventType | string or null <= 255 characters |
{- "eventType": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "success": true,
- "responseCode": 200,
- "responseTimeMs": 142,
- "responseBody": "{\"ok\":true}",
- "errorMessage": "HTTP 405"
}Returns every event a webhook endpoint may subscribe to, grouped by module and aggregate for tree-picker UIs.
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "groups": [
- {
- "module": "routing",
- "label": "Routing",
- "aggregates": [
- {
- "aggregate": "shipment",
- "label": "Shipment",
- "events": [
- {
- "value": "shipping.shipment.delivered",
- "label": "Delivered"
}
]
}
]
}
]
}The single generic inbound-webhook receiver. Every external platform (Shopify, WooCommerce, ShipBob, carriers, …) POSTs here, keyed by the Integration connection. The connection's providerKey + capabilities select the verifier and domain handler. PUBLIC — the sender carries no JWT; the HMAC signature IS the authentication.
Generic receiver for external platforms (Shopify, WooCommerce, ShipBob, carriers, …). Keyed by the Integration connection id; the HMAC signature is verified fail-closed.
| connectionId required | string Example: 01HQWXYZ1234567890ABCDEF Integration connection ULID |
{- "type": "/errors/validation-error",
- "title": "Validation Error",
- "status": 400,
- "detail": "The provided input is invalid",
- "violations": [
- {
- "propertyPath": "code",
- "message": "This value should not be blank."
}
], - "instance": "string"
}OAuth-connect entry point for the Integration module.
POST /api/integration/connections/oauth/init — start an OAuth flow; returns the authorization URL the browser must navigate to.
The matching GET /api/integration/connections/oauth/callback lives on a plain Symfony route (see OAuthConnectCallbackProvider) because an OAuth callback carries no path identifier.
List integration connections
| 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": "",
- "reference": "glacia:///integration/connections/01HZY...",
- "providerKey": "",
- "status": "",
- "grantedCapabilities": [
- "string"
], - "createdAt": ""
}
]
}Connect an external service
The new IntegrationConnection resource
| providerKey required | string Default: "" |
object |
{- "providerKey": "",
- "secrets": {
- "property1": "string",
- "property2": "string"
}
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "",
- "reference": "glacia:///integration/connections/01HZY...",
- "providerKey": "",
- "status": "",
- "grantedCapabilities": [
- "string"
], - "createdAt": ""
}Returns the authorization URL the browser must navigate to. The signed state is embedded in the URL.
The new IntegrationOAuthConnect resource
| providerKey | string Default: "" |
{- "providerKey": ""
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "oauth-connect",
- "authorizationUrl": ""
}Get a connection by id
| id required | string IntegrationConnection identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "",
- "reference": "glacia:///integration/connections/01HZY...",
- "providerKey": "",
- "status": "",
- "grantedCapabilities": [
- "string"
], - "createdAt": ""
}Grant a capability on a connection
| id required | string IntegrationConnection identifier |
The new IntegrationConnection resource
| capabilityKey required | string Default: "" |
{- "capabilityKey": ""
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "",
- "reference": "glacia:///integration/connections/01HZY...",
- "providerKey": "",
- "status": "",
- "grantedCapabilities": [
- "string"
], - "createdAt": ""
}Purge a connection and wipe its secrets
| id required | string IntegrationConnection identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "",
- "reference": "glacia:///integration/connections/01HZY...",
- "providerKey": "",
- "status": "",
- "grantedCapabilities": [
- "string"
], - "createdAt": ""
}Revoke a capability on a connection
| id required | string IntegrationConnection identifier |
The new IntegrationConnection resource
| capabilityKey required | string Default: "" |
{- "capabilityKey": ""
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "",
- "reference": "glacia:///integration/connections/01HZY...",
- "providerKey": "",
- "status": "",
- "grantedCapabilities": [
- "string"
], - "createdAt": ""
}A connectable external-service provider descriptor.
Drives the connect-form picker: clients read this catalog to learn which
providers exist, which surface capabilities each declares, whether the connect
flow is an OAuth redirect (oauth: true) or a credential form, and — for
credential-form providers — the fields to render.
Returns the provider catalog that drives the connect-form picker. Filter with ?capability=channel|carrier|custodian|storage.
{- "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",
- "providerType": "sendcloud",
- "label": "SendCloud",
- "capabilities": [
- "carrier"
], - "credentialFields": [
- {
- "key": "secret_key",
- "label": "API secret key",
- "type": "text",
- "secret": true,
- "required": true,
- "help": "string"
}
], - "oauth": false
}
]
}