Adjustments & transfers
The two legitimate ways to change stock outside a sale or a purchase.
GET
/inventory/adjustments/POST/inventory/adjustments/GET/inventory/transfers/POST/inventory/transfers/GET
/inventory/adjustments/List stock adjustments — recounts, damage, write-offs.
Filters
statuswarehouseCombine any of these as query parameters. Also accepts cursor and page_size.
Fields on each result
FieldType & description
idinteger
warehouseinteger
warehouse_namestring
reasonstring
statusenum(draft, approved, rejected)* `draft` - Draft
* `approved` - Approved
* `rejected` - Rejected
created_byinteger
created_by_namestring
approved_byinteger
approved_by_namestring
itemsarray of object
created_atdatetime
updated_atdatetime
Errors
CodeWhen it happens
401The access token is missing or has expired. Refresh and retry.403Your role lacks permission, or X-Shop-Id is a shop you cannot access.429Rate limited. Wait for Retry-After seconds.Request
curl https://api.tajirpoint.com/api/v1/inventory/adjustments/ \
-H "Authorization: Bearer $TAJIR_TOKEN" \
-H "X-Shop-Id: 8f1c2d3e-4b5a-6c7d-8e9f-0a1b2c3d4e5f"Response · 200
{
"next": "https://api.tajirpoint.com/api/v1/inventory/adjustments/?cursor=cD0yMDI2LTA3LTExVDA5MTQyMlomcD00Mg",
"previous": null,
"results": [
{
"id": 42,
"warehouse": 1,
"warehouse_name": "Main Store",
"reason": "Damaged in transit",
"status": "active",
"created_by": 1,
"created_by_name": "Main Store",
"approved_by": 1,
"approved_by_name": "Main Store",
"items": [],
"created_at": "2026-07-11T09:14:22Z",
"updated_at": "2026-07-11T09:14:22Z"
}
]
}Response · error
{
"error": {
"code": 400,
"message": "Validation failed.",
"details": {
"quantity": ["Must be greater than zero."]
}
}
}POST
/inventory/adjustments/Adjust stock outside the normal flow. Use this for a recount or a write-off, and always give a reason: the adjustment is what an auditor reads to understand why the number changed.
Body parameters
FieldType & description
warehouseRequiredinteger
reasonRequiredstring
itemsRequiredarray of objectList of {"variant": <id>, "quantity_change": <decimal>, "reason": "..."}
Response fields
FieldType & description
idinteger
warehouseinteger
reasonstring
itemsarray of objectList of {"variant": <id>, "quantity_change": <decimal>, "reason": "..."}
Errors
CodeWhen it happens
400Validation failed. `details` names the offending fields.409Conflict — most often insufficient stock for one of the lines.401The access token is missing or has expired. Refresh and retry.403Your role lacks permission, or X-Shop-Id is a shop you cannot access.429Rate limited. Wait for Retry-After seconds.Request
curl -X POST https://api.tajirpoint.com/api/v1/inventory/adjustments/ \
-H "Authorization: Bearer $TAJIR_TOKEN" \
-H "X-Shop-Id: 8f1c2d3e-4b5a-6c7d-8e9f-0a1b2c3d4e5f" \
-H "Content-Type: application/json" \
-d '{
"warehouse": 1,
"reason": "Damaged in transit",
"items": []
}'Response · 200
{
"id": 42,
"warehouse": 1,
"reason": "Damaged in transit",
"items": []
}Response · error
{
"error": {
"code": 400,
"message": "Validation failed.",
"details": {
"quantity": ["Must be greater than zero."]
}
}
}GET
/inventory/transfers/List stock transfers between warehouses.
Filters
statuswarehouseCombine any of these as query parameters. Also accepts cursor and page_size.
Fields on each result
FieldType & description
idinteger
from_warehouseinteger
from_warehouse_namestring
to_warehouseinteger
to_warehouse_namestring
statusenum(draft, in_transit, completed, cancelled)* `draft` - Draft
* `in_transit` - In Transit
* `completed` - Completed
* `cancelled` - Cancelled
notesstring
itemsarray of object
created_atdatetime
updated_atdatetime
Errors
CodeWhen it happens
401The access token is missing or has expired. Refresh and retry.403Your role lacks permission, or X-Shop-Id is a shop you cannot access.429Rate limited. Wait for Retry-After seconds.Request
curl https://api.tajirpoint.com/api/v1/inventory/transfers/ \
-H "Authorization: Bearer $TAJIR_TOKEN" \
-H "X-Shop-Id: 8f1c2d3e-4b5a-6c7d-8e9f-0a1b2c3d4e5f"Response · 200
{
"next": "https://api.tajirpoint.com/api/v1/inventory/transfers/?cursor=cD0yMDI2LTA3LTExVDA5MTQyMlomcD00Mg",
"previous": null,
"results": [
{
"id": 42,
"from_warehouse": 1,
"from_warehouse_name": "Main Store",
"to_warehouse": 1,
"to_warehouse_name": "Main Store",
"status": "active",
"notes": "",
"items": [],
"created_at": "2026-07-11T09:14:22Z",
"updated_at": "2026-07-11T09:14:22Z"
}
]
}Response · error
{
"error": {
"code": 400,
"message": "Validation failed.",
"details": {
"quantity": ["Must be greater than zero."]
}
}
}POST
/inventory/transfers/Move stock between warehouses. Stock leaves the source immediately and lands at the destination when the transfer is received.
Body parameters
FieldType & description
from_warehouseRequiredinteger
to_warehouseRequiredinteger
notesOptionalstring
itemsRequiredarray of objectList of {"variant": <id>, "quantity": <decimal>}
Response fields
FieldType & description
idinteger
from_warehouseinteger
to_warehouseinteger
notesstring
itemsarray of objectList of {"variant": <id>, "quantity": <decimal>}
Errors
CodeWhen it happens
400Validation failed. `details` names the offending fields.409Conflict — most often insufficient stock for one of the lines.401The access token is missing or has expired. Refresh and retry.403Your role lacks permission, or X-Shop-Id is a shop you cannot access.429Rate limited. Wait for Retry-After seconds.Request
curl -X POST https://api.tajirpoint.com/api/v1/inventory/transfers/ \
-H "Authorization: Bearer $TAJIR_TOKEN" \
-H "X-Shop-Id: 8f1c2d3e-4b5a-6c7d-8e9f-0a1b2c3d4e5f" \
-H "Content-Type: application/json" \
-d '{
"from_warehouse": 1,
"to_warehouse": 1,
"items": [],
"notes": ""
}'Response · 200
{
"id": 42,
"from_warehouse": 1,
"to_warehouse": 1,
"notes": "",
"items": []
}Response · error
{
"error": {
"code": 400,
"message": "Validation failed.",
"details": {
"quantity": ["Must be greater than zero."]
}
}
}