> Fetch the index of every Tonbo docs page as Markdown at https://tonbo.dev/llms.txt

# Management API: Account

Last updated 2 November 2026

The caller's account, its regions, members and Agents. [The overview](https://tonbo.dev/docs/reference/management.md) covers what every operation shares: authentication, roles, errors, pagination, idempotency and If-Match.

- [`GET /account`](#get-account) Read the caller's account, membership and limits
- [`GET /regions`](#list-regions) List the regions new resources can be created in
- [`GET /members`](#list-members) List the account's people and Agents with their roles
- [`PATCH /members/{subject}`](#update-member) Change a member's role, or rename an Agent
- [`POST /agents`](#create-agent) Create an Agent, an identity with a role in the account
- [Objects](#objects): [Account](#schema-account), [AccountAgent](#schema-account-agent), [Member](#schema-member) and [Region](#schema-region)

## Read the caller's account, membership and limits

`GET /v1/account` · CLI: `tonbo account show`

Needs [`account.read`](https://tonbo.dev/docs/reference/management.md#capability-account-read), which `owner`, `admin` and `member` hold. A narrowed key may call it.

### Response

| Status | Answer |
| --- | --- |
| `200` | The account |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | [Account](https://tonbo.dev/docs/reference/management/account.md#schema-account) | yes |  |

| Header | Status | Description |
| --- | --- | --- |
| `ETag` | 200 | Current resource version for optional conditional updates. |
| `WWW-Authenticate` | 401 | Authentication scheme required by this API. |
| `Retry-After` | 429 | Seconds before the client should retry. |

**Example 200 body**

```json
{
  "data": {
    "id": "3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
    "kind": "user",
    "name": "<name>",
    "member": {
      "kind": "user",
      "subject": "agent.3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
      "role": "owner"
    },
    "limits": {
      "buckets": 0
    }
  }
}
```

### Errors

| Status | Code | When | Send again | What to do |
| --- | --- | --- | --- | --- |
| `401` | [`exchange_required`](https://tonbo.dev/docs/reference/management.md#exchange_required) | The key acts as an Agent, and an Agent’s key is never sent itself. | No | Exchange the key for a token at the endpoint the answer’s `token_endpoint` names, and send the token as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#exchange_required)) |
| `401` | [`unauthenticated`](https://tonbo.dev/docs/reference/management.md#unauthenticated) | The request carries no key or token, or one that is invalid, expired or revoked. | No | Send a valid key, or a token that has not expired, as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#unauthenticated)) |
| `403` | [`forbidden`](https://tonbo.dev/docs/reference/management.md#forbidden) | The key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may. | No | Use a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#forbidden)) |
| `429` | [`rate_limited`](https://tonbo.dev/docs/reference/management.md#rate_limited) | The key or the account sent more requests than its rate allows. | After Retry-After | Wait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#rate_limited)) |

### Retries

- A read: sending it again changes nothing.
- `429` carry `Retry-After`: wait that many seconds, then send the same request again.

**Request**

```shell
curl -sS "https://api.tonbo.dev/v1/account" \
  -H "Authorization: Bearer $TONBO_API_KEY"
```

## List the regions new resources can be created in

`GET /v1/regions` · CLI: `tonbo region list`

Needs [`account.read`](https://tonbo.dev/docs/reference/management.md#capability-account-read), which `owner`, `admin` and `member` hold. A narrowed key may call it.

### Response

| Status | Answer |
| --- | --- |
| `200` | Regions |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | array of [Region](https://tonbo.dev/docs/reference/management/account.md#schema-region) | yes |  |

| Header | Status | Description |
| --- | --- | --- |
| `WWW-Authenticate` | 401 | Authentication scheme required by this API. |
| `Retry-After` | 429 | Seconds before the client should retry. |

**Example 200 body**

```json
{
  "data": [
    {
      "id": "<id>",
      "url": "https://example.com",
      "default": false
    }
  ]
}
```

### Errors

| Status | Code | When | Send again | What to do |
| --- | --- | --- | --- | --- |
| `401` | [`exchange_required`](https://tonbo.dev/docs/reference/management.md#exchange_required) | The key acts as an Agent, and an Agent’s key is never sent itself. | No | Exchange the key for a token at the endpoint the answer’s `token_endpoint` names, and send the token as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#exchange_required)) |
| `401` | [`unauthenticated`](https://tonbo.dev/docs/reference/management.md#unauthenticated) | The request carries no key or token, or one that is invalid, expired or revoked. | No | Send a valid key, or a token that has not expired, as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#unauthenticated)) |
| `403` | [`forbidden`](https://tonbo.dev/docs/reference/management.md#forbidden) | The key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may. | No | Use a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#forbidden)) |
| `429` | [`rate_limited`](https://tonbo.dev/docs/reference/management.md#rate_limited) | The key or the account sent more requests than its rate allows. | After Retry-After | Wait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#rate_limited)) |

### Retries

- A read: sending it again changes nothing.
- `429` carry `Retry-After`: wait that many seconds, then send the same request again.

**Request**

```shell
curl -sS "https://api.tonbo.dev/v1/regions" \
  -H "Authorization: Bearer $TONBO_API_KEY"
```

## List the account's people and Agents with their roles

`GET /v1/members` · CLI: `tonbo member list`

Needs [`account.read`](https://tonbo.dev/docs/reference/management.md#capability-account-read), which `owner`, `admin` and `member` hold. A narrowed key may call it.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `cursor` | query | string | no | Opaque cursor tied to the original query shape. At least 1 characters. |
| `limit` | query | integer | no | The most items one page holds, 1 to 200; 50 when omitted. A page may hold fewer; read on with `next_cursor` until it is null. Default `50`. 1 to 200. |

### Response

| Status | Answer |
| --- | --- |
| `200` | Members |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | array of [Member](https://tonbo.dev/docs/reference/management/account.md#schema-member) | yes |  |
| `next_cursor` | string or null | yes | Opaque cursor of the next page; null on the last page. |

| Header | Status | Description |
| --- | --- | --- |
| `WWW-Authenticate` | 401 | Authentication scheme required by this API. |
| `Retry-After` | 429 | Seconds before the client should retry. |

**Example 200 body**

```json
{
  "data": [
    {
      "kind": "user",
      "subject": "agent.3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
      "role": "owner",
      "name": "<name>",
      "display_name": "<display_name>",
      "created_at": "2026-11-02T09:30:00.000Z"
    }
  ],
  "next_cursor": "<next_cursor>"
}
```

### Errors

| Status | Code | When | Send again | What to do |
| --- | --- | --- | --- | --- |
| `401` | [`exchange_required`](https://tonbo.dev/docs/reference/management.md#exchange_required) | The key acts as an Agent, and an Agent’s key is never sent itself. | No | Exchange the key for a token at the endpoint the answer’s `token_endpoint` names, and send the token as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#exchange_required)) |
| `401` | [`unauthenticated`](https://tonbo.dev/docs/reference/management.md#unauthenticated) | The request carries no key or token, or one that is invalid, expired or revoked. | No | Send a valid key, or a token that has not expired, as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#unauthenticated)) |
| `403` | [`forbidden`](https://tonbo.dev/docs/reference/management.md#forbidden) | The key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may. | No | Use a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#forbidden)) |
| `422` | [`validation_error`](https://tonbo.dev/docs/reference/management.md#validation_error) | A parameter, header or body field breaks its rule; `errors` names each field. | No | Correct the fields `errors` names; the operation’s reference gives each one’s rule. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#validation_error)) |
| `429` | [`rate_limited`](https://tonbo.dev/docs/reference/management.md#rate_limited) | The key or the account sent more requests than its rate allows. | After Retry-After | Wait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#rate_limited)) |

### Retries

- A read: sending it again changes nothing.
- `429` carry `Retry-After`: wait that many seconds, then send the same request again.

**Request**

```shell
curl -sS "https://api.tonbo.dev/v1/members" \
  -H "Authorization: Bearer $TONBO_API_KEY"
```

## Change a member's role, or rename an Agent

`PATCH /v1/members/{subject}` · CLI: `tonbo member update`

Needs [`members.write`](https://tonbo.dev/docs/reference/management.md#capability-members-write), which `owner` and `admin` hold. A narrowed key may not.

Owners and admins give a person or an Agent another role; only an owner grants `owner`. `name` renames an Agent: it follows the Agent name rule and is unique among the account's active Agents (409 otherwise), and the Agent keeps its id, keys, home region and public hostname. A person's name belongs to their own profile, so `name` on a person is refused with 422 `validation_error` on the field `name`. Both fields in one request change together or not at all. People change members; an Agent's credential is refused with 403.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `subject` | path | string | yes | The member to change, by the `subject` `GET /v1/members` lists: a person's user id, or `agent.<agent id>` for an Agent. Matches `^[a-z0-9._-]{1,64}$`. |

### Request body

`application/json`, required. Unknown fields are refused.

At least one field.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `role` | one of `"owner"`, `"admin"` or `"member"` | no | The member's new role. Only an owner grants `owner`, and an account always keeps at least one person as owner. |
| `name` | string | no | The Agent's new name; refused for a person. 1 to 40 characters. Matches `^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$`. |

### Response

| Status | Answer |
| --- | --- |
| `200` | The member |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | [Member](https://tonbo.dev/docs/reference/management/account.md#schema-member) | yes |  |

| Header | Status | Description |
| --- | --- | --- |
| `WWW-Authenticate` | 401 | Authentication scheme required by this API. |
| `Retry-After` | 429 | Seconds before the client should retry. |

**Example 200 body**

```json
{
  "data": {
    "kind": "user",
    "subject": "agent.3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
    "role": "owner",
    "name": "<name>",
    "display_name": "<display_name>",
    "created_at": "2026-11-02T09:30:00.000Z"
  }
}
```

### Errors

| Status | Code | When | Send again | What to do |
| --- | --- | --- | --- | --- |
| `401` | [`exchange_required`](https://tonbo.dev/docs/reference/management.md#exchange_required) | The key acts as an Agent, and an Agent’s key is never sent itself. | No | Exchange the key for a token at the endpoint the answer’s `token_endpoint` names, and send the token as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#exchange_required)) |
| `401` | [`unauthenticated`](https://tonbo.dev/docs/reference/management.md#unauthenticated) | The request carries no key or token, or one that is invalid, expired or revoked. | No | Send a valid key, or a token that has not expired, as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#unauthenticated)) |
| `403` | [`forbidden`](https://tonbo.dev/docs/reference/management.md#forbidden) | The key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may. | No | Use a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#forbidden)) |
| `404` | [`not_found`](https://tonbo.dev/docs/reference/management.md#not_found) | No live resource of the key’s account has that name or id, or the key is narrowed away from it. | No | Check the name, and that the key belongs to the account that holds it; list the resources to see what exists. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#not_found)) |
| `409` | [`conflict`](https://tonbo.dev/docs/reference/management.md#conflict) | The name is held by another live resource of the account, the Idempotency-Key already created another resource or one since deleted, or the resource’s current state does not allow the change. `detail` says which, and `errors` names the field. | No | Pick another name or a new Idempotency-Key, or read the resource again and act on its current state. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#conflict)) |
| `422` | [`validation_error`](https://tonbo.dev/docs/reference/management.md#validation_error) | A parameter, header or body field breaks its rule; `errors` names each field. | No | Correct the fields `errors` names; the operation’s reference gives each one’s rule. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#validation_error)) |
| `429` | [`rate_limited`](https://tonbo.dev/docs/reference/management.md#rate_limited) | The key or the account sent more requests than its rate allows. | After Retry-After | Wait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#rate_limited)) |

### Retries

- It takes no Idempotency-Key; its description above says what sending it again does.
- `429` carry `Retry-After`: wait that many seconds, then send the same request again.

**Request**

```shell
curl -sS -X PATCH "https://api.tonbo.dev/v1/members/<subject>" \
  -H "Authorization: Bearer $TONBO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

## Create an Agent, an identity with a role in the account

`POST /v1/agents` · CLI: `tonbo agent create`

Needs [`agents.create`](https://tonbo.dev/docs/reference/management.md#capability-agents-create), which `owner` and `admin` hold. A narrowed key may not.

Owners and admins create Agents; only an owner grants `owner`. A replay with the same Idempotency-Key returns the Agent the first request created.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Idempotency-Key` | header | string | yes | A value you choose for this one creation, 1 to 255 characters, such as a new UUID. Send a new one for each resource you create, and the same one only to retry that request after a timeout or a lost answer: the retry answers what the first request created, in its current state, and never creates a second. A key reused for a different database, stream or Machine answers 409. 1 to 255 characters. |

### Request body

`application/json`, required. Unknown fields are refused.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | The Agent's name; 409 when an active Agent of the account has it. 1 to 40 characters. Matches `^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$`. |
| `role` | one of `"owner"`, `"admin"` or `"member"` | no | The Agent's role; `member` when omitted. Only an owner grants `owner`. Default `"member"`. |
| `region` | string | no | The Agent's home region; the only open region when omitted. |

### Response

| Status | Answer |
| --- | --- |
| `201` | The Agent |

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | [AccountAgent](https://tonbo.dev/docs/reference/management/account.md#schema-account-agent) | yes |  |

| Header | Status | Description |
| --- | --- | --- |
| `WWW-Authenticate` | 401 | Authentication scheme required by this API. |
| `Retry-After` | 429 | Seconds before the client should retry. |

**Example 201 body**

```json
{
  "data": {
    "id": "3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
    "subject": "agent.3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
    "name": "<name>",
    "role": "owner",
    "region": "<region>",
    "created_at": "2026-11-02T09:30:00.000Z"
  }
}
```

### Errors

| Status | Code | When | Send again | What to do |
| --- | --- | --- | --- | --- |
| `401` | [`exchange_required`](https://tonbo.dev/docs/reference/management.md#exchange_required) | The key acts as an Agent, and an Agent’s key is never sent itself. | No | Exchange the key for a token at the endpoint the answer’s `token_endpoint` names, and send the token as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#exchange_required)) |
| `401` | [`unauthenticated`](https://tonbo.dev/docs/reference/management.md#unauthenticated) | The request carries no key or token, or one that is invalid, expired or revoked. | No | Send a valid key, or a token that has not expired, as `Authorization: Bearer`. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#unauthenticated)) |
| `403` | [`forbidden`](https://tonbo.dev/docs/reference/management.md#forbidden) | The key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may. | No | Use a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#forbidden)) |
| `409` | [`idempotency_conflict`](https://tonbo.dev/docs/reference/management.md#idempotency_conflict) | The Idempotency-Key was already sent with a different request. | No | Send the request with a new Idempotency-Key, or send the request the key was first used for. ([more](https://tonbo.dev/docs/machines/troubleshooting/manage.md#idempotency_conflict)) |
| `409` | [`conflict`](https://tonbo.dev/docs/reference/management.md#conflict) | The name is held by another live resource of the account, the Idempotency-Key already created another resource or one since deleted, or the resource’s current state does not allow the change. `detail` says which, and `errors` names the field. | No | Pick another name or a new Idempotency-Key, or read the resource again and act on its current state. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#conflict)) |
| `422` | [`validation_error`](https://tonbo.dev/docs/reference/management.md#validation_error) | A parameter, header or body field breaks its rule; `errors` names each field. | No | Correct the fields `errors` names; the operation’s reference gives each one’s rule. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#validation_error)) |
| `429` | [`rate_limited`](https://tonbo.dev/docs/reference/management.md#rate_limited) | The key or the account sent more requests than its rate allows. | After Retry-After | Wait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. ([more](https://tonbo.dev/docs/databases/troubleshooting/manage.md#rate_limited)) |

### Retries

- Send a new [`Idempotency-Key`](#create-agent-header-idempotency-key) with each request and the same one when you send it again: a repeat answers what the first request did, and the key reused for a different request answers 409 (see [Idempotency](https://tonbo.dev/docs/reference/management.md#idempotency)).
- `429` carry `Retry-After`: wait that many seconds, then send the same request again.

**Request**

```shell
curl -sS "https://api.tonbo.dev/v1/agents" \
  -H "Authorization: Bearer $TONBO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>"}'
```

## Objects

### Account

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes | The account's id; a database's and a stream's URL name it after the region's origin. |
| `kind` | one of `"user"` or `"organization"` | yes | `user` for a person's own account, `organization` for an organization's. |
| `name` | string | yes | The account's name as the console shows it. |
| `member` | object | yes | The caller's own membership. |
| `member.kind` | one of `"user"` or `"agent"` | yes | `user` when the key acts as a person, `agent` when it acts as an Agent. |
| `member.subject` | string | yes | Who the key acts as, a user id or `agent.<agent id>`. Matches `^[a-z0-9._-]{1,64}$`. |
| `member.role` | one of `"owner"`, `"admin"` or `"member"` | yes | The caller's current role, which decides what the key may do. |
| `limits` | object | yes | How much of each resource the account may hold. |
| `limits.buckets` | integer | yes | Live buckets the account may hold. At least 0. |

**Example Account**

```json
{
  "id": "3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
  "kind": "user",
  "name": "<name>",
  "member": {
    "kind": "user",
    "subject": "agent.3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
    "role": "owner"
  },
  "limits": {
    "buckets": 0
  }
}
```

### AccountAgent

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes | The Agent's id. |
| `subject` | string | yes | `agent.<id>`, the Agent as a member: name it as `member` to create a key for the Agent, and in `PATCH /v1/members/{subject}`. Matches `^[a-z0-9._-]{1,64}$`. |
| `name` | string | yes | The Agent's name. |
| `role` | one of `"owner"`, `"admin"` or `"member"` | yes | The Agent's role. |
| `region` | string | yes | The Agent's home region, fixed at creation. |
| `created_at` | string (date-time) | yes | When the Agent was created. |

**Example AccountAgent**

```json
{
  "id": "3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
  "subject": "agent.3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
  "name": "<name>",
  "role": "owner",
  "region": "<region>",
  "created_at": "2026-11-02T09:30:00.000Z"
}
```

### Member

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | one of `"user"` or `"agent"` | yes | `user` for a person, `agent` for an Agent. |
| `subject` | string | yes | The member's id in the account, which `PATCH /v1/members/{subject}` names. Matches `^[a-z0-9._-]{1,64}$`. |
| `role` | one of `"owner"`, `"admin"` or `"member"` | yes | The member's role. |
| `name` | string or null | yes | A person's username, or the Agent's name; null when the person has none. |
| `display_name` | string or null | yes | A person's display name, or the Agent's name; null when the person has none. |
| `created_at` | string (date-time) | yes | When the person or Agent joined the account. |

**Example Member**

```json
{
  "kind": "user",
  "subject": "agent.3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
  "role": "owner",
  "name": "<name>",
  "display_name": "<display_name>",
  "created_at": "2026-11-02T09:30:00.000Z"
}
```

### Region

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The region's id, which a creation names as `region`. Matches `^[a-z]{2}-[a-z]+-[0-9]$`. |
| `url` | string (uri) | yes | The origin of the data plane in this region; a database's URL is this origin, the account id and the database name, and a bucket's is this origin and the bucket name. |
| `default` | boolean | yes | Whether a database goes to this region when its creation names none. |

**Example Region**

```json
{
  "id": "<id>",
  "url": "https://example.com",
  "default": false
}
```
