openapi: 3.1.0 info: title: Ship an Order version: 3.0.0 contact: name: Sendcloud API Support email: contact@sendcloud.com license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html description: | The Sendcloud Ship an Order API ## What can you do with this API? - [Create Labels for orders](/docs/orders/ship-an-order/). servers: - url: https://panel.sendcloud.sc/api/v3 description: Sendcloud Production tags: - name: Ship an Order description: OrderLabelAPI paths: /orders/create-labels-async: post: tags: - Ship an Order operationId: sc-public-v3-orders_labels-post-create_labels_async security: - HTTPBasicAuth: [] - OAuth2ClientCreds: [] summary: Request a label for one or more orders asynchronously description: >- Request a label for a single or multiple orders. This endpoint will fail gracefully if some orders cannot be processed, returning any successfully created labels along with error details for the orders that failed. x-mint: href: >- /api/v3/ship-an-order/request-a-label-for-one-or-more-orders-asynchronously content: >- To retrieve your documents or view announcement errors, use the `id` of the relevant shipment with the [Retrieve a shipment](/api/v3/shipments/retrieve-a-shipment) endpoint. To apply shipping rules to the orders, make sure to set `apply_shipping_rules` to `true`. This endpoint will attempt to generate labels for each order. If a request for one label errors, it will still attempt to generate the other labels. Because of this, the response might return a mix of labels and errors. Use the errors `source` `pointer` field to see which labels encountered a problem. If you create orders via the [Orders API](/api/v3/orders/create-update-orders-in-batch) and then immediately request labels, the orders may not yet be available. Order saving is **asynchronous**. A successful `201` response from the Orders API does not guarantee the order is immediately ready for shipping. Before calling this endpoint, verify the order exists by retrieving it with the [Retrieve an order](/api/v3/orders/retrieve-an-order) endpoint. parameters: - $ref: '#/components/parameters/SendcloudPartnerId' requestBody: content: application/json: schema: $ref: '#/components/schemas/create-labels-async' examples: CreateSingleLabelAsync: summary: Create a label for a specific order. description: Create a single shipping label for the order you want to ship. value: integration_id: 70 orders: - order_number: ORDER-25763 apply_shipping_rules: false CreateLabelUsingSenderAddressIDAsync: summary: Create a label for a specific order using a sender address ID. description: >- Create a single shipping label where the sender address is being supplied through ID. value: integration_id: 70 sender_address_id: 17 orders: - order_number: ORDER-25763 CreateLabelUsingBrandIDAsync: summary: Create a label for a specific order using a brand ID. description: >- Create a single shipping label where the brand is being set through ID. value: integration_id: 70 brand_id: 42 orders: - order_number: ORDER-25763 CreateLabelUsingShipWithAsync: summary: >- Create a label for a specific order using a specific shipping option. description: >- Create a single shipping label where the carrier and the shipping functionalities are defined by the supplied shipping_option_code. value: integration_id: 70 ship_with: type: shipping_option_code properties: contract_id: 517 shipping_option_code: postnl:standard orders: - order_number: ORDER-25763 CreateLabelsAsync: summary: Create a label for a multiple orders. description: >- Create shipping labels for orders you want to sent to your customers. value: integration_id: 70 orders: - order_number: ORDER-257633 apply_shipping_rules: false - order_id: d59e8b1c-04ca-4b38-90cf-e11083506e22 CreateMulticolloLabelAsync: summary: Create multiple labels for an order. description: >- Create shipping labels for order you want to sent in multiple parcels. value: integration_id: 70 orders: - order_number: ORDER-25763 parcels: - parcel_items: - item_id: '5552' quantity: 1 - item_id: '5555' quantity: 2 dimensions: length: '5.00' width: '15.00' height: '20.00' unit: cm weight: value: '1.320' unit: kg - parcel_items: - item_id: '5552' quantity: 1 - item_id: '763' quantity: 12 dimensions: length: '10.00' width: '12.00' height: '30.00' unit: cm weight: value: '2.2' unit: kg apply_shipping_rules: false responses: '202': description: Information about the created parcels. content: application/json: schema: type: object properties: data: type: array description: >- An array containing the created parcel IDs and other order information. minItems: 0 items: $ref: '#/components/schemas/label-async' errors: type: - array items: type: object allOf: - $ref: '#/components/schemas/ErrorObject' required: - status - code - detail examples: AllLabelsSuccessful: description: All the requested labels were successfully generated. value: data: - parcel_id: 420 parcels_ids: - 420 shipment_id: '511' order_id: 593c853e-ca90-4ab4-953c-fd2f47dd8dc3 order_number: ORD-2024-00174 - parcel_id: 4428 parcels_ids: - 4428 shipment_id: '512' order_id: '23458265234' order_number: ORD-2024-00166 MulticolloLabelsSuccessful: description: A single order shipped in multiple parcels. value: data: - parcel_id: 420 parcels_ids: - 420 - 421 - 422 shipment_id: '511' order_id: 593c853e-ca90-4ab4-953c-fd2f47dd8dc3 order_number: ORD-2024-00174 SomeLabelsContainErrors: description: >- Some labels were generated, while others encountered an error. value: data: - parcel_id: 420 parcels_ids: - 420 shipment_id: '511' order_id: 593c853e-ca90-4ab4-953c-fd2f47dd8dc3 order_number: ORD-2024-00174 errors: - status: '400' code: validation_error title: Invalid order detail: The order has no valid shipping address. source: pointer: /data/attributes/orders/[1] SenderAddressIDDoesNotExist: description: Sender Address does not exist. value: errors: - status: '404' code: invalid detail: Does not exist. source: pointer: /data/attributes/sender_address_id LabelsSuccessfulWithShipWith: description: >- All the requested labels were successfully generated using the provided `ship_with` option. value: data: - parcel_id: 420 shipment_id: '511' order_id: 593c853e-ca90-4ab4-953c-fd2f47dd8dc3 order_number: ORD-2024-00174 ship_with: type: shipping_option_code properties: contract_id: 517 shipping_option_code: postnl:standard - parcel_id: 4428 shipment_id: '512' order_id: '23458265234' order_number: ORD-2024-00166 ship_with: type: shipping_option_code properties: contract_id: 517 shipping_option_code: postnl:standard '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/errors' examples: InvalidOrderId: summary: The provided order_id is not a valid string. value: errors: - detail: Input should be a valid string status: '400' source: pointer: /data/attributes/orders/0/order_id code: invalid '404': $ref: '#/components/responses/NotFound' /orders/create-label-sync: post: tags: - Ship an Order operationId: sc-public-v3-orders_labels-post-create_labels_sync security: - HTTPBasicAuth: [] - OAuth2ClientCreds: [] summary: Request a label for a single order synchronously description: >- Request a label for a single order and wait for the results. The label and any other documents will be provided in the response to this request. x-mint: href: /api/v3/ship-an-order/request-a-label-for-a-single-order-synchronously content: >- If you create orders via the [Orders API](/api/v3/orders/create-update-orders-in-batch) and then immediately request a label, the order may not yet be available. Order saving is **asynchronous**. A successful `201` response from the Orders API does not guarantee the order is immediately ready for shipping. Before calling this endpoint, verify the order exists by retrieving it with the [Retrieve an order](/api/v3/orders/retrieve-an-order) endpoint. parameters: - $ref: '#/components/parameters/SendcloudPartnerId' requestBody: content: application/json: schema: $ref: '#/components/schemas/create-labels-sync' examples: CreateSingleLabelSync: summary: Create a label for a specific order. description: Create a shipping label for the order you want to ship. value: integration_id: 70 label_details: mime_type: application/pdf dpi: 72 order: order_number: ORDER-25763 apply_shipping_rules: false CreateLabelUsingShipWithSync: summary: >- Create a label for a specific order using a specific shipping option. description: >- Create a single shipping label where the carrier and the shipping functionalities are defined by the supplied `shipping_option_code`. value: integration_id: 70 ship_with: type: shipping_option_code properties: contract_id: 517 shipping_option_code: postnl:standard order: - order_number: ORDER-25763 CreateLabelUsingSenderAddressIDSync: summary: Create a label for a specific order using a sender address ID. description: Create a shipping label using a specific sender address. value: integration_id: 70 sender_address_id: 17 label_details: mime_type: application/pdf dpi: 72 orders: - order_number: ORDER-25763 CreateLabelUsingBrandIDSync: summary: Create a label for a specific order using a brand ID. description: Create a single shipping label using a specific brand. value: integration_id: 70 brand_id: 42 label_details: mime_type: application/pdf dpi: 72 order: order_number: ORDER-25763 responses: '201': description: Parcel ID along with generated label. content: application/json: schema: type: object properties: data: type: object description: Parcel ID, tracking details and generated label. $ref: '#/components/schemas/label-sync' examples: LabelSuccessfulWithShipWith: description: >- All requested labels are being generated with the provided `ship_with`. value: data: - parcel_id: 420 shipment_id: '511' order_id: 593c853e-ca90-4ab4-953c-fd2f47dd8dc3 order_number: ORD-2024-00174 ship_with: type: shipping_option_code properties: contract_id: 517 shipping_option_code: postnl:standard tracking_number: ABCD1234567890 tracking_url: >- https://test.shipping-portal.com/tracking/?tracking_number=abcd1234567890&country=nl&postal_code=1234AB label: file: mime_type: application/pdf dpi: 72 documents: - type: label size: a6 link: >- https://panel.sendcloud.sc/api/v3/parcels/1234567890/documents/label - parcel_id: 4428 shipment_id: '512' order_id: '23458265234' order_number: ORD-2024-00166 ship_with: type: shipping_option_code properties: contract_id: 517 shipping_option_code: postnl:standard tracking_number: ABCD1234567890 tracking_url: >- https://test.shipping-portal.com/tracking/?tracking_number=abcd1234567890&country=nl&postal_code=1234AB label: file: mime_type: application/pdf dpi: 72 documents: - type: label size: a6 link: >- https://panel.sendcloud.sc/api/v3/parcels/1234567890/documents/label '400': $ref: '#/components/responses/BadRequest' '404': $ref: '#/components/responses/NotFound' components: responses: NotFound: description: Not Found content: application/json: schema: $ref: '#/components/schemas/errors' examples: PageNotFound: summary: The page you have requested could not be found. value: errors: - status: '404' code: not_found title: Not found detail: The page you have requested could not be found. BadRequest: description: Bad Request content: application/json: schema: $ref: '#/components/schemas/errors' examples: InvalidOrderId: summary: The provided order_id is not a valid string. value: errors: - status: '400' code: invalid title: Invalid detail: Input should be a valid string. source: pointer: /data/attributes/order/order_id securitySchemes: HTTPBasicAuth: type: http description: >- Basic Authentication using API key and secrets is currently the main authentication mechanism. scheme: basic OAuth2ClientCreds: type: oauth2 description: >- OAuth2 is a standardized protocol for authorization that allows users to share their private resources stored on one site with another site without having to provide their credentials. OAuth2 Client Credentials Grant workflow. This workflow is typically used for server-to-server interactions that require authorization to access specific resources. flows: clientCredentials: tokenUrl: https://account.sendcloud.com/oauth2/token/ scopes: api: Default OAuth scope required to access Sendcloud API. parameters: SendcloudPartnerId: in: header name: Sendcloud-Partner-Id description: >- If you are an official [Sendcloud Tech Partner](https://www.sendcloud.com/ecosystem/), send your unique Sendcloud Partner UUID as a request header for the system to recognize you. The header is not required but if it is set, the system will check it. An unknown or invalid UUID will cause a 400 error. schema: type: string schemas: shipping-option-code-properties: title: Shipping option properties Object description: >- Contains the required properties to be sent when API client informs the shipping method and carrier to be used type: object properties: shipping_option_code: type: - string - 'null' description: >- The shipping option that will be or is used for shipping your parcel. The code can be retrieved via the [Create a list of shipping options](/api/v3/shipping-options/create-a-list-of-shipping-options) endpoint. When `ship_with.type` is set to `shipping_option_code`, this field is mandatory. example: postnl:standard/insured=3000 contract_id: type: - integer - 'null' minimum: 1 description: >- The selected shipping contract. If you haven't specified a contract for shipping your parcel, we will automatically select the default contract for the carrier that matches your shipping option. You can retrieve your contract IDs from the [Retrieve a list of contracts](/api/v3/contracts/retrieve-a-list-of-contracts) endpoint. Otherwise, the default direct contract will be automatically selected. ship-with: title: Ship with object type: object description: > The ship with object can be used to define how you would like to send your shipment. You can use a `shipping_option_code`. This is a unique identifier that displays what carrier and what set of shipping functionalities you want to use. examples: - type: shipping_option_code properties: shipping_option_code: postnl:standard/insured=3000 contract_id: 517 properties: type: type: string description: > The way the shipping method and carrier will be selected. Nowadays the only possible value is 'shipping_option_code', which requires client to also send the `shipping_option_code` inside properties. enum: - shipping_option_code example: shipping_option_code properties: $ref: '#/components/schemas/shipping-option-code-properties' required: - type - properties create-labels-base: type: object required: - integration_id properties: integration_id: type: integer description: The ID of the integration your orders belong to. example: 70 sender_address_id: type: integer example: 192 description: >- The ID of the sender address you would like to ship from. If not specified, your default sender address will be used. A sender address can be added through the [Sendcloud platform](https://app.sendcloud.com/v2/settings/addresses/sender) and be retrieved using the [Retrieve a list of sender addresses](/api/v3/sender-addresses/retrieve-a-list-of-sender-addresses) endpoint. brand_id: type: integer example: 42 description: >- The ID of the brand. Brands can be added through the [Sendcloud platform](https://app.sendcloud.com/v2/settings/brands/list) and be retrieved using the [Retrieve a list of brands](/api/v2/brands/retrieve-a-list-of-brands) endpoint. > **Note:** The Brands API is currently only available in API v2. This reference will be updated when a v3 version becomes available. minimum: 1 ship_with: type: object $ref: '#/components/schemas/ship-with' components: schemas: OrderSelectorOrderIdRequired: type: object properties: order_id: type: string minLength: 1 maxLength: 64 description: >- An external order ID assigned by the shop system. Used to identify an order to be shipped. order_number: type: string minLength: 1 maxLength: 255 description: >- An identification of an order in a shop system (often unique). Used to identify an order to be shipped. apply_shipping_rules: type: boolean description: Apply shipping rules for this order. default: false example: false required: - order_id OrderSelectorOrderNumberRequired: type: object properties: order_id: type: string minLength: 1 maxLength: 64 description: >- External order ID assigned by shop system. Used to identify an order to be shipped. order_number: type: string minLength: 1 maxLength: 255 description: >- An identification of an order in a shop system (often unique). Used to identify an order to be shipped. apply_shipping_rules: type: boolean description: Apply shipping rules to this order. default: false example: false required: - order_number dimension-units: type: string title: Dimensional units enum: - cm - mm - m - yd - ft - in example: mm str-dimensions: title: Dimensions type: object description: Dimensions in the specified unit properties: length: type: string description: length in specified unit example: '15' width: type: string description: width in specified unit example: '20.5' height: type: string description: height in specified unit example: '37' unit: $ref: '#/components/schemas/dimension-units' required: - length - width - height - unit weight-units: type: string title: Mass Units Object enum: - kg - g - lbs - oz example: g str-weight: title: Weight type: object description: Weight in the specified unit properties: value: type: string description: Weight value example: '14.5' unit: $ref: '#/components/schemas/weight-units' required: - value - unit parcel-common-with-optional-fields: title: Parcel common with optional fields Object description: Parcel common with optional fields model type: object properties: dimensions: $ref: '#/components/schemas/str-dimensions' description: >- While dimensions are generally optional, some carriers require them to be present. If this is the case, an error will be thrown. weight: $ref: '#/components/schemas/str-weight' OrderItem: type: object properties: item_id: type: string description: >- The order item's external ID in the shop system. This `item_id` can be obtained via the [Retrieve an order](/api/v3/orders/retrieve-an-order) endpoint. example: '5552' minLength: 1 quantity: type: integer description: Quantity of items shipped. minimum: 1 example: 1 required: - item_id - quantity CreateLabelParcel: type: object allOf: - $ref: '#/components/schemas/parcel-common-with-optional-fields' - type: object properties: parcel_items: type: array description: List of items/products from the order that the parcel contains. maxItems: 1000 items: $ref: '#/components/schemas/OrderItem' required: - parcel_items create-labels-parcels: title: Multicollo parcels array Object description: >- Multicollo parcels array model used for splitting shipped object into multiple parcels type: object properties: parcels: description: >- Represents each package in the shipment. Each carrier can have its own limit for the number of parcels per shipment, otherwise there is a default maximum of 50 parcels. If left empty, one parcel will be created from an entire order. type: array items: $ref: '#/components/schemas/CreateLabelParcel' minItems: 1 maxItems: 50 components: schemas: OrderItem: type: object properties: item_id: type: string description: >- The order item's external ID in the shop system. This `item_id` can be obtained via the [Retrieve an order](/api/v3/orders/retrieve-an-order) endpoint. example: '5552' minLength: 1 quantity: type: integer description: Quantity of items shipped. minimum: 1 example: 1 required: - item_id - quantity CreateLabelParcel: type: object allOf: - $ref: '#/components/schemas/parcel-common-with-optional-fields' - type: object properties: parcel_items: type: array description: >- List of items/products from the order that the parcel contains. maxItems: 1000 items: $ref: '#/components/schemas/OrderItem' required: - parcel_items OrderSelectorOrderIdRequired: type: object properties: order_id: type: string minLength: 1 maxLength: 64 description: >- An external order ID assigned by the shop system. Used to identify an order to be shipped. order_number: type: string minLength: 1 maxLength: 255 description: >- An identification of an order in a shop system (often unique). Used to identify an order to be shipped. apply_shipping_rules: type: boolean description: Apply shipping rules for this order. default: false example: false required: - order_id OrderSelectorOrderNumberRequired: type: object properties: order_id: type: string minLength: 1 maxLength: 64 description: >- External order ID assigned by shop system. Used to identify an order to be shipped. order_number: type: string minLength: 1 maxLength: 255 description: >- An identification of an order in a shop system (often unique). Used to identify an order to be shipped. apply_shipping_rules: type: boolean description: Apply shipping rules to this order. default: false example: false required: - order_number create-labels-async: title: Create labels asynchronously description: >- Payload for creating labels for orders. Note that if the `sender_address_id` is not specified, the API will use the default [sender address](/docs/getting-started/sender-addresses) associated with your account. type: object allOf: - $ref: '#/components/schemas/create-labels-base' - type: object required: - orders - integration_id properties: orders: type: array minItems: 1 maxItems: 20 uniqueItems: true description: Array of order objects you want to create labels for items: allOf: - $ref: '#/components/schemas/create-labels-parcels' - oneOf: - $ref: '#/components/schemas/OrderSelectorOrderIdRequired' - $ref: '#/components/schemas/OrderSelectorOrderNumberRequired' label-base: type: object properties: shipment_id: type: string description: The ID of the shipment that was created for the provided order. example: '511' order_id: type: string description: The ID of your order. example: 593c853e-ca90-4ab4-953c-fd2f47dd8dc3 order_number: type: string description: A human-readable order number. example: ORD-2024-01414 ship_with: type: object $ref: '#/components/schemas/ship-with' label-async: title: Reference to label type: object description: Holds the reference to created label. allOf: - $ref: '#/components/schemas/label-base' - type: object properties: parcel_id: type: integer description: >- The ID of the parcel the label belongs to. For multicollo shipments, the ID of the first parcel will be returned. **Deprecated** in favour of the `parcels_ids` field, which returns an array containing the parcel ID (or multiple parcel IDs for a multicollo shipment). example: 420 deprecated: true parcels_ids: type: array description: >- An array containing the IDs of all the parcels the labels belong to. example: - 420 items: type: integer example: 420 ErrorObject: title: Error type: object description: Error in a JSON:API error format properties: id: type: string description: A unique identifier for the error. links: type: object description: >- A set of hyperlinks that provide additional information about the error. properties: about: type: string description: A URL that provides additional information about the error. status: type: string format: int32 description: The HTTP status code of the error. minLength: 1 code: type: string description: A unique error code for the error, in snake case format. minLength: 1 enum: - unknown_field - invalid - forbidden - invalid_choice - min_value - 'null' - not_found - required - not_a_list - non_field_errors - authentication_failed - validation_error - parcel_announcement_error title: type: string description: A short, human-readable summary of the error. minLength: 1 detail: type: string description: A human-readable explanation of the error. minLength: 1 source: type: object description: >- An object that identifies the source of the error within the request payload. properties: pointer: type: string description: >- A `JSON` pointer to the location of the error within the request payload. parameter: type: string description: The name of the `query` parameter that caused the error. header: type: string description: The name of the `header` parameter that caused the error. meta: type: object description: Additional metadata about the error. errors: title: Errors type: object description: A standardized format for errors in JSON:API responses. properties: errors: type: - array - object items: type: object allOf: - $ref: '#/components/schemas/ErrorObject' required: - status - code - detail create-labels-sync: title: Create labels synchronously description: > Payload for creating labels for orders. Note that if the `sender_address_id` is not specified, the API will use the default [sender address](/docs/getting-started/sender-addresses) associated with your account. type: object allOf: - $ref: '#/components/schemas/create-labels-base' - type: object required: - order - integration_id properties: order: type: object oneOf: - $ref: '#/components/schemas/OrderSelectorOrderIdRequired' - $ref: '#/components/schemas/OrderSelectorOrderNumberRequired' label_details: type: object properties: mime_type: type: string default: application/pdf enum: - application/pdf - application/zpl - image/png example: application/zpl description: The returned format of the label. dpi: type: integer default: 72 enum: - 72 - 150 - 203 - 300 - 600 example: 72 description: >- DPI refers to the printing resolution of your shipping labels. It's important that labels are printed at a high enough resolution to ensure the clarity of address details and the barcode for scanning purposes. Refer to the following table for DPI settings per file format: File format | Default DPI | Valid DPI ----------- | ----------- | --------- pdf | 72 | 72 png | 300 | 150, 300 ZPL labels are not affected by the DPI setting, as the resolution is determined by the carrier itself. Most carriers use a resolution of 203 DPI. Zebra printers need to be configured to print at the specific DPI of the label if they have higher resolution capabilities. documents: title: Documents Object type: object description: Documents object for a parcel properties: type: type: string deprecated: true description: The type of the document. See the list below for available types. enum: - label - cn23 - cp71 - commercial-invoice - cn23-default - air-waybill - qr document_type: type: string description: The type of the document. See the list below for available types. enum: - label - customs-declaration - air-waybill size: type: string description: The paper size of the document. enum: - a6 - a4 link: type: string description: >- A link to the document, which allows downloading of the document in PDF, PNG and ZPL and various DPI. label-sync: title: Reference to label type: object description: Holds the reference to created label. allOf: - $ref: '#/components/schemas/label-base' - type: object properties: parcel_id: type: integer description: The ID of the parcel the label belongs to. example: 420 label_details: type: object properties: file: type: string format: byte description: The base64 representation of the label file. mime_type: type: string default: application/pdf enum: - application/pdf - application/zpl - image/png example: application/zpl description: The returned format of the label. dpi: type: integer default: 72 enum: - 72 - 150 - 203 - 300 - 600 example: 72 description: >- DPI refers to the printing resolution of your shipping labels. It's important that labels are printed at a high enough resolution to ensure the clarity of address details and the barcode for scanning purposes. Refer to the following table for DPI settings per file format: File format | Default DPI | Valid DPI ----------- | ----------- | --------- pdf | 72 | 72 png | 300 | 150, 300 ZPL labels are not affected by the DPI setting, as the resolution is determined by the carrier itself. Most carriers use a resolution of 203 DPI. Zebra printers need to be configured to print at the specific DPI of the label if they have higher resolution capabilities. documents: type: array uniqueItems: true description: >- An array of documents. A parcel can contain multiple documents, for instance labels and a customs form. This field returns an array of all the available documents for this parcel. readOnly: true items: $ref: '#/components/schemas/documents' tracking_number: type: string description: Tracking number of the shipment. readOnly: true tracking_url: type: string description: Tracking url of this shipment. readOnly: true