Concept Systems All articles
Integration Strategy

Manifest and Mismatch: The Integration Contract Behind UK Carrier APIs

Concept Systems
Manifest and Mismatch: The Integration Contract Behind UK Carrier APIs

Photo: parcel sorting warehouse conveyor labels scanner UK logistics, via img.freepik.com

Parcel carrier integration is usually commissioned as a feature: a button that produces a label. That framing survives until the first peak trading period, when volume exposes the difference between printing a label and maintaining a truthful account of what happened to the parcel. A UK carrier API is not a printing service. It is a distributed state machine with financial, legal and customer-service consequences, and it belongs in the integration estate alongside finance, CRM and warehouse systems.

The practical question is not whether a shipment can be created. It is whether the organisation can reconcile every parcel it has promised against every event the carrier reports, including the ones that arrive late, out of order or not at all. That is an integration discipline, not a shipping button.

The label is a claim, not a completion

Label creation returns identifiers, a tracking reference and an artifact. It does not mean the carrier has the parcel. Between label creation and the first physical scan there is a gap in which duplicate labels, voided labels, reprints and mis-scans can accumulate. The integration must therefore treat label creation as an idempotent operation with a durable record of what was requested, what was returned and what was later voided.

Retries are where this becomes visible. If a timeout occurs after the carrier has accepted a request, a naive retry can produce a second label for the same order. The organisation then has two tracking references, one parcel and an reconciliation problem that surfaces as a customer complaint. The integration layer needs a request key, a stored response and a voiding path. Ownership matters here: the warehouse may print labels, but the integration service should own the identity of the shipment.

Manifesting is where the contract becomes commercial

The manifest is the handover boundary. It tells the carrier what is being presented for collection, and it often determines what the organisation will be billed for and what the carrier will accept into its network. A label without a manifest entry is not a parcel in transit; it is an intention. In peak periods, manifest cut-off times and collection failures turn that distinction into operational risk.

Good carrier integrations reconcile labels to manifests before collection, not after. They expose unmatched labels, unmanifested shipments and manifest rejections as first-class exceptions. They also preserve the carrier's manifest identifier, because disputes about what was handed over are settled by evidence, not by the order management system's opinion. The manifest is not a batch job at the edge of the integration; it is a contractual event that deserves its own record.

Tracking events are asynchronous and adversarial

Carrier webhooks are convenient but not dependable in the way that internal APIs are dependable. Events can be delayed, duplicated, reordered or missed. A 'delivered' event may arrive before an 'out for delivery' event. An exception code may appear without a subsequent resolution. A webhook endpoint may be unavailable during a carrier's retry window.

The integration should therefore model events rather than overwrite a status field. Each carrier event should be stored immutably with its raw code, carrier timestamp, receipt timestamp and a deduplication key. A mapping layer then translates carrier-specific codes into a canonical lifecycle: label created, manifested, collected, in network, out for delivery, delivered, exception, returned. The canonical state is derived from the event history, not from the last message received.

Polling remains a necessary fallback. It is not elegant, but it provides a recovery path when webhooks fail and a reconciliation path when events are missing. The design question is how the two sources are merged without creating duplicate state transitions. That requires an event model with clear precedence rules and an audit trail.

Exception codes are a schema you do not control

UK carriers such as Royal Mail, Evri, DPD and Parcelforce each publish their own exception vocabularies. Some codes are stable; others change with service updates or vary by contract. A failed delivery may be recorded as a card left, a safe place, a refusal, an inaccessible address or a depot return. These distinctions matter to customer service, to fraud controls and to returns handling.

The integration should not scatter carrier codes through application logic. It should maintain a mapping table with an explicit unknown-code path. Unknown codes are not edge cases to be logged and ignored; they are a signal that the carrier has changed its schema or that the organisation is receiving a service it did not model. The mapping should be owned, versioned and reviewed against carrier documentation. Customer communications should be driven by the canonical event, not by a string comparison against a carrier's label.

Returns close the loop, or they do not

Returns are often integrated separately, as if they were a different business. In practice they invert the same event model. A returns label is created, a parcel is dropped off or collected, a receipt scan occurs, the parcel moves back through the carrier network and a warehouse receives it. The original shipment reference should connect the return to the outbound parcel, the customer and the financial record.

Without that link, returns become a reconciliation exercise in spreadsheets. The organisation knows a parcel came back but not which order it belonged to, whether it was authorised, or whether the customer has already been refunded. The integration contract should include the return reason, the original tracking reference and the receipt event. Peak returns in January are not a separate system; they are the same system running in reverse.

Ownership must be named at the seam

Carrier integration sits between logistics operations, customer service, finance and technology. That is exactly where ownership tends to disappear. Someone must own the carrier credentials, the webhook endpoint, the event mapping, the manifest reconciliation and the daily exception report. Someone must be accountable for the service level between the organisation and the carrier, and for the internal service level between the integration platform and the teams that depend on it.

A daily reconciliation is the simplest test of whether ownership is real. It should compare labels created, labels manifested, first carrier scans, delivered events, exceptions and returns. Variances should be assigned, not merely reported. If the report cannot be produced, the integration is not complete, however well the shipping button works.

A test plan that survives peak

Sandbox environments rarely reproduce the conditions that matter: delayed webhooks, duplicate events, unknown exception codes, manifest cut-offs and returns at volume. The test plan should include recorded payloads from production, contract tests for each carrier's event schema, replay of out-of-order events and failure injection at the webhook endpoint. It should test voiding and reprinting, not just creation. It should test the 2026 peak load profile, not last year's average.

Carrier APIs change. A regression suite that runs against sample payloads is more valuable than a manual checklist completed at go-live. The integration should also record which carrier API version is in use and what changed, because the first sign of a schema change is often an unknown code in the exception report.

The loading bay may be physical, but the interface is not. It is an event contract, a reconciliation ledger and an ownership boundary. Treating it as anything less leaves the organisation able to print labels but unable to account for parcels.

All Articles

Related Articles

Service Levels for the Space Between Systems: Making Backpressure Explicit

Service Levels for the Space Between Systems: Making Backpressure Explicit

Trust With an Expiry Date: Governing TLS Renewal Across the Integration Estate

Trust With an Expiry Date: Governing TLS Renewal Across the Integration Estate

Borrowed Authority: Governing the External Lists Your Integrations Treat as Truth

Borrowed Authority: Governing the External Lists Your Integrations Treat as Truth