> ## Documentation Index
> Fetch the complete documentation index at: https://oblodai.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# IP-allowlist

**Методы:** `/v1/api-allowlist/list` · `/add` · `/remove` · `/enable`

Пер‑мерчантский список доверенных IP/CIDR. Когда включён, подписанные запросы с IP вне списка
отклоняются (`401 auth.ip_not_allowed`). По умолчанию выключен.

**Аутентификация:** обязательна.

<Note>
  Примеры используют хелпер `call()` и переменные `$SECRET`/`$PUBLIC_ID` — их определение см. в
  [Как подписать запрос](/guides/signing-requests). Проще не писать подпись руками, а взять
  [SDK](/sdk/overview).
</Note>

***

## POST /v1/api-allowlist/list

Тело — `{}`.

```json theme={null}
{
  "state": 0,
  "result": { "entries": ["203.0.113.10", "198.51.100.0/24"], "enabled": true }
}
```

***

## POST /v1/api-allowlist/add

<ParamField body="cidr" type="string" required>
  IP‑адрес или CIDR‑подсеть.
</ParamField>

Ошибка: `400 apiallow.bad_cidr`.

***

## POST /v1/api-allowlist/remove

<ParamField body="cidr" type="string" required>
  IP или CIDR для удаления.
</ParamField>

***

## POST /v1/api-allowlist/enable

<ParamField body="enabled" type="bool" required>
  Включить/выключить контроль.
</ParamField>

Ошибка: `400 apiallow.empty` — нельзя включить контроль с пустым списком; сначала добавьте хотя бы
один IP.

***

## Пример: добавить IP и включить

<CodeGroup>
  ```bash cURL theme={null}
  # 1. Добавить IP
  BODY='{"cidr":"203.0.113.10"}'
  TS=$(date +%s)
  SIG=$(printf '%s\n%s\n%s\n%s' "$TS" 'POST' '/v1/api-allowlist/add' "$BODY" \
    | openssl dgst -sha256 -hmac "$SECRET" -hex | sed 's/^.* //')
  curl -s https://api.oblodai.com/v1/api-allowlist/add \
    -X POST -H 'Content-Type: application/json' \
    -H "X-Public-Id: $PUBLIC_ID" -H "X-Timestamp: $TS" -H "X-Signature: $SIG" -d "$BODY"

  # 2. Включить контроль
  BODY='{"enabled":true}'
  TS=$(date +%s)
  SIG=$(printf '%s\n%s\n%s\n%s' "$TS" 'POST' '/v1/api-allowlist/enable' "$BODY" \
    | openssl dgst -sha256 -hmac "$SECRET" -hex | sed 's/^.* //')
  curl -s https://api.oblodai.com/v1/api-allowlist/enable \
    -X POST -H 'Content-Type: application/json' \
    -H "X-Public-Id: $PUBLIC_ID" -H "X-Timestamp: $TS" -H "X-Signature: $SIG" -d "$BODY"
  ```

  ```python Python theme={null}
  call("/v1/api-allowlist/add", {"cidr": "203.0.113.10"})
  call("/v1/api-allowlist/enable", {"enabled": True})
  ```

  ```js Node.js theme={null}
  await call("/v1/api-allowlist/add", { cidr: "203.0.113.10" });
  await call("/v1/api-allowlist/enable", { enabled: true });
  ```
</CodeGroup>

***

## Нюансы

* **Порядок важен:** нельзя включить контроль с пустым списком (`apiallow.empty`). Сначала добавьте
  IP вашего backend, потом включайте — иначе рискуете заблокировать сами себя.
* Запросы с IP вне включённого списка получают `401 auth.ip_not_allowed`.

***

## Связанные страницы

<CardGroup cols={2}>
  <Card title="Ограничение частоты и IP‑allowlist" href="/reference/basics-ratelimit" icon="arrow-right" horizontal />

  <Card title="Аутентификация" href="/reference/basics-auth" icon="arrow-right" horizontal />

  <Card title="Безопасность в проде" href="/guides/production-security" icon="arrow-right" horizontal />
</CardGroup>
