🔌 API ai-bnk.ru

🔌 API ai-bnk.ru

REST API для интеграции сервисов ai-bnk.ru с вашими приложениями, CRM-системами и автоматизациями.

Что можно делать через API?

  • Получать лиды из чат-виджета «Олег, помоги» в реальном времени
  • Получать статьи, сгенерированные сервисом «Галя, напиши»
  • Настраивать webhooks для мгновенных уведомлений о новых лидах
  • Управлять API ключами с автоматической ротацией
💡
Базовый URL
Все запросы отправляются на https://ai-bnk.ru/api/v1/

🚀 Быстрый старт

Начните работу с API за 3 простых шага:

Шаг 1: Получите API ключ

Войдите в личный кабинет → API и создайте новый ключ. Ключ показывается только один раз — сохраните его сразу.

Шаг 2: Сделайте первый запрос

cURL
curl -X GET "https://ai-bnk.ru/api/v1/oleg/leads" \
  -H "Authorization: Bearer ВАШ_API_КЛЮЧ"

Шаг 3: Обработайте ответ

JSON Response
{
  "items": [
    {
      "id": "abc123",
      "name": "Иван Петров",
      "email": "ivan@example.com",
      "phone": "+79001234567",
      "captured_at": "2026-03-14T10:30:00Z"
    }
  ],
  "page": 1,
  "per_page": 20,
  "total": 1
}
Готово!
Вы успешно интегрировали API. Продолжайте читать для изучения всех возможностей.

🔐 Аутентификация

Все запросы должны содержать заголовок Authorization с вашим API ключом.

Формат заголовка

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx

Структура ключа

ПрефиксТипОписание
sk_live_ProductionБоевой ключ для реальных данных
sk_test_TestingТестовый ключ (в разработке)
⚠️
Безопасность ключей
  • Никогда не храните ключи в клиентском JavaScript
  • Не включайте ключи в репозитории (git)
  • Используйте переменные окружения
  • Ротируйте ключи каждые 90 дней

Примеры в разных языках

import requests

API_KEY = "sk_live_ваш_ключ"
BASE_URL = "https://ai-bnk.ru/api/v1"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

response = requests.get(
    f"{BASE_URL}/oleg/leads", 
    headers=headers
)
data = response.json()
print(data)
const API_KEY = 'sk_live_ваш_ключ';
const BASE_URL = 'https://ai-bnk.ru/api/v1';

const response = await fetch(
  `${BASE_URL}/oleg/leads`, 
  {
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    }
  }
);

const data = await response.json();
console.log(data);
<?php
$apiKey = 'sk_live_ваш_ключ';
$baseUrl = 'https://ai-bnk.ru/api/v1';

$ch = curl_init("$baseUrl/oleg/leads");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json"
]);

$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
# Установите ключ в переменную
export API_KEY="sk_live_ваш_ключ"

# Выполните запрос
curl -X GET \
  "https://ai-bnk.ru/api/v1/oleg/leads" \
  -H "Authorization: Bearer $API_KEY"

❌ Обработка ошибок

API возвращает стандартные HTTP коды и JSON с описанием ошибки.

Коды ответов

КодСтатусОписание
200OKЗапрос выполнен успешно
201CreatedРесурс создан
400Bad RequestНекорректные параметры
401UnauthorizedНеверный API ключ
403ForbiddenНет прав (scope)
404Not FoundРесурс не найден
429Too ManyПревышен лимит
500Server ErrorОшибка сервера

Формат ошибки

{
  "detail": "Invalid API key",
  "error_code": "invalid_api_key",
  "status_code": 401
}

⏱️ Лимиты запросов

ПараметрЗначениеОписание
Запросов в минуту120На один API ключ
Срок действия ключа90 днейАвтоистечение
Макс. на странице100per_page
💡
Совет
Используйте webhooks вместо частых опросов — получайте данные мгновенно.

💬 Получить список лидов

GET /api/v1/oleg/leads

Список лидов из чат-виджета «Олег, помоги» с пагинацией.

Query параметры

ПараметрТипОписание
pageintНомер страницы (default: 1)
per_pageintНа странице (default: 20, max: 100)
sincedatetimeЛиды после даты (ISO 8601)

Пример ответа

{
  "items": [
    {
      "id": "d7f3a2b1-5c8e-4f12-...",
      "name": "Иван Петров",
      "email": "ivan@example.com",
      "phone": "+79001234567",
      "captured_at": "2026-03-14T10:30:00Z",
      "status": "new",
      "dialog": {
        "messages": [...],
        "url": "https://client-site.ru/page"
      }
    }
  ],
  "page": 1,
  "per_page": 20,
  "total": 47
}

💬 Получить один лид

GET /api/v1/oleg/leads/{id}

Детальная информация об одном лиде.

✍️ Получить список статей

GET /api/v1/galya/articles

Статьи из сервиса «Галя, напиши».

Query параметры

ПараметрТипОписание
pageintСтраница
per_pageintНа странице (max: 100)
statusstringdraft | published | scheduled
sincedatetimeПосле даты публикации

Пример ответа

{
  "items": [
    {
      "id": "a1b2c3d4-...",
      "title": "10 способов увеличить продажи",
      "content": "Полный текст статьи...",
      "tags": ["бизнес", "продажи"],
      "status": "published",
      "published_at": "2026-03-14T09:00:00Z",
      "word_count": 1250
    }
  ],
  "page": 1,
  "per_page": 20,
  "total": 23
}

✍️ Получить одну статью

GET /api/v1/galya/articles/{id}

Полный текст одной статьи по UUID.

🔑 Список API ключей

GET /api/v1/keys

Ваши API ключи (без секретной части).

Пример ответа

[
  {
    "id": "key_abc123",
    "key_prefix": "sk_live_abc1",
    "name": "Production Key",
    "scopes": ["oleg:leads:read"],
    "expires_at": "2026-06-01T12:00:00Z",
    "is_active": true
  }
]

🔑 Создать API ключ

POST /api/v1/keys

Создаёт новый ключ. Полный ключ показывается один раз!

Тело запроса

{
  "name": "CRM Integration",
  "scopes": ["oleg:leads:read", "galya:articles:read"]
}

Доступные scopes

ScopeОписание
oleg:leads:readЧтение лидов
galya:articles:readЧтение статей
keys:manageУправление ключами
webhooks:manageУправление webhooks
🔐
Сохраните ключ!
Полный API ключ показывается только при создании. Потом — только префикс.

🔑 Ротация ключа

POST /api/v1/keys/{id}/rotate

Создаёт новый ключ, старый деактивируется через 24ч.

🔑 Удалить ключ

DELETE /api/v1/keys/{id}

Немедленно деактивирует API ключ.

🔔 Webhooks — Обзор

Получайте уведомления о событиях в реальном времени без опроса API.

Преимущества

  • Мгновенность — данные сразу после события
  • Экономия — не нужно опрашивать API
  • Надёжность — автоповторы при ошибках

Как работает

  1. Регистрируете URL для событий
  2. Получаете секрет для проверки подписи
  3. При событии приходит POST на ваш URL
  4. Проверяете подпись и обрабатываете

🔔 Создать webhook

POST /api/v1/webhooks

Регистрирует endpoint для событий.

Тело запроса

{
  "url": "https://your-server.com/webhook",
  "events": ["oleg.lead.new"]
}

Пример ответа

{
  "id": "wh_abc123",
  "url": "https://your-server.com/webhook",
  "secret": "whsec_xxxxxxxx",
  "events": ["oleg.lead.new"],
  "is_active": true
}

🔔 Проверка подписи

Каждый webhook подписан HMAC-SHA256. Обязательно проверяйте!

Заголовки запроса

ЗаголовокОписание
X-Webhook-Signaturesha256=xxxxx
X-Webhook-EventТип события
X-Webhook-TimestampUnix timestamp

Примеры проверки

import hmac
import hashlib

def verify(payload, signature, timestamp, secret):
    expected = hmac.new(
        secret.encode(),
        f"{timestamp}.".encode() + payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(
        f"sha256={expected}", 
        signature
    )
const crypto = require('crypto');

function verify(payload, signature, timestamp, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${timestamp}.${payload}`)
    .digest('hex');
  return `sha256=${expected}` === signature;
}
function verify($payload, $signature, $timestamp, $secret) {
    $expected = 'sha256=' . hash_hmac(
        'sha256', 
        "$timestamp.$payload", 
        $secret
    );
    return hash_equals($expected, $signature);
}

🔔 События

oleg.lead.new

Новый лид из чат-виджета.

{
  "event": "oleg.lead.new",
  "timestamp": "1710412200",
  "payload": {
    "id": "d7f3a2b1-...",
    "name": "Иван Петров",
    "email": "ivan@example.com",
    "phone": "+79001234567"
  }
}

galya.article.published

Новая статья опубликована.

{
  "event": "galya.article.published",
  "timestamp": "1710412200",
  "payload": {
    "id": "a1b2c3d4-...",
    "title": "Название статьи",
    "public_url": "https://ai-bnk.ru/galya/..."
  }
}

🐍 Python — Полный пример

import requests
from datetime import datetime, timedelta

class AIBnkClient:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = "https://ai-bnk.ru/api/v1"
        self.session = requests.Session()
        self.session.headers.update({
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        })
    
    def get_leads(self, page=1, per_page=20, since=None):
        params = {"page": page, "per_page": per_page}
        if since:
            params["since"] = since
        r = self.session.get(
            f"{self.base_url}/oleg/leads", 
            params=params
        )
        r.raise_for_status()
        return r.json()
    
    def get_new_leads(self, hours=24):
        since = (datetime.utcnow() - timedelta(hours=hours))
        since = since.isoformat() + "Z"
        return self.get_leads(per_page=100, since=since)

# Использование
client = AIBnkClient("sk_live_ваш_ключ")
leads = client.get_new_leads(hours=24)
print(f"Новых лидов: {leads['total']}")

for lead in leads['items']:
    print(f"- {lead['name']}: {lead['email']}")

💚 Node.js — Полный пример

class AIBnkClient {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = 'https://ai-bnk.ru/api/v1';
  }

  async request(endpoint, options = {}) {
    const r = await fetch(`${this.baseUrl}${endpoint}`, {
      ...options,
      headers: {
        'Authorization': `Bearer ${this.apiKey}`,
        'Content-Type': 'application/json',
        ...options.headers
      }
    });
    if (!r.ok) throw new Error(`HTTP ${r.status}`);
    return r.json();
  }

  getLeads(params = {}) {
    const q = new URLSearchParams(params);
    return this.request(`/oleg/leads?${q}`);
  }

  createWebhook(url, events) {
    return this.request('/webhooks', {
      method: 'POST',
      body: JSON.stringify({ url, events })
    });
  }
}

// Использование
const client = new AIBnkClient('sk_live_ваш_ключ');

const { items, total } = await client.getLeads({ per_page: 50 });
console.log(`Всего лидов: ${total}`);

leads.forEach(lead => {
  console.log(`${lead.name}: ${lead.email}`);
});

🐘 PHP — Полный пример

<?php

class AIBnkClient {
    private $apiKey;
    private $baseUrl = 'https://ai-bnk.ru/api/v1';

    public function __construct($apiKey) {
        $this->apiKey = $apiKey;
    }

    private function request($endpoint, $method = 'GET', $data = null) {
        $ch = curl_init($this->baseUrl . $endpoint);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Authorization: Bearer {$this->apiKey}",
            "Content-Type: application/json"
        ]);
        
        if ($method === 'POST') {
            curl_setopt($ch, CURLOPT_POST, true);
            if ($data) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
            }
        }

        $response = curl_exec($ch);
        curl_close($ch);
        return json_decode($response, true);
    }

    public function getLeads($page = 1, $perPage = 20) {
        return $this->request("/oleg/leads?page=$page&per_page=$perPage");
    }
}

// Использование
$client = new AIBnkClient('sk_live_ваш_ключ');
$result = $client->getLeads(1, 50);

echo "Всего лидов: " . $result['total'] . "\n";

foreach ($result['items'] as $lead) {
    echo "- {$lead['name']}: {$lead['email']}\n";
}

📟 cURL — Примеры команд

Получить лиды

curl "https://ai-bnk.ru/api/v1/oleg/leads" \
  -H "Authorization: Bearer sk_live_ваш_ключ"

Получить статьи

curl "https://ai-bnk.ru/api/v1/galya/articles?status=published" \
  -H "Authorization: Bearer sk_live_ваш_ключ"

Создать webhook

curl -X POST "https://ai-bnk.ru/api/v1/webhooks" \
  -H "Authorization: Bearer sk_live_ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://your-server.com/wh","events":["oleg.lead.new"]}'

❓ FAQ

Как получить API ключ?

Личный кабинет → API → Создать ключ

Сколько запросов можно делать?

120 в минуту на ключ. Для большего — используйте webhooks.

Что делать, если потерял ключ?

Создайте новый и удалите старый. Показать существующий ключ невозможно.

Webhooks не приходят?

Проверьте: HTTPS, ответ 200 за 10 сек, webhook активен.

🆘 Поддержка

© 2026 ai-bnk.ru — API Documentation v1.0