The interfaces are open-ended.
trade (classification and landed cost providers, chapter 13) and notifications (recipient messaging) follow the same pattern, and future interfaces register in the same catalog.
Every interface is a subset of this spec. A provider that implements an interface’s endpoints, and publishes /.well-known/shipping-configuration listing it in interfaces, can be connected federated: no adapter code, the same discovery, OAuth and dynamic registration as federated carriers (chapter 09 §6). Providers with proprietary APIs are reached through implementer-maintained adapters behind the same objects.
1. Integration catalog
Theintegration object generalizes the carrier object (chapter 09 §1). Carriers are integrations whose interfaces include lsp, and GET /v1/carriers remains as the filtered view GET /v1/integrations?interface=lsp.
Endpoints:
GET /v1/integrations?interface=…&kind=…&country=…, GET /v1/integrations/{id}, and createIntegration (GraphQL Interface mutation) with { "federated": { "configuration": "https://…" } } to onboard a federated provider of any interface.
2. Apps and connections, generalized
app(chapter 09 §4) is the generic OAuth 2.1 + OIDC client wrapper for any integration.app.carrierbecomesapp.integration, andapp.interfaceslists the interfaces it may be used for. Dynamic client registration, secret rotation, platform visibility and the connect-session flow are unchanged.connection(chapter 09 §3) gainsintegrationandinterfaces. For carriers,carrierremains as an alias ofintegration. A connection with several interfaces (a carrier that also validates addresses) is one account at one provider, not two connections.- Defaults per interface.
account.settings.default_connectionsis{ "address_validation": "conn_addr1", "insurance": "conn_ins1" }. Any API that needs an interface and is not given a connection uses the default. - Connect sessions work for any integration:
POST /v1/connect_sessionswith{ "integration": "addrcheck" }.
3. Interface lsp: carriers and 3PLs
The lsp interface is the core of this spec. Connections to carriers, networks and fleets behave as described in chapters 02–07 and 09.
3PL connections. A connection whose integration has kind: "3pl", and whose interfaces.lsp descriptor has injection: true, makes the platform an injecting party to that 3PL (chapter 18):
- Purchasing a shipment with
carrier_configs: { "acme_3pl": { "service": "acme_3pl_ground" } }sends it to the 3PL as an injected shipment, withlabel_mode: "label_required"or"pre_labeled"per the connection config. The platform’s shipment mirrors the 3PL’sinjection.statusand tracking. POST /v1/asnsthrough the connection (Shipping-Connection: conn_3plheader) announces inbound freight to the 3PL’s facility.- The 3PL’s receiving outcomes, discrepancies and tracking return through webhooks or federated inbound events.
4. Interface address_validation
Platform API
validate_addresses: trueon rates, shipments and pickups calls this interface through the default connection, and stores the result inaddress.validation(chapter 01 §1).- Batches go through a job:
POST /v1/jobswithtype: "address_validation.batch"(chapter 27). - Privacy. Validation requests send only the address, plus contact data when a feature needs it. Results are retained for 30 days unless they are attached to a shipment.
5. Interface insurance
Parcel coverage from third-party insurers, alongside the carrier’s own declared value (the standardized insurance feature, chapter 01 §6.1). A shipment uses one or the other: buying a coverage removes a carrier insurance option from the purchase, with a warning in messages[].
Quotes
errors[], the same model as rates.
Coverages
statusispending,active,expired,cancelled, orclaimed.- The shipment records it in
purchase.coverage, and the certificate is appended toshipment.documents[]withtype: "insurance_certificate". - Coverage can be bought in the same call as the label:
purchase: { rate, coverage: { quote: "iq_…" } }.
Claims
statusissubmitted,under_review,information_requested,approved,denied,paid, orwithdrawn.resolutionholds{ amount, paid_at, reason }.- Evidence can cite data network records and attestations (chapter 23): signed scans, condition excursions, the consignee’s damage attestation. Insurers verify custody without asking anyone for screenshots.
6. Building a provider
To offer an interface to every implementer of the spec, a provider:- Implements that interface’s endpoints exactly as specified (the OpenAPI operations tagged with the interface).
- Publishes
/.well-known/shipping-configurationwith"interfaces": { "<name>": <descriptor> }. - Runs OAuth 2.1 + OIDC with dynamic client registration (chapter 00 §3.2).
- Passes the interface’s conformance suite (chapter 11 §4).
7. Events
integration.created, integration.updated, address_validation.completed, insurance_quote.created, coverage.created, coverage.activated, coverage.cancelled, coverage.expired, claim.submitted, claim.updated, claim.approved, claim.denied, claim.paid.