Shipping Labels

The Shipping Labels endpoints allow you to generate carrier labels (Chronopost, Colissimo, …) for your orders and retrieve them later. Labels are returned as signed PDF URLs that are valid for 15 minutes — download the PDF immediately, or call the GET endpoint to obtain a fresh URL.

Authentication

Every request uses a Bearer token — the same token you use for the public Returns API.

Authorization: Bearer 

The token automatically identifies your shop. You do not need to pass a shopId in the URL or the body. A missing or invalid token returns 401 Unauthorized.

Rate limiting

LimitWindow
100 requests60 seconds

Going over the limit returns 429 Too Many Requests. Normal usage (1 label per second) stays well below this limit.


POST/public/v1/tracking/shipments

Create a shipping label

This endpoint generates a carrier shipping label for an order. The response contains a signed labelUrl valid for 15 minutes.

Required attributes

  • Name
    orderId
    Type
    string
    Description

    Identifier of the order.

  • Name
    carrierCode
    Type
    string
    Description

    Carrier code. Supported values: chronopost, colissimo.

  • Name
    productCode
    Type
    string
    Description

    Baback product code (see the list of available product codes below).

Optional attributes

  • Name
    reference
    Type
    string
    Description

    Free-form reference, printed on the carrier documents.

  • Name
    pickupPointCode
    Type
    string
    Description

    Required when productCode is a pickup-point product (see the product code list below).

Notes

  • Accents in addresses are handled automatically (stripped for Chronopost).
  • Phone numbers are normalized to the international E.164 format.
  • You can only use products that are activated on your carrier contract and configured in your Baback workspace. A non-contractualized product returns 400.

Request

POST
/public/v1/tracking/shipments
curl -X POST https://api.baback.co/public/v1/tracking/shipments \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "orderId": "order_abc123",
    "carrierCode": "chronopost",
    "productCode": "chronopost-18",
    "originAddress": {
      "firstName": "Acme",
      "lastName": "Warehouse",
      "address1": "10 rue de la Paix",
      "city": "Paris",
      "zip": "75002",
      "countryCode": "FR",
      "phone": "+33100000000"
    },
    "destinationAddress": {
      "firstName": "Jane",
      "lastName": "Doe",
      "address1": "5 avenue des Champs-Élysées",
      "city": "Paris",
      "zip": "75008",
      "countryCode": "FR",
      "phone": "+33698765432",
      "email": "jane@example.com"
    },
    "parcels": [{ "weight": 500 }],
    "reference": "ORD-12345"
  }'

Response: 201 Created

{
  "id": "label_xyz789",
  "shopId": "shop_1",
  "orderId": "order_abc123",
  "carrierCode": "chronopost",
  "productCode": "chronopost-18",
  "trackingNumber": "XR087215020RR",
  "labelUrl": "https://s3.eu-west-3.amazonaws.com/.../label.pdf?X-Amz-Signature=...",
  "weight": 500,
  "status": "label_generated",
  "createdAt": "2026-04-09T16:00:00.000Z"
}

GET/public/v1/tracking/shipments/:labelId

Retrieve a shipping label

Returns an existing label in the same format as the POST response, with a freshly signed labelUrl (valid 15 minutes). Use this endpoint when the previous URL has expired.

Required attributes

  • Name
    labelId
    Type
    string
    Description

    Identifier of the label (returned as id by the POST endpoint).

If the label does not exist or does not belong to your shop, the endpoint returns 404 Not Found.

Request

GET
/public/v1/tracking/shipments/:labelId
curl https://api.baback.co/public/v1/tracking/shipments/label_xyz789 \
  -H "Authorization: Bearer {token}"

Response: 200 OK

{
  "id": "label_xyz789",
  "shopId": "shop_1",
  "orderId": "order_abc123",
  "carrierCode": "chronopost",
  "productCode": "chronopost-18",
  "trackingNumber": "XR087215020RR",
  "labelUrl": "https://s3.eu-west-3.amazonaws.com/.../label.pdf?X-Amz-Signature=...",
  "weight": 500,
  "status": "label_generated",
  "createdAt": "2026-04-09T16:00:00.000Z"
}

Available product codes

You can only use products that are activated on your carrier contract. A non-contractualized product returns 400 Bad Request with code CHRONOPOST_PRODUCT_NOT_IN_CONTRACT (or the equivalent for the relevant carrier).

Chronopost

Baback codeDescription
chronopost-18Next day before 6 p.m.
chronopost-13Next day before 1 p.m.
chronopost_jour_jSame-day delivery
chronopost_rapide_ecoFast & economic (Europe)
chronopost_express_worldExpress Worldwide (international)
relaisChrono Relais France (pickupPointCode required)
chronopost_relais_europe_outre_merRelais Europe / Overseas (pickupPointCode required)
shop2shopShop2Shop (pickupPointCode required)
chronopost_2shopdirect2Shop Direct (pickupPointCode required)

Colissimo

Baback codeDescription
colissimoGeneric Colissimo
colissimo_domicile_signature_franceHome, with signature (France)
colissimo_domicile_sans_signature_franceHome, without signature (France)
colissimo_point_retrait_francePickup point France (pickupPointCode required)
colissimo_domicile_signature_europeHome, with signature (Europe)
colissimo_domicile_sans_signature_europeHome, without signature (Europe)
colissimo_point_retrait_europePickup point Europe (pickupPointCode required)
colissimo_domicile_signature_outre_merHome, with signature (Overseas)
colissimo_domicile_sans_signature_outre_merHome, without signature (Overseas)
colissimo_domicile_signature_mondeHome, with signature (Worldwide)

Error handling

HTTP codeCause
400 Bad RequestInvalid body or product not activated on your carrier contract
401 UnauthorizedMissing or invalid token
404 Not FoundLabel does not exist or belongs to another shop
429 Too Many RequestsRate limit exceeded (100 req / min)
502 Bad GatewayUnhandled carrier error
500 Internal Server ErrorBaback-side error

Error payloads use the following shape:

{
  "message": "Le produit Chronopost 'chronopost-18' n'est pas activé sur votre contrat...",
  "code": "CHRONOPOST_PRODUCT_NOT_IN_CONTRACT",
  "statusCode": 400,
  "timestamp": "2026-04-09T16:00:00.000Z"
}