PostPlus API
  1. Scenarios And Workflows
PostPlus API
  • Authentication, Environments
  • Endpoints Overview
    • Parcels Endpoints
    • Shipments Endpoints
    • Tracking Endpoints
    • Accounts Endpoints
  • Scenarios And Workflows
    • Working with parcels
    • Create or update parcel record
    • Cancel or delete a parcel record
    • Manifesting parcels in bags and shipments
    • Query parcel tracking events
    • Import parcel tracking events
  • All API Endpoints
    • Parcels
      • Create or update single parcel.
      • Create or update up to 200 parcels in a single request.
      • Get parcel details by parcel Id.
      • Get up to 100 parcels details by parcel Ids.
      • Get parcel details by parcel number (tracking number).
      • Get up to 100 parcels details by parcel numbers (tracking numbers).
      • Get parcel details by sender reference number.
      • Get up to 100 parcel details by sender reference numbers.
      • Query up to 500 parcels.
      • Delete parcel by Id.
      • Delete up to 100 parcels by Ids.
      • Get print details and contents by print Id.
      • Get up to 100 parcel print details and contents by print Ids.
      • Get pickup point details by Id.
      • Query pickup points.
      • Group parcels into bags and link to a shipment (update parcel references). When AllowPartialSuccess is true, valid parcels are updated and invalid ones returned in FailedParcels.
      • Get parcel details by manifest reference numbers.
      • Get up to 100 parcel details by manifest reference numbers.
      • Get parcel details by carrier reference numbers.
      • Get up to 100 parcel details by carrier reference numbers.
    • Shipments
      • Cancel erroneous parcels in a shipment.
      • Delete shipment manifest file.
      • Create new shipment.
      • Create new bag level shipment.
      • Update bag level shipment.
      • Link parcels with specified bag numbers to a shipment.
      • Validate and prepare shipment for submitting.
      • Submit and lock shipment and it's parcels.
      • Group parcels into bags and link to a shipment, then prepare and submit shipment in one transaction.
      • Delete shipment.
      • Update shipment.
      • Get shipment details by shipment id.
      • Query up to 500 shipments.
      • Upload shipment manifest file.
      • Upload shipment document.
      • Get shipment details by shipment number.
    • Documents
      • Download manifest file.
      • Download shipment documents in archive file.
      • Download shipment document file by Id.
      • Download parcel label by Id.
      • Generate and download generic bag labels.
      • Generate and download bag label.
      • Download resulting (processed) manifest file.
      • Generate and download shipment parcel labels.
      • Generate and download parcel commercial invoices.
      • Download resulting (processed) shipment file.
    • Tracking
      • Fetch up to 500 tracking events in cursor fashion.
      • Get event codes and other metadata.
      • Get tracking events by the list of parcel numbers, up to 50, comma separated.
      • Get tracking events by the list of sender reference numbers, up to 50, comma separated.
      • Get tracking events by the list of parcel numbers or sender reference numbers, up to 50, comma separated.
      • Get bag tracking events by the list of bag numbers, up to 50, comma separated.
      • Get bag tracking events by the list of bag numbers or shipment numbers, up to 50, comma separated.
      • Upload tracking events file.
    • Accounts
      • Get current account details.
    • Integrations
      • Add up to 500 tracking events to the processing queue. The whole batch either succeeds or fails.
      • Add tracking event with generic payload.
  • Schemas
    • Schemas
      • AccountInfo
      • CreateAndClosePostalDispatchByShipmentRequest
      • CreateMailTransitConsignmentByShipmentRequest
      • CreateTrackingIntegrationEventsRequest
      • DataSource
      • DeleteManifestFileRequest
      • DeleteManyParcelsRequest
      • DeleteShipmentRequest
      • DownloadResultingManifestFileRequest
      • DownloadResultingShipmentFileRequest
      • GenerateShipmentParcelPrintsRequest
      • GetAccountDetailsRequest
      • GetEventsBatchRequest
      • GetManyEventsByBagNrsRequest
      • GetManyEventsByParcelNrsRequest
      • GetManyEventsBySenderParcelNrsRequest
      • GetManyParcelPrintsRequest
      • GetManyParcelsByCarrierParcelNrsRequest
      • GetManyParcelsByIdsRequest
      • GetManyParcelsByManifestParcelNrsRequest
      • GetManyParcelsByParcelNrsRequest
      • GetManyParcelsBySenderParcelNrsRequest
      • GetParcelByIdRequest
      • GetParcelByCarrierParcelNrRequest
      • GetParcelByParcelNrRequest
      • GetParcelBySenderParcelNrRequest
      • GetParcelByManifestParcelNrRequest
      • GetParcelPrintRequest
      • GetPostalConsignmentDetailsRequest
      • GetPostalConsignmentDetailsResponse
      • GetPostalDispatchDetailsRequest
      • GetPostalDispatchDetailsResponse
      • GetShipmentDetailsRequest
      • PostalConsignmentInfo
      • PostalConsignmentStatus
      • PostalDespatchReceptacleStatus
      • PostalDespatchStatus
      • PostalDispatchInfo
      • PostalDocumentCategory
      • PostalDocumentInfo
      • PostalDocumentStatus
      • PostalDocumentType
      • PostalReceptacleInfo
      • PostalReceptacleOutboundBagInfo
      • PostalReceptacleParcelInfo
      • PostalRouteInfo
      • QueryAccountsRequest
      • QueryAccountsResponse
      • QueryParcelsRequest
      • QueryPickupPointsRequest
      • QueryPostalConsignmentsRequest
      • QueryPostalConsignmentsResponse
      • QueryPostalDispatchesRequest
      • QueryPostalDispatchesResponse
      • QueryShipmentsRequest
      • ResolveHsCodesByDescriptionsRequest
      • SearchManyBagEventsRequest
      • SearchManyParcelEventsRequest
      • TransportModeType
      • UploadManifestFileRequest
    • AccountAddressType
    • AccountCommonSettings
    • AccountSettingsAddressInfo
    • AddressInfo
    • AddTrackingEventsRequest
    • BagEventsResponse
    • BagPrintInfo
    • BagPrintType
    • BagStatus
    • BagTrackingEventInfo
    • BagViewInfo
    • CancelShipmentParcelsWithErrorsRequest
    • ContainerType
    • CreateBagLevelShipmentRequest
    • CreateIntegrationEventsRequest
    • CreateOrUpdateManyParcelsRequest
    • CreateOrUpdateParcelAdditionalInfo
    • IncludePrintSizes
    • CreateOrUpdateParcelIdentifiers
    • LabelSize
    • CreateOrUpdateParcelInfo
    • CreateOrUpdateParcelItemInfo
    • CreateOrUpdateParcelReceiverInfo
    • CreateOrUpdateParcelReferences
    • CreateOrUpdateParcelRequest
    • CreateOrUpdateParcelSenderInfo
    • CreateOrUpdateParcelStatusInfo
    • CreateOrUpdateSingleParcelRequest
    • CreateShipmentRequest
    • CustomsSettings
    • DeleteParcelRequest
    • DownloadBagPrintRequest
    • DownloadManifestFileRequest
    • DownloadParcelPrintRequest
    • DownloadShipmentDocumentRequest
    • DownloadShipmentDocumentsRequest
    • EmaiNotificationsInfo
    • EmaiNotificationsSettings
    • EventCodeInfo
    • FileFormat
    • FileStatus
    • GenerateBagPrintsRequest
    • GenerateParcelCommercialInvoicesRequest
    • GenerateParcelCommercialInvoicesResponse
    • ParcelLinkResultInfo
    • ParcelValidationSettings
    • GenerateShipmentParcelPrintsResponse
    • GetAccountDetailsResponse
    • GetCurrentAccountDetailsRequest
    • GetEventsBatchResponse
    • GetManyParcelPrintsResponse
    • GetPickupPointDetailsRequest
    • GetPickupPointDetailsResponse
    • GetShipmentDetailsResponse
    • LabelsSettings
    • LeanMileSettings
    • LinkBagsToShipmentRequest
    • MailType
    • ManifestAndSubmitShipmentParcelInfo
    • ManifestAndSubmitShipmentRequest
    • ManifestAndSubmitShipmentResponse
    • ManifestFileType
    • ManifestFileViewInfo
    • ManyParcelsDetailsResponse
    • NewIntegrationEvent
    • NewTrackingEvent
    • ParcelAdditionalInfo
    • ParcelAndTrackingEventInfo
    • ParcelCommercialInvoiceInfo
    • ParcelDetailsResponse
    • ParcelDocument
    • ParcelDocumentType
    • LinkBagsToShipmentResponse
    • ParcelEventsResponse
    • ParcelIdentifiers
    • ParcelInfo
    • ParcelItemInfo
    • ParcelNrSequenceInfo
    • ParcelNrType
    • ParcelPrintFormat
    • ParcelPrintInfo
    • UpdateManyParcelReferencesResponse
    • ParcelPrintType
    • ParcelReceiverInfo
    • ParcelReferences
    • ParcelSenderInfo
    • ParcelStatus
    • ParcelStatusInfo
    • ParcelTransactionType
    • PickupPointInfo
    • PickupPointType
    • PostalLabelSettings
    • PostalSettings
    • PrepareShipmentRequest
    • PrepareShipmentResponse
    • QstepSettings
    • QueryParcelsResponse
    • QueryPickupPointsResponse
    • QueryShipmentsResponse
    • RateManagementSettings
    • SearchBagEventsResponse
    • ResendOrRelabelParcelRequest
    • SearchParcelEventsResponse
    • ShipmentArrivalInfo
    • ShipmentArrivalViewInfo
    • ShipmentDocumentType
    • ShipmentDocumentViewInfo
    • ShipmentManifestLevel
    • ShipmentManifestSettings
    • ShipmentStatus
    • ShipmentStatusInfo
    • ShipmentTerminalInfo
    • ShipmentType
    • ShipmentViewInfo
    • SubmitShipmentRequest
    • TaxType
    • TelemetrySettings
    • TrackingEventInfo
    • TrackingParcelInfo
    • UpdateBagLevelShipmentRequest
    • UpdateManyParcelReferencesRequest
    • UpdateShipmentRequest
    • UploadManifestFileResponse
    • UploadShipmentDocumentResponse
    • UploadTrackingEventsFileResponse
    • UpsertBagRequest
    • X7TradeSettings
  1. Scenarios And Workflows

Manifesting parcels in bags and shipments

Overview of parcel related endpoints: Parcels Endpoints
Overview of shipment related endpoints: Shipments Endpoints
This guide covers the workflow for manifesting parcels into bags and shipments for customs clearance and transport.

Workflow overview#

Full step-by-step workflow#

1.
Preparation - Create parcels, get labels, physically pack into bags
2.
Manifesting - Create shipment, link parcels with bag numbers, add arrival details
3.
Validation & Submit - Validate shipment, fix errors, submit
4.
Documents - Upload AWB/CMR, download CN35/CN38
See Working with parcels for parcel creation and label retrieval. Once labels are printed and parcels are physically sorted into bags, you're ready to manifest.

Simplified two-step workflow#

1.
Preparation - Create parcels, get labels, physically pack into bags
2.
Manifest & Submit - Create shipment, then manifest and submit in one call
3.
Documents - Upload AWB/CMR, download CN35/CN38
No CSV manifest files are required - the API workflow replaces manual file exchange.

Full step-by-step workflow#

Create shipment#

Create new shipment
Start by creating a shipment record at your terminal. A shipment represents a transport unit that will contain one or more bags of parcels.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

POST {{host}}/api/v1/shipments
content-type: application/json
X-API-KEY: {{apiKey}}

{
  "type": "AWB",
  "terminalCode": "AMS",
  "shipmentNr": "999-68495221",
  "updateIfExists": true
}
Save the returned id for subsequent calls.
updateIfExists flag
Use updateIfExists: true for retry-safe (idempotent) operations - prevents duplicate shipment errors in retry scenarios or batch processing systems.
ValueBehavior
false (default)Fails if shipmentNr already exists
trueUpdates existing shipment or creates new one
When updating: type and terminalCode must match the existing shipment. Shipment must be in Created or Manifested status.

Link parcels to shipment#

Update parcel references
Once parcels are created and packed into bags, link them to the shipment by updating their references. This assigns parcels to specific bags within the shipment. Call once per bag.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

POST {{host}}/api/v1/parcels/update-references-many
content-type: application/json
X-API-KEY: {{apiKey}}

{
  "parcelNrs": "RF000000028LT,RF000000031LT,RF000000045LT",
  "updateBagNr": "BAG-NL-001",
  "linkShipmentId": {{shipmentId}},
  "allowPartialSuccess": true
}
Repeat for each bag with different destination or grouping. Use consistent bag naming (e.g., BAG-{COUNTRY}-{SEQUENCE}).
allowPartialSuccess flag
Use allowPartialSuccess: true when processing large batches where some failures are acceptable.
ValueBehavior
false (default)Entire operation fails if any parcel is invalid
trueValid parcels updated; failed ones returned in failedParcels
Always check failedParcels in the response and implement retry logic for failed items.

Update shipment details#

Update shipment
Before validation, add transport and arrival information to the shipment.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

PUT {{host}}/api/v1/shipments/{{shipmentId}}
content-type: application/json
X-API-KEY: {{apiKey}}

{
  "masterNr": "MAWB-12345678",
  "arrivalInfo": {
    "transportNr": "CA1024",
    "originCountryCode": "US",
    "totalWeight": 125.5,
    "totalBags": 3,
    "arrivalOn": "2024-12-15T10:00:00Z",
    "notes": "Handle with care"
  }
}

Validate shipment#

Prepare shipment
Prepare the shipment to validate all data before submission.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

POST {{host}}/api/v1/shipments/{{shipmentId}}/prepare
content-type: application/json
X-API-KEY: {{apiKey}}

{
}
Returns shipmentSubmitToken needed for submission.
Handling errors
If validation fails (hasErrors: true), check shipment details for specific error messages:
GET {{host}}/api/v1/shipments/{{shipmentId}}?IncludeBags=true
X-API-KEY: {{apiKey}}
Common errors and solutions:
Arrival info missing → Update shipment with arrival details
Bag too heavy → Split parcels across multiple bags
Parcel errors → Fix or cancel individual parcels
After fixing issues, call prepare again until validation passes.

Submit shipment#

Submit shipment
After successful validation, submit the shipment. Once submitted, the shipment is locked and cannot be modified.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

POST {{host}}/api/v1/shipments/{{shipmentId}}/submit
content-type: application/json
X-API-KEY: {{apiKey}}

{
  "shipmentSubmitToken": "{{shipmentSubmitToken}}"
}
After submission, the shipment enters Pending status. CN documents can be generated, and AWB/MAWB/CMR numbers remain editable.

Upload AWB/CMR documents#

Upload shipment document
šŸ“Œ Document Requirement
Some terminals require AWB or CMR documents to be attached before the shipment can be scheduled for handling. Without these documents, the shipment remains in Pending status and will not enter the handling schedule.
See Requirement to attach AWB/CMR documents and automatic email pre-alerts for full details on this requirement.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

POST {{host}}/api/v1/shipments/{{shipmentId}}/shipment-documents?Type=AWB&FileName=awb-document.pdf
content-type: multipart/form-data
X-API-KEY: {{apiKey}}

// file: [binary content]
Supported document types: AWB, CMR, AirwayBillHAWB, CommercialInvoice, PackagingList, POD, and others.
After document upload:
Shipment transitions from Pending to Planned status
Automatic pre-alert notifications are sent to shipment handling parties

Download documents#

Documents (CN35, CN38) are generated asynchronously after submission. Poll shipment details until documents are available.
Get shipment details
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

GET {{host}}/api/v1/shipments/{{shipmentId}}?IncludeDocuments=true
X-API-KEY: {{apiKey}}
Download all documents as archive
GET {{host}}/api/v1/documents/shipments/{{shipmentId}}/all-documents
X-API-KEY: {{apiKey}}
Download manifest as CSV
GET {{host}}/api/v1/documents/shipments/{{shipmentId}}/resulting-file?fileFormat=Csv
X-API-KEY: {{apiKey}}

Delete shipment#

Delete shipment
Shipments can only be deleted before submission. This removes the shipment and all related data.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

DELETE {{host}}/api/v1/shipments/{{shipmentId}}
X-API-KEY: {{apiKey}}

Simplified two-step workflow#

Simplified Step 1: Create shipment#

Initialize the shipment entity with arrival information.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

POST {{host}}/api/v1/shipments
content-type: application/json
X-API-KEY: {{apiKey}}

{
  "type": "AWB",
  "terminalCode": "AMS",
  "shipmentNr": "999-68495221",
  "masterNr": "MAWB-12345678",
  "arrivalInfo": {
    "transportNr": "CA1024",
    "originCountryCode": "US",
    "totalWeight": 125.5,
    "totalBags": 3,
    "arrivalOn": "2024-12-15T10:00:00Z"
  },
  "updateIfExists": true
}

Simplified Step 2: Manifest and submit#

Link parcels to the shipment and finalize submission in one call.
@host = https://api.test.post-plus.io
@apiKey = apitest1234567890

POST {{host}}/api/v1/shipments/{{shipmentId}}/manifest-and-submit
content-type: application/json
X-API-KEY: {{apiKey}}

{
  "bags": [
    {
      "bagNr": "BAG-NL-001",
      "parcelNrs": "RF000000028LT,RF000000031LT,RF000000045LT"
    },
    {
      "bagNr": "BAG-DE-001",
      "parcelNrs": "RF000000059LT,RF000000062LT"
    }
  ]
}
This single call:
Links parcels to bags
Validates the shipment
Submits and locks the shipment
Returns errors if validation fails (fix and retry)
After submission, upload AWB/CMR documents if required by your terminal.
Previous
Cancel or delete a parcel record
Next
Query parcel tracking events
Built with