# API reference

Factory Sales API v1 — 59 operations across 12 services. Base URL `https://api.factory.app/v1`. Each service is also published as a self-contained OpenAPI document — see [OpenAPI documents](https://developer.factory.app/openapi-documents.md).

## Catalogue

- `GET /v1/catalogue/flashings` — [List flashings](https://developer.factory.app/reference/catalogue/list-flashings.md): Returns a paginated list of flashing templates. A flashing line item must reference one of these templates by id, so use this list to find the template for…
- `GET /v1/catalogue/flashings/{templateId}` — [Get flashing](https://developer.factory.app/reference/catalogue/get-flashing.md): Returns the full flashing template, including its thickness and selectable colours.
- `GET /v1/catalogue/kits` — [List kits](https://developer.factory.app/reference/catalogue/list-kits.md): Returns a paginated list of product kit summaries. This is a lightweight listing: rows, components, and sub-assemblies are not populated — use GetKit to…
- `GET /v1/catalogue/kits/{kitId}` — [Get kit](https://developer.factory.app/reference/catalogue/get-kit.md): Returns the kit with its priced rows, top-level component products, and sub-assemblies — the single call that lets you drill into one kit's full detail.
- `GET /v1/catalogue/products` — [List products](https://developer.factory.app/reference/catalogue/list-products.md): Returns a paginated list of catalogue product summaries. The listing is lightweight: rows is not populated — retrieve a product with GetProduct to get its…
- `GET /v1/catalogue/products/{productId}` — [Get product](https://developer.factory.app/reference/catalogue/get-product.md): Returns the full product, including all of its priced variant rows.

## Search

- `GET /v1/catalogue:search` — [Search catalogue](https://developer.factory.app/reference/search/search-catalogue.md): Searches products, kits, and flashings by text query and returns one ranked list of minimal hits, most relevant first.

## Company

- `GET /v1/company` — [Get company](https://developer.factory.app/reference/company/get-company.md): A singleton read keyed by the bearer token. Returns the company's identity, locale and currency settings, the measurement system its quantities and…
- `GET /v1/company/custom-fields` — [List company custom fields](https://developer.factory.app/reference/company/list-company-custom-fields.md): Custom fields are account-configured, typed fields on sales documents, customers, and suppliers.

## Labels

- `GET /v1/company/labels` — [List labels](https://developer.factory.app/reference/labels/list-labels.md): Returns the labels configured for the authenticated company. Use the returned label ids when replacing an order's labels with SetOrderLabels.

## Order statuses

- `GET /v1/company/order-statuses` — [List order statuses](https://developer.factory.app/reference/order-statuses/list-order-statuses.md): Returns the order statuses (workflow columns) configured for the authenticated company, in display order.

## Customers

- `GET /v1/customers` — [List customers](https://developer.factory.app/reference/customers/list-customers.md): A company-scoped list of customers, optionally filtered by company name (a case-insensitive contains-match).
- `POST /v1/customers` — [Create customer](https://developer.factory.app/reference/customers/create-customer.md): Adds a new customer — company details, addresses, and contacts — to your company.
- `GET /v1/customers/{customerId}` — [Get customer](https://developer.factory.app/reference/customers/get-customer.md): Returns the full customer record — company details, addresses, contacts, and account flags — for the given id, scoped to your company.

## Inventory

- `GET /v1/inventory` — [List inventory](https://developer.factory.app/reference/inventory/list-inventory.md): Returns a paginated list of stock entries — one per product row per colour — for every catalogue product that has inventory tracking enabled.
- `GET /v1/inventory/{productId}` — [Get product inventory](https://developer.factory.app/reference/inventory/get-product-inventory.md): Returns every stock entry for the given product — one per row per colour.
- `PUT /v1/inventory/{productId}` — [Set stock levels](https://developer.factory.app/reference/inventory/set-stock-levels.md): Replaces the on-hand quantity for each row+colour combination you include.

## Orders

- `GET /v1/orders` — [List orders](https://developer.factory.app/reference/orders/list-orders.md): A flat, company-scoped list of orders. Confirmed orders only: quotes are read through QuoteService, and work-in-progress documents that have not yet become…
- `POST /v1/orders` — [Create order](https://developer.factory.app/reference/orders/create-order.md): The primary write endpoint: submit a complete order — header, line items, adjustments, and addresses — in one call, either saved as a draft or submitted…
- `GET /v1/orders/{orderId}` — [Get order](https://developer.factory.app/reference/orders/get-order.md): Returns the full order — header, lines, adjustments, totals, and server-derived fields — for the given id, scoped to the authenticated company.
- `GET /v1/orders/{orderId}/attachments` — [List attachments](https://developer.factory.app/reference/orders/list-attachments.md): Returns every file on the order's conversation as a flat list, oldest first: files your team attached and documents the Factory app generated (isGenerated…
- `POST /v1/orders/{orderId}/attachments` — [Upload attachment](https://developer.factory.app/reference/orders/upload-attachment.md): Uploads one file, up to 20 MB, into the order's conversation, where it appears immediately in the Factory app's Collaborate tab.
- `GET /v1/orders/{orderId}/attachments/{attachmentId}` — [Get attachment](https://developer.factory.app/reference/orders/get-attachment.md): Returns the attachment's details and a fresh presigned download URL.
- `DELETE /v1/orders/{orderId}/attachments/{attachmentId}` — [Delete attachment](https://developer.factory.app/reference/orders/delete-attachment.md): Removes the file from the order's conversation and from attachment lists.
- `POST /v1/orders/{orderId}/drawings:uploadSvg` — [Upload drawing SVG](https://developer.factory.app/reference/orders/upload-drawing-svg.md): Drawings exist only on flashing lines: a drawing is the folded profile of a sheet-metal flashing, not a general image or file attachment for the order.
- `PUT /v1/orders/{orderId}/labels` — [Set order labels](https://developer.factory.app/reference/orders/set-order-labels.md): The list you send becomes the order's complete label set: labels not listed are removed, and an empty list removes them all.
- `POST /v1/orders/{orderId}/lines` — [Add order line item](https://developer.factory.app/reference/orders/add-order-line-item.md): Build an order up over time: each call creates one line under the order and recomputes the order's totals.
- `PUT /v1/orders/{orderId}/lines/{lineId}` — [Update order line item](https://developer.factory.app/reference/orders/update-order-line-item.md): Send the full replacement line content; the whole line is replaced and the order's totals are recomputed.
- `DELETE /v1/orders/{orderId}/lines/{lineId}` — [Delete order line item](https://developer.factory.app/reference/orders/delete-order-line-item.md): Identify the line by the server-assigned id returned when you read the order; the order's totals are recomputed after removal.
- `GET /v1/orders/{orderId}/messages` — [List messages](https://developer.factory.app/reference/orders/list-messages.md): Returns the order's conversation — the same thread shown in the Factory app's Collaborate tab — oldest message first: text written by your team, files they…
- `POST /v1/orders/{orderId}/messages` — [Post message](https://developer.factory.app/reference/orders/post-message.md): Adds a plain-text message to the order's conversation, visible immediately in the Factory app's Collaborate tab.
- `GET /v1/orders:query` — [Query orders](https://developer.factory.app/reference/orders/query-orders.md): Like ListOrders, but ordered by when each order last changed (oldest first) and filterable by an updatedSince / updatedBefore time window — so a poller…

## Quotes

- `GET /v1/quotes` — [List quotes](https://developer.factory.app/reference/quotes/list-quotes.md): A flat, company-scoped list of quotes. Quotes only — confirmed orders are read through OrderService. Quotes are returned most recently updated first;…
- `POST /v1/quotes` — [Create quote](https://developer.factory.app/reference/quotes/create-quote.md): Submit a complete quote — customer, line items, adjustments, and addresses — in one call, either saved as a draft or finalised and sent.
- `GET /v1/quotes/{quoteId}` — [Get quote](https://developer.factory.app/reference/quotes/get-quote.md): Returns the full quote — header, lines, adjustments, totals, and server-derived fields — for the given id, scoped to the authenticated company.
- `GET /v1/quotes/{quoteId}/attachments` — [List attachments](https://developer.factory.app/reference/quotes/list-attachments.md): Returns every file on the quote's conversation as a flat list, oldest first: files your team attached and documents the Factory app generated (isGenerated…
- `POST /v1/quotes/{quoteId}/attachments` — [Upload attachment](https://developer.factory.app/reference/quotes/upload-attachment.md): Uploads one file, up to 20 MB, into the quote's conversation, where it appears immediately in the Factory app's Collaborate tab.
- `GET /v1/quotes/{quoteId}/attachments/{attachmentId}` — [Get attachment](https://developer.factory.app/reference/quotes/get-attachment.md): Returns the attachment's details and a fresh presigned download URL.
- `DELETE /v1/quotes/{quoteId}/attachments/{attachmentId}` — [Delete attachment](https://developer.factory.app/reference/quotes/delete-attachment.md): Removes the file from the quote's conversation and from attachment lists.
- `POST /v1/quotes/{quoteId}/drawings:uploadSvg` — [Upload drawing SVG](https://developer.factory.app/reference/quotes/upload-drawing-svg.md): Drawings exist only on flashing lines: a drawing is the folded profile of a sheet-metal flashing, not a general image or file attachment for the quote.
- `PUT /v1/quotes/{quoteId}/labels` — [Set quote labels](https://developer.factory.app/reference/quotes/set-quote-labels.md): The list you send becomes the quote's complete label set: labels not listed are removed, and an empty list removes them all.
- `POST /v1/quotes/{quoteId}/lines` — [Add quote line item](https://developer.factory.app/reference/quotes/add-quote-line-item.md): Build a quote up over time: each call creates one line under the quote and recomputes the quote's totals.
- `PUT /v1/quotes/{quoteId}/lines/{lineId}` — [Update quote line item](https://developer.factory.app/reference/quotes/update-quote-line-item.md): Send the full replacement line content; the whole line is replaced and the quote's totals are recomputed.
- `DELETE /v1/quotes/{quoteId}/lines/{lineId}` — [Delete quote line item](https://developer.factory.app/reference/quotes/delete-quote-line-item.md): Identify the line by the server-assigned id returned when you read the quote; the quote's totals are recomputed after removal.
- `GET /v1/quotes/{quoteId}/messages` — [List messages](https://developer.factory.app/reference/quotes/list-messages.md): Returns the quote's conversation — the same thread shown in the Factory app's Collaborate tab — oldest message first: text written by your team, files they…
- `POST /v1/quotes/{quoteId}/messages` — [Post message](https://developer.factory.app/reference/quotes/post-message.md): Adds a plain-text message to the quote's conversation, visible immediately in the Factory app's Collaborate tab.
- `GET /v1/quotes:query` — [Query quotes](https://developer.factory.app/reference/quotes/query-quotes.md): Like ListQuotes, but ordered by when each quote last changed (oldest first) and filterable by an updatedSince / updatedBefore time window — so a poller…

## Suppliers

- `GET /v1/suppliers` — [List suppliers](https://developer.factory.app/reference/suppliers/list-suppliers.md): Returns a paginated list of your company's suppliers. Useful for discovering supplier ids to pass as filters on the inventory list. Suppliers are ordered…
- `GET /v1/suppliers/{supplierId}` — [Get supplier](https://developer.factory.app/reference/suppliers/get-supplier.md): Returns the supplier matching the given id. Useful when you already have a supplier id (for example from an inventory filter) and need its details without…

## Users

- `GET /v1/users` — [List users](https://developer.factory.app/reference/users/list-users.md): A company-scoped list of users, returning active users by default.
- `GET /v1/users/{userId}` — [Get user](https://developer.factory.app/reference/users/get-user.md): Returns the user record — name, email, and active status — for the given id, scoped to your company.

## Webhooks

- `GET /v1/webhook-deliveries` — [List webhook deliveries](https://developer.factory.app/reference/webhooks/list-webhook-deliveries.md): Records cover the last 30 days. Filter by subscription, state, or a creation-time window; combine filters freely.
- `GET /v1/webhook-deliveries/{deliveryId}` — [Get webhook delivery](https://developer.factory.app/reference/webhooks/get-webhook-delivery.md): Fetch one delivery record.
- `GET /v1/webhooks` — [List webhooks](https://developer.factory.app/reference/webhooks/list-webhooks.md): Sorted by creation time, newest first. Secrets are never included.
- `POST /v1/webhooks` — [Create webhook](https://developer.factory.app/reference/webhooks/create-webhook.md): Creates a subscription delivering the requested event types to an HTTPS endpoint.
- `GET /v1/webhooks/{webhookId}` — [Get webhook](https://developer.factory.app/reference/webhooks/get-webhook.md): The secret is never included — it is returned only by CreateWebhook.
- `DELETE /v1/webhooks/{webhookId}` — [Delete webhook](https://developer.factory.app/reference/webhooks/delete-webhook.md): Deliveries stop immediately. Existing delivery records remain readable until their 30-day retention lapses.
- `PATCH /v1/webhooks/{webhookId}` — [Update webhook](https://developer.factory.app/reference/webhooks/update-webhook.md): Fields left unset keep their current value. The secret cannot be changed (rotation is not available in v1); to stop deliveries set status to disabled, to…
- `POST /v1/webhooks/{webhookId}:test` — [Test webhook](https://developer.factory.app/reference/webhooks/test-webhook.md): POSTs a synthetic ping event through the real signing and delivery path and reports what the endpoint answered.

---

Source: https://developer.factory.app/reference · Factory Sales API v1
