Connector SDK
Anyone can add a channel. Nobody has to touch the platform.
A connector is a declaration, not a deployment. You describe the channel, the settings it needs, the secrets it holds and how its payload maps onto the canonical order, shipment and milestone model. Digital 5PL handles validation, retries, tracing, audit and replay.
1. Declare a manifest
The manifest drives the whole onboarding form, the secret vault entries and the mapping editor. Ship a new version and existing connections keep running on the version they were configured against.
{
"key": "acme-wms",
"name": "Acme WMS",
"version": "1.0.0",
"channel": "api",
"directions": ["inbound", "outbound"],
"messageTypes": ["order", "shipment_status", "pod"],
"config": [
{ "name": "baseUrl", "label": "Base URL", "type": "url", "required": true },
{ "name": "warehouse", "label": "Warehouse code", "type": "string" }
],
"secrets": [
{ "name": "API_TOKEN", "label": "API token", "hint": "Acme > Settings > Integrations" }
],
"fieldMap": {
"order.order_number": "$.orderRef",
"order.origin": "$.ship_from.city",
"order.destination": "$.ship_to.city",
"order.lines[].sku": "$.items[].sku",
"order.lines[].quantity": "$.items[].qty"
}
}2. Send inbound payloads
Every connection gets its own ingest URL. Sign the raw body with the connection secret; replays of a signature already seen are rejected. The message is traced stage by stage — received, parsed, mapped, validated, applied — with the raw payload kept for audit.
POST /api/public/ingest/{connection-slug}
X-D5PL-Signature: sha256=<hex hmac of the raw body>
Content-Type: application/json
{ "orderRef": "AC-10231", "ship_from": { "city": "Rotterdam" } }3. Subscribe to domain events
Outbound is a subscription, not a bespoke integration. Pick the event types you care about and receive them signed, in order, with retry and backoff on failure.
POST https://your-endpoint.example.com/hooks
X-D5PL-Event: shipment.departed
X-D5PL-Signature: sha256=<hex hmac of the raw body>
{
"type": "shipment.departed",
"entity_type": "shipment",
"entity_id": "8f2c...",
"payload": { "reference": "SHP-10422", "mode": "ocean", "etd": "2026-09-02T06:00:00Z" },
"occurred_at": "2026-09-02T06:03:11Z"
}Event catalog
Every state change in the platform is one of these typed events.
Demand
order.createdA new order entered the platform, by hand or from a partner channel.order.updatedAn existing order changed status, window or content.Execution
shipment.plannedOrders were consolidated into a shipment with a route and dates.shipment.updatedShipment status, dates or cost changed.milestone.recordedA physical event was recorded against a shipment.Procurement
tender.offeredA shipment was offered to a carrier with a response deadline.tender.awardedA carrier accepted and the load was awarded.tender.expiredA tender passed its deadline without a response.Settlement
invoice.receivedA carrier invoice was captured against a shipment.invoice.mismatchedThe three-way match failed outside tolerance.Integration
message.receivedAn inbound message arrived on any channel.message.failedA message failed parsing, mapping or validation.document.receivedA document was stored and linked to a shipment.Governance
exception.raisedThe exception desk opened a new item.exception.resolvedAn exception was closed with a resolution.decision.madeThe rule kernel took an automatic action.