> ## 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.

# REST

> One POST per operation, and an OpenAPI document generated from the same definitions the API runs on.

**At** `https://platform.trylath.com`

Every operation is `POST /<product>/<name>`. There are no other verbs and no path parameters: the input is the JSON body, and the key names the environment, so there is nothing about *where* to act that can be left out.

Authenticate with `Authorization: Bearer <key>`. A request without one answers `401 unauthenticated` rather than pretending the route does not exist.

Replies are an envelope — `activityId` for the write, `result` for the operation's own output. Errors carry a `code`, a `message` and a `fix`.

Create an account, cap the month, send — no key needed for the first call.

```bash theme={null}
curl -X POST https://platform.trylath.com/sms/send \
  -H "Authorization: Bearer $LATH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"+14155550100","body":"Spring sale starts today.","topic":"promotions"}'
```
