+++
title = "Clusters"
description = "Create, read, rename and delete the account's clusters, and change their plans."
weight = 86
updated = 2026-11-03

[extra]
nav_title = "Clusters"
weight = 20
+++

<!-- Generated by script/build-api-reference.js from data/openapi/v1.yml and data/api-reference/pages.yml. Edit those and run `npm run build:api-reference`, not this file. -->

Create, read, rename and delete the account's clusters, and change
their plans. Creating, deleting and changing a plan are slow, so they
start an [Action](@/docs/api/actions/index.md) and answer `202` at once.
A cluster's connection details are its
[credentials](@/docs/api/reference/credentials/index.md).

**On this page:** [Cluster object](#cluster-object), [List the account's clusters](#list-clusters), [Create a cluster](#create-cluster), [Show a cluster](#get-cluster), [Rename a cluster](#update-cluster), [Delete a cluster](#delete-cluster), [Change a cluster's plan](#change-cluster-plan).

## The Cluster object {#cluster-object}

| Field | Type | Description |
|---|---|---|
| `id` | string | The slug. Never changes, never reused. |
| `name` | string | A label; can change and isn't unique. |
| `state` | string | One of `draft`, `provisioning`, `ready`, `failed`, `read_only`, `disabled`, `deprovisioning`, `deprovisioned`. More may be added. `draft`: created in the dashboard and never provisioned. `read_only` and `disabled` win over `ready`. |
| `plan` | object or null | null only for a draft. |
| `plan.id` | string | The plan's ID. |
| `plan.name` | string | The plan's name. |
| `region` | object | The region the cluster runs in. |
| `region.id` | string | The region's ID, such as `aws-us-east-1`. |
| `region.name` | string | The region's name. |
| `space` | object or null | Set only for private placement. |
| `space.id` | string | The space's ID. |
| `space.name` | string | The space's name. |
| `release` | object | The engine and version the cluster runs. |
| `release.id` | string | The release's ID, such as `opensearch-3.8.0`. |
| `release.name` | string | The release's name. |
| `single_tenant` | boolean | Whether the cluster runs on servers of its own. |
| `host` | string or null | null until provisioned. |
| `port` | integer | The port to connect on. |
| `stats` | object | From the last index-stats poll. All null until the first poll; never a fake 0. |
| `stats.docs` | integer or null | Documents in the cluster. |
| `stats.shards` | integer or null | Shards in the cluster. |
| `stats.bytes` | integer or null | Bytes the cluster uses on disk. |
| `stats.polled_at` | string (date-time) or null | When the stats were taken. |
| `stats.limits` | object or null | null when the plan has no resource limits on record. |
| `stats.limits.docs` | integer or null | The most documents the plan allows. |
| `stats.limits.shards` | integer or null | The most shards the plan allows. |
| `stats.limits.bytes` | integer or null | The most disk the plan allows, in bytes. |
| `stats.limits.daily_bandwidth_bytes` | integer or null | The most bandwidth the plan allows a day, in bytes. |
| `latest_action` | object or null | The cluster's most recent Action. null if it has none. |
| `latest_action.id` | string | The Action's ID. |
| `latest_action.type` | string | One of `cluster.provision`, `cluster.deprovision`, `cluster.change_plan`, `cluster.read_only`, `cluster.disable`, `cluster.enable`. More may be added. |
| `latest_action.state` | string | One of `new`, `running`, `success`, `error`. More may be added. |
| `dashboard_url` | string (URL) | The cluster's page in the dashboard. |
| `created_at` | string (date-time) | When the cluster was created. |
| `terminated_at` | string (date-time) or null | When the cluster was deleted. null while it exists. |

```json
{
  "id": "my-search-4823919",
  "name": "my-search",
  "state": "ready",
  "plan": { "id": "sandbox", "name": "Sandbox" },
  "region": { "id": "aws-us-east-1", "name": "AWS US East (N. Virginia)" },
  "space": null,
  "release": { "id": "opensearch-3.8.0", "name": "OpenSearch 3.8.0" },
  "single_tenant": false,
  "host": "my-search-4823919.us-east-1.bonsaisearch.net",
  "port": 443,
  "stats": {
    "docs": 12840,
    "shards": 2,
    "bytes": 48211968,
    "polled_at": "2026-10-26T13:50:00Z",
    "limits": {
      "docs": 50000,
      "shards": 10,
      "bytes": 1073741824,
      "daily_bandwidth_bytes": null
    }
  },
  "latest_action": {
    "id": "act_3k9x0q2m7v1c8b4n",
    "type": "cluster.provision",
    "state": "success"
  },
  "dashboard_url": "https://app.bonsai.io/accounts/acme/clusters/my-search-4823919",
  "created_at": "2026-10-26T14:03:00Z",
  "terminated_at": null
}
```

## List the account's clusters {#list-clusters}

<p class="api-endpoint"><span class="api-method api-method-get">GET</span> <code>/v1/clusters</code></p>

- **Scope:** `clusters:read`

Newest first. Terminated clusters are not listed.

### Parameters

| Name | In | Type | Description |
|---|---|---|---|
| `limit` | query | integer | Page size. Defaults to 25. |
| `cursor` | query | string | The `next_cursor` of the previous page. Opaque. |
| `name` | query | string | Case-insensitive substring of the name. |
| `region` | query | string | Region ID. |
| `space` | query | string | Space ID (private placement only). |
| `single_tenant` | query | boolean | Only clusters on servers of their own (`true`), or only shared ones (`false`). |
| `state` | query | string | One of the cluster states. |

### Example request

```bash
curl "https://api.bonsai.io/v1/clusters?region=aws-us-east-1&limit=10" \
  -H "Authorization: Bearer $BONSAI_TOKEN"
```

### Response

`200 OK`. A page of [Cluster objects](#cluster-object) in `data`, with `next_cursor`. See [Pagination](@/docs/api/requests-and-responses/index.md#pagination).

```json
{
  "data": [
    {
      "id": "my-search-4823919",
      "name": "my-search",
      "state": "ready",
      "plan": { "id": "sandbox", "name": "Sandbox" },
      "region": { "id": "aws-us-east-1", "name": "AWS US East (N. Virginia)" },
      "space": null,
      "release": { "id": "opensearch-3.8.0", "name": "OpenSearch 3.8.0" },
      "single_tenant": false,
      "host": "my-search-4823919.us-east-1.bonsaisearch.net",
      "port": 443,
      "stats": {
        "docs": 12840,
        "shards": 2,
        "bytes": 48211968,
        "polled_at": "2026-10-26T13:50:00Z",
        "limits": {
          "docs": 50000,
          "shards": 10,
          "bytes": 1073741824,
          "daily_bandwidth_bytes": null
        }
      },
      "latest_action": {
        "id": "act_3k9x0q2m7v1c8b4n",
        "type": "cluster.provision",
        "state": "success"
      },
      "dashboard_url": "https://app.bonsai.io/accounts/acme/clusters/my-search-4823919",
      "created_at": "2026-10-26T14:03:00Z",
      "terminated_at": null
    }
  ],
  "next_cursor": null
}
```

### Errors

| Status | Codes |
|---|---|
| `400` | [`invalid_parameter`](@/docs/api/errors/index.md#invalid_parameter) |
| `401` | [`unauthorized`](@/docs/api/errors/index.md#unauthorized) |
| `403` | [`missing_scope`](@/docs/api/errors/index.md#missing_scope) |
| `429` | [`rate_limited`](@/docs/api/errors/index.md#rate_limited), [`too_many_failed_authentications`](@/docs/api/errors/index.md#too_many_failed_authentications) |

## Create a cluster {#create-cluster}

<p class="api-endpoint"><span class="api-method api-method-post">POST</span> <code>/v1/clusters</code></p>

- **Scope:** `clusters:write`
- **Starts:** a `cluster.provision` [Action](@/docs/api/actions/index.md)
- **Idempotent:** with an `Idempotency-Key` header. See [Retrying safely](@/docs/api/retrying-safely/index.md).

Poll the Action; its `result` names the cluster and its first credential.

Unless the account is billed by invoice, a paid plan needs a payment method
on file. Without one this is refused at once with `422
payment_method_required`, before any Action starts, so the same
`Idempotency-Key` works once a card is added. The problem's `action_url`
is a Stripe Checkout page where a person adds one, no Bonsai login needed.
A card added there becomes the account's default within seconds, once
Stripe tells Bonsai; repeat the request then.

Billing starts before the cluster is built, during this request. If
Stripe refuses the charge, this is `422 payment_failed`, with the same
kind of `action_url`; nothing is built, and the same `Idempotency-Key`
works once a card is added. If the build fails after the 202, billing
stops and the Action fails with `action_failed`.

### Parameters

| Name | In | Type | Description |
|---|---|---|---|
| `Idempotency-Key` | header | string | 1 to 255 printable ASCII characters. Kept for 24 hours. See [Retrying safely](@/docs/api/retrying-safely/index.md). |

### Body

Without `space`, the cluster goes on shared infrastructure in `region`.
An unknown or unavailable plan, region, space or release is `422
validation_failed` naming the field, as is an Enterprise plan that
needs its own servers, which Bonsai support provisions. Enterprise plans
on shared servers can be created here. A field this schema doesn't list,
or one that isn't a string, is `400 invalid_parameter`.

| Field | Type | Required | Description |
|---|---|---|---|
| `name` | string | Yes | The cluster's name. A label, which needn't be unique. |
| `plan` | string | Yes | Plan ID. |
| `region` | string | Yes | Region ID, e.g. `aws-us-east-1`. |
| `space` | string | No | Private space ID. Must be in `region`. |
| `release` | string | No | Release ID, one of the plan's releases in `region` (its `offers`). Defaults to the first of them the space can place. |

### Example request

```bash
curl -X POST https://api.bonsai.io/v1/clusters \
  -H "Authorization: Bearer $BONSAI_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"name": "my-search", "plan": "sandbox", "region": "aws-us-east-1"}'
```

### Response

`202 Accepted`. Provisioning started. Returns an [Action object](@/docs/api/reference/actions/index.md#action-object).

| Header | Description |
|---|---|
| `Location` | The Action's URL. |
| `Idempotent-Replayed` | `true` when this is the replay of an earlier request with the same `Idempotency-Key`, rebuilt from what it made as that is now; absent otherwise. |
| `Retry-After` | Set while the Action is `new` or `running`. Seconds to wait before polling it again. |

```json
{
  "id": "act_3k9x0q2m7v1c8b4n",
  "type": "cluster.provision",
  "state": "success",
  "subject": { "type": "cluster", "id": "my-search-4823919" },
  "created_at": "2026-10-26T14:03:00Z",
  "finished_at": "2026-10-26T14:03:06Z",
  "error": null,
  "result": { "cluster": "my-search-4823919", "credential": "scc-a8Kd" },
  "steps": [
    {
      "state": "success",
      "message": "Placing the cluster",
      "at": "2026-10-26T14:03:01Z"
    },
    {
      "state": "success",
      "message": "Creating the first credential",
      "at": "2026-10-26T14:03:05Z"
    }
  ]
}
```

### Errors

| Status | Codes |
|---|---|
| `400` | [`invalid_json`](@/docs/api/errors/index.md#invalid_json), [`body_required`](@/docs/api/errors/index.md#body_required), [`invalid_parameter`](@/docs/api/errors/index.md#invalid_parameter) |
| `401` | [`unauthorized`](@/docs/api/errors/index.md#unauthorized) |
| `403` | [`missing_scope`](@/docs/api/errors/index.md#missing_scope) |
| `409` | [`idempotency_key_in_use`](@/docs/api/errors/index.md#idempotency_key_in_use) |
| `422` | [`validation_failed`](@/docs/api/errors/index.md#validation_failed), [`payment_method_required`](@/docs/api/errors/index.md#payment_method_required), [`payment_failed`](@/docs/api/errors/index.md#payment_failed), [`idempotency_key_reused`](@/docs/api/errors/index.md#idempotency_key_reused) |
| `429` | [`rate_limited`](@/docs/api/errors/index.md#rate_limited), [`too_many_failed_authentications`](@/docs/api/errors/index.md#too_many_failed_authentications) |

## Show a cluster {#get-cluster}

<p class="api-endpoint"><span class="api-method api-method-get">GET</span> <code>/v1/clusters/{cluster_id}</code></p>

- **Scope:** `clusters:read`

Terminated clusters are still shown, with state `deprovisioned`.

### Parameters

| Name | In | Type | Description |
|---|---|---|---|
| `cluster_id` | path | string | Required. The cluster's ID, which is its slug. It never changes. |

### Example request

```bash
curl https://api.bonsai.io/v1/clusters/my-search-4823919 \
  -H "Authorization: Bearer $BONSAI_TOKEN"
```

### Response

`200 OK`. The cluster. Returns a [Cluster object](#cluster-object).

```json
{
  "id": "my-search-4823919",
  "name": "my-search",
  "state": "ready",
  "plan": { "id": "sandbox", "name": "Sandbox" },
  "region": { "id": "aws-us-east-1", "name": "AWS US East (N. Virginia)" },
  "space": null,
  "release": { "id": "opensearch-3.8.0", "name": "OpenSearch 3.8.0" },
  "single_tenant": false,
  "host": "my-search-4823919.us-east-1.bonsaisearch.net",
  "port": 443,
  "stats": {
    "docs": 12840,
    "shards": 2,
    "bytes": 48211968,
    "polled_at": "2026-10-26T13:50:00Z",
    "limits": {
      "docs": 50000,
      "shards": 10,
      "bytes": 1073741824,
      "daily_bandwidth_bytes": null
    }
  },
  "latest_action": {
    "id": "act_3k9x0q2m7v1c8b4n",
    "type": "cluster.provision",
    "state": "success"
  },
  "dashboard_url": "https://app.bonsai.io/accounts/acme/clusters/my-search-4823919",
  "created_at": "2026-10-26T14:03:00Z",
  "terminated_at": null
}
```

### Errors

| Status | Codes |
|---|---|
| `401` | [`unauthorized`](@/docs/api/errors/index.md#unauthorized) |
| `403` | [`missing_scope`](@/docs/api/errors/index.md#missing_scope) |
| `404` | [`not_found`](@/docs/api/errors/index.md#not_found) |
| `429` | [`rate_limited`](@/docs/api/errors/index.md#rate_limited), [`too_many_failed_authentications`](@/docs/api/errors/index.md#too_many_failed_authentications) |

## Rename a cluster {#update-cluster}

<p class="api-endpoint"><span class="api-method api-method-patch">PATCH</span> <code>/v1/clusters/{cluster_id}</code></p>

- **Scope:** `clusters:write`

Synchronous. To change the plan, start a `cluster.change_plan` Action with `POST /v1/clusters/{cluster_id}/plan_changes`.

### Parameters

| Name | In | Type | Description |
|---|---|---|---|
| `cluster_id` | path | string | Required. The cluster's ID, which is its slug. It never changes. |

### Body

| Field | Type | Required | Description |
|---|---|---|---|
| `name` | string | Yes | The cluster's new name. |

### Example request

```bash
curl -X PATCH https://api.bonsai.io/v1/clusters/my-search-4823919 \
  -H "Authorization: Bearer $BONSAI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "product-search"}'
```

### Response

`200 OK`. The renamed cluster. Returns a [Cluster object](#cluster-object).

```json
{
  "id": "my-search-4823919",
  "name": "my-search",
  "state": "ready",
  "plan": { "id": "sandbox", "name": "Sandbox" },
  "region": { "id": "aws-us-east-1", "name": "AWS US East (N. Virginia)" },
  "space": null,
  "release": { "id": "opensearch-3.8.0", "name": "OpenSearch 3.8.0" },
  "single_tenant": false,
  "host": "my-search-4823919.us-east-1.bonsaisearch.net",
  "port": 443,
  "stats": {
    "docs": 12840,
    "shards": 2,
    "bytes": 48211968,
    "polled_at": "2026-10-26T13:50:00Z",
    "limits": {
      "docs": 50000,
      "shards": 10,
      "bytes": 1073741824,
      "daily_bandwidth_bytes": null
    }
  },
  "latest_action": {
    "id": "act_3k9x0q2m7v1c8b4n",
    "type": "cluster.provision",
    "state": "success"
  },
  "dashboard_url": "https://app.bonsai.io/accounts/acme/clusters/my-search-4823919",
  "created_at": "2026-10-26T14:03:00Z",
  "terminated_at": null
}
```

### Errors

| Status | Codes |
|---|---|
| `400` | [`invalid_json`](@/docs/api/errors/index.md#invalid_json), [`body_required`](@/docs/api/errors/index.md#body_required), [`invalid_parameter`](@/docs/api/errors/index.md#invalid_parameter) |
| `401` | [`unauthorized`](@/docs/api/errors/index.md#unauthorized) |
| `403` | [`missing_scope`](@/docs/api/errors/index.md#missing_scope) |
| `404` | [`not_found`](@/docs/api/errors/index.md#not_found) |
| `422` | [`validation_failed`](@/docs/api/errors/index.md#validation_failed) |
| `429` | [`rate_limited`](@/docs/api/errors/index.md#rate_limited), [`too_many_failed_authentications`](@/docs/api/errors/index.md#too_many_failed_authentications) |

## Delete a cluster {#delete-cluster}

<p class="api-endpoint"><span class="api-method api-method-delete">DELETE</span> <code>/v1/clusters/{cluster_id}</code></p>

- **Scope:** `clusters:write`
- **Starts:** a `cluster.deprovision` [Action](@/docs/api/actions/index.md)
- **Idempotent:** with an `Idempotency-Key` header. See [Retrying safely](@/docs/api/retrying-safely/index.md).

`name` must equal the cluster's
current name exactly, as a confirmation. Send an `Idempotency-Key` to
retry safely: without one, a retry after the cluster is terminated gets
`422 cluster_terminated` instead of the Action.

### Parameters

| Name | In | Type | Description |
|---|---|---|---|
| `cluster_id` | path | string | Required. The cluster's ID, which is its slug. It never changes. |
| `Idempotency-Key` | header | string | 1 to 255 printable ASCII characters. Kept for 24 hours. See [Retrying safely](@/docs/api/retrying-safely/index.md). |
| `name` | query | string | Required. The cluster's current name, as confirmation. |

### Example request

```bash
curl -X DELETE "https://api.bonsai.io/v1/clusters/my-search-4823919?name=my-search" \
  -H "Authorization: Bearer $BONSAI_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"
```

### Response

`202 Accepted`. Deprovisioning started. Returns an [Action object](@/docs/api/reference/actions/index.md#action-object).

| Header | Description |
|---|---|
| `Location` | The Action's URL. |
| `Idempotent-Replayed` | `true` when this is the replay of an earlier request with the same `Idempotency-Key`, rebuilt from what it made as that is now; absent otherwise. |
| `Retry-After` | Set while the Action is `new` or `running`. Seconds to wait before polling it again. |

```json
{
  "id": "act_3k9x0q2m7v1c8b4n",
  "type": "cluster.provision",
  "state": "success",
  "subject": { "type": "cluster", "id": "my-search-4823919" },
  "created_at": "2026-10-26T14:03:00Z",
  "finished_at": "2026-10-26T14:03:06Z",
  "error": null,
  "result": { "cluster": "my-search-4823919", "credential": "scc-a8Kd" },
  "steps": [
    {
      "state": "success",
      "message": "Placing the cluster",
      "at": "2026-10-26T14:03:01Z"
    },
    {
      "state": "success",
      "message": "Creating the first credential",
      "at": "2026-10-26T14:03:05Z"
    }
  ]
}
```

### Errors

| Status | Codes |
|---|---|
| `400` | [`invalid_parameter`](@/docs/api/errors/index.md#invalid_parameter), [`name_confirmation_required`](@/docs/api/errors/index.md#name_confirmation_required) |
| `401` | [`unauthorized`](@/docs/api/errors/index.md#unauthorized) |
| `403` | [`missing_scope`](@/docs/api/errors/index.md#missing_scope) |
| `404` | [`not_found`](@/docs/api/errors/index.md#not_found) |
| `409` | [`action_in_progress`](@/docs/api/errors/index.md#action_in_progress), [`idempotency_key_in_use`](@/docs/api/errors/index.md#idempotency_key_in_use) |
| `422` | [`name_mismatch`](@/docs/api/errors/index.md#name_mismatch), [`cluster_terminated`](@/docs/api/errors/index.md#cluster_terminated), [`idempotency_key_reused`](@/docs/api/errors/index.md#idempotency_key_reused) |
| `429` | [`rate_limited`](@/docs/api/errors/index.md#rate_limited), [`too_many_failed_authentications`](@/docs/api/errors/index.md#too_many_failed_authentications) |

## Change a cluster's plan {#change-cluster-plan}

<p class="api-endpoint"><span class="api-method api-method-post">POST</span> <code>/v1/clusters/{cluster_id}/plan_changes</code></p>

- **Scope:** `clusters:write`
- **Starts:** a `cluster.change_plan` [Action](@/docs/api/actions/index.md)
- **Idempotent:** with an `Idempotency-Key` header. See [Retrying safely](@/docs/api/retrying-safely/index.md).

Changes on shared servers take seconds; on dedicated ones, minutes.

Unless the account is billed by invoice, moving to a paid plan needs a payment method
on file. Without one this is refused at once with `422
payment_method_required`, before any Action starts, so the same
`Idempotency-Key` works once a card is added. The problem's `action_url`
is a Stripe Checkout page where a person adds one, no Bonsai login needed.
A card added there becomes the account's default within seconds, once
Stripe tells Bonsai; repeat the request then.

### Parameters

| Name | In | Type | Description |
|---|---|---|---|
| `cluster_id` | path | string | Required. The cluster's ID, which is its slug. It never changes. |
| `Idempotency-Key` | header | string | 1 to 255 printable ASCII characters. Kept for 24 hours. See [Retrying safely](@/docs/api/retrying-safely/index.md). |

### Body

A change the plan's tier can't make (see each plan's tier) is `422 plan_change_refused`.

| Field | Type | Required | Description |
|---|---|---|---|
| `plan` | string | Yes | Plan ID. |

### Example request

```bash
curl -X POST https://api.bonsai.io/v1/clusters/my-search-4823919/plan_changes \
  -H "Authorization: Bearer $BONSAI_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"plan": "standard-fir"}'
```

### Response

`202 Accepted`. Plan change started. Returns an [Action object](@/docs/api/reference/actions/index.md#action-object).

| Header | Description |
|---|---|
| `Location` | The Action's URL. |
| `Idempotent-Replayed` | `true` when this is the replay of an earlier request with the same `Idempotency-Key`, rebuilt from what it made as that is now; absent otherwise. |
| `Retry-After` | Set while the Action is `new` or `running`. Seconds to wait before polling it again. |

```json
{
  "id": "act_3k9x0q2m7v1c8b4n",
  "type": "cluster.provision",
  "state": "success",
  "subject": { "type": "cluster", "id": "my-search-4823919" },
  "created_at": "2026-10-26T14:03:00Z",
  "finished_at": "2026-10-26T14:03:06Z",
  "error": null,
  "result": { "cluster": "my-search-4823919", "credential": "scc-a8Kd" },
  "steps": [
    {
      "state": "success",
      "message": "Placing the cluster",
      "at": "2026-10-26T14:03:01Z"
    },
    {
      "state": "success",
      "message": "Creating the first credential",
      "at": "2026-10-26T14:03:05Z"
    }
  ]
}
```

### Errors

| Status | Codes |
|---|---|
| `400` | [`invalid_json`](@/docs/api/errors/index.md#invalid_json), [`body_required`](@/docs/api/errors/index.md#body_required), [`invalid_parameter`](@/docs/api/errors/index.md#invalid_parameter) |
| `401` | [`unauthorized`](@/docs/api/errors/index.md#unauthorized) |
| `403` | [`missing_scope`](@/docs/api/errors/index.md#missing_scope) |
| `404` | [`not_found`](@/docs/api/errors/index.md#not_found) |
| `409` | [`action_in_progress`](@/docs/api/errors/index.md#action_in_progress), [`idempotency_key_in_use`](@/docs/api/errors/index.md#idempotency_key_in_use) |
| `422` | [`validation_failed`](@/docs/api/errors/index.md#validation_failed), [`plan_change_refused`](@/docs/api/errors/index.md#plan_change_refused), [`payment_method_required`](@/docs/api/errors/index.md#payment_method_required), [`cluster_terminated`](@/docs/api/errors/index.md#cluster_terminated), [`idempotency_key_reused`](@/docs/api/errors/index.md#idempotency_key_reused) |
| `429` | [`rate_limited`](@/docs/api/errors/index.md#rate_limited), [`too_many_failed_authentications`](@/docs/api/errors/index.md#too_many_failed_authentications) |
