Open API
Delivery Job Endpoints
These endpoints use organization-scoped API keys. Agent keys can only access jobs visible to the agent organization. Contractor keys can only access jobs visible to the contractor organization.
Authentication
Send one of these headers on every request.
x-api-key: shiplah_live_xxx
Authorization: Bearer shiplah_live_xxx
Common Types
| Type | Format | Example |
|---|---|---|
string | UTF-8 text. | MARK-001 |
integer | Whole number. Quantity fields must be at least 1. | 3 |
number | Decimal number. | 12.5 |
boolean | true or false. | false |
date | YYYY-MM-DD. | 2026-05-21 |
datetime | ISO 8601 timestamp. | 2026-05-21T10:00:00.000Z |
GET
/jobs
Returns paginated delivery jobs visible to the API key's organization.
Query Parameters
| Name | Required | Type | Description |
|---|---|---|---|
marking_number | Optional | string | Exact Marking Number match. |
batch_number | Optional | string | Exact Batch Number match. |
normalized_status | Optional | string | Exact normalized status code match. See Reference. |
updated_at_from | Optional | date | Include jobs updated on or after this date. |
updated_at_to | Optional | date | Include jobs updated on or before this date. |
scheduled_date_from | Optional | date | Include jobs scheduled on or after this date. |
scheduled_date_to | Optional | date | Include jobs scheduled on or before this date. |
page | Optional | integer | Page number. Default is 1. |
page_size | Optional | integer | Items per page. Default is 10; maximum is 100. |
Example Request
curl -H "x-api-key: shiplah_live_xxx" \
"https://www.shiplahsg.com/api/v1/open-api/jobs?marking_number=MARK-001&page=1&page_size=10"
Response Data
{
"items": [
{
"id": "job-id",
"marking_number": "MARK-001",
"batch_number": "BATCH-001",
"group_code": "A1",
"piece_quantity": 3,
"labels": null,
"pts": 1.5,
"weight": 12.5,
"recipient_name": "Jane Tan",
"recipient_contact": "90000000",
"delivery_address": "10 Test Road",
"postal_code": "100001",
"scheduled_date": "2026-05-21",
"instructions": "Leave at reception",
"normalized_status": "completed",
"failure_reason": null,
"scheduled_delivery_date": null,
"scheduled_delivery_pending": false,
"provider_status": "completed",
"created_at": "2026-05-20T10:00:00.000Z",
"updated_at": "2026-05-21T10:00:00.000Z"
}
],
"pagination": {
"page": 1,
"page_size": 10,
"total": 1
}
}
PATCH
/jobs/by-marking/:markingNumber
Updates one delivery job by Marking Number.
Path Parameters
| Name | Required | Type | Description |
|---|---|---|---|
markingNumber | Required | string, max 120 | The delivery job Marking Number. |
Request Body
Provide at least one editable field.
| Name | Required | Type | Description |
|---|---|---|---|
batch_number | Optional | string or null, max 120 | Batch Number. |
group_code | Optional | string or null, max 120 | Warehouse area or group code. |
piece_quantity | Optional | integer or null, min 1 | Number of pieces. |
labels | Optional | string or null, max 255 | Optional labels. |
pts | Optional | number or null | PTS value. |
weight | Optional | number or null | Weight. |
recipient_name | Optional | string or null, max 255 | Recipient name. |
recipient_contact | Optional | string or null, max 255 | Recipient phone or contact. |
delivery_address | Optional | string or null, max 1000 | Delivery address. |
postal_code | Optional | string or null, max 60 | Postal code. |
scheduled_date | Optional | date or null | Scheduled delivery date. |
instructions | Optional | string or null, max 1000 | Delivery instructions. |
normalized_status | Optional | string | Status code. See Reference. |
failure_reason | Optional | string or null, max 64 | Failure or on-hold reason code. |
scheduled_delivery_date | Optional | date or null | Confirmed scheduled delivery date. |
scheduled_delivery_pending | Optional | boolean | Whether scheduled delivery is still pending. |
Example Request
curl -X PATCH \
-H "content-type: application/json" \
-H "x-api-key: shiplah_live_xxx" \
-d '{"normalized_status":"completed","recipient_contact":"90000000"}' \
"https://www.shiplahsg.com/api/v1/open-api/jobs/by-marking/MARK-001"
PATCH
/jobs/batch
Updates up to 100 delivery jobs. Each item is matched by Marking Number.
Request Body
| Name | Required | Type | Description |
|---|---|---|---|
jobs | Required | array, 1 to 100 items | List of update items. |
jobs[].marking_number | Required | string, max 120 | Marking Number of the job to update. |
jobs[].* | Required | one or more editable fields | Use the same editable fields as PATCH /jobs/by-marking/:markingNumber. |
Example Request
{
"jobs": [
{
"marking_number": "MARK-001",
"normalized_status": "completed"
},
{
"marking_number": "MARK-002",
"failure_reason": "wrong_incomplete_address"
}
]
}
Response Data
{
"updated_count": 1,
"failed_count": 1,
"results": [
{
"marking_number": "MARK-001",
"success": true,
"job": {}
},
{
"marking_number": "MARK-002",
"success": false,
"error": "Delivery job not found for Marking Number"
}
]
}
Job Object Fields
| Name | Type | Description |
|---|---|---|
id | string | Delivery job id. |
marking_number | string | Marking Number. |
batch_number | string or null | Batch Number. |
group_code | string or null | Warehouse area or group code. |
piece_quantity | integer or null | Number of pieces. |
labels | string or null | Optional labels. |
pts | number or null | PTS value. |
weight | number or null | Weight. |
recipient_name | string or null | Recipient name. |
recipient_contact | string or null | Recipient phone or contact. |
delivery_address | string or null | Delivery address. |
postal_code | string or null | Postal code. |
scheduled_date | date or null | Scheduled delivery date. |
instructions | string or null | Delivery instructions. |
normalized_status | string | Platform status code. |
failure_reason | string or null | Failure reason code. |
scheduled_delivery_date | date or null | Confirmed scheduled delivery date. |
scheduled_delivery_pending | boolean | Whether scheduled delivery is still pending. |
provider_status | string or null | Current provider status value. |
created_at | datetime | Creation timestamp. |
updated_at | datetime | Last update timestamp. |
Error Responses
Errors use the same response envelope with success: false.
{
"request_id": "req_...",
"success": false,
"data": null,
"error": {
"code": "BadRequestException",
"message": "No editable fields provided",
"details": null
}
}
| Status | Common Cause |
|---|---|
400 | Invalid parameter format, unknown status, missing Marking Number, or no editable fields. |
401 | Missing or invalid API key. |
404 | No visible delivery job matched the supplied Marking Number. |
500 | Unexpected server error. |