Creating a manifest requires organizing your shipment data into the proper structure. The API uses a hierarchical approach where you first create the manifest, then add manifest lines containing individual shipment details.
Each component has specific required fields to ensure customs compliance and accurate documentation. Below we've outlined the essential data structure and required inputs.
Key input types
The manifest API uses several input types to organize shipment data:
ManifestInput: High-level shipment information including airports, waybill type, and flight details
ManifestLineInput: Individual shipment details linked to a manifest
ManifestLineItemInput: Product information for customs classification
CreatePartyInput: Party and location details for origin and destination
View the complete field definitions and options in our GraphQL API reference.
For efficiency, you can add multiple manifest lines in a single request using the manifestLinesCreate mutation. Each line requires its own parties array to define the shipment's origin and destination.
In the event that flight details have changed, you can update manifest details using the following mutation. The source field is required and indicates the data source for the update.
{"data":{"manifestUpdate":{"id":"manifest_abc123def456","amount":"150.50","arrivalDate":"2026-03-16T10:00:00.000Z","awbNumber":"5678","awbPrefix":"001","carrierCode":"BA","createdAt":"2026-01-06T12:00:00.000Z","createdBy":"organization_xyz789","destinationCode":"JFK","operatorDestination":"US","originCode":"LHR","postalOperatorCode":"J1CGBA","serviceNumber":"5678","source":"RESDIT","transportationMode":"AIR","updatedAt":"2026-01-06T14:30:00.000Z","updatedBy":"organization_xyz789","weight":"25.5","weightUnit":"KILOGRAM","statusTransitions":[{"createdAt":"2026-01-06T14:30:00.000Z","createdBy":"organization_xyz789","note":"Flight rescheduled due to weather","source":"RESDIT"}]}}}
Data source values
The source field in ManifestUpdateInput accepts the following values:
Prepare customs manifest
Prepare a customs manifest for US shipments.
Provide Zonos with inbound postal shipment data.Zonos will prepare comprehensive customs manifests that include all necessary information for postal shipments into the US.
Prepare the request
Creating a manifest requires organizing your shipment data into the proper structure. The API uses a hierarchical approach where you first create the manifest, then add manifest lines containing individual shipment details.
Each component has specific required fields to ensure customs compliance and accurate documentation. Below we've outlined the essential data structure and required inputs.
Key input types
The manifest API uses several input types to organize shipment data:
ManifestInput: High-level shipment information including airports, waybill type, and flight detailsManifestLineInput: Individual shipment details linked to a manifestManifestLineItemInput: Product information for customs classificationCreatePartyInput: Party and location details for origin and destinationView the complete field definitions and options in our GraphQL API reference.
Create a manifest via API
Once you have organized your shipment data, send the GraphQL mutation to create the manifest.
Step 1: Create the manifest header
mutation ManifestCreate($input: ManifestInput!) {manifestCreate(input: $input) {idamountarrivalDateawbNumberawbPrefixcarrierCodecreatedAtcreatedBydestinationCodeoperatorDestinationoperatorOriginoriginCodepostalOperatorCodeserviceNumbersourcetransportationModeupdatedAtupdatedByweightweightUnitstatusTransitions {createdAtcreatedBynotesource}lines(first: 5) {totalCountedges {cursornode {idtrackingNumberendUsecurrencyCodecreatedAtcreatedByupdatedAtupdatedBylandedCost {id}}}}}}RESPONSE
json
{ "data": { "manifestCreate": { "id": "manifest_abc123def456", "amount": "0", "arrivalDate": "2026-03-15T14:30:00.000Z", "awbNumber": "1234", "awbPrefix": "001", "carrierCode": "AA", "createdAt": "2026-01-06T12:00:00.000Z", "createdBy": "organization_xyz789", "destinationCode": "JFK", "operatorDestination": "US", "originCode": "LHR", "postalOperatorCode": "J1CGBA", "serviceNumber": "1234", "source": "API", "transportationMode": "AIR", "updatedAt": "2026-01-06T12:00:00.000Z", "updatedBy": "organization_xyz789", "weight": "0", "weightUnit": "KILOGRAM", "statusTransitions": [], "lines": { "totalCount": 0, "edges": [] } } } }Step 2: Add manifest lines
Using the ID returned from the
manifestCreatemutation, you can now link individual shipments to the manifest.mutation ManifestLineCreate($manifestId: ID!, $input: ManifestLineInput!) {manifestLineCreate(manifestId: $manifestId, input: $input) {idmanifestIdtrackingNumberendUsecurrencyCodereferenceNumberarrivalDatecreatedAtcreatedByupdatedAtupdatedBylandedCost {id}}}RESPONSE
json
{ "data": { "manifestLineCreate": { "id": "manifest_line_def456ghi789", "manifestId": "manifest_abc123def456", "trackingNumber": "LX123456789GB", "endUse": "NOT_FOR_RESALE", "currencyCode": "USD", "referenceNumber": "ORDER-2026-001", "arrivalDate": "2026-03-15T14:30:00.000Z", "createdAt": "2026-01-06T12:05:00.000Z", "createdBy": "organization_xyz789", "updatedAt": "2026-01-06T12:05:00.000Z", "updatedBy": "organization_xyz789", "landedCost": null } } }Step 3: Add multiple manifest lines (batch)
For efficiency, you can add multiple manifest lines in a single request using the
manifestLinesCreatemutation. Each line requires its ownpartiesarray to define the shipment's origin and destination.mutation ManifestLinesCreate($manifestId: ID!, $input: [ManifestLineInput!]!) {manifestLinesCreate(manifestId: $manifestId, input: $input) {idmanifestIdtrackingNumberendUsecurrencyCodecreatedAt}}RESPONSE
json
{ "data": { "manifestLinesCreate": [ { "id": "manifest_line_aaa111bbb222", "manifestId": "manifest_abc123def456", "trackingNumber": "LX123456789GB", "endUse": "NOT_FOR_RESALE", "currencyCode": "USD", "createdAt": "2026-01-06T12:10:00.000Z" }, { "id": "manifest_line_ccc333ddd444", "manifestId": "manifest_abc123def456", "trackingNumber": "LX987654321GB", "endUse": "GIFT", "currencyCode": "USD", "createdAt": "2026-01-06T12:10:00.000Z" } ] } }Step 4: Update manifest
In the event that flight details have changed, you can update manifest details using the following mutation. The
sourcefield is required and indicates the data source for the update.mutation ManifestUpdate($id: ID!, $input: ManifestUpdateInput!) {manifestUpdate(id: $id, input: $input) {idamountarrivalDateawbNumberawbPrefixcarrierCodecreatedAtcreatedBydestinationCodeoperatorDestinationoperatorOriginoriginCodepostalOperatorCodeserviceNumbersourcetransportationModeupdatedAtupdatedByweightweightUnitstatusTransitions {createdAtcreatedBynotesource}}}RESPONSE
json
{ "data": { "manifestUpdate": { "id": "manifest_abc123def456", "amount": "150.50", "arrivalDate": "2026-03-16T10:00:00.000Z", "awbNumber": "5678", "awbPrefix": "001", "carrierCode": "BA", "createdAt": "2026-01-06T12:00:00.000Z", "createdBy": "organization_xyz789", "destinationCode": "JFK", "operatorDestination": "US", "originCode": "LHR", "postalOperatorCode": "J1CGBA", "serviceNumber": "5678", "source": "RESDIT", "transportationMode": "AIR", "updatedAt": "2026-01-06T14:30:00.000Z", "updatedBy": "organization_xyz789", "weight": "25.5", "weightUnit": "KILOGRAM", "statusTransitions": [ { "createdAt": "2026-01-06T14:30:00.000Z", "createdBy": "organization_xyz789", "note": "Flight rescheduled due to weather", "source": "RESDIT" } ] } } }Data source values
The
sourcefield inManifestUpdateInputaccepts the following values:CARDITPRECONPREDESRESDITWas this page helpful?