*REST API › Endpoint reference › Rentals › Quotes*

# List the lines of a quote

> Returns what was quoted, line by line, with its quantity and its price.

They belong to the ACTIVE VERSION of the quote, like the rest of the resource. Lines come in document order.

`GET /api/v1/quotes/{quoteId}/lines` — scope `quotes:read`

Scope: `quotes:read` · 120/min · Strict tenancy · MCP: `filmo_quotes_lines_list`

## Authorizations

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

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `quoteId` | string | Yes | Quote 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, 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. |
| `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 a quote*

**cURL**

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

**Node.js**

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

**Python**

```python
import requests

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

## Response

Response schema: `DocumentLineDto`

| 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 identifier of the line within the document. |
| `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.position` | integer | Display position of the line within the document, starting at 0. |
| `data.itemId` | string | Catalog item identifier; null if the line is not of type item. |
| `data.itemName` | string | Item name as it was WHEN THE DOCUMENT WAS ISSUED. It may differ from the current item name in the catalog: the document is a snapshot. |
| `data.variantId` | string | Variant identifier; null if not applicable. |
| `data.variantName` | string | Variant name frozen in the snapshot; null if not applicable. |
| `data.quantity` | number | Units invoiced or quoted on the line. |
| `data.orderId` | string | Order the line comes from; null if it was added directly to the document. |
| `data.orderNumber` | string | Number of that order; null if the line does not come from one. |
| `data.startDate` | string<date-time> | Start of the invoiced period in ISO 8601 UTC; null if the line has no period. |
| `data.endDate` | string<date-time> | End of the invoiced period in ISO 8601 UTC; null if the line has no period. |
| `data.rentalDays` | number | Invoiced rental days; null if not applicable. |
| `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 | 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": "document_line_9f3a2b",
      "resourceType": "item",
      "transactionType": "rental",
      "position": 1,
      "itemId": "item_9f3a2b",
      "itemName": "Example item name",
      "variantId": "variant_9f3a2b",
      "variantName": "Example variant name",
      "quantity": 1,
      "orderId": "order_9f3a2b",
      "orderNumber": "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/quotes/list-the-lines-of-a-quote  
Last updated: 2026-10-25