*REST API › Endpoint reference › Rentals › Orders*

# List the lines of an order

> Returns which resources the order carries (items, spaces, services and custom elements) with their quantities, their specific serialized units, their period and their sale price.

It is the usual query after getting an order. Lines added during delivery are left out unless requested with `includeDelivery=true`. It emits no cost or margin data. Lines belong to the order and are only obtained through it: there is no independent collection of lines. Lines come in document order.

`GET /api/v1/orders/{orderId}/lines` — scope `orders:read`

Scope: `orders:read` · 120/min · MCP: `filmo_orders_lines_list`

## Authorizations

Bearer API key with the scope below. `orders:read`

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `orderId` | string | Yes | Order identifier. |

## Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | integer | No | Page size (1-500). Defaults to 50. = `50` |
| `cursor` | string | No | Opaque cursor of the page to return. Pass the value of `pagination.nextCursor` from the previous response; treat it as opaque. |
| `sort` | string | No | Sort order: up to 3 comma-separated fields, each with a leading "-" for descending (e.g. "-updatedAt,name"). Sortable fields: position, itemName, quantity, startDate, endDate, rentalDays, unitPrice, linePrice, status, resourceType, transactionType. Defaults to "position". Ties are broken by id, so the order is stable across pages, and a cursor is bound to the sort it was issued with. |
| `resourceType` | string | No | Filter by line resource type: item, space, service, custom, section or type_group. `item`, `kit`, `space`, `vehicle`, `personnel`, `service`, `custom`, `section`, `type_group` |
| `transactionType` | string | No | Filter by line nature: rental or sale. `rental`, `sale` |
| `includeDelivery` | boolean | No | If "true", also includes the lines added during the delivery process. By default only the lines of the original order are returned. = `false` |
| `includeTotal` | boolean | No | Set it to true to include `pagination.total`, the number of results that match the filters across all pages. Off by default. = `false` |

## Request examples

*List the lines of an order*

**cURL**

```bash
curl https://app.filmo.io/api/v1/orders/orde_8f2a1c/lines \
  --header "Authorization: Bearer $FILMO_API_KEY"
```

**Node.js**

```javascript
fetch('https://app.filmo.io/api/v1/orders/orde_8f2a1c/lines', {
  headers: {
    Authorization: 'Bearer YOUR_FILMO_API_KEY'
  }
})
```

**Python**

```python
import requests

requests.get(
    "https://app.filmo.io/api/v1/orders/orde_8f2a1c/lines",
    headers={
      "Authorization": "Bearer YOUR_FILMO_API_KEY"
    }
)
```

## Response

Response schema: `OrderLineDto`

| Status | Description |
| --- | --- |
| 200 | Successful response. |
| 400 | Invalid request (validation_error): malformed query or body. `errors[]` lists every offending field with its stable code. |
| 401 | Authentication failed (unauthorized, api_key_invalid, api_key_revoked, api_key_expired, api_key_owner_inactive, api_key_owner_not_admin). |
| 403 | Not allowed (insufficient_scope: the API key does not have the required scope, named in `requiredScope`; forbidden: the owner of the key lacks the permission the operation requires). `insufficient_scope` is answered before the request counts against the rate limit, so it carries no `RateLimit-*` headers; `forbidden` does. |
| 404 | Resource not found (not_found): it does not exist or is outside the scope of the API key. |
| 429 | Rate limit exceeded (rate_limited): retry after `Retry-After` seconds; `RateLimit-*` says which quota ran out. |
| 500 | Internal error (internal_error). |

**200**

| Name | Type | Description |
| --- | --- | --- |
| `data` | object[] |  |
| `data.id` | string | Unique line identifier. |
| `data.orderId` | string | Identifier of the order the line belongs to. |
| `data.resourceType` | string | Resource type of the line. Lines of type section and type_group are presentation groupings with no associated resource. `item`, `kit`, `space`, `vehicle`, `personnel`, `service`, `custom`, `section`, `type_group` |
| `data.transactionType` | string | Nature of the line: rental or sale. `rental`, `sale` |
| `data.status` | string | Status of the line within the order flow. `draft`, `reserved`, `prepared`, `picked_up`, `sold`, `returned`, `checked_in`, `cancelled`, `lost` |
| `data.position` | integer | Display position of the line within the order, starting at 0. |
| `data.addedDuringDelivery` | boolean | true if the line was added during the delivery process rather than in the original order. |
| `data.itemId` | string | Catalog item identifier; null if the line is not of type item. |
| `data.itemName` | string | Name of the item, space, service or custom element of the line. |
| `data.variantId` | string | Identifier of the item variant; null if not applicable. |
| `data.spaceId` | string | Space identifier; null if the line is not of type space. |
| `data.quantity` | number | Units of the line. |
| `data.serials` | object[] | Specific physical units assigned. Empty for non-serialized items or when not yet assigned. |
| `data.serials.id` | string | Unique identifier of the serialized item. |
| `data.serials.code` | string | Internal code of the unit; null if none. |
| `data.serials.serialNumber` | string | Manufacturer serial number; null if not recorded. |
| `data.startDate` | string<date-time> | Start of the line period in ISO 8601 UTC; null if it inherits the order period. |
| `data.endDate` | string<date-time> | End of the line period in ISO 8601 UTC; null if it inherits the order period. |
| `data.rentalDays` | number | Billable rental days of the line; null if not calculated. |
| `data.unitPrice` | string | Net unit price as a decimal string "1234.50"; null if the line has no price of its own. |
| `data.linePrice` | string | Total net amount of the line as a decimal string "1234.50"; null if not calculated. |
| `data.free` | boolean | true if the line is explicitly billed at zero. |
| `data.notes` | string | Line notes; null if none. |
| `pagination` | object | Opaque-cursor pagination metadata. |
| `pagination.nextCursor` | string | Opaque cursor of the next page; null when there are no more results. Pass it as `cursor` in the next request. |
| `pagination.hasMore` | boolean | Whether more results exist beyond this page. |
| `pagination.total` | integer | Number of results matching the filters across all pages. Present only when the request sets `includeTotal=true`. |
| `meta` | object | Additional information about the response. |
| `meta.warnings` | object[] | Lifecycle warnings; present only when the operation is deprecated. |
| `meta.warnings.code` | string | Stable warning code. `deprecated` |
| `meta.warnings.message` | string | For people: what is deprecated, until when, and what to use. |
| `meta.warnings.sunset` | string | Day (YYYY-MM-DD) the operation stops being served. |
| `meta.warnings.replacement` | string | `operationId` of the operation to use instead, or null if there is none. |
| `meta.warnings.link` | string | Where the deprecation is documented (the changelog). |

*Example response · 200*

```json
{
  "data": [
    {
      "id": "order_line_9f3a2b",
      "orderId": "order_9f3a2b",
      "resourceType": "item",
      "transactionType": "rental",
      "status": "draft",
      "position": 1,
      "addedDuringDelivery": true,
      "itemId": "item_9f3a2b",
      "itemName": "Example item name",
      "variantId": "variant_9f3a2b",
      "spaceId": "space_9f3a2b",
      "quantity": 1,
      "serials": [
        {
          "id": "serial_9f3a2b",
          "code": "Example code",
          "serialNumber": "2026-0001"
        }
      ],
      "startDate": "2026-09-01T08:00:00.000Z",
      "endDate": "2026-09-01T08:00:00.000Z",
      "rentalDays": 1,
      "unitPrice": "120.00",
      "linePrice": "120.00",
      "free": true,
      "notes": "Example text."
    }
  ],
  "pagination": {
    "nextCursor": "eyJvIjoyMH0",
    "hasMore": true,
    "total": 1
  }
}
```

## Errors

| Status | Codes | Meaning |
| --- | --- | --- |
| 400 | `validation_error` | Malformed query or body. `errors[]` lists every offending field with its stable code. |
| 404 | `not_found` | It does not exist or is outside the scope of the API key. |

## Deprecation

This operation is not deprecated. Deprecations are announced with a Deprecation header and a sunset date.

---

Canonical URL: https://docs.filmo.io/rest-api/endpoint-reference/orders/list-the-lines-of-an-order  
Last updated: 2026-10-25