---
title: "Returns one transfer with its item lines and approval state."
method: GET
path: "/api/v1/transfers/{id}"
tags: ["Transfers"]
---

# Returns one transfer with its item lines and approval state.

`GET /api/v1/transfers/{id}`

## Request

- Base URL: `https://app.flexonthejob.com`
- URL: `https://app.flexonthejob.com/api/v1/transfers/{id}`
- Auth: HTTP bearer

Requires `ManageTransfers`. Response carries a weak `ETag`; resend it as
`If-None-Match` to get 304 when nothing changed.

## Path parameters

- `id` integer, required

## Response `200`

The transfer.

- TransferDetailDto: One transfer with its item lines, as returned by `GET /api/v1/transfers/{id}` and by `POST /api/v1/jobs/{id}/transfer`.
  - `id` integer: Numeric id used in `/api/v1/transfers/{id}`. Unique within this organization. Example: `318`.
  - `syncId` string, uuid: Stable cross-device identifier (GUID) — also the pagination cursor value. Example: `0b8f4c1e-6f1a-4a5e-9d7c-2f3e4a5b6c7d`.
  - `status` string: Transfer status name. One of `Draft`, `Pending` (created, stock reserved, not yet picked up), `InTransit`, `AtWaypoint`, `InTransitToWaypoint`, `InTransitToDestination`, `Completed` (delivered), `Cancelled`, `Failed`.
  - `notes` string, nullable: Free-text notes recorded on the transfer. Example: `Transfer for Job J-2026-0042`. Null when none.
  - `jobId` integer, nullable: Id of the job this transfer supplies (see `/api/v1/jobs/{id}`); null for a standalone or sales-order transfer.
  - `jobNumber` string, nullable: Job number of `jobId` at read time. Example: `J-2026-0042`. Null when there is no job.
  - `salesOrderId` integer, nullable: Id of the sales order this transfer fulfils; null otherwise.
  - `isJobTransfer` boolean: True for a transfer created for a job (materials to its job site, or a direct / counter sale). Standalone transfers (both flags false) are the ones `pick` / `start` / `complete` / `fail` accept; job-site and standalone transfers can be cancelled with `POST /api/v1/transfers/{id}/cancel`.
  - `isSalesOrderTransfer` boolean: True for a transfer that fulfils a sales order.
  - `sourceLocationId` integer, nullable: Id of the location the stock leaves (see `/api/v1/locations/{id}`); null when the lines come from several locations or from no location.
  - `sourceLocationName` string, nullable: Name of `sourceLocationId`. Example: `Main Warehouse`. Null when there is none.
  - `destinationLocationId` integer, nullable: Id of the location the stock goes to — for a job-site transfer, the job's site location; null for a de-listing.
  - `destinationLocationName` string, nullable: Name of `destinationLocationId`. Example: `Job Site - J-2026-0042`. Null when there is none.
  - `requiresApproval` boolean: True when the transfer's value exceeded the organization's approval threshold when it was created. Job-site transfers never require approval.
  - `approvalStatus` string, nullable: State of the transfer's approval: `Pending` (awaiting `POST /api/v1/transfers/{id}/approve` or `/reject`), `Approved` or `Rejected`; null when the transfer never needed approval.
  - `lineCount` integer: Number of item lines on the transfer. Example: `4`.
  - `transferDate` string, date-time: When the transfer was initiated, ISO-8601 UTC. Example: `2026-09-23T14:05:00Z`.
  - `initiatedById` string, nullable: Identity user id of the person who created the transfer (for an API/MCP-created transfer, the key's creator); null when unknown on this server.
  - `completedById` string, nullable: Identity user id of the person who completed (received) the transfer; null until it is completed.
  - `createdAt` string, date-time: Creation time, ISO-8601 UTC. Example: `2026-09-23T14:05:00Z`.
  - `updatedAt` string, date-time, nullable: Last modification time, ISO-8601 UTC; null when never modified since creation.
  - `rejectionReason` string, nullable: Why the transfer's approval was rejected (from `POST /api/v1/transfers/{id}/reject` or the app); null otherwise.
  - `lines` TransferLineDto[]: The item lines, in the order they were added.
    - `id` integer: Numeric line id. Example: `1207`.
    - `itemId` integer, nullable: Item (template) id as used by `/api/v1/items/{id}`; null for a line that carries no catalogue item.
    - `itemName` string, nullable: Item name at read time (falls back to the line's notes for a miscellaneous line). Example: `Copper 12/2 Romex`.
    - `quantity` integer: Units on the line. Example: `3`.
    - `quantityPicked` integer, nullable: Units picked (scanned) so far; null or `0` before picking starts.
    - `quantityDelivered` integer, nullable: Units delivered to the destination; null until delivery.
    - `quantityReturned` integer: Units returned to the source after a failed delivery. Example: `0`.
    - `status` string: Line status name. One of `Pending`, `InTransit`, `Delivered`, `Failed`, `Returned`.
    - `jobItemId` integer, nullable: Id of the job material line this transfer line supplies (see the `items` of `/api/v1/jobs/{id}`); null when not tied to a job line.
    - `destinationLocationId` integer, nullable: Per-line destination location id when it differs from the transfer's; null otherwise.
    - `destinationWaypointId` integer, nullable: Waypoint (`waypoints[].id`) where this line is dropped off instead of the final destination; null when it goes to the destination.
    - `notes` string, nullable: Free-text notes on the line. Example: `Stock shortfall: Copper 12/2 Romex`. Null when none.
  - `currentWaypointId` integer, nullable: Id of the waypoint the transfer is heading to or stopped at (`waypoints[].id`); null when it has no waypoints or is heading to its final destination.
  - `waypoints` TransferWaypointDto[]: Intermediate stops on the way to the destination, in route order (empty for a direct transfer). Worked with `POST /api/v1/transfers/{id}/waypoints/{waypointId}/arrive|deliver|depart|skip` while the transfer is in transit.
    - `id` integer: Numeric waypoint id, used in `/api/v1/transfers/{id}/waypoints/{waypointId}/…`. Example: `41`.
    - `order` integer: Position on the route, 1 = first stop. Example: `1`.
    - `locationId` integer: Id of the stop's location (see `/api/v1/locations/{id}`). Example: `4`.
    - `locationName` string, nullable: Name of `locationId`. Example: `Van 2`. Null when the location was deleted.
    - `status` string: Waypoint status name: `Pending` (not reached), `Arrived`, `Departed`, `Skipped` or `Cancelled`.
    - `estimatedArrivalTime` string, date-time, nullable: Planned arrival, ISO-8601 UTC; null when not planned.
    - `actualArrivalTime` string, date-time, nullable: When the transfer arrived, ISO-8601 UTC; null until then.
    - `departureTime` string, date-time, nullable: When the transfer left, ISO-8601 UTC; null until then.
    - `notes` string, nullable: Free-text notes on the stop (e.g. why it was skipped). Null when none.

## Other responses

- `304`: Unchanged since the `If-None-Match` ETag.
- `401`: Unauthorized
- `403`: Forbidden
- `404`: No such transfer in this organization.
- `429`: Too Many Requests

---

[API](https://skmtc.dev/flexonthejob/apis/flex-api.md) · [All operations](https://skmtc.dev/flexonthejob/apis/flex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flexonthejob/apis/flex-api/revisions/19c8f4d27acf?raw)
