Skip to main content

Create Bulk Shipping Labels

Endpoint
POST /v1/bulk_shipping_labels

Starts generating the labels for up to 50 orders, combined into one PDF. The job runs in the background, so the response returns right away with status: pending. Use Get Bulk Shipping Labels to get the file_url once it is done.

Bulk labels are available for live orders only.

Request Body​

FieldTypeRequiredDescription
order_idsarray of stringYes1 to 50 Biteship order IDs
settingsobjectNoLabel settings. Settings you leave out use your default settings from the Biteship dashboard. See Label Settings for the default values
settings.paper_sizestringNoPaper size: a4, 8x10cm, or 10x15cm
settings.templatestringNoLabel template: standard
settings.insurance_shownbooleanNoShow insurance information
settings.insurance_fee_shownbooleanNoShow the insurance amount
settings.shipping_fee_shownbooleanNoShow the shipping fee
settings.items_shownbooleanNoShow the items section
settings.item_description_shownbooleanNoShow item descriptions
settings.item_sku_shownbooleanNoShow item SKUs
settings.origin_phone_shownbooleanNoShow the sender phone
settings.origin_address_shownbooleanNoShow the sender address
settings.receiver_phone_shownbooleanNoShow the recipient phone
settings.receiver_address_shownbooleanNoShow the recipient address
settings.censor_receiver_namebooleanNoCensor the recipient name
Request
curl --request POST \
--url https://api.biteship.com/v1/bulk_shipping_labels \
--header 'authorization: <<YOUR_API_KEY>>' \
--header 'content-type: application/json' \
--data '{
"order_ids": ["<<ORDER_ID_1>>", "<<ORDER_ID_2>>", "<<ORDER_ID_3>>"],
"settings": {
"paper_size": "10x15cm",
"items_shown": true,
"censor_receiver_name": true
}
}'

Response​

Returns HTTP 202. If the same orders with the same settings already have a bulk label that is pending, processing, or completed, the response is HTTP 200 with message Bulk shipping label already exists and returns that bulk label instead.

FieldTypeDescription
successbooleanWhether the request succeeded
codenumberResponse code
messagestringResponse message
bulk_label.idstringBulk label ID. Use it to get the bulk label
bulk_label.user_idstringUser ID
bulk_label.organization_idstringOrganization ID
bulk_label.statusstringpending, processing, completed, or failed
bulk_label.order_idsarray of stringOrder IDs, with duplicates removed and sorted. Pages in the PDF follow this order
bulk_label.settingsobjectLabel settings used. Same fields as settings in the request
bulk_label.file_urlstring or nullURL of the combined PDF. null until the job is completed
bulk_label.error_messagestring or nullOrders that could not be generated, and why
bulk_label.processed_countnumberNumber of labels generated so far
bulk_label.order_countnumberNumber of orders in the job
bulk_label.created_atstringCreation timestamp
bulk_label.updated_atstringLast update timestamp
Response
{
"success": true,
"code": 20200000,
"message": "Bulk shipping labels generation initiated successfully",
"bulk_label": {
"id": "69ae6df7b49b9700925c2229",
"user_id": "5f9a1c2e8b3d4a0012345678",
"organization_id": "5f9a1c2e8b3d4a0012345679",
"status": "pending",
"order_ids": ["69946bae0b2c6f002659f21a", "69946bae0b2c6f002659f21b", "69946bae0b2c6f002659f21c"],
"settings": {
"paper_size": "10x15cm",
"template": "standard",
"insurance_shown": true,
"insurance_fee_shown": true,
"shipping_fee_shown": true,
"items_shown": true,
"item_description_shown": true,
"item_sku_shown": true,
"origin_phone_shown": true,
"origin_address_shown": true,
"receiver_phone_shown": true,
"receiver_address_shown": true,
"censor_receiver_name": true
},
"file_url": null,
"error_message": null,
"processed_count": 0,
"order_count": 3,
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
}

Errors​

HTTPCodeWhen
40040000000The request body is invalid. details lists each invalid field and the reason
42242200002Your plan does not include the Shipping Label API. See Plans & limits

An order ID that is not found or does not belong to you does not fail the request. That order is skipped and listed in error_message.