# POST /inventory/movements

**Resource:** [INVENTORY](./inventory.md)  
**MCP tool:** `record_inventory_movement`  
**Scopes:** `products:write`  
**Write operation:** yes

Record a stock movement (receive, ship, transfer, adjust_in, adjust_out, dispose). Stock on hand updates automatically. receive/adjust_in need to_location_id; ship/adjust_out/dispose need from_location_id; transfer needs both. The ledger is append-only — correct mistakes with an offsetting movement.

## Parameters

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `batch_id` | body | string | yes |  |
| `movement_type` | body | string | yes |  |
| `quantity` | body | number | yes |  |
| `from_location_id` | body | string | no |  |
| `to_location_id` | body | string | no |  |
| `reference_type` | body | string | no |  |
| `reference_id` | body | string | no |  |
| `reason` | body | string | no |  |
| `notes` | body | string | no |  |

## Request example

```bash
curl -X POST   "https://api.trustpager.com/functions/v1/api/v1/inventory/movements"   -H "Authorization: Bearer YOUR_API_KEY"   -H "Content-Type: application/json"   -d '{"batch_id":"...","movement_type":"...","quantity":"..."}'
```

---
Base URL: `https://api.trustpager.com/functions/v1/api/v1` — Auth: `Authorization: Bearer YOUR_API_KEY`