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

# Changelog

## September 18, 2026

## Tax classification on products and checkout items

`tax_category` (`good` or `service`, default `good`) is now part of the `Product`
schema and is accepted by `POST /products`, `PATCH /products/{id}` and the inline
items of `POST /checkouts`. Inline items carry their own classification; items
sent with `product_id` or `price_id` use the product's. Each line keeps its own
classification on a mixed tax invoice.

## Account tax details are read from the tax registration document

`tax_id` and `tax_name` in `GET /account`, `GET /connected_accounts` and
`GET /connected_accounts/{id}` now return the NIT and legal name extracted from
the tax registration document (RTU) submitted during verification. When that
document has no value, the tax details previously stored on the account are
returned instead. No request change is required.

## Connected account document resubmissions are processed

`POST /connected_accounts` sent with the platform key and the `email` of an
existing connected account now reprocesses the documents in `verification` and
replaces them on that account. Documents you omit are kept, and a request with no
documents leaves the account's verification untouched. A rejected resubmission
now emits `verification.rejected` with `document_errors`; before, only first
submissions did.

## API keys resolve only their own environment

A `sk_test_` key now lists and resolves only test objects (`live_mode: false`),
and a `sk_live_` key only real ones. An ID from the other environment returns
`404`, or `401` on `/customers`. A customer becomes live with its first real
payment and stops resolving with the test key.