Changelog
All notable changes to the Flex Forward API and documentation are listed here in reverse chronological order.October 2026
API changes
- EU product identifiers:
shipment.parcels[].items[].attributes.productIdentifiersdocuments the product identifiers for customs declarations. For each item shipped to the EU, Monaco, the French overseas regions, or Northern Ireland (postal code startingBT), providempid,nspid, andspidas lists of codes. Each is optional elsewhere. The descriptions specify code restrictions, including thatspidmust not be blank and may useY081only when the product has no barcode.
September 2026
API changes
- Endpoint:
GET /orders/{orderId}— retrieve one order together with the carrier details supplied at label creation. The response returns the order’s shipment stage (status), commercialexceptionState, courier identifiers, declared parcel measurements, and any courier submissionerror, plus the order numbers, customs identifiers, service options, and courier options you sent. Pass the labelidreturned byPOST /labelsas{orderId}; this endpoint accepts only the UUID, notcustomerOrderNumber. It complementsGET /labels/{id}, which returns only the label document. - Idempotency: Reusing an
idempotencyKeywith a different request body returns409 IDEMPOTENCY_CONFLICT. Requests with the same key and body replay the stored result. Older records without a stored request fingerprint retain their previous replay behavior. - Label formats:
label.formatacceptsPDFandPNG, defaulting to PDF when omitted. Document responses report the selected format as lowercasepdforpng. - Customer order numbers: Supplied values must contain 1–40 ASCII letters, digits,
-, or_and are case-sensitive and unique per account. Omitted values are system-generated. FlexForward passes{clientCode}-{customerOrderNumber}to the carrier for use as its customer reference and printing where supported. - Item values:
unitPrice.amountmust be at least0.01. Free gifts, samples, and promotional inserts must be declared at a nominal value of0.01or higher, never0.unitPrice.currencyaccepts onlyUSD. Omitted currency values also mean USD. - IOSS handling:
customs.taxIds.iossnow documents that supplied non-blank values are trimmed and used. If the field is omitted or blank and the destination is an EU tax country, FlexForward’s default IOSS code is applied. A code registered under IOSS registrations is not applied automatically unless you send it in the request. Applying FlexForward’s default code is chargeable because a VAT pre-payment and service charge are posted alongside the shipping charge; supplying your own code here is not charged.
Documentation corrections
- Added the order resource and
GET /orders/{orderId}to the core concepts resource table and integration flow. - Updated the international shipment guide to reflect the
unitPrice.amountminimum of0.01and to clarify that zero-value customs declarations are not accepted. - Clarified IOSS resolution and billing: a supplied
customs.taxIds.iossvalue is preserved, FlexForward’s default IOSS code applies automatically for EU tax destinations when the field is omitted or blank, and that default-code path is chargeable while supplying your own code is not.
Documentation maintenance
- Added checks to keep generated API documentation aligned with its source and to review related guide updates.
July 2026
Changed
- Documentation / OpenAPI: Corrected public authentication guidance. Customer integrations must send both
x-rr-apikeyandx-rr-apitoken. Bearer-token examples and the public OpenAPIbearerAuthscheme were removed as the documented customer method. - Authentication: API credentials are now obtained from the Return Helper User Portal under Settings → Signing Key and API Token, replacing the previous process of requesting a token by email.
June 2026
Added
- Endpoint:
GET /couriers— list courier codes available to your account. Use a returnedcodevalue ascourierwhen creating labels or listing courier products.
May 2026
Added
- Endpoint:
GET /products— list available shipping products for a courier. Use the returned product codes when creating labels. - Authentication: API key + token header authentication (
x-rr-apikey/x-rr-apitoken) documented for Flex Forward requests. - Endpoint:
GET /labels/{id}— now accepts comma-separated identifiers (label UUIDs or customer order numbers) for batch retrieval. Missing or failed labels are omitted from the response. - Response:
GET /labels/{id}response now includescustomerOrderNumberfield.
Changed
service.shipperAccountIdis now optional. When omitted, the label is created with your account’s default shipping account for the requested courier. Requests that still send it continue to work.- API spec: Enriched with detailed descriptions, examples, and operation IDs across all endpoints.
- Documentation: Improved quickstart guide, request samples, and general fixes.
v1.0.0
Initial public release of the Flex Forward API and developer documentation.Added
- Endpoints:
POST /labels(create shipping label),GET /labels/{id}(retrieve label document URL),GET /tracking/{id}(retrieve shipment tracking) - Production courier: YunExpress with global cross-border e-commerce shipping lanes
- Idempotency: Built-in duplicate prevention for label creation via
idempotencyKey - Unified tracking: Normalized status tags (
Pending,InfoReceived,InTransit,Delivered,Exception,Cancelled,Unknown) and structured checkpoint format across all couriers - Authentication: API key + token header authentication (
x-rr-apikey/x-rr-apitoken) with separate credentials for production and development environments - Documentation: Quickstart guide, authentication reference, error handling guide, idempotency and retry patterns, environment details, core concepts, versioning policy, and FAQ