> This page is for version V1 (default).
> For other versions, use one of these documentation indexes:
> - V1 (default): https://docs.ottimate.com/v-1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ottimate.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ottimate.com/_mcp/server.

# Changelog

This update promotes Purchase Orders and Receipts APIs to beta, adds dimension support on purchase order line items, and introduces flexible PO lookup for receipts.

## Purchase Orders & Receipts — Now in Beta

The Purchase Orders and Receipts APIs, previously marked as in-development, are now available in **beta**. These endpoints support two-way and three-way matching workflows in Ottimate.

| API             | Endpoints                                                                     |
| --------------- | ----------------------------------------------------------------------------- |
| Purchase Orders | `GET`, `POST`, `PATCH /purchase-orders`, `POST /purchase-orders/bulk-upsert/` |
| Receipts        | `GET`, `POST`, `PATCH /receipts`, `POST /receipts/bulk-upsert/`               |

See the [Purchase Orders](/purchase-orders) and [Purchase Receipts](/purchase-receipts) guides for full documentation.

## New Features

### Dimensions on Purchase Order Items

PO line items now support dimension mappings via the `dimensions` field. Dimensions are keyed by type (e.g., `PROJECT`, `CLASS`) with values set to the `erp_dimension_id` of the dimension. When an invoice is matched to a PO, these dimensions can be inherited onto invoice line items for automatic coding.

* Dimensions must exist in Ottimate before being referenced — either synced via an Ottimate-hosted integration or created via the [Dimensions API](/api-reference/api-reference/dimensions/post-dimensions-root).
* Providing `dimensions` on a line item **replaces** all existing dimensions on that item.

### Custom Fields on Purchase Orders

Purchase orders now support a `custom_fields` object for company-specific metadata configured during onboarding.

### Flexible PO Lookup for Receipts

When creating a receipt, you can now identify the parent PO in two ways:

* **By Ottimate ID** — Provide `ottimate_po_id` directly
* **By lookup fields** — Provide `erp_vendor_id` + `ottimate_location_id` + either `po_number` or `po_external_id`

Similarly, receipt line items can reference PO items via `ottimate_po_item_id` or `po_external_item_id`.

## Documentation Updates

* **Accounts Payable section restructured** — Purchase Orders and Purchase Receipts are now listed as standalone pages following the business process flow: PO → Receipt → Invoice.
* **"Non-PO Invoice" renamed to "Invoices"** — The invoice guides now cover all invoice types.
* **AP Overview updated** — Added two-way and three-way matching workflow descriptions.

## Migration Notes

No breaking changes. All existing endpoints and request/response schemas remain unchanged.