Creating a Shipment registers it in your account so Perform.AI can track it, notify recipients, and surface it across the platform. This guide covers the workflow and the rules that trip integrators up; every field is specified in the API reference and the field reference.
Prerequisites
- A Bearer token.
- To enable tracking: a carrier reference configured under Settings > Carriers. Check what’s configured with the Carrier Configurations API.
The minimum Shipment
Only shipment_id is required:
A Shipment without a tracking number and carrier is an Open Shipment — a standalone record you can enrich later, or hand to the Booking API to book with a carrier (which assigns the tracking number for you).
shipment_id must be unique across your account and cannot be changed after creation. Use a stable identifier from your own system, such as your OMS shipment ID.
Enable tracking
Add tracking_number and carrier_reference so Perform.AI can retrieve events from the carrier:
Rules that matter here:
carrier_reference must be configured in Settings > Carriers — an unconfigured value rejects the whole request (4030: “carrier_reference specified in request has not been created.”).
tracking_number needs at least 6 characters including one digit; allowed characters are A–Z a–z 0–9 _ - . /, no spaces. It is stored uppercase.
- Once the Shipment has track events,
tracking_number and carrier_reference can no longer be changed — get them right at creation.
Recommended enrichment
These fields aren’t required but power search, notifications, and analytics:
Keep address lines short even though the API accepts up to 150 characters — carriers commonly enforce ~35 characters per line at booking, and long lines fail there, not here.
Read the response
Success returns the identifiers Perform.AI assigned, flat under data:
Store shipment_uuid — it identifies the Shipment in every other endpoint.
HTTP 299 means the Shipment was created but part of the request was skipped (an unconfigured tracking page, events without a carrier). Inspect warnings and fix with an update — don’t resend the create, that attempts a duplicate. HTTP 400 (4030) means nothing was created; fix the listed fields and resend. See responses and errors.
Common validation failures
Next steps