Skip to main content

Inventory Transfers

3 API calls in this section.

List Inventory Transfers

Warehousing / Inventory Transfers
GET/warehousing/inventory-transfers?tenant_id={{tenant_id}}&source_warehouse_id=&destination_warehouse_id=&search=&page=1&limit=20

Retrieves a paginated list of inventory transfers for the tenant. Authentication: Requires valid token with 'view:tenant' or 'manage:operations:tenant' or 'manage:module:warehouse' permission.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request GET "$ONDI_BASE_URL/warehousing/inventory-transfers?tenant_id={{tenant_id}}&source_warehouse_id=&destination_warehouse_id=&search=&page=1&limit=20" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json"

Query parameters

tenant_idOptional
query string

{{tenant_id}}

UUID of the tenant (required)

source_warehouse_idOptional
query string

Filter by source warehouse (optional)

destination_warehouse_idOptional
query string

Filter by destination warehouse (optional)

searchOptional
query string

Search by reference number (optional)

pageOptional
query string

1

Page number (optional, default: 1)

limitOptional
query string

20

Items per page (optional, default: 20)

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "Inventory transfers retrieved successfully",4  "inventory_transfers": [5    {6      "id": "transfer-uuid-1",7      "tenant_id": "tenant-uuid",8      "reference_number": "TR-20260522-A1B2C3",9      "source_warehouse_id": "wh-source-uuid",10      "destination_warehouse_id": "wh-dest-uuid",11      "status": "completed",12      "items": [13        {14          "item_id": "item-uuid",15          "quantity": 10,16          "source_bin_id": "bin-source-uuid",17          "destination_bin_id": "bin-dest-uuid",18          "lot_number": null,19          "serial_number": null20        }21      ],22      "notes": "Internal stock rebalance",23      "performed_by": "user-uuid",24      "created_at": "2026-05-22T11:37:00Z",25      "source_warehouse": {26        "id": "wh-source-uuid",27        "name": "Warehouse A",28        "code": "WH-A"29      },30      "destination_warehouse": {31        "id": "wh-dest-uuid",32        "name": "Warehouse B",33        "code": "WH-B"34      },35      "performer": {36        "id": "user-uuid",37        "full_name": "John Doe"38      }39    }40  ],41  "page": 1,42  "limit": 20,43  "total": 144}
Error - Tenant Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "Tenant not found"4}

Get Inventory Transfer

Warehousing / Inventory Transfers
GET/warehousing/inventory-transfers/:transfer_id?tenant_id={{tenant_id}}

Retrieves details of a specific inventory transfer including all linked inventory transactions. Authentication: Requires valid token with view or manage permissions.

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request GET "$ONDI_BASE_URL/warehousing/inventory-transfers/:transfer_id?tenant_id={{tenant_id}}" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json"

Path parameters

transfer_idRequired
path string

UUID of the inventory transfer

Query parameters

tenant_idOptional
query string

{{tenant_id}}

UUID of the tenant (required)

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success200OK
Response body
json
1{2  "success": true,3  "message": "Inventory transfer retrieved successfully",4  "inventory_transfer": {5    "id": "transfer-uuid-1",6    "tenant_id": "tenant-uuid",7    "reference_number": "TR-20260522-A1B2C3",8    "source_warehouse_id": "wh-source-uuid",9    "destination_warehouse_id": "wh-dest-uuid",10    "status": "completed",11    "items": [12      {13        "item_id": "item-uuid",14        "quantity": 10,15        "source_bin_id": "bin-source-uuid",16        "destination_bin_id": "bin-dest-uuid"17      }18    ],19    "notes": "Internal stock rebalance",20    "performed_by": "user-uuid",21    "created_at": "2026-05-22T11:37:00Z",22    "source_warehouse": {23      "id": "wh-source-uuid",24      "name": "Warehouse A",25      "code": "WH-A"26    },27    "destination_warehouse": {28      "id": "wh-dest-uuid",29      "name": "Warehouse B",30      "code": "WH-B"31    },32    "performer": {33      "id": "user-uuid",34      "full_name": "John Doe"35    },36    "transactions": [37      {38        "id": "txn-uuid-1",39        "transaction_type": "transfer_out",40        "quantity": 10,41        "warehouse_id": "wh-source-uuid",42        "item": {43          "id": "item-uuid",44          "name": "Widget",45          "sku": "WDG-001"46        },47        "from_bin": {48          "id": "bin-source-uuid",49          "code": "A-01-01"50        },51        "to_bin": null52      },53      {54        "id": "txn-uuid-2",55        "transaction_type": "transfer_in",56        "quantity": 10,57        "warehouse_id": "wh-dest-uuid",58        "item": {59          "id": "item-uuid",60          "name": "Widget",61          "sku": "WDG-001"62        },63        "from_bin": null,64        "to_bin": {65          "id": "bin-dest-uuid",66          "code": "B-02-03"67        }68      }69    ]70  }71}
Error - Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "Not found"4}

Create Inventory Transfer

Warehousing / Inventory Transfers
POST/warehousing/inventory-transfers?tenant_id={{tenant_id}}

Creates a cross-warehouse inventory stock transfer. Atomically decrements stock in the source warehouse and increments/creates stock in the destination warehouse. Authentication: Requires 'manage:operations:tenant' or 'manage:module:warehouse' permission. Request Body: - source_warehouse_id (required): UUID of the source warehouse - destination_warehouse_id (required): UUID of the destination warehouse (must differ from source) - reference_number (optional): Custom reference number (auto-generated if omitted) - notes (optional): Transfer notes - items (required, min 1): Array of transfer lines: - item_id (required): UUID of the inventory item - quantity (required): Positive integer quantity to transfer - source_bin_id (required): UUID of the bin in source warehouse - destination_bin_id (required): UUID of the bin in destination warehouse - lot_number (optional): Filter source stock by lot number - serial_number (optional): Filter source stock by serial number Behavior: - Validates both warehouses exist and belong to the tenant - Validates source bins belong to source warehouse, destination bins to destination warehouse - Checks available stock quantity at source - Decrements source inventory_stock - Increments or creates destination inventory_stock - Creates transfer_out + transfer_in inventory_transactions linked via reference_type='transfer'

Send a bearer token in the Authorization header for an authenticated OnDi user session.
Request
curl
1curl --request POST "$ONDI_BASE_URL/warehousing/inventory-transfers?tenant_id={{tenant_id}}" \2  --header "Authorization: Bearer {{access_token}}" \3  --header "Content-Type: application/json" \4  --header "Content-Type: application/json" \5  --data '{6  "source_warehouse_id": "{{source_warehouse_id}}",7  "destination_warehouse_id": "{{destination_warehouse_id}}",8  "reference_number": "TR-000123",9  "notes": "Internal stock transfer",10  "items": [11    {12      "item_id": "item-uuid-1",13      "quantity": 10,14      "source_bin_id": "source-bin-uuid",15      "destination_bin_id": "dest-bin-uuid"16    },17    {18      "item_id": "item-uuid-2",19      "quantity": 5,20      "source_bin_id": "source-bin-uuid-2",21      "destination_bin_id": "dest-bin-uuid-2",22      "lot_number": "LOT-2026-A"23    }24  ]25}'
Request body
json
1{2  "source_warehouse_id": "{{source_warehouse_id}}",3  "destination_warehouse_id": "{{destination_warehouse_id}}",4  "reference_number": "TR-000123",5  "notes": "Internal stock transfer",6  "items": [7    {8      "item_id": "item-uuid-1",9      "quantity": 10,10      "source_bin_id": "source-bin-uuid",11      "destination_bin_id": "dest-bin-uuid"12    },13    {14      "item_id": "item-uuid-2",15      "quantity": 5,16      "source_bin_id": "source-bin-uuid-2",17      "destination_bin_id": "dest-bin-uuid-2",18      "lot_number": "LOT-2026-A"19    }20  ]21}

Query parameters

tenant_idOptional
query string

{{tenant_id}}

UUID of the tenant (required)

Request body fields

source_warehouse_idExample
string

Example field from the request body.

destination_warehouse_idExample
string

Example field from the request body.

reference_numberExample
string

Example field from the request body.

notesExample
string

Example field from the request body.

itemsExample
array<object>

Example field from the request body.

items.item_idExample
string

Example field from the request body.

items.quantityExample
number

Example field from the request body.

items.source_bin_idExample
string

Example field from the request body.

items.destination_bin_idExample
string

Example field from the request body.

Headers

AuthorizationOptional
header string

Bearer {{access_token}}

Content-TypeOptional
header string

application/json

Responses

Success - Transfer Completed201Created
Response body
json
1{2  "success": true,3  "message": "Inventory transfer created successfully",4  "inventory_transfer": {5    "id": "transfer-uuid-1",6    "tenant_id": "tenant-uuid",7    "reference_number": "TR-20260522-A1B2C3",8    "source_warehouse_id": "wh-source-uuid",9    "destination_warehouse_id": "wh-dest-uuid",10    "status": "completed",11    "items": [12      {13        "item_id": "item-uuid-1",14        "quantity": 10,15        "source_bin_id": "source-bin-uuid",16        "destination_bin_id": "dest-bin-uuid",17        "lot_number": null,18        "serial_number": null19      }20    ],21    "notes": "Internal stock transfer",22    "performed_by": "user-uuid",23    "created_at": "2026-05-22T11:37:00Z"24  }25}
Error - Same Warehouse400Bad Request
Response body
json
1{2  "success": false,3  "message": "Source and destination must differ"4}
Error - Insufficient Stock400Bad Request
Response body
json
1{2  "success": false,3  "message": "items[0]: insufficient stock (available: 5, requested: 10)"4}
Error - Source Warehouse Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "Source warehouse not found"4}
Error - Source Bin Not Found404Not Found
Response body
json
1{2  "success": false,3  "message": "items[0]: source_bin not found in source warehouse"4}
Error - Insufficient Permissions403Forbidden
Response body
json
1{2  "success": false,3  "message": "Insufficient permissions"4}