Purchase orders

List purchase orders

Returns what the company buys or subcontracts from its suppliers, with their amounts and their payment status.

GET
/api/v1/purchase-orders

Request examples

curl https://app.filmo.io/api/v1/purchase-orders \
  --header "Authorization: Bearer $FILMO_API_KEY"
{
  "data": [
    {
      "id": "purchase_order_9f3a2b",
      "poNumber": "2026-0001",
      "status": "draft",
      "type": "subrental",
      "isDraft": true,
      "poDate": "2026-09-01T08:00:00.000Z",
      "supplierId": "supplier_9f3a2b",
      "reference": "2026-0001",
      "currency": "EUR",
      "subTotal": "120.00",
      "discountTotal": "120.00",
      "taxesPrice": "120.00",
      "netPrice": "120.00",
      "grossPrice": "120.00",
      "totalPaid": "120.00",
      "orderId": "order_9f3a2b",
      "orderNumber": "2026-0001",
      "projectId": "project_9f3a2b",
      "repairTicketId": "repair_ticket_9f3a2b",
      "notes": "Example text.",
      "createdAt": "2026-09-01T08:00:00.000Z",
      "updatedAt": "2026-09-01T08:00:00.000Z"
    }
  ],
  "pagination": {
    "nextCursor": "eyJvIjoyMH0",
    "hasMore": true,
    "total": 1
  }
}

Generated from the schema

Amounts are COST amounts, because the object is a purchase. Lines are not published, so the expense cannot be attributed to a specific item of a rental.

Authorizations

Bearer API key with the scope below. purchase-orders:read

Query parameters

limitintegerdefault:50

Page size (1-500). Defaults to 50.

Limits: min 1, max 500

cursorstring

Opaque cursor of the page to return. Pass the value of pagination.nextCursor from the previous response; treat it as opaque.

Limits: max length 200

createdOnstring

The creation date of the resource falls on this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

createdAfterstring

The creation date of the resource is after this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

createdBeforestring

The creation date of the resource is before this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

createdFromstring

The creation date of the resource is on or after this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

createdTostring

The creation date of the resource is on or before this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

updatedOnstring

The last update date of the resource falls on this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

updatedAfterstring

The last update date of the resource is after this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

updatedBeforestring

The last update date of the resource is before this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

updatedFromstring

The last update date of the resource is on or after this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

updatedTostring

The last update date of the resource is on or before this date. A bare day (YYYY-MM-DD, read in the business timezone) or an ISO 8601 instant with offset.

Limits: pattern ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}(:?\d{2})?))?$

sortstring

Sort order: up to 3 comma-separated fields, each with a leading "-" for descending (e.g. "-updatedAt,name"). Sortable fields: createdAt, updatedAt, poNumber, poDate, status, type, grossPrice, netPrice, isDraft. Defaults to "-createdAt". Ties are broken by id, so the order is stable across pages, and a cursor is bound to the sort it was issued with.

Limits: max length 200

statusstring

Filter by purchase order status.

Available options: draft, pending, completed, cancelled

statusesstring[]

Filter by status, as a list: repeat the parameter or separate the values with commas. Accepts up to 50 values and returns whatever matches any of them.

Available options: draft, pending, completed, cancelled

Limits: min 1 items, max 50 items

typestring

Filter by purchase order type.

Available options: subrental, stock_purchase, resale_purchase, consumable_purchase, technician, transport, repair, consignment

typesstring[]

Filter by type, as a list: repeat the parameter or separate the values with commas. Accepts up to 50 values and returns whatever matches any of them.

Available options: subrental, stock_purchase, resale_purchase, consumable_purchase, technician, transport, repair, consignment

Limits: min 1 items, max 50 items

supplierIdstring

Filter by supplier.

Limits: min length 1, max length 100

supplierIdsstring[]

Filter by supplierId, as a list: repeat the parameter or separate the values with commas. Accepts up to 50 values and returns whatever matches any of them.

Limits: min 1 items, max 50 items, each min length 1, each max length 100

orderIdstring

Filter by associated rental order.

Limits: min length 1, max length 100

orderIdsstring[]

Filter by orderId, as a list: repeat the parameter or separate the values with commas. Accepts up to 50 values and returns whatever matches any of them.

Limits: min 1 items, max 50 items, each min length 1, each max length 100

projectIdstring

Filter by associated project.

Limits: min length 1, max length 100

projectIdsstring[]

Filter by projectId, as a list: repeat the parameter or separate the values with commas. Accepts up to 50 values and returns whatever matches any of them.

Limits: min 1 items, max 50 items, each min length 1, each max length 100

includeTotalbooleandefault:false

Set it to true to include pagination.total, the number of results that match the filters across all pages. Off by default.

Response

application/json

Successful response.

Response schema: PurchaseOrderDto

Envelope: PurchaseOrderList. meta.warnings is present only when the operation is deprecated.

Headers: X-Request-Id · RateLimit-Limit · RateLimit-Remaining · RateLimit-Reset

dataobject[]

Show child attributes
data.idstring

Unique purchase order identifier.

data.poNumberstring | null

Purchase order number; null while it is a draft.

data.statusstring

Purchase order status.

Available options: draft, pending, completed, cancelled

data.typestring

Purchase order type.

Available options: subrental, stock_purchase, resale_purchase, consumable_purchase, technician, transport, repair, consignment

data.isDraftboolean

true if the purchase order is still a draft.

data.poDatestring<date-time> | null

Purchase order date in ISO 8601 UTC; null if not set.

data.supplierIdstring | null

Supplier identifier; null while a draft has no supplier. Resolve it against /api/v1/contacts.

data.referencestring | null

Free-form reference of the purchase order; null if it has none.

data.currencystring

Currency of the purchase order, as an ISO 4217 code.

data.subTotalstring

Subtotal before discounts and taxes, as a decimal string "1234.50".

Limits: pattern ^-?\d+\.\d{2}$

data.discountTotalstring

Discount total, as a decimal string "1234.50".

Limits: pattern ^-?\d+\.\d{2}$

data.taxesPricestring

Tax total, as a decimal string "1234.50".

Limits: pattern ^-?\d+\.\d{2}$

data.netPricestring

Taxable base, as a decimal string "1234.50".

Limits: pattern ^-?\d+\.\d{2}$

data.grossPricestring

Total including taxes, as a decimal string "1234.50".

Limits: pattern ^-?\d+\.\d{2}$

data.totalPaidstring | null

Amount already paid, as a decimal string "1234.50"; null if no payment has been recorded.

Limits: pattern ^-?\d+\.\d{2}$

data.orderIdstring | null

Associated rental order; null if it has none.

data.orderNumberstring | null

Number of that order; null if it has none.

data.projectIdstring | null

Associated project; null if it has none.

data.repairTicketIdstring | null

Repair ticket that originated the purchase; null if it does not come from one.

data.notesstring | null

Purchase order notes; null if it has none.

data.createdAtstring<date-time>

Creation date in ISO 8601 UTC.

data.updatedAtstring<date-time>

Last modification date in ISO 8601 UTC.

paginationobject

Opaque-cursor pagination metadata.

Show child attributes
pagination.nextCursorstring | null

Opaque cursor of the next page; null when there are no more results. Pass it as cursor in the next request.

pagination.hasMoreboolean

Whether more results exist beyond this page.

pagination.totalinteger

Number of results matching the filters across all pages. Present only when the request sets includeTotal=true.

Limits: min 0

metaobject

Additional information about the response.

Show child attributes
meta.warningsobject[]

Lifecycle warnings; present only when the operation is deprecated.

Show child attributes
meta.warnings.codestring

Stable warning code.

Available options: deprecated

meta.warnings.messagestring

For people: what is deprecated, until when, and what to use.

meta.warnings.sunsetstring

Day (YYYY-MM-DD) the operation stops being served.

meta.warnings.replacementstring | null

operationId of the operation to use instead, or null if there is none.

Errors

StatusCodesMeaning
400validation_errorMalformed query or body. errors[] lists every offending field with its stable code.
402addon_requiredThe account plan does not include the add-on this operation needs; requiredAddon names it.

401, 403, 429, 500 can be returned by any operation. Errors

Deprecation

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