Merchants
API
Version 1
Shipments

Table of Contents 📖

  1. Variables
  2. Shipments

Variables

  • merchantAPIEndpoint: /api
  • orderId: GR--3001--MER78
  • trackingNumber: 10123456789

Shipments

1. Get Shipments

Example
GET {merchantAPIEndpoint}/shipments

Response

Status: 200 OK

Content-Type: application/json

{
    "params": {
        "page": 1,  // Current page number of shipments
        "items_per_page": 10,  // Number of items per page
        "total_items": 10,  // Total number of items
        "status": null,  // The status of the shipment (if applicable)
        "date_from": "2020-01-01 00:00:00",  // Start date for the shipments filter
        "date_to": null  // End date for the shipments filter
    },
    "shipments": [
        {
            "shipment_id": 90,  // ID of the shipment
            "shipment_timestamp": false,  // UNIX timestamp for when the shipment occurred (false if not available)
            "comments": null,  // Any comments for the shipment
            "status": "P",  // The current status of the shipment (P = Pending)
            "order_id": 3006,  // ID of the associated order
            "order_reference": "GR--3006--MER78",  // The reference code for the order
            "order_timestamp": 1738323842,  // UNIX timestamp when the order was created
            "s_firstname": "Sarah",  // Shipping address first name
            "s_lastname": "Muller",  // Shipping address last name
            "firstname": "Sarah",  // Customer's first name
            "lastname": "Muller",  // Customer's last name
            "shipping": "Courier Center",  // Shipping carrier (e.g., "Courier Center")
            "tracking_number": null,  // Tracking number for the shipment (if available)
            "carrier_info": {
                "tracking_url": null,  // URL for tracking the shipment (if available)
                "name": "Courier Center (Standard)",  // Carrier name
                "method": "Standard", // Carrier shipping Method
                "delivery_key": "courier_center_standard" // Carrier Method key
            },
            "products_info": [
                {
                    "product_id": "SF-2",  // ID of the product being shipped
                    "product_qty": 1  // Quantity of the product being shipped
                },
                {
                    "product_id": "SF-2",
                    "product_qty": 1
                },
                {
                    "product_id": "SF-2",
                    "product_qty": 1
                },
                {
                    "product_id": "SF-2",
                    "product_qty": 1
                }
            ],
            "products": {
                "308": {
                    "item_id": 308,  // ID of the specific item in the order
                    "order_id": 55,  // ID of the order to which this product belongs
                    "product_id": 217,  // Product ID
                    "product_code": "SF-2",  // Unique product code
                    "price": 2346,  // Price of a single unit of the product
                    "total_price": 9384,  // Total price for the quantity of the product being shipped
                    "amount": 4,  // Quantity of this product
                    "product": "Phone",  // Product name
                    "base_price": 2346,  // Base price of the product
                    "original_price": 2346  // Original price of the product (before any discounts)
                }
            }
        }
    ]
}

2. Retrieve single Shipment

Example
GET {merchantAPIEndpoint}/shipments/{shipmentId}

Response

Status: 200 OK

Content-Type: application/json

{
    "shipment_id": 90,  // ID of the shipment
    "shipment_timestamp": false,  // UNIX timestamp when the shipment occurred (false if not available)
    "comments": null,  // Comments related to the shipment
    "status": "P",  // The current status of the shipment (P = Pending)
    "order_id": 3006,  // ID of the associated order
    "order_reference": "GR--3006--MER78",  // Reference code for the associated order
    "order_timestamp": 1738323842,  // UNIX timestamp when the order was placed
    "s_firstname": "Sarah",  // First name of the person receiving the shipment
    "s_lastname": "Muller",  // Last name of the person receiving the shipment
    "firstname": "Sarah",  // Customer's first name
    "lastname": "Muller",  // Customer's last name
    "shipping": "Courier Center",  // Shipping carrier (e.g., "Courier Center")
    "tracking_number": null,  // Tracking number for the shipment (if available)
    "carrier_info": {
        "tracking_url": null,  // URL for tracking the shipment (if available)
        "name": "Courier Center (Standard)",  // Carrier name
        "method": "Standard", // Carrier shipping Method
        "delivery_key": "courier_center_standard" // Carrier Method key
    },
    "products_info": [
        {
            "product_id": "SF-2",  // ID of the product being shipped
            "product_qty": 1  // Quantity of the product being shipped
        },
        {
            "product_id": "SF-2",
            "product_qty": 1
        }
    ],
    "products": {
        "308": {
            "item_id": 308,  // ID of the specific item in the order
            "order_id": 55,  // ID of the order to which this product belongs
            "product_id": 217,  // Product ID
            "product_code": "SF-2",  // Unique product code
            "price": 2346,  // Price of a single unit of the product
            "total_price": 9384,  // Total price for the quantity of the product being shipped
            "amount": 4,  // Quantity of this product
            "product": "Phone",  // Product name
            "base_price": 2346,  // Base price of the product
            "original_price": 2346  // Original price of the product (before any discounts)
        }
    }
}

3. Create Voucher

Example
GET {merchantAPIEndpoint}/courier/{shipment_id}?number_of_packages={X}

⚠️ Note: The "Number of Packages" parameter is ignored for the Box Now and CleverPoint shipping methods, as it will automatically be set to 1.

Response

Status: 200 OK

Content-Type: application/json

response
{
    "voucher": {
        "ShipmentNumber": "0123456789",  // Unique shipment number associated with the voucher
        "TrackingNumbers": ["0123456789"],  // List of tracking numbers for the shipment
        "ShipmentMasterId": "b6422f45-6518-4df0-8d23-f95fb9deb0ea",  // Unique identifier for the shipment master (can refer to the parent shipment)
        "ShipmentAlreadyExist": false,  // Boolean indicating if the shipment already exists (false = not existing)
        "Result": "Success"  // The result of the shipment action (Success, Failed, etc.)
    }
}

Status: 400 BAD REQUEST

Response If the shipment has already created a voucher.

response
{
	"message": "Internal Server Error: Voucher already exists",
	"errors": [
		"Voucher already exists"
	],
	"status": 500
}

Response If the shipment ID is wrong.

response
{
    "error": "Company name of consignee is required"
}

4. Cancel Voucher

GET {merchantAPIEndpoint}/courier?cancel={trackingNumber}

Response

Status: 204 No Content

Status: 400 BAD REQUEST

Response If the Shipment already exists

response
{
    "ShipmentAlreadyExist": false,
    "Result": "Success"
}

Response If the Shipment already canceled

response
{
    "ShipmentAlreadyExist": false,  // Boolean indicating if the shipment already exists (false = does not exist)
    "Result": "Failure",  // The result of the shipment action (e.g., Success, Failure)
    "Errors": [
        {
            "Code": "SHIPMENT_ALREADY_CANCELLED",  // Error code identifying the type of issue (e.g., shipment already canceled)
            "Severity": "Hard",  // Severity of the error (e.g., Hard = critical issue that stops the process)
            "Message": "Shipment Is Already Canceled"  // Description of the error
        }
    ]
}

Response If the Shipment voucher is wrong

response
{
    "ShipmentAlreadyExist": false,  // Boolean indicating if the shipment already exists (false = does not exist)
    "Result": "Failure",  // The result of the shipment action (e.g., Success, Failure)
    "Errors": [
        {
            "Code": "SHIPMENT_NOT_FOUND",  // Error code identifying the type of issue (e.g., shipment not found)
            "Severity": "Hard",  // Severity of the error (e.g., Hard = critical issue that stops the process)
            "Message": "No shipment found with AWB 0135633275111"  // Description of the error, in this case, no shipment found with the provided tracking number
        }
    ]
}

5. Print Voucher

GET {merchantAPIEndpoint}/courier?print={trackingNumber}

Parameters

NameTypeDescriptionRequiredDefault
label-formatnumberVoucher formatNoNone

Available Label Format Options

ServiceAvailable ValuesExample
Diakinisisa4, a6, a4-3&labelFormat=a4
Courier Centerthermiko, pdf, singlepdf, singleclean&labelFormat=thermiko
Box Nowsinglepdf_100x150&labelFormat=singlepdf_100x150

Example

GET {merchantAPIEndpoint}/courier?print={trackingNumber}&labelFormat=pdf

Response

Status: 200 OK

Content-Type: application/json

response
{
    "VoucherFormat": "PDF",  // The format of the voucher (e.g., PDF)
    "VoucherDataList": [],  // An array that holds any data related to the voucher (currently empty)
    "VoucherDataReturnList": [],  // An array that holds data returned from the voucher (currently empty)
    "Voucher": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlL1hPYmpl ...... jwhhj34t34nmxzvkl4tDGDF909=",  // The actual voucher data, encoded in a format such as Base64
    "Result": "Success"  // The result of the action (e.g., Success, Failure)
}

Status: 400 BAD REQUEST

response
{
    "Result": "Failure",  // The result of the operation (e.g., Success, Failure)
    "Errors": [
        {
            "Code": "SHIPMENT_NOT_FOUND",  // The error code that identifies the type of issue
            "Severity": "Hard",  // The severity level of the error (e.g., Hard, Soft)
            "Message": "No shipment found with AWB 0135633275111"  // A descriptive message explaining the error
        }
    ]
}

6. Print Mass Shipment Vouchers

GET {merchantAPIEndpoint}/courier?printmass={trackingNumber,trackingNumber}&labelFormat=pdf

Response

Status: 200 OK

response
[
    {
        "VoucherFormat": "PDF",  // The format of the voucher (e.g., PDF, HTML)
        "VoucherDataList": [],  // A list of voucher data (currently empty)
        "VoucherDataReturnList": [],  // A list of returned voucher data (currently empty)
        "Voucher": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlL1hPYmpl ...... jwhhj34t34nmxzvkl4tDGDF909=",  // The encoded voucher content (base64)
        "Result": "Success"
    },
    {
        "VoucherFormat": "PDF",  // The format of the voucher (e.g., PDF, HTML)
        "VoucherDataList": [],  // A list of voucher data (currently empty)
        "VoucherDataReturnList": [],  // A list of returned voucher data (currently empty)
        "Voucher": "FASDFASGSD214GFDG657VHGFHFGJGFHJ ...... jwhhj34t34nmxzvkl4tDGDF909=",  // The encoded voucher content (base64)
        "Result": "Success"
    }
 
    // Additional entries can be added here...
 
]

Status: 400 BAD REQUEST

Error Response if wrong voucher number

response
{
    "Result": "Failure",  // The result of the operation, indicating that it failed
    "Errors": [
        {
            "Code": "SHIPMENT_NOT_FOUND",  // The error code, indicating the specific issue (shipment not found)
            "Severity": "Hard",  // The severity level of the error (Hard means it's a critical error)
            "Message": "No shipment found with AWB 0135633275111"  // A descriptive error message providing more details about the issue
        }
    ]
}

7. Tracking Shipment

⚠️ deprecated — This endpoint is no longer recommended for use and may be removed in future versions.

GET {merchantAPIEndpoint}/courier?trackingnumber={trackingNumber}

Response

Status: 200 OK

response
{
    "TrackingList": [
        {
            "EntityID": "76d6a07b-d5c2-4ce3-b9bf-67d5292364b8",  // A unique identifier for the tracking entry
            "StationName": "WEB STATION"  // The name of the station associated with the tracking
        }
    ],
    "Result": "Success"
}

8. Create Manifest

Note: You must provide the shipmentID of the order(s) to generate the manifest. Only orders that are ready for shipment can have a manifest created.

GET {merchantAPIEndpoint}/courier?custom_manifest=1&shipments={shipmentID,shipmentID}

Response

Status: 200 OK

response
{
    "manifestContent": "FASDFASGSD214GFDG657VHGFHFGJGFHJ ...... jwhhj34t34nmxzvkl4tDGDF909=", // The encoded voucher content (base64)
    "error": null
}

Status: 400 BAD REQUEST

The requested order(s) could not be found, so the manifest creation failed.

response
{
    "manifestContent": null,
    "error": {
        "errorMessage": "The manifest could not be created due to the absence of sales orders",
        "errorCode": 10400
    }
}

Possible Reasons

  • Order does not exist for the given shipment_id.
  • Order is not ready for shipment.

Example order (to get the shipmentID):

{
  "order_id": 3257,
  "user_id": 2,
  "order_reference": "GR--3257--MER78",
 
  // Other fields...
 
  "shipment_ids": [  // List of shipment IDs
    462
  ],
  "products": [
    "307": {
      "item_id": 307,
 
      // Other fields...
 
    }
  ]
}