Create Locker to Locker Order
This endpoint creates a consumer-to-consumer order. The sender drops off the parcel at their chosen locker, and Instabee delivers it to the recipient's chosen locker. Both the sender's drop-off locker (dropOffDeliveryOption) and the recipient's delivery locker (deliveryOption) are required, with their respective sortCode values from the availability call. Parcel dimensions are required for all Locker to Locker orders.
API Endpoint
| Endpoint | Method | Content-Type |
|---|---|---|
api.integration.instabee.com/orders (production) · sandbox-api.integration.instabee.com/orders (sandbox) | PUT | application/json |
When to Use
Call this endpoint after parcel is packed and ready for pickup
Integration Levels
Merchants can send information in different steps depending on their workflow:
- Minimum: Basic confirmation with essential parcel details
- Maximum: Complete order details with final dimensions and product information
Request Body
| Parameter | Type | Required | Description | Constraints | Enum | Comment |
|---|---|---|---|---|---|---|
| brand | string | optional | Define brand of the delivery options. | instabox or budbee | ||
| product | string | required | Define the product of the delivery options | Must be one | LOCKER_TO_LOCKER | |
| parcelPackingConfirmed | boolean | required | Confirm parcel is packed and ready for pickup | must be true | Order is created and confirmed in a single call | |
| availabilityToken | string | optional | Availability token from the recipient availability response | Can be optional if agreed with your Implementation Manager | ||
| senderAvailabilityToken | string | optional | Availability token from the sender (drop-off) availability response | Can be optional if agreed with your Implementation Manager | ||
| parcelId | string | optional | Unique identifier/barcode for parcel | Auto-generated if omitted | ||
| communicationName | string | optional | Communication name override | Note! This will only change the name in Instabee communication such as notifications, SMS or email for locker deliveries. Will not change partner name in our partner portal nor change any specs on invoices | ||
| sender | object | required | Sender (consumer) information object | |||
| recipient | object | optional | Recipient (merchant) information object. Will default to configuration | |||
| dropOffDeliveryOption | object | required* | The selected locker from checkout. Can be discussed to sent as empty with your Implementation Manager | |||
| deliveryOption | object | required* | The selected locker from checkout. | |||
| dispatch | object | optional | Return warehouse information | |||
| cart | object | required* | Parcel and/or product details. Size of parcel is required for returns |
sender
| Parameter | Type | Required | Description | Constraints | Enum | Comment |
|---|---|---|---|---|---|---|
| name | string | required | Sender name | |||
| string | required | Sender email address | Valid email format | Used for delivery notifications | ||
| phone | string | required | Sender phone number | Box: Min 6 digits, Home delivery: Min 10 digits, Max 15 digits | Can be made optional with setting | |
| ssn | string | optional | Social security number | For age verification services | ||
| street | string | required | Sender street address | |||
| street2 | string | optional | Additional address information | Floor, apartment, etc. | ||
| postalCode | string | required | Sender postal code | |||
| city | string | required | Sender city | |||
| countryCode | string | required | Sender country code | ISO 3166 alpha 2 | BE, DK, FI, NL, NO, SE | |
| coordinates | object | optional | GPS coordinates | For precise location |
recipient
| Parameter | Type | Required | Description | Constraints | Enum | Comment |
|---|---|---|---|---|---|---|
| name | string | required | Recipient name | |||
| string | required | Recipient email address | Valid email format | Used for delivery notifications | ||
| phone | string | required | Recipient phone number | Box: Min 6 digits, Home delivery: Min 10 digits, Max 15 digits | Can be made optional with setting | |
| ssn | string | optional | Social security number | For age verification services | ||
| street | string | required | Recipient street address | |||
| street2 | string | optional | Additional address information | Floor, apartment, etc. | ||
| postalCode | string | required | Recipient postal code | |||
| city | string | required | Recipient city | |||
| countryCode | string | required | Recipient country code | ISO 3166 alpha 2 | BE, DK, FI, NL, NO, SE | |
| coordinates | object | optional | GPS coordinates | For precise location |
dropOffDeliveryOption
| Parameter | Type | Required | Description | Enum | Comment |
|---|---|---|---|---|---|
| sortCode | string | required | Sort code for the dropoff locker | Identifies the specific locker |
deliveryOption
| Parameter | Type | Required | Description | Enum | Comment |
|---|---|---|---|---|---|
| sortCode | string | required | Sort code for the dropoff locker | Identifies the specific locker |
dispatch
| Parameter | Type | Required | Description | Enum | Comment |
|---|---|---|---|---|---|
| returnPointId | string | optional | Not yet implemented. Return address point ID | For failed deliveries |
cart
| Parameter | Type | Required | Description | Enum | Comment |
|---|---|---|---|---|---|
| checkoutId | string | optional | Checkout session ID | Used as a link in Instabee system | |
| orderNumber | string | required* | Your order number | Used as a link in Instabee system | |
| totalValueInCents | number | optional | Total order value in cents | This helps us with claims process | |
| totalWeightInGrams | number | optional | Total weight in grams | This helps us with claims process | |
| parcel | object | required | Parcel dimensions and contents | Detailed parcel information |
cart.parcel
| Parameter | Type | Required | Description | Enum | Comment |
|---|---|---|---|---|---|
| heightMm | number | required | Parcel height in mm | If you do not have this data, do not send anything | |
| widthMm | number | required | Parcel width in mm | If you do not have this data, do not send anything | |
| lengthMm | number | required | Parcel length in mm | If you do not have this data, do not send anything | |
| volumeDm3 | number | optional | Parcel volume in dm³ | If you do not have this data, do not send anything | |
| estimatedSize | string | optional | Estimated size of the parcel. The sizes will be configured together with Instabee | SMALL, LARGE, TOOLARGE | |
| weightGram | number | optional | Parcel weight in grams | ||
| type | string | optional | Parcel type | BOX, BAG | |
| products | array | optional | Array of products in parcel | Detailed product information |
cart.parcel.products[]
| Parameter | Type | Required | Description | Enum | Comment |
|---|---|---|---|---|---|
| name | string | optional | Product name | ||
| quantity | string | optional | Quantity of this product | Sent as a string, not a number | |
| productId | string | optional | Your product identifier | ||
| details | object | optional | Detailed product information | ||
| temperature | object | optional | Temperature requirements for the product | ||
| packages | array | optional | Physical packages the product is shipped in |
cart.parcel.products[].details
| Parameter | Type | Required | Description | Constraints | Enum |
|---|---|---|---|---|---|
| productType | string | optional | Type of product | e.g., "Prescription" | |
| imgUrl | string | optional | Product image URL | ||
| category | string | optional | Product category | ||
| brand | string | optional | Product brand | ||
| description | string | optional | Product description | ||
| price | object | optional | Price information |
cart.parcel.products[].details.price
| Parameter | Type | Required | Description | Constraints | Enum | Comment |
|---|---|---|---|---|---|---|
| priceInCents | number | optional | Price in cents | |||
| taxValueInCents | number | optional | Tax amount in cents | |||
| discountRateInCents | number | optional | Discount amount in cents | |||
| currency | string | optional | Currency code | ISO 4217 | e.g., "SEK" |
cart.parcel.products[].temperature
| Parameter | Type | Required | Description | Enum |
|---|---|---|---|---|
| min | number | optional | Minimum 8. Temperature in Celsius | |
| max | number | optional | Maximum 15. Temperature in Celsius |
cart.parcel.products[].packages[]
| Parameter | Type | Required | Description | Enum | Comment |
|---|---|---|---|---|---|
| widthMm | string | optional | Package width in mm | If you do not have this data, do not send anything | |
| heightMm | string | optional | Package height in mm | If you do not have this data, do not send anything | |
| lengthMm | string | optional | Package length in mm | If you do not have this data, do not send anything | |
| weightGram | string | optional | Package weight in grams | If you do not have this data, do not send anything | |
| volumeDm3 | string | optional | Package volume in dm³ (liters) | If you do not have this data, do not send anything | |
| barcodes | object | optional | Barcode object for the package | Single object, not an array |
cart.parcel.products[].packages[].barcodes
| Parameter | Type | Required | Description | Enum |
|---|---|---|---|---|
| code | string | optional | Barcode value | |
| type | string | optional | The barcode type | EAN13 |
Response
The create-order API returns the order and parcel identifiers needed to continue the flow.
| Field | Type | Description |
|---|---|---|
| orderId | string | The Instabee order ID — save it, you need it to fetch the tracking links |
| parcelId | string | The Instabee parcel ID |
| state | string | Parcel state (e.g. "FINALIZED") |
| links | object | Object with a preliminary tracking link |
links (object)
| Field | Type | Description |
|---|---|---|
| tracking | string | Preliminary tracking URL — see the note below |
The create-order response does not contain the sender and recipient tracking links. It only contains a preliminary tracking link, which is generated before the parcel exists in our tracking system and therefore does not resolve yet — opening it gives a broken link.
senderTracking and recipientTracking are generated once the full order has been sent with parcelPackingConfirmed: true. When they are ready they replace the preliminary tracking link in the Fetch Order response, so fetch them with Fetch Order using the orderId from this response.
Fetch Order For Tracking Links
Production: GET https://api.integration.instabee.com/orders/{orderId}
Sandbox: GET https://sandbox-api.integration.instabee.com/orders/{orderId}
Headers:
1Authorization: Bearer {token}1Authorization: Bearer {token}
Example Fetch Order Response (masked)
1{ 2 "orderId": "019f1d06-a091-756b-91cb-90e42f2e50d0", 3 "parcels": [ 4 { 5 "orderId": "019f1d06-a091-756b-91cb-90e42f2e50d0", 6 "parcelId": "XX01000001230644", 7 "links": { 8 "recipientTracking": "https://budbee.com/s/we8K2mP", 9 "senderTracking": "https://budbee.com/s/sw4nQ9tL" 10 }, 11 "state": "FINALIZED", 12 "product": "LOCKER_TO_LOCKER", 13 "brand": "BUDBEE", 14 "countryCode": "SE", 15 "recipient": { 16 "city": "Stockholm", 17 "countryCode": "SE", 18 "email": "recipient@example.com", 19 "name": "Anna Svensson", 20 "phone": "+46701234567", 21 "postalCode": "11327", 22 "street": "Upplandsgatan 42" 23 }, 24 "sender": { 25 "city": "Stockholm", 26 "countryCode": "SE", 27 "email": "sender@example.com", 28 "name": "Erik Johansson", 29 "phone": "+46707654321", 30 "postalCode": "11157", 31 "street": "Sveavagen 10" 32 }, 33 "deliveryOption": { 34 "sortCode": "IN456wOx9dJ" 35 } 36 } 37 ] 38}1{ 2 "orderId": "019f1d06-a091-756b-91cb-90e42f2e50d0", 3 "parcels": [ 4 { 5 "orderId": "019f1d06-a091-756b-91cb-90e42f2e50d0", 6 "parcelId": "XX01000001230644", 7 "links": { 8 "recipientTracking": "https://budbee.com/s/we8K2mP", 9 "senderTracking": "https://budbee.com/s/sw4nQ9tL" 10 }, 11 "state": "FINALIZED", 12 "product": "LOCKER_TO_LOCKER", 13 "brand": "BUDBEE", 14 "countryCode": "SE", 15 "recipient": { 16 "city": "Stockholm", 17 "countryCode": "SE", 18 "email": "recipient@example.com", 19 "name": "Anna Svensson", 20 "phone": "+46701234567", 21 "postalCode": "11327", 22 "street": "Upplandsgatan 42" 23 }, 24 "sender": { 25 "city": "Stockholm", 26 "countryCode": "SE", 27 "email": "sender@example.com", 28 "name": "Erik Johansson", 29 "phone": "+46707654321", 30 "postalCode": "11157", 31 "street": "Sveavagen 10" 32 }, 33 "deliveryOption": { 34 "sortCode": "IN456wOx9dJ" 35 } 36 } 37 ] 38}
Read parcels[].links.recipientTracking and parcels[].links.senderTracking when present. Tracking links are only available for parcels in active/trackable states — a cancelled parcel has an empty links object.
See Fetch Tracking Links for the full flow.
Best Practices
- Accurate Measurements: Always provide accurate dimensions and weight
- Prompt Confirmation: Confirm packing as soon as possible after physical packing
- Error Handling: Implement proper error handling for failed confirmations
- Status Tracking: Monitor the parcel status via the Instabee API or dashboard
Size Limitations
Each delivery method has maximum size and weight limitations:
| Delivery Type | Max Length (cm) | Max Width (cm) | Max Height (cm) | Max Weight (kg) |
|---|---|---|---|---|
| Locker - Small | 39 | 39 | 59 | 20 |
Exceeding these limitations may result in additional charges or delivery refusal.
Quick Links
- Availability API - Check delivery options and get tokens