Labels
Carrier stickers by default, optional platform templates, single and merged PDF printing.
Single label
/parcels/:id/label?source=carrier|platform&size=a6|100x100&lang=ar|fr|en&templateId=lt_…Returns application/pdf. Default is carrier-native stickers (each
courier's own label API). Mixed-carrier bulk prints are merged for you —
you never group by courier yourself.
source / project label-settings can force platform branded tickets
instead. templateId always forces a platform template. Response header
X-Feeef-Cloud-Label-Source tells you which renderer served the bytes
(carrier, platform, or cache).
curl "https://apis.cloud.feeef.org/v1/parcels/pcl_8Xw…/label?source=carrier&size=a6&lang=fr" \
-H "Authorization: Bearer $FEEEF_CLOUD_KEY" \
-o label.pdflang / size only matter for platform-rendered labels. Carrier-native
stickers are whatever language/size the courier itself returns.
Merged batch label
/parcels/labelsOne merged PDF, pages in the order you listed parcelIds — pass up to 200.
curl -X POST "https://apis.cloud.feeef.org/v1/parcels/labels" \
-H "Authorization: Bearer $FEEEF_CLOUD_KEY" \
-H "Content-Type: application/json" \
-d '{ "parcelIds": ["pcl_8Xw…", "pcl_9Ab…"], "source": "platform", "templateId": "lt_7Ks…" }' \
-o labels.pdfMixed carriers in one merge call are fine
You can mix parcels from different carrier accounts in one parcelIds
array — the platform fetches each courier's sticker (or renders a platform
template) and merges the results into a single PDF. Every parcel must belong
to the same tenant.
Label templates (platform tickets)
Courier stickers are the default. When you want branded tickets (logo, sender block, size, locale), create templates and optionally make them the project default.
| Method | Path | Purpose |
|---|---|---|
GET | /label-templates | List templates |
POST | /label-templates | Create (setAsDefault: true also flips settings to platform) |
GET | /label-templates/:id | Get one (lt_…) |
PATCH | /label-templates/:id | Update / setAsDefault |
DELETE | /label-templates/:id | Delete |
GET | /label-settings | { defaultMode, defaultTemplateId } |
PATCH | /label-settings | Set defaultMode: "carrier" | "platform" and/or defaultTemplateId |
# Create a branded template and make it the default print mode
curl -X POST "https://apis.cloud.feeef.org/v1/label-templates" \
-H "Authorization: Bearer $FEEEF_CLOUD_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Shop A6",
"size": "a6",
"locale": "fr",
"senderName": "Ma Boutique",
"senderPhone": "0550000000",
"logoUrl": "https://cdn.example.com/logo.png",
"showLogo": true,
"setAsDefault": true
}'
# Switch back to courier stickers as the default
curl -X PATCH "https://apis.cloud.feeef.org/v1/label-settings" \
-H "Authorization: Bearer $FEEEF_CLOUD_KEY" \
-H "Content-Type: application/json" \
-d '{ "defaultMode": "carrier" }'Resolution order when printing:
templateIdforces that platform template; it cannot be combined withsource=carrier.- Explicit
sourceselects carrier (strict, no fallback) or platform. - Without an override, project
label-settings.defaultMode=platformselects the default template. - Otherwise, carrier-account
labelSource=platformselects platform. - Otherwise, use the carrier sticker; carrier failures fall back to the selected platform template.
If no template is selected, platform printing uses the documented base A6/FR layout without hidden template selection.