Воронки
Воронки продаж и их стадии — структура канбан-доски, по которой перемещаются сделки. Через API вы читаете список воронок, создаёте и обновляете воронку вместе со стадиями одним запросом, удаляете воронку и получаете Kanban-доску со сделками, сгруппированными по стадиям.
Поля воронки
У воронки есть поля name (до 255 символов), description (до 2000 символов, может быть null) и status (draft, active, paused или archived).
Стадии
Стадии создаются и обновляются вместе с воронкой одним запросом; каждая стадия несёт name, type (new, in_progress, success или failed), color (до 16 символов) и order.
Доска воронки
Доска воронки (/board) отдаёт до 50 карточек-сделок по каждой стадии вместе с агрегатами стадии (deals_count, total_amount); для дозагрузки конкретной колонки используйте постраничный эндпоинт стадии (perPage по умолчанию 50).
Эндпоинты
| Метод | Путь | Описание |
|---|---|---|
| GET | /v1/funnelsСписок воронок компании | Список воронок компании |
| POST | /v1/funnelsСоздание воронки (со стадиями) | Создание воронки (со стадиями) |
| POST | /v1/funnels/{funnel}Обновление воронки | Обновление воронки |
| DELETE | /v1/funnels/{funnel}Удаление воронки | Удаление воронки |
| GET | /v1/funnels/{funnel}/boardKanban-доска воронки со сделками по стадиям | Kanban-доска воронки со сделками по стадиям |
| GET | /v1/funnels/{funnel}/stages/{stage}/dealsПостраничная загрузка сделок конкретной стадии | Постраничная загрузка сделок конкретной стадии |
Примеры
Создание воронки со стадиями
Запрос
curl -X POST https://api.aisar.app/v1/funnels \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Sales",
"description": "Primary sales pipeline",
"status": "active",
"stages": [
{ "name": "Lead", "type": "new", "color": "#3B82F6", "order": 1 },
{ "name": "Negotiation", "type": "in_progress", "color": "#F59E0B", "order": 2 },
{ "name": "Won", "type": "success", "color": "#22C55E", "order": 3 }
]
}'Ответ
{
"data": {
"message": "Funnel created.",
"funnel": {
"id": 1,
"company_id": 1,
"name": "Sales",
"slug": "sales",
"description": "Primary sales pipeline",
"steps": 3,
"updated_at": "2026-03-15T10:00:00.000000Z",
"stages": [
{ "id": 1, "funnel_id": 1, "name": "Lead", "type": "new", "order": 1, "color": "#3B82F6", "stale_after_days": null, "wip_limit": null },
{ "id": 2, "funnel_id": 1, "name": "Negotiation", "type": "in_progress", "order": 2, "color": "#F59E0B", "stale_after_days": null, "wip_limit": null },
{ "id": 3, "funnel_id": 1, "name": "Won", "type": "success", "order": 3, "color": "#22C55E", "stale_after_days": null, "wip_limit": null }
]
}
}
}Kanban-доска воронки
Запрос
curl https://api.aisar.app/v1/funnels/1/board \
-H "Authorization: Bearer YOUR_API_TOKEN"Ответ
{
"data": {
"funnel": { "id": 1, "name": "Sales" },
"stages": [
{
"id": 1,
"name": "Lead",
"type": "new",
"order": 1,
"color": "#3B82F6",
"stale_after_days": null,
"wip_limit": null,
"deals_count": 1,
"total_amount": "5000.00",
"deals": [
{
"id": 501,
"title": "Office renovation",
"amount": "5000.00",
"currency": "KZT",
"status": "open",
"expected_close_date": null,
"stage_changed_at": "2026-03-15T10:00:00.000000Z",
"age_days": 3,
"is_stale": false,
"channel": "whatsapp",
"contact_name": "Aigerim Bekova",
"contact_avatar": null,
"responsible_user_name": "Aidos",
"last_message_preview": "Hello, can we schedule a call?",
"last_message_at": "2026-03-15T09:40:00.000000Z",
"conversations_count": 2
}
]
}
]
}
}Постраничная загрузка сделок стадии
Запрос
curl "https://api.aisar.app/v1/funnels/1/stages/1/deals?page=2&perPage=50" \
-H "Authorization: Bearer YOUR_API_TOKEN"Ответ
{
"data": {
"items": [
{
"id": 542,
"title": "Warehouse lease",
"amount": "12000.00",
"currency": "KZT",
"status": "open",
"expected_close_date": "2026-04-01",
"stage_changed_at": "2026-03-14T08:00:00.000000Z",
"age_days": 4,
"is_stale": false,
"channel": "telegram",
"contact_name": "Marat Ospanov",
"contact_avatar": null,
"responsible_user_name": "Aidos",
"last_message_preview": null,
"last_message_at": null,
"conversations_count": 1
}
],
"pagination": { "page": 2, "perPage": 50, "total": 120, "lastPage": 3 }
}
}