---
title: "Save a Watch to your key (the paid step)"
method: POST
path: "/api/v1/watches"
tags: ["Watches"]
---

# Save a Watch to your key (the paid step)

`POST /api/v1/watches`

## Request

- Base URL: `https://api.signalbureau.ai`
- URL: `https://api.signalbureau.ai/api/v1/watches`
- Auth: none declared. Required headers: `x-api-key`

Saves a Watch into a slot: a paid slot at the published Watch rate per saved Watch per month (GET /api/tariff, units[watch].price, which also serves units[watch].opening_offer), or, while the opening offer is open, an opening slot on a verified email address. Your first five Watches are on us while we open the doors. Save up to 5 Watches at no charge through December 31, 2026, one allowance per verified email address. No card is needed to start. After that a Watch is $20 a month, and only if you choose to keep it. Self-issue a key (POST /api/keys, free, instant), then confirm an email address for it: POST /api/keys/verify with {"email"} and your key, and press the button in the email we send. Your next saves go into the opening slots. Paid slots are used first. With no free slot of either kind the answer is 402 with the next step, and nothing is saved or charged. Pass `watchId` to edit a saved Watch: a new version, no extra charge. Same content as the MCP tool `save_watch`. Buying steps: GET /api/tariff, units[watch].how_to_buy.

## Headers

- `x-api-key` string, required

## Request body

- object
  - `base` string, required: The standard Watch to start from; GET /api/v1/watches/standard lists the ids.
  - `coordinates` object: Coordinates to change from the base Watch; each one omitted takes the base value. The reading states, per coordinate, whether it was applied.
  - `label` string: Your own name for the Watch (save only).
  - `watchId` string: Save only: edit this saved Watch. An edit is a new version at no extra charge.

## Response `200`

Saved; the body carries the watchId and version.

- object

## Other responses

- `400`: bad-request: the body is not a JSON object, or names an unknown base or coordinate; the body names the parameter.
- `401`: No key: `{state: "key-required", error, howToGetOne}`. Configuring and unfurling need no key; saving, listing, recalling and retiring do.
- `402`: payment-required: no free paid slot on this key and no free opening slot on its verified email (or the opening offer has closed). Nothing was saved or charged; the body names the next step (create_order item 'watch').
- `403`: not-yours: the Watch is held by a different key and was not shared with this one; nothing was read, changed or charged.
- `429`: slow-down: past the published burst limit for this door. The `retry-after` header gives the seconds to wait.
- `503`: cannot-verify: we could not confirm the Watch is yours (key or Watch store did not answer, or the record names no owner); refused, retry shortly.

---

[API](https://skmtc.dev/sigb/apis/signal-bureau-api.md) · [All operations](https://skmtc.dev/sigb/apis/signal-bureau-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sigb/apis/signal-bureau-api/revisions/290c9c6ca0d0?raw)
