Outbound API
Manage outbound shipments and inventory transfers between warehouses. The Outbound API tracks items leaving your warehouse as part of transfer processes, automatically completing when the destination warehouse confirms receipt via inbound operations.
Authentication
All API requests require authentication using Bearer token in the Authorization header and X-Tenant-Id header for tenant identification:
Authorization: Bearer YOUR_API_KEY
X-Tenant-Id: YOUR_TENANT_ID1. List Outbound Shipments
Retrieve a paginated list of all outbound shipments.
Endpoint
GET /api/partner/v1/outboundQuery Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | No | Page number (default: 1) |
| per_page | integer | No | Items per page (default: 20, max: 100) |
| status | string | No | Filter by status: preparing, shipped, in_transit, completed, cancelled |
| source_warehouse_id | string | No | Filter by source warehouse ID |
| destination_warehouse_id | string | No | Filter by destination warehouse ID |
| transfer_id | string | No | Filter by transfer request ID |
| date_from | string | No | Filter by date from (ISO 8601) |
| date_to | string | No | Filter by date to (ISO 8601) |
Response
Success Response (200 OK)
json
{
"status": "ok",
"data": {
"outbound": [
{
"id": "out_123456789",
"transfer_id": "trf_987654321",
"reference_number": "TRF-OUT-2024-001",
"status": "shipped",
"source_warehouse": {
"id": "wh_001",
"name": "Jakarta Warehouse"
},
"destination_warehouse": {
"id": "wh_002",
"name": "Surabaya Warehouse"
},
"expected_departure": "2024-01-15T09:00:00Z",
"actual_departure": "2024-01-15T09:15:00Z",
"total_items": 1,
"total_quantity": 50,
"shipped_quantity": 50,
"pending_quantity": 0,
"courier": "JNE",
"tracking_number": "TRK987654321",
"priority": "normal",
"created_at": "2024-01-10T08:00:00Z"
}
],
"pagination": {
"current_page": 1,
"per_page": 20,
"total": 1,
"total_pages": 1
}
},
"errors": null,
"request_id": "req_123456789"
}Example Request
bash
curl -X GET "https://sandbox-api.bebaskirim.com/api/partner/v1/outbound?page=1&per_page=20&status=shipped" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Id: YOUR_TENANT_ID"2. Get Outbound Shipment Details
Retrieve detailed information about a specific outbound shipment.
Endpoint
GET /api/partner/v1/outbound/{id}Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Outbound shipment ID |
Response
Success Response (200 OK)
json
{
"status": "ok",
"data": {
"outbound": {
"id": "out_123456789",
"transfer_id": "trf_987654321",
"reference_number": "TRF-OUT-2024-001",
"status": "completed",
"source_warehouse": {
"id": "wh_001",
"name": "Jakarta Warehouse",
"address": "Jl. Warehouse No. 123, Jakarta"
},
"destination_warehouse": {
"id": "wh_002",
"name": "Surabaya Warehouse",
"address": "Jl. Surabaya No. 456, Surabaya"
},
"expected_departure": "2024-01-15T09:00:00Z",
"actual_departure": "2024-01-15T09:15:00Z",
"expected_arrival": "2024-01-16T14:00:00Z",
"actual_arrival": "2024-01-16T13:45:00Z",
"items": [
{
"id": "item_001",
"sku": "SKU-001",
"name": "Product A",
"quantity": 50,
"unit": "pcs",
"unit_price": 50000,
"shipped_quantity": 50,
"received_quantity": 50,
"pending_quantity": 0
}
],
"courier": "JNE",
"tracking_number": "TRK987654321",
"priority": "normal",
"notes": "Transfer for restocking",
"inbound_reference": "INB-2024-002",
"created_at": "2024-01-10T08:00:00Z",
"updated_at": "2024-01-16T13:45:00Z",
"completed_at": "2024-01-16T13:45:00Z"
}
},
"errors": null,
"request_id": "req_123456789"
}Example Request
bash
curl -X GET https://sandbox-api.bebaskirim.com/api/partner/v1/outbound/out_123456789 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Id: YOUR_TENANT_ID"Status Definitions
| Status | Description | Next Status |
|---|---|---|
| preparing | Outbound shipment created, items being prepared | shipped |
| shipped | Items have left source warehouse | in_transit |
| in_transit | Items are in transit to destination | completed |
| completed | Items received at destination warehouse | - |
| cancelled | Outbound shipment cancelled | - |
Transfer Lifecycle
The outbound shipment is part of a complete transfer process:
- Transfer Request Created → Transfer API
- Outbound Shipment Created → Outbound API (current)
- Items In Transit → Automatic status update
- Inbound Created → Inbound API (destination warehouse)
- Items Received → Inbound receive process
- Outbound Completed → Automatic completion when inbound is received
Rate Limits
- Create Outbound: 100 requests per minute
- List Outbound: 200 requests per minute
- Get Details: 200 requests per minute
- Update Outbound: 100 requests per minute
- Mark as Shipped: 200 requests per minute
- Cancel Outbound: 50 requests per minute
- Track Transfer: 100 requests per minute
Best Practices
Transfer Planning
- Always link outbound shipments to transfer requests using transfer_id
- Plan departure times based on courier pickup schedules
- Use priority levels for urgent transfers
Inventory Accuracy
- Double-check item quantities before marking as shipped
- Use barcode scanning to prevent shipping errors
- Update tracking information immediately when available
Communication
- Include clear notes for destination warehouse staff
- Use tracking numbers to provide visibility to stakeholders
- Set up webhooks for real-time status updates
Integration with Inbound Process
- Monitor outbound status to predict inbound arrival
- Use the tracking endpoint to provide end-to-end visibility
- Coordinate with destination warehouse for smooth handoffs
Error Handling
- Handle transfer conflicts gracefully (e.g., insufficient inventory)
- Implement retry logic for network issues
- Log all status changes for audit purposes