> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trylath.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Every Lath operation is POST https://platform.trylath.com/<operation name with dots replaced by slashes>, with a JSON body and `Authorization: Bearer <key>`. `email.send` is POST /email/send.
> Branch on `error.code`, never on `error.message`. Every refusal also carries `error.fix`, which names the next step.
> Send an `Idempotency-Key` header on any operation that is not retry-safe, so a retry cannot run it twice.
> A `lath_test_` key emails only the account's own members and sends no SMS; a `lath_live_` key reaches real recipients and is billed.
> The OpenAPI document, generated from the same registry as the routes, is at https://platform.trylath.com/openapi.json.

# Versioning

> There is no version in the address, no version header, and no deprecation policy yet. Here is what that means for code you write today, and what the old /v1 paths are.

## An operation's address is its name

Every path is the operation name with its dots turned into slashes. `email.send` is `/email/send`, `auth.signin.start` is `/auth/signin/start`, `sms.number.release` is `/sms/number/release`. One rule, no exceptions, which is what lets an agent work out an address instead of looking it up.

There is no version segment. The version used to be in every URL a customer saw — the guides, the examples, the OpenAPI document, the Try It button — and a version number is a promise about the future made in the most public place there is. It was taken out of everything anyone reads.

## `/v1` still answers, and always will

Every operation is mounted twice: at its canonical path and under `/v1`. Anything already written against `/v1/email/send` keeps working, unchanged, with no cutover and no window where a caller breaks. Only what people read changed.

The routes are registered from one list rather than twice by hand, so an operation cannot end up served on one address and not the other — a failure that would look like the docs being wrong from outside and be invisible from inside.

A handful of `/v1` addresses are not that scheme at all. `/v1/callbacks/email`, `/v1/sms/status`, `/v1/sms/inbound` and `/v1/inbound/ingest` are URLs configured inside AWS and the carrier's console, not URLs a customer calls, and they stay where they are because rewriting them would break live traffic to buy nothing. They are left out of the published reference for the same reason.

## What is not built yet

There is no `Lath-Version` header, no version query parameter and no per-account pinning. Nothing negotiates a version, so nothing can pin one.

There is no deprecation policy either — no sunset header, no advance-notice window written down anywhere. Saying so plainly is more useful than a policy page nobody has committed to: when one exists it will be written here, and until then the honest answer is that the only compatibility promise Lath makes is the one above, that an address which works keeps working.

## What changes without warning, and what does not

Operations are added. Fields are added to results. Neither is announced, so parse results leniently: read the fields you need and ignore the ones you do not, and do not assert on an exact object shape.

Every input is strict — an unknown field is refused rather than ignored, which is how a typo in a field name is a refusal today instead of a silently dropped value discovered in production.

The operation catalogue is generated, so the reference, the OpenAPI document, the SDK types and the CLI commands are the same list. If an operation is in one it is in all of them.
