curl --request POST \
--url https://api.arcuserp.com/v1/inventory/transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source_location_id": "91aa7588-4dc7-4edd-b172-7de91f5e1f78",
"dest_location_id": "828cabe6-3fa2-4fb7-a2af-2280bbaba335",
"notes": "Weekly replenishment transfer to secondary warehouse",
"items": [
{
"product_id": "7f6f3e14-eaad-4c45-b922-209f6dc6d140",
"quantity": 5,
"notes": "Circuit Breaker 10A White"
},
{
"product_id": "ec9288c3-12b1-474f-bb09-b0b15bb7a8ff",
"quantity": 3,
"notes": "Square D Breaker Black"
}
]
}
'{
"data": {
"id": "e1ce42dc-e9ae-40c4-a923-aa93100b0947",
"entity_from_id": "65dcd234-53c3-4f54-b772-ee349528d497",
"entity_to_id": "65dcd234-53c3-4f54-b772-ee349528d497",
"location_from_id": "91aa7588-4dc7-4edd-b172-7de91f5e1f78",
"location_to_id": "828cabe6-3fa2-4fb7-a2af-2280bbaba335",
"transfer_number": "SB-TRF-0000001",
"status": "draft",
"transfer_type": "internal",
"notes": "Weekly replenishment transfer to secondary warehouse",
"gl_posted": false,
"availability_warnings": [],
"items": [
{
"id": "d8c6bb7a-9c4c-446a-8518-d6f9398dbedc",
"transfer_id": "e1ce42dc-e9ae-40c4-a923-aa93100b0947",
"product_id": "7f6f3e14-eaad-4c45-b922-209f6dc6d140",
"quantity_sent": "5.0000",
"quantity_received": "0.0000",
"notes": "Circuit Breaker 10A White"
}
]
}
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Transfer inventory between locations -- single or multi-item atomic
ATOMIC-CREATE (2026-05-12): accepts items[] for multi-line atomic transfers OR top-level product_id/quantity for single-item compat mode. All items transfer in one DB transaction; any failure rolls back all items (no partial writes). Inter-location transfer. Writes transfer_out + transfer_in ledger rows per item. Intra-entity: no GL. Intercompany: posts Due From / Due To GL entries. Field names: source_location_id (or from_location_id) and dest_location_id (or to_location_id) are accepted aliases. entity_from_id is injected from API key entity_id; do not supply in request body.
curl --request POST \
--url https://api.arcuserp.com/v1/inventory/transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source_location_id": "91aa7588-4dc7-4edd-b172-7de91f5e1f78",
"dest_location_id": "828cabe6-3fa2-4fb7-a2af-2280bbaba335",
"notes": "Weekly replenishment transfer to secondary warehouse",
"items": [
{
"product_id": "7f6f3e14-eaad-4c45-b922-209f6dc6d140",
"quantity": 5,
"notes": "Circuit Breaker 10A White"
},
{
"product_id": "ec9288c3-12b1-474f-bb09-b0b15bb7a8ff",
"quantity": 3,
"notes": "Square D Breaker Black"
}
]
}
'{
"data": {
"id": "e1ce42dc-e9ae-40c4-a923-aa93100b0947",
"entity_from_id": "65dcd234-53c3-4f54-b772-ee349528d497",
"entity_to_id": "65dcd234-53c3-4f54-b772-ee349528d497",
"location_from_id": "91aa7588-4dc7-4edd-b172-7de91f5e1f78",
"location_to_id": "828cabe6-3fa2-4fb7-a2af-2280bbaba335",
"transfer_number": "SB-TRF-0000001",
"status": "draft",
"transfer_type": "internal",
"notes": "Weekly replenishment transfer to secondary warehouse",
"gl_posted": false,
"availability_warnings": [],
"items": [
{
"id": "d8c6bb7a-9c4c-446a-8518-d6f9398dbedc",
"transfer_id": "e1ce42dc-e9ae-40c4-a923-aa93100b0947",
"product_id": "7f6f3e14-eaad-4c45-b922-209f6dc6d140",
"quantity_sent": "5.0000",
"quantity_received": "0.0000",
"notes": "Circuit Breaker 10A White"
}
]
}
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Authorizations
API key issued per entity via Settings > Developers > API Keys.
Each key carries scopes (e.g. orders:read, products:write).
Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.
Headers
Client-generated unique key for idempotent POST/PATCH/DELETE operations. Alias for the Idempotency parameter. Max 255 chars. On retry with the same key, the original response is returned without re-executing the operation. Keys expire after 24 hours.
255Body
Response
Transfer initiated (draft status; GL fires on submit).
The data.availability_warnings array lists any line item whose
requested quantity exceeds source-location availability at create
time (warn-at-create, hard-block-at-ship; NetSuite/Acumatica
transfer-order pattern). Draft creation is not blocked, but
shipping a short line returns a 400 insufficient_stock. The array
is empty when every item has enough on hand at the source.
Was this page helpful?

