Close an in-transit transfer with auditable differences
POST
/v1/organizations/{organizationId}/transfers/{transferId}/close
API key scope: transfers:write.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”transferId
required
string
Header Parameters
Section titled “Header Parameters”X-Request-Id
string
Optional client request id returned in structured errors.
Idempotency-Key
required
string
Unique key used to safely retry transfer closing.
Request Bodyrequired
Section titled “Request Bodyrequired”Auditable reason for closing the transfer with shipped or unshipped differences.
Media typeapplication/json
object
reason
required
Auditable reason for closing the transfer with differences.
string
Example
Source shortage confirmed during cycle count.Responses
Section titled “Responses”Transfer closed without ledger movements.
Media typeapplication/json
object
transfer
required
object
id
required
string format: uuid
organizationId
required
string format: uuid
environment
required
string
productId
required
string format: uuid
sourceLocationId
required
string format: uuid
destinationLocationId
required
string format: uuid
ownerId
required
string format: uuid
channelId
required
string format: uuid
quantity
required
number
shippedQuantity
required
number
receivedQuantity
required
number
pendingShipmentQuantity
required
number
pendingReceiveQuantity
required
number
status
required
string
referenceType
object
referenceId
object
metadata
object
key
additional properties
any
createdBy
object
actor
required
object
type
required
string
id
object
label
required
string
shippedAt
object
receivedAt
object
cancelledAt
object
closedAt
object
closeReason
object
product
object
id
required
string format: uuid
name
required
string
sku
required
string
sourceLocation
object
id
required
string format: uuid
name
required
string
code
required
string
type
required
string
destinationLocation
object
id
required
string format: uuid
name
required
string
code
required
string
type
required
string
owner
object
id
required
string format: uuid
name
required
string
code
required
string
type
required
string
channel
object
id
required
string format: uuid
name
required
string
code
required
string
type
required
string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
movements
required
Array<object>
object
id
required
string format: uuid
organizationId
required
string format: uuid
environment
required
string
productId
required
string format: uuid
locationId
required
string format: uuid
ownerId
required
string format: uuid
channelId
required
string format: uuid
lotId
object
operation
required
string
inventoryState
required
string
quantity
required
number
unitCode
object
unitQuantity
object
baseUnitCode
object
balanceBefore
required
number
balanceAfter
required
number
reason
object
referenceType
object
referenceId
object
source
object
idempotencyKey
object
metadata
object
key
additional properties
any
createdBy
object
actor
required
object
type
required
string
id
object
label
required
string
product
object
id
required
string format: uuid
name
required
string
sku
required
string
location
object
id
required
string format: uuid
name
required
string
code
required
string
type
required
string
owner
object
id
required
string format: uuid
name
required
string
code
required
string
type
required
string
channel
object
id
required
string format: uuid
name
required
string
code
required
string
type
required
string
lot
object
id
required
string format: uuid
lotCode
required
string
batchCode
object
expiresAt
object
status
required
string
serials
required
Array<object>
object
id
required
string format: uuid
serialNumber
required
string
status
required
string
productId
required
string format: uuid
locationId
required
string format: uuid
ownerId
required
string format: uuid
channelId
required
string format: uuid
lotId
object
createdAt
required
string format: date-time
Example
{ "transfer": { "id": "77777777-7777-4777-8777-777777777777", "organizationId": "11111111-1111-4111-8111-111111111111", "environment": "test", "productId": "22222222-2222-4222-8222-222222222222", "sourceLocationId": "33333333-3333-4333-8333-333333333333", "destinationLocationId": "44444444-4444-4444-8444-444444444444", "quantity": 4, "shippedQuantity": 2, "receivedQuantity": 1, "pendingShipmentQuantity": 2, "pendingReceiveQuantity": 1, "status": "closed", "referenceType": "internal_transfer", "referenceId": "transfer_01JABC", "metadata": { "channel": "panel" }, "actor": { "type": "api_key", "id": "api-key-1", "label": "Public test integration" }, "product": { "id": "22222222-2222-4222-8222-222222222222", "name": "Black T-Shirt - Medium", "sku": "TSHIRT-BLACK-M" }, "sourceLocation": { "id": "33333333-3333-4333-8333-333333333333", "name": "Main Warehouse", "code": "MAIN-WH", "type": "warehouse" }, "destinationLocation": { "id": "44444444-4444-4444-8444-444444444444", "name": "Retail Store", "code": "STORE-1", "type": "store" }, "shippedAt": "2026-06-29T10:00:00.000Z", "receivedAt": null, "cancelledAt": null, "closedAt": "2026-06-29T11:00:00.000Z", "closeReason": "Source shortage confirmed during cycle count.", "createdAt": "2026-06-29T10:00:00.000Z", "updatedAt": "2026-06-29T10:00:00.000Z" }, "movements": []}The organization has exhausted its monthly public API request quota.
Media typeapplication/json
Example
{ "error": { "code": "PLAN_LIMIT_EXCEEDED", "message": "Plan limit exceeded for api_requests", "requestId": "req_123", "details": { "entitlementKey": "api_requests", "scope": "environment", "environment": "live", "configured": true, "limit": "50000", "used": "50000", "requested": "1", "currentPlan": { "code": "free", "version": 1 }, "requiredPlan": { "code": "starter", "version": 1, "requiresOverride": false } } }}