E098: Complete in-transit transfer
POST /api/materials-inventory/transfers/:ref/complete
Records the inbound leg of an in-transit transfer, closing the pair. Triggered from the Materials Inventory Transfers page, flipping an in-transit row to "Completed".
Authentication
Standard tenant route. Requires Authorization: Bearer <firebase-id-token> and X-Org-Id: <org-id>. Access: Member. Also reachable with an org-scoped PAT.
Request
No body. :ref is the transfer's TFR-MI-<seq> code (returned by E097). The destination is taken from the outbound row's to_location_id — the completer cannot pick a different one.
{ "eventDate": "2026-06-10T00:00:00Z", "notes": "..." }
An optional body may override the receipt's eventDate / notes.
Response — 200 OK
{
"id": "uuid",
"code": "MIL-002",
"materialId": "uuid",
"locationId": "uuid",
"eventType": "RECEIVE",
"quantity": "100",
"ref": "TFR-MI-042",
"toLocationId": null,
"createdAt": "2026-06-10T00:00:00Z"
}
The paired RECEIVE row, written at the destination (location_id) with the same ref as the outbound TRANSFER.
Errors
| HTTP | code | Condition |
|---|---|---|
| 404 | not_found | No transfer with that ref. |
| 409 | invalid_transition | Transfer already completed (or voided). |