Перейти к основному содержимому

Справочник REST API

Обзор

LeadHub включает полноценный REST API, позволяющий внешним инструментам читать и записывать ваши данные — лиды, пайплайны, автоматизации, формы и многое другое. Используйте его для интеграции с Zapier, создания пользовательских дашбордов, подключения сайта или автоматизации чего угодно.


Базовый URL

Все запросы к API отправляются на:

https://yourdomain.com/api/v1

Замените yourdomain.com на ваш реальный домен LeadHub.


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

Каждый запрос (кроме health check) требует API-ключ.

Создавайте API-ключи в административной панели в разделе Настройки → API-ключи. Инструкции см. на странице настроек.

Включайте API-ключ в каждый запрос как токен Bearer в заголовке Authorization:

Authorization: Bearer lh_your_api_key_here

Если вы отправите запрос без API-ключа или с недействительным ключом, получите ответ 401 Unauthorized.


Ограничение Скорости

Каждый API-ключ по умолчанию ограничен 1 000 запросами в час (настраивается для каждого ключа). При превышении лимита вы получите ответ 429 Too Many Requests.

Каждый ответ содержит заголовки для отслеживания использования:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1711580400

X-RateLimit-Reset — Unix-временная метка сброса лимита.


Пагинация

Эндпоинты, возвращающие списки записей, поддерживают пагинацию. Добавьте следующие параметры запроса:

ПараметрПо умолчаниюМаксимум
page1
per_page15100

Пример: GET /api/v1/leads?page=2&per_page=25


Формат Ответа

Успешный ответ

{
"data": { ... },
"meta": {
"current_page": 1,
"last_page": 5,
"per_page": 15,
"total": 73,
"from": 1,
"to": 15
},
"links": {
"first": "https://yourdomain.com/api/v1/leads?page=1",
"last": "https://yourdomain.com/api/v1/leads?page=5",
"prev": null,
"next": "https://yourdomain.com/api/v1/leads?page=2",
"self": "https://yourdomain.com/api/v1/leads?page=1"
}
}

Для ответов с одной записью (show, create, update) data содержит объект записи, meta опускается.

Ответ с ошибкой

{
"status": "error",
"message": "The given data was invalid.",
"code": "VALIDATION_FAILED",
"errors": {
"email": ["The email field must be a valid email address."]
}
}

Распространённые коды ошибок:

КодHTTP-статусЗначение
UNAUTHORIZED401API-ключ отсутствует или недействителен
FORBIDDEN403API-ключ не имеет необходимого scope
NOT_FOUND404Запись не существует
VALIDATION_FAILED422Данные запроса не прошли валидацию
RATE_LIMITED429Слишком много запросов
SERVER_ERROR500Неожиданная ошибка сервера

Проверка Работоспособности

Аутентификация не требуется.

GET /api/v1/health

Ответ:

{
"status": "ok",
"version": "1.0.0",
"timestamp": "2026-03-28T09:15:00+00:00"
}

Используйте это для проверки доступности вашего экземпляра LeadHub перед другими запросами.


Лиды (Leads)

Необходимый scope: read:leads для получения, write:leads для создания/обновления, delete:leads для удаления.

Список Лидов

GET /api/v1/leads

Параметры запроса для фильтрации:

ПараметрОписание
sourceФильтр по источнику (например, facebook, website)
statusФильтр по статусу (например, new, contacted, qualified)
pipeline_idФильтр по ID пайплайна
stage_idФильтр по ID этапа пайплайна
assigned_user_idФильтр по ID назначенного пользователя
tagФильтр по имени тега
searchПоиск по имени, email или телефону
created_afterДата ISO 8601 — только лиды, созданные после этой даты
created_beforeДата ISO 8601 — только лиды, созданные до этой даты
starredtrue — только отмеченные лиды
sortПоле сортировки: created_at, updated_at, lead_score, first_name, last_name, email
directionasc или desc (по умолчанию: desc)

Получить лид

GET /api/v1/leads/{id}

Создать лид

POST /api/v1/leads

Тело запроса (JSON):

{
"first_name": "Sarah",
"last_name": "Johnson",
"email": "[email protected]",
"phone": "+14155551234",
"source": "website",
"status": "new",
"pipeline_id": 1,
"pipeline_stage_id": 2,
"assigned_user_id": 5,
"notes": "Interested in the enterprise plan.",
"custom_fields": {
"budget": "10000"
},
"tags": ["hot-lead", "enterprise"]
}

first_name обязательно. Все остальные поля необязательны.

Обновить лид

PUT /api/v1/leads/{id}
PATCH /api/v1/leads/{id}

Отправьте только поля, которые хотите обновить. Те же поля, что и при создании.

Удалить лид

DELETE /api/v1/leads/{id}

Добавить тег к лиду

POST /api/v1/leads/{id}/tags

Тело: { "tag": "vip-client" }

Удалить тег у лида

DELETE /api/v1/leads/{id}/tags/{tag}

Пайплайны (Pipelines)

Необходимый scope: read:pipelines или write:pipelines

GET    /api/v1/pipelines
POST /api/v1/pipelines
GET /api/v1/pipelines/{id}
PUT /api/v1/pipelines/{id}
PATCH /api/v1/pipelines/{id}
DELETE /api/v1/pipelines/{id}

Этапы пайплайна

GET    /api/v1/pipelines/{pipeline_id}/stages
POST /api/v1/pipelines/{pipeline_id}/stages
GET /api/v1/pipelines/{pipeline_id}/stages/{stage_id}
PUT /api/v1/pipelines/{pipeline_id}/stages/{stage_id}
PATCH /api/v1/pipelines/{pipeline_id}/stages/{stage_id}
DELETE /api/v1/pipelines/{pipeline_id}/stages/{stage_id}

Теги (Tags)

Необходимый scope: read:tags или write:tags

GET    /api/v1/tags
POST /api/v1/tags
GET /api/v1/tags/{id}
PUT /api/v1/tags/{id}
PATCH /api/v1/tags/{id}
DELETE /api/v1/tags/{id}

Пользователи (Users)

Необходимый scope: read:users, write:users или delete:users

GET    /api/v1/users
POST /api/v1/users
GET /api/v1/users/{id}
PUT /api/v1/users/{id}
PATCH /api/v1/users/{id}
DELETE /api/v1/users/{id}

Формы (Forms)

Необходимый scope: read:forms, write:forms или delete:forms

GET    /api/v1/forms
POST /api/v1/forms
GET /api/v1/forms/{id}
PUT /api/v1/forms/{id}
PATCH /api/v1/forms/{id}
DELETE /api/v1/forms/{id}

Отправить форму

POST /api/v1/forms/{id}/submissions

Тело: значения полей формы в виде пар ключ-значение.


Автоматизации (Automations)

Необходимый scope: read:automations, write:automations или delete:automations

GET    /api/v1/automations
POST /api/v1/automations
GET /api/v1/automations/{id}
PUT /api/v1/automations/{id}
PATCH /api/v1/automations/{id}
DELETE /api/v1/automations/{id}

Интеграции (Integrations)

Необходимый scope: read:integrations или write:integrations

GET    /api/v1/integrations/types
GET /api/v1/integrations
POST /api/v1/integrations
GET /api/v1/integrations/{id}
PUT /api/v1/integrations/{id}
PATCH /api/v1/integrations/{id}
DELETE /api/v1/integrations/{id}

GET /api/v1/integrations/types возвращает список доступных типов интеграций (Facebook, Google Ads, Mailgun и т.д.).


Приём входящих Лидов

Упрощённый эндпоинт для создания лидов из внешних источников, webhook'ов или инструментов без кода, таких как Zapier и Make.

POST /api/inbound/leads?tenant={workspace-slug}

Авторизация через Authorization: Bearer {api_key}, slug рабочего пространства передаётся как параметр запроса.

Тело запроса:

{
"email": "[email protected]",
"first_name": "Sarah",
"last_name": "Johnson",
"phone": "+14155551234",
"company": "Tech Corp",
"source": "zapier",
"notes": "Came from newsletter signup",
"tags": ["newsletter"],
"custom_fields": {
"utm_campaign": "spring-promo"
}
}

email обязательно. Все остальные поля необязательны.

Успешный ответ (201):

{
"status": "created",
"lead_id": 1842,
"is_duplicate": false
}

Если лид уже существует (совпадение по email или телефону), is_duplicate равен true и возвращается ID существующего лида.


Примеры Кода

cURL

curl -X GET "https://yourdomain.com/api/v1/leads?status=new&per_page=25" \
-H "Authorization: Bearer lh_your_api_key_here" \
-H "Accept: application/json"
curl -X POST "https://yourdomain.com/api/v1/leads" \
-H "Authorization: Bearer lh_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"first_name":"Sarah","email":"[email protected]","source":"api"}'

PHP

$apiKey = 'lh_your_api_key_here';
$baseUrl = 'https://yourdomain.com/api/v1';

// List leads
$response = file_get_contents($baseUrl . '/leads', false, stream_context_create([
'http' => [
'header' => "Authorization: Bearer {$apiKey}\r\nAccept: application/json\r\n",
],
]));
$leads = json_decode($response, true);

// Create a lead
$ch = curl_init($baseUrl . '/leads');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer {$apiKey}",
"Content-Type: application/json",
"Accept: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'first_name' => 'Sarah',
'email' => '[email protected]',
'source' => 'api',
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

JavaScript (fetch)

const apiKey = 'lh_your_api_key_here';
const baseUrl = 'https://yourdomain.com/api/v1';

// List leads
const response = await fetch(`${baseUrl}/leads?status=new`, {
headers: {
'Authorization': `Bearer ${apiKey}`,
'Accept': 'application/json',
},
});
const { data, meta } = await response.json();

// Create a lead
const createResponse = await fetch(`${baseUrl}/leads`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: JSON.stringify({
first_name: 'Sarah',
email: '[email protected]',
source: 'website',
}),
});
const newLead = await createResponse.json();