# POST /v1/objects

Mutable state, upserted. v1 has one type, `subscription`, the source of
MRR. Server keys (`sk_live_`) only.

```json
{
  "type": "subscription",
  "id": "sub_9",
  "status": "active",
  "mrr": 4900,
  "currency": "usd",
  "at": "2026-07-18T09:14:02Z"
}
```

| Field | Required | Notes |
|---|---|---|
| `type` | ✓ | `"subscription"` |
| `id` | ✓ | The subscription's stable id in *your* biller. Upsert key. |
| `status` | ✓ | Free string, up to 128 characters. **Only `"active"` counts toward MRR.** |
| `mrr` | ✓ | Integer minor units, **monthly-normalized by you** (annual ÷ 12). |
| `currency` | ✓ | ISO-4217. |
| `at` | | Version timestamp for last-write-wins. Defaults to arrival time. |

Semantics: send the full current state every time; the latest `at` wins.
Sending the same update twice is harmless: MRR reads the latest version
of each subscription, so replays and races cannot double-count.

MRR = sum of `mrr` over the latest version of each subscription where
`status = "active"`, per currency.
