Flowa
betabeauty · finance · integrations · inventory · notifications · platform · service_ops · workdesk
REST API платформы: контрагенты, сделки, задачи, бизнес-процессы, склад, финансы, производство, встречи и вебхуки. Подключите 1С, сайт или любую внешнюю систему — первый запрос через 5 минут.
Developer Platform V20
Подписанные пакеты, capabilities, OAuth apps, SDK, CLI, боты проектов и управляемые релизы.
Пять шагов от нуля до первого запроса.
В платформе: Настройки → API-токены → «Создать». Scope (права токена) выбираются при создании. Токен показывается один раз — сохраните его.
Единая точка api.taska.uz — токен формата tsk_ сам маршрутизирует запрос в вашу организацию. Либо классический способ — домен вашей организации (см. «Аутентификация»).
GET /ping проверяет токен и возвращает его scope — удобно для отладки подключения.
curl https://api.taska.uz/api/public/v1/ping \
-H "X-API-Token: tsk_<слаг>_<секрет>"ok: true — токен работает. В scopes — выданные права: если каких-то не хватает, перевыпустите токен с нужными.
{
"ok": true,
"apiVersion": "v1",
"scopes": ["crm:read", "inventory:read"]
}Дальше — справочник эндпоинтов ниже. При ошибках 401/403 смотрите раздел «Аутентификация», при прочих — «Ошибки и лимиты».
Каждый запрос несёт заголовок X-API-Token с персональным токеном (Personal Access Token). Cookie и CSRF-токены не используются и не нужны. Итоговые права = выбранные scope ∩ права роли владельца токена.
Единая точка (рекомендуется)
https://api.taska.uz/api/public/v1Организация определяется по слагу из токена формата tsk_ — поддомен организации знать не нужно. Работает только с токенами нового формата.
Домен организации
https://<домен>.taska.uz/api/public/v1Классический способ: тот же домен, на котором вы входите в систему. Работает с любым токеном — и tsk_, и старым tk_.
Новые токены имеют вид tsk_<слаг-организации>_<секрет>. Слаг — не секрет: он нужен только для маршрутизации на единой точке, сам токен проверяется по HMAC-хэшу в базе организации. Старые токены tk_… продолжают работать через домен организации.
X-API-Token: tsk_<слаг-организации>_<секрет>
# пример
X-API-Token: tsk_acme_4f9d21c07ab356e8c2d90b1f6a47e5d3901c8b2a7f6e5d4c| Scope | Описание |
|---|---|
| crm:read | Чтение контрагентов, контактов, сделок |
| crm:write | Создание и изменение контрагентов, контактов, сделок |
| inventory:read | Чтение номенклатуры, складов, остатков, движений |
| inventory:write | Запись номенклатуры и движений по складу |
| finance:read | Чтение заявок на оплату, статей и дебиторки |
| finance:write | Создание и изменение заявок на оплату |
| tasks:read | Чтение задач и проектов |
| tasks:write | Создание и изменение задач |
| bpm:read | Чтение шаблонов и запущенных бизнес-процессов |
| bpm:execute | Запуск бизнес-процессов |
| hr:read | Чтение справочника сотрудников (без кадровых данных) |
| production:read | Чтение производственных заказов |
| calendar:read | Чтение встреч (календарь) |
| calendar:write | Создание встреч |
| admin:all | Полный доступ, включая управление вебхуками |
Для операций записи, помимо scope, у владельца токена должно быть соответствующее право роли — оно указано в карточке эндпоинта (например, crm.clients или org.inventory.edit). admin:all открывает все scope.
Нет или неверный токен — 401:
{
"error": "unauthorized",
"message": "Открытое API требует заголовок X-API-Token (Personal Access Token).",
"request_id": "1f6c1f9e-3f2b-4a8b-9c01-2e5f7a8b9c0d",
"details": { "error": "api_token_required" }
}Токену не хватает scope — 403:
{
"error": "forbidden",
"message": "Токену нужен один из scope: crm:read.",
"request_id": "7a2d9b1c-8e4f-4c6a-b0d2-3f5e7a9b1c2d",
"details": { "error": "insufficient_scope" }
}Собирайте продукты на общем ядре Taska. Product manifests выбирают модули, вертикальные настройки и разрешённые действия, а Capabilities API даёт машиночитаемый контракт для интеграций.
beauty · finance · integrations · inventory · notifications · platform · service_ops · workdesk
integrations · inventory · notifications · platform · service_ops · sports
docs · finance · integrations · investor_portal · notifications · platform · workdesk
accessaiapprovalsautomationsbeautybillingbpmcalendarcommunicationscountercrmdocumentsedoevent_busfilesidentityinventorylearningledgerlogisticsmailmetricsnotificationspaymentsservice_opssportstasksКаждое действие указывает режим, необходимые модули и права, уровень риска, подтверждение и Idempotency-Key.
curl https://api.taska.uz/api/public/v1/capabilities \
-H "X-API-Token: tsk_<слаг>_<секрет>"Все пути указаны относительно базового URL (…/api/public/v1). Ответы — application/json; charset=utf-8, даты — ISO 8601.
Проверка подключения и выданных прав токена — первый запрос любой интеграции.
/pingПроверка токена. Возвращает выданные scope — удобно для отладки подключения.
curl https://api.taska.uz/api/public/v1/ping \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"ok": true,
"apiVersion": "v1",
"scopes": ["crm:read", "inventory:read"],
"tokenId": "3f2b1c9a-6d4e-4a8b-9c01-2e5f7a8b9c0d",
"orgUserId": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c"
}/capabilitiesМашиночитаемый каталог продуктов, операторов, действий и заготовок решений.
Каталог описывает требования к действиям. Мутации выполняются через доменные endpoints.
curl https://api.taska.uz/api/public/v1/capabilities \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"schemaVersion": 2,
"products": [{ "slug": "ventro", "status": "draft" }],
"capabilities": [{
"key": "documents",
"version": 1,
"kind": "business",
"dependsOn": ["access", "event_bus", "files"],
"providers": [],
"exposure": "internal",
"actions": [{ "scope": "documents:instance.create", "mode": "write" }]
}],
"solutionBlueprints": [{
"key": "task_workspace",
"maturity": "ready",
"operators": ["tasks", "calendar", "documents"]
}]
}Контрагенты (клиенты/компании). Ответы — в snake_case. Телефон и email валидируются на сервере (422 при неверном формате).
/clientsСписок контрагентов с поиском и пагинацией.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| search | query · string | поиск по названию / телефону / email |
| include_archived | query · bool | включать архивные (по умолчанию false) |
curl "https://api.taska.uz/api/public/v1/clients?limit=50&offset=0&search=baraka" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "c1a2b3d4-0000-4000-8000-000000000001",
"version": 3,
"name": "ООО «Барака Трейд»",
"phone": "+998901234567",
"email": "info@baraka.uz",
"company_name": "Baraka Trade LLC",
"inn": "301234567",
"vat_number": null,
"industry": "Оптовая торговля",
"segment": "b2b",
"city": "Ташкент",
"source": "1c",
"tags": ["опт"],
"is_archived": false
}
],
"total": 134,
"limit": 50,
"offset": 0
}/clients/{id}Контрагент по идентификатору. 404 — если не найден.
| Параметр | Где · тип | Описание |
|---|---|---|
| id * | path · string | идентификатор контрагента (UUID) |
curl https://api.taska.uz/api/public/v1/clients/c1a2b3d4-0000-4000-8000-000000000001 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "c1a2b3d4-0000-4000-8000-000000000001",
"version": 3,
"name": "ООО «Барака Трейд»",
"phone": "+998901234567",
"email": "info@baraka.uz",
"company_name": "Baraka Trade LLC",
"inn": "301234567",
"city": "Ташкент",
"tags": ["опт"],
"is_archived": false
}/clientsСоздать контрагента. Можно передать свой id (UUID) — удобно для синхронизации с 1С; иначе сгенерируется. Дубликат id → 409.
| Параметр | Где · тип | Описание |
|---|---|---|
| name * | body · string | название контрагента |
| id | body · string | свой UUID (опционально) |
| phone / email / inn / company_name / city / source / tags | body · … | остальные поля контрагента (опционально) |
curl -X POST https://api.taska.uz/api/public/v1/clients \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"name": "ООО «Барака Трейд»",
"phone": "+998901234567",
"email": "info@baraka.uz",
"inn": "301234567",
"source": "1c"
}'{
"id": "c1a2b3d4-0000-4000-8000-000000000001",
"version": 1,
"name": "ООО «Барака Трейд»",
"phone": "+998901234567",
"email": "info@baraka.uz",
"inn": "301234567",
"source": "1c",
"tags": [],
"is_archived": false
}/clients/{id}Изменить контрагента: передавайте только меняемые поля. При конфликте версий — 409 (перечитайте объект и повторите).
curl -X PATCH https://api.taska.uz/api/public/v1/clients/c1a2b3d4-0000-4000-8000-000000000001 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-H "If-Match: 3" \
-d '{ "phone": "+998907654321" }'{
"id": "c1a2b3d4-0000-4000-8000-000000000001",
"version": 4,
"name": "ООО «Барака Трейд»",
"phone": "+998907654321",
"is_archived": false
}Контактные лица (люди), привязанные к контрагентам. Поле channels — нормализованные каналы связи человека (телефон/email/telegram/instagram).
/contactsСписок контактных лиц.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| client_id | query · string | фильтр по контрагенту |
| search | query · string | поиск по имени / телефону / email |
| include_archived | query · bool | включать архивные |
curl "https://api.taska.uz/api/public/v1/contacts?client_id=c1a2b3d4-0000-4000-8000-000000000001" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "a0b1c2d3-0000-4000-8000-000000000011",
"version": 2,
"client_id": "c1a2b3d4-0000-4000-8000-000000000001",
"name": "Алишер Каримов",
"phone": "+998935551122",
"email": "alisher@baraka.uz",
"telegram": "alisher_k",
"job_title": "Директор по закупкам",
"tags": [],
"channels": [
{ "kind": "phone", "value": "+998935551122", "isPrimary": true, "verified": false }
],
"is_archived": false
}
],
"total": 12,
"limit": 50,
"offset": 0
}/contacts/{id}Контактное лицо по идентификатору.
curl https://api.taska.uz/api/public/v1/contacts/a0b1c2d3-0000-4000-8000-000000000011 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "a0b1c2d3-0000-4000-8000-000000000011",
"version": 2,
"client_id": "c1a2b3d4-0000-4000-8000-000000000001",
"name": "Алишер Каримов",
"phone": "+998935551122",
"email": "alisher@baraka.uz",
"job_title": "Директор по закупкам",
"is_archived": false
}/contactsСоздать контактное лицо (обязательно name; client_id — привязка к контрагенту).
| Параметр | Где · тип | Описание |
|---|---|---|
| name * | body · string | имя человека |
| client_id | body · string | контрагент |
| phone / email / telegram / instagram / job_title | body · string | каналы и должность (опционально) |
curl -X POST https://api.taska.uz/api/public/v1/contacts \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"name": "Алишер Каримов",
"client_id": "c1a2b3d4-0000-4000-8000-000000000001",
"phone": "+998935551122"
}'{
"id": "a0b1c2d3-0000-4000-8000-000000000011",
"version": 1,
"client_id": "c1a2b3d4-0000-4000-8000-000000000001",
"name": "Алишер Каримов",
"phone": "+998935551122",
"is_archived": false
}/contacts/{id}Изменить контактное лицо (только меняемые поля).
curl -X PATCH https://api.taska.uz/api/public/v1/contacts/a0b1c2d3-0000-4000-8000-000000000011 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-H "If-Match: 2" \
-d '{ "job_title": "Коммерческий директор" }'{
"id": "a0b1c2d3-0000-4000-8000-000000000011",
"version": 3,
"name": "Алишер Каримов",
"job_title": "Коммерческий директор",
"is_archived": false
}Сделки в воронках продаж. stage — название этапа (строка), stage_id — канонический UUID этапа. Перевод сделки в выигранную запускает внутренние процессы (комиссии, производство и т.д.).
/dealsСписок сделок с фильтрами по контрагенту, воронке и этапу.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| client_id | query · string | фильтр по контрагенту |
| funnel_id | query · string | фильтр по воронке |
| stage | query · string | фильтр по этапу |
| search | query · string | поиск по названию сделки |
| include_archived | query · bool | включать архивные |
curl "https://api.taska.uz/api/public/v1/deals?client_id=c1a2b3d4-0000-4000-8000-000000000001" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "d4e5f6a7-0000-4000-8000-000000000021",
"version": 5,
"title": "Поставка упаковки, июль",
"client_id": "c1a2b3d4-0000-4000-8000-000000000001",
"contact_id": "a0b1c2d3-0000-4000-8000-000000000011",
"amount": 25000000.0,
"currency": "RUB",
"stage": "Переговоры",
"stage_id": "f7a8b9c0-0000-4000-8000-000000000031",
"funnel_id": "funnel-main",
"source": "1c",
"assignee_id": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"tags": [],
"is_archived": false,
"created_at": "2026-07-01T09:15:00+00:00",
"updated_at": "2026-07-03T14:02:00+00:00"
}
],
"total": 8,
"limit": 50,
"offset": 0
}/deals/{id}Сделка по идентификатору.
curl https://api.taska.uz/api/public/v1/deals/d4e5f6a7-0000-4000-8000-000000000021 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "d4e5f6a7-0000-4000-8000-000000000021",
"version": 5,
"title": "Поставка упаковки, июль",
"client_id": "c1a2b3d4-0000-4000-8000-000000000001",
"amount": 25000000.0,
"currency": "RUB",
"stage": "Переговоры",
"stage_id": "f7a8b9c0-0000-4000-8000-000000000031",
"funnel_id": "funnel-main",
"is_archived": false
}/dealsСоздать сделку.
| Параметр | Где · тип | Описание |
|---|---|---|
| title * | body · string | название сделки |
| client_id / contact_id | body · string | привязка к контрагенту / контакту |
| amount | body · number | сумма (≥ 0) |
| currency | body · string | валюта, по умолчанию RUB |
| funnel_id / stage | body · string | воронка и этап |
curl -X POST https://api.taska.uz/api/public/v1/deals \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"title": "Поставка упаковки, июль",
"client_id": "c1a2b3d4-0000-4000-8000-000000000001",
"amount": 25000000,
"currency": "RUB"
}'{
"id": "d4e5f6a7-0000-4000-8000-000000000021",
"version": 1,
"title": "Поставка упаковки, июль",
"client_id": "c1a2b3d4-0000-4000-8000-000000000001",
"amount": 25000000.0,
"currency": "RUB",
"stage": "new",
"is_archived": false
}/deals/{id}Изменить сделку (этап, сумму и т.д.). Только меняемые поля.
curl -X PATCH https://api.taska.uz/api/public/v1/deals/d4e5f6a7-0000-4000-8000-000000000021 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-H "If-Match: 5" \
-d '{ "amount": 27500000 }'{
"id": "d4e5f6a7-0000-4000-8000-000000000021",
"version": 6,
"title": "Поставка упаковки, июль",
"amount": 27500000.0,
"currency": "RUB",
"is_archived": false
}Номенклатура (товары, материалы, услуги, готовая продукция). item_type: product | service | material | finished_good. Услуги не складируются — движения по ним вернут 422.
/productsСписок позиций номенклатуры.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| search | query · string | поиск по названию / SKU / штрихкоду |
| include_archived | query · bool | включать архивные |
curl "https://api.taska.uz/api/public/v1/products?search=короб" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "i1a2b3c4-0000-4000-8000-000000000041",
"sku": "BOX-40",
"name": "Короб картонный 400×300×300",
"unit": "шт",
"item_type": "product",
"category_id": "cat-packaging",
"cost_per_unit": 6500.0,
"price": 9000.0,
"barcode": "4780000000017",
"manufacturer": null,
"minStockLevel": 200.0,
"maxStockLevel": null,
"isArchived": false,
"version": 2
}
],
"total": 57,
"limit": 50,
"offset": 0
}/products/{id}Позиция номенклатуры по идентификатору.
curl https://api.taska.uz/api/public/v1/products/i1a2b3c4-0000-4000-8000-000000000041 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "i1a2b3c4-0000-4000-8000-000000000041",
"sku": "BOX-40",
"name": "Короб картонный 400×300×300",
"unit": "шт",
"item_type": "product",
"cost_per_unit": 6500.0,
"price": 9000.0,
"isArchived": false,
"version": 2
}/productsСоздать позицию номенклатуры.
| Параметр | Где · тип | Описание |
|---|---|---|
| name * | body · string | название позиции |
| sku | body · string | артикул |
| unit | body · string | единица измерения (шт, кг, м…) |
| item_type | body · string | product | service | material | finished_good |
| barcode / category_id / cost_per_unit | body · … | штрихкод, категория, себестоимость (опционально) |
curl -X POST https://api.taska.uz/api/public/v1/products \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"sku": "BOX-40",
"name": "Короб картонный 400×300×300",
"unit": "шт",
"cost_per_unit": 6500
}'{
"id": "i1a2b3c4-0000-4000-8000-000000000041",
"sku": "BOX-40",
"name": "Короб картонный 400×300×300",
"unit": "шт",
"item_type": "product",
"cost_per_unit": 6500.0,
"isArchived": false,
"version": 1
}/products/{id}Изменить позицию номенклатуры.
curl -X PATCH https://api.taska.uz/api/public/v1/products/i1a2b3c4-0000-4000-8000-000000000041 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-H "If-Match: 2" \
-d '{ "cost_per_unit": 7000 }'{
"id": "i1a2b3c4-0000-4000-8000-000000000041",
"sku": "BOX-40",
"name": "Короб картонный 400×300×300",
"cost_per_unit": 7000.0,
"isArchived": false,
"version": 3
}Склады — справочник (чтение). Остатки: onHand — физически на складе, reserved — зарезервировано, available = onHand − reserved. Остатки меняются ТОЛЬКО через движения (см. следующую группу).
/warehousesСписок складов.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| include_archived | query · bool | включать архивные |
curl https://api.taska.uz/api/public/v1/warehouses \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "w1a2b3c4-0000-4000-8000-000000000051",
"name": "Основной склад",
"code": "MAIN",
"city": "Ташкент",
"address_line": "ул. Бунёдкор, 12",
"isDefault": true,
"isArchived": false
}
],
"total": 3,
"limit": 50,
"offset": 0
}/warehouses/{id}Склад по идентификатору.
curl https://api.taska.uz/api/public/v1/warehouses/w1a2b3c4-0000-4000-8000-000000000051 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "w1a2b3c4-0000-4000-8000-000000000051",
"name": "Основной склад",
"code": "MAIN",
"isDefault": true,
"isArchived": false
}/stockОстатки номенклатуры по складам. Сопоставление: itemId → /products, warehouseId → /warehouses.
| Параметр | Где · тип | Описание |
|---|---|---|
| warehouse_id | query · string | фильтр по складу |
| item_id | query · string | фильтр по позиции |
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
curl "https://api.taska.uz/api/public/v1/stock?warehouse_id=w1a2b3c4-0000-4000-8000-000000000051" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "sb-000000000061",
"warehouseId": "w1a2b3c4-0000-4000-8000-000000000051",
"itemId": "i1a2b3c4-0000-4000-8000-000000000041",
"onHand": 480.0,
"reserved": 120.0,
"available": 360.0,
"lastMovementAt": "2026-07-03T11:20:00",
"version": 14
}
],
"total": 57,
"limit": 50,
"offset": 0
}Движения — источник изменения остатков; запись атомарно меняет баланс (блокировки на уровне БД). Основной механизм синхронизации склада из 1С. Пагинация списка — курсорная: сохраняйте next_cursor и запрашивайте только новые движения.
/movementsСписок движений (новые сверху). Курсорная пагинация — идеально для инкрементальной выгрузки.
| Параметр | Где · тип | Описание |
|---|---|---|
| warehouse_id | query · string | фильтр по складу (источник или получатель) |
| item_id | query · string | фильтр по позиции |
| kind | query · string | in | out | transfer | adjustment (+ produce | consume) |
| cursor | query · string | курсор следующей страницы (next_cursor из ответа) |
| limit | query · int | 1–200, по умолчанию 50 |
curl "https://api.taska.uz/api/public/v1/movements?kind=in&limit=50" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "m1a2b3c4-0000-4000-8000-000000000071",
"kind": "in",
"date": "2026-07-03T11:20:00",
"from_warehouse_id": null,
"to_warehouse_id": "w1a2b3c4-0000-4000-8000-000000000051",
"reason": "Приход по накладной №123 из 1С",
"created_by_user_id": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"lines": [
{
"id": "ml-000000000081",
"item_id": "i1a2b3c4-0000-4000-8000-000000000041",
"qty": "100.000",
"cost_per_unit": "6500.00",
"cost_currency": "RUB",
"batch_id": null,
"serial_numbers": null,
"notes": null
}
]
}
],
"total": 212,
"limit": 50,
"next_cursor": "gAAAAABl..."
}/movements/{id}Движение по идентификатору (со строками).
curl https://api.taska.uz/api/public/v1/movements/m1a2b3c4-0000-4000-8000-000000000071 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "m1a2b3c4-0000-4000-8000-000000000071",
"kind": "in",
"date": "2026-07-03T11:20:00",
"to_warehouse_id": "w1a2b3c4-0000-4000-8000-000000000051",
"reason": "Приход по накладной №123 из 1С",
"lines": [
{ "item_id": "i1a2b3c4-0000-4000-8000-000000000041", "qty": "100.000", "cost_per_unit": "6500.00" }
]
}/movementsПровести движение: приход (in), расход (out), перемещение (transfer, нужен to_warehouse_id), корректировка (adjustment — qty может быть отрицательным). Остатки обновляются сразу и атомарно.
| Параметр | Где · тип | Описание |
|---|---|---|
| kind * | body · string | in | out | transfer | adjustment |
| warehouse_id * | body · string | склад (для transfer — источник) |
| to_warehouse_id | body · string | склад-получатель (только transfer) |
| lines * | body · array | [{ item_id, qty, cost_per_unit? }] — минимум одна строка |
| notes | body · string | комментарий (попадает в reason) |
| reference_type / reference_id | body · string | связь с документом внешней системы |
reference_type / reference_id — связь с документом внешней системы (например, номером накладной 1С). Для transfer перечислите оба склада; warehouse_id — источник.
curl -X POST https://api.taska.uz/api/public/v1/movements \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"warehouse_id": "w1a2b3c4-0000-4000-8000-000000000051",
"kind": "in",
"notes": "Приход по накладной №123 из 1С",
"reference_type": "1c_document",
"reference_id": "НК-000123",
"lines": [
{ "item_id": "i1a2b3c4-0000-4000-8000-000000000041", "qty": 100, "cost_per_unit": 6500 }
]
}'{
"id": "m1a2b3c4-0000-4000-8000-000000000071",
"kind": "in",
"date": "2026-07-03T11:20:00",
"to_warehouse_id": "w1a2b3c4-0000-4000-8000-000000000051",
"reason": "Приход по накладной №123 из 1С",
"lines": [
{ "item_id": "i1a2b3c4-0000-4000-8000-000000000041", "qty": "100.000", "cost_per_unit": "6500.00" }
]
}Финансовый контур: заявки на оплату, справочник статей и дебиторка. Заявки доступны по двум эквивалентным путям — историческому /finance-requests и каноническому /finance/requests (одна реализация). Ответы — в camelCase; amount — строка с двумя знаками. Заявитель проставляется автоматически — владелец токена. Внутренние правила согласования сохраняются.
/finance-requestsСписок заявок на оплату.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| status | query · string | draft | pending | approved | rejected | paid |
| search | query · string | поиск по названию |
| include_archived | query · bool | включать архивные |
curl "https://api.taska.uz/api/public/v1/finance-requests?status=pending" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "fr-000000000091",
"version": 2,
"title": "Оплата поставщику упаковки",
"amount": "25000000.00",
"currency": "RUB",
"category": "Закупка материалов",
"counterparty": "ООО «Барака Трейд»",
"counterpartyInn": "301234567",
"status": "pending",
"paymentDate": "2026-07-10",
"invoiceNumber": "INV-2026-0715",
"vatAmount": "2500000.00",
"amountWithVat": "27500000.00",
"requestedBy": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"createdAt": "2026-07-04T08:30:00+00:00",
"isArchived": false
}
],
"total": 6,
"limit": 50,
"offset": 0
}/finance-requests/{id}Заявка на оплату по идентификатору.
curl https://api.taska.uz/api/public/v1/finance-requests/fr-000000000091 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "fr-000000000091",
"version": 2,
"title": "Оплата поставщику упаковки",
"amount": "25000000.00",
"currency": "RUB",
"status": "pending",
"paymentDate": "2026-07-10",
"isArchived": false
}/finance-requestsСоздать заявку на оплату. Заявитель — владелец токена (подмена невозможна).
| Параметр | Где · тип | Описание |
|---|---|---|
| title * | body · string | название заявки |
| amount * | body · number | string | сумма |
| currency | body · string | валюта, по умолчанию RUB |
| counterparty / category / paymentDate / description | body · … | реквизиты заявки (опционально) |
curl -X POST https://api.taska.uz/api/public/v1/finance-requests \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"title": "Оплата поставщику упаковки",
"amount": 25000000,
"currency": "RUB",
"counterparty": "ООО «Барака Трейд»"
}'{
"id": "fr-000000000091",
"version": 1,
"title": "Оплата поставщику упаковки",
"amount": "25000000.00",
"currency": "RUB",
"status": "pending",
"isArchived": false
}/finance-requests/{id}Изменить заявку. Внутренние гейты согласования (запрет self-approve и т.д.) сохраняются.
curl -X PATCH https://api.taska.uz/api/public/v1/finance-requests/fr-000000000091 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-H "If-Match: 2" \
-d '{ "paymentDate": "2026-07-12" }'{
"id": "fr-000000000091",
"version": 3,
"title": "Оплата поставщику упаковки",
"paymentDate": "2026-07-12",
"status": "pending",
"isArchived": false
}/finance/requestsСписок заявок на оплату — канонический алиас GET /finance-requests (та же реализация, те же параметры и поля ответа).
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| status | query · string | draft | pending | approved | rejected | paid |
| search | query · string | поиск по названию |
| include_archived | query · bool | включать архивные |
curl "https://api.taska.uz/api/public/v1/finance/requests?status=pending" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [ { "id": "fr-000000000091", "title": "Оплата поставщику упаковки", "amount": "25000000.00", "currency": "RUB", "status": "pending" } ],
"total": 6,
"limit": 50,
"offset": 0
}/finance/requests/{id}Заявка на оплату по идентификатору — алиас GET /finance-requests/{id}.
curl https://api.taska.uz/api/public/v1/finance/requests/fr-000000000091 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "fr-000000000091",
"version": 2,
"title": "Оплата поставщику упаковки",
"amount": "25000000.00",
"currency": "RUB",
"status": "pending",
"isArchived": false
}/finance/requestsСоздать заявку на оплату — алиас POST /finance-requests. Штатная внутренняя цепочка: курс валюты, инициализация согласования, уведомление согласующим. Заявитель — владелец токена; статус "approved" из тела без права finance.approve понижается до "pending".
| Параметр | Где · тип | Описание |
|---|---|---|
| title * | body · string | название заявки |
| amount | body · number | string | сумма |
| currency | body · string | валюта, по умолчанию RUB |
| category_id | body · string | статья расходов — id из GET /finance/categories |
| comment | body · string | комментарий |
curl -X POST https://api.taska.uz/api/public/v1/finance/requests \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"title": "Оплата хостинга",
"amount": 1200000,
"currency": "RUB",
"comment": "Продление на год"
}'{
"id": "fr-000000000092",
"version": 1,
"title": "Оплата хостинга",
"amount": "1200000.00",
"currency": "RUB",
"status": "pending",
"isArchived": false
}/finance/categoriesСправочник статей расходов / фондов. id статьи подставляется в category_id заявки на оплату.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| include_archived | query · bool | включать архивные |
curl https://api.taska.uz/api/public/v1/finance/categories \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "fc-000000000011",
"name": "Закупка материалов",
"type": "fixed",
"value": "0",
"color": "#2C7E20",
"order": 1,
"parent_category_id": null,
"isArchived": false
}
],
"total": 12,
"limit": 50,
"offset": 0
}/receivablesДебиторская задолженность (только чтение). status вычисляется из сумм и срока: open | partial | paid | overdue.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| client_id | query · string | фильтр по контрагенту |
| deal_id | query · string | фильтр по сделке |
curl "https://api.taska.uz/api/public/v1/receivables?client_id=c-000000000001" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "ar-000000000031",
"clientId": "c-000000000001",
"dealId": "d-000000000042",
"amount": 18000000,
"paidAmount": 6000000,
"currency": "RUB",
"dueDate": "2026-07-20",
"status": "partial",
"paidDate": null,
"description": "Оплата по договору №14",
"createdAt": "2026-06-25T09:00:00+00:00"
}
],
"total": 4,
"limit": 50,
"offset": 0
}Задачи трекера и справочник проектов. Поля задачи — в snake_case (как у внутреннего API). Видимость зеркалит платформу: без права tasks.view_all владелец токена видит только свои, назначенные ему и наблюдаемые задачи. Создание/изменение дополнительно требуют право tasks.edit у владельца токена.
/tasksСписок задач (не-архивные). updated_since — инкрементальная выгрузка: только задачи, изменённые или созданные не раньше метки.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| status | query · string | точное имя статуса, как в справочнике статусов |
| assignee_id | query · string | фильтр по ответственному (id пользователя) |
| project_id | query · string | фильтр по проекту (id из GET /projects) |
| updated_since | query · string | ISO 8601 — для инкрементального обмена |
curl "https://api.taska.uz/api/public/v1/tasks?status=В работе&updated_since=2026-07-01T00:00:00Z" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "3f2b1a90-1111-4c56-9d0e-aaaaaaaaaaaa",
"version": 4,
"title": "Подготовить спецификацию для клиента",
"description": "Согласовать состав поставки",
"status": "В работе",
"priority": "Высокий",
"assignee_id": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"assignee_ids": ["8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c"],
"project_id": "p-000000000003",
"start_date": "2026-07-01",
"end_date": "2026-07-10",
"end_time": "18:00",
"deal_id": null,
"tags": ["клиент"],
"created_by_user_id": "1c2d3e4f-0000-4a5b-8c9d-bbbbbbbbbbbb",
"created_at": "2026-07-01T05:12:00+00:00",
"updated_at": "2026-07-03T11:40:00+00:00"
}
],
"total": 18,
"limit": 50,
"offset": 0
}/tasks/{id}Задача по идентификатору. Чужая задача (вне видимости токена) возвращает 404 — существование не раскрывается.
curl https://api.taska.uz/api/public/v1/tasks/3f2b1a90-1111-4c56-9d0e-aaaaaaaaaaaa \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "3f2b1a90-1111-4c56-9d0e-aaaaaaaaaaaa",
"version": 4,
"title": "Подготовить спецификацию для клиента",
"status": "В работе",
"priority": "Высокий",
"assignee_id": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"end_date": "2026-07-10",
"end_time": "18:00"
}/tasksСоздать задачу. Штатная внутренняя цепочка: валидация дедлайна (дата в прошлом → 422), событие task.assigned, Telegram/in-app уведомление исполнителю, журнал. Создатель — владелец токена (подмена невозможна).
| Параметр | Где · тип | Описание |
|---|---|---|
| title * | body · string | название задачи |
| description | body · string | описание |
| status | body · string | статус; по умолчанию начальный статус справочника |
| priority | body · string | приоритет |
| assignee_id | body · string | ответственный (id пользователя) |
| assignee_ids | body · array | соисполнители |
| project_id | body · string | проект |
| start_date / end_date | body · string | YYYY-MM-DD; дедлайн в прошлом → 422 |
| end_time | body · string | время дедлайна HH:MM |
| deal_id | body · string | привязка к сделке |
| tags | body · array | теги |
| watcher_ids | body · array | наблюдатели (id пользователей) |
curl -X POST https://api.taska.uz/api/public/v1/tasks \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"title": "Выставить счёт по заказу 1С-00042",
"assignee_id": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"end_date": "2026-07-15",
"end_time": "17:00"
}'{
"id": "5e6f7a80-2222-4d67-8e1f-cccccccccccc",
"version": 1,
"title": "Выставить счёт по заказу 1С-00042",
"status": "К выполнению",
"assignee_id": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"end_date": "2026-07-15",
"end_time": "17:00",
"created_at": "2026-07-06T06:00:00+00:00"
}/tasks/{id}Изменить задачу (только переданные поля): status, title, assignee_id, end_date и др. Валидация статусного перехода и дедлайна — как во внутреннем API. Изменение priority дополнительно требует право tasks.set_priority. Ответ несёт заголовок ETag с новой версией.
curl -X PATCH https://api.taska.uz/api/public/v1/tasks/5e6f7a80-2222-4d67-8e1f-cccccccccccc \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-H "If-Match: 1" \
-d '{ "status": "Выполнено" }'{
"id": "5e6f7a80-2222-4d67-8e1f-cccccccccccc",
"version": 2,
"title": "Выставить счёт по заказу 1С-00042",
"status": "Выполнено"
}/projectsСправочник проектов (не-архивные). id подставляется в фильтр GET /tasks?project_id=…
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
curl https://api.taska.uz/api/public/v1/projects \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{ "id": "p-000000000003", "name": "Внедрение CRM", "icon": "🚀", "color": "#2C7E20" }
],
"total": 5,
"limit": 50,
"offset": 0
}Движок бизнес-процессов: чтение шаблонов и запущенных процессов, запуск нового процесса из внешней системы. Видимость зеркалит платформу: не-администратор БП видит только процессы, которые инициировал или в которых участвует (исполнитель этапа).
/process-templatesАктивные (опубликованные) шаблоны процессов. id шаблона используется в POST /processes.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
curl https://api.taska.uz/api/public/v1/process-templates \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "pt-000000000007",
"title": "Согласование договора",
"trigger_entity": "deal",
"category": "Продажи",
"description": "Юрист → финдир → подпись"
}
],
"total": 3,
"limit": 50,
"offset": 0
}/processesЗапущенные процессы (инстансы) с активными этапами и прогрессом 0–100.
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| status | query · string | running | completed | cancelled | failed |
| template_id | query · string | фильтр по шаблону |
| entity_type | query · string | тип привязанной сущности (deal/client/task) |
| entity_id | query · string | id привязанной сущности |
curl "https://api.taska.uz/api/public/v1/processes?status=running" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "pi-000000000021",
"template_id": "pt-000000000007",
"template_title": "Согласование договора",
"status": "running",
"entity_type": "deal",
"entity_id": "d-000000000042",
"initiated_by_id": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"current_stage_ids": ["st-000000000102"],
"progress": 40,
"started_at": "2026-07-05T10:00:00+00:00",
"completed_at": null
}
],
"total": 2,
"limit": 50,
"offset": 0
}/processes/{id}Один процесс с полным списком этапов stage_instances (статус, исполнитель, решение, отметки времени). Вне видимости токена → 404.
curl https://api.taska.uz/api/public/v1/processes/pi-000000000021 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "pi-000000000021",
"template_title": "Согласование договора",
"status": "running",
"current_stage_ids": ["st-000000000102"],
"stage_instances": [
{ "id": "st-000000000101", "stage_title": "Проверка юристом", "stage_type": "approval", "status": "completed", "decision": "approved" },
{ "id": "st-000000000102", "stage_title": "Виза финдиректора", "stage_type": "approval", "status": "active", "assignee_id": "1c2d3e4f-0000-4a5b-8c9d-bbbbbbbbbbbb" }
]
}/processesЗапустить процесс из опубликованного шаблона. Инициатор — владелец токена; активируется стартовый этап, пишется журнал. Шаблон не найден → 404, не опубликован → 409, нет стартового этапа → 422. Поддерживает Idempotency-Key.
| Параметр | Где · тип | Описание |
|---|---|---|
| template_id * | body · string | id шаблона из GET /process-templates |
| entity_type | body · string | привязка: deal | client | task |
| entity_id | body · string | id привязанной сущности |
| variables | body · object | стартовые переменные процесса (принимается и ключ initial_variables) |
curl -X POST https://api.taska.uz/api/public/v1/processes \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"template_id": "pt-000000000007",
"entity_type": "deal",
"entity_id": "d-000000000042",
"variables": { "contract_no": "Д-2026/114" }
}'{
"id": "pi-000000000022",
"template_id": "pt-000000000007",
"status": "running",
"current_stage_ids": ["st-000000000110"],
"started_at": "2026-07-06T06:10:00+00:00"
}Справочник сотрудников — только безопасные поля (whitelist-проекция). Кадровые данные — оклад, дата рождения, документы — через открытое API недоступны никогда.
/employeesСписок сотрудников (не-архивные).
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| department_id | query · string | фильтр по подразделению |
| status | query · string | фильтр по статусу (active/…) |
| search | query · string | поиск по ФИО |
curl "https://api.taska.uz/api/public/v1/employees?search=Алиев" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "emp-000000000012",
"user_id": "8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c",
"full_name": "Алиев Шерзод",
"position": "Менеджер по продажам",
"department_id": "dep-000000000002",
"status": "active"
}
],
"total": 1,
"limit": 50,
"offset": 0
}Производственные заказы — только чтение (camelCase, как во внутреннем API). Запись сознательно не даётся: заказ рождается из сделки или конвейера платформы с BOM/маршрутом — внешняя запись мимо этих инвариантов опасна.
/production/ordersСписок производственных заказов (не-архивные).
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| status | query · string | open | in_progress | completed | … |
| pipeline_id | query · string | фильтр по конвейеру |
| deal_id | query · string | фильтр по сделке |
curl "https://api.taska.uz/api/public/v1/production/orders?status=in_progress" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "po-000000000009",
"title": "Заказ №9 — стеллажи",
"status": "in_progress",
"pipelineId": "pp-000000000001",
"currentStageId": "stage-cut",
"dealId": "d-000000000042",
"items": [ { "name": "Стеллаж 2000×600", "qty": 10 } ],
"qtyToProduce": 10,
"qtyProduced": 4,
"customerName": "ООО «Барака Трейд»",
"plannedDeliveryDate": "2026-07-18",
"monitorStatus": "ok"
}
],
"total": 3,
"limit": 50,
"offset": 0
}/production/orders/{id}Один заказ — те же поля, что в списке, плюс currentStage {id, title} — текущий этап маршрута (null, если этап/конвейер не назначены).
curl https://api.taska.uz/api/public/v1/production/orders/po-000000000009 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "po-000000000009",
"title": "Заказ №9 — стеллажи",
"status": "in_progress",
"qtyToProduce": 10,
"qtyProduced": 4,
"currentStage": { "id": "stage-cut", "title": "Раскрой" }
}Календарь встреч. Повторяющиеся встречи разворачиваются по RRULE — каждое вхождение отдельным элементом. Видимость: владелец токена видит встречи, где он владелец или участник; администратор — все.
/meetingsВстречи за период. Окно from/to обязательно; максимум 500 элементов.
| Параметр | Где · тип | Описание |
|---|---|---|
| from * | query · string | начало окна, ISO 8601 |
| to * | query · string | конец окна, ISO 8601 |
| limit | query · int | 1–500, по умолчанию 500 |
curl "https://api.taska.uz/api/public/v1/meetings?from=2026-07-06T00:00:00Z&to=2026-07-13T00:00:00Z" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "m-000000000055",
"title": "Планёрка отдела продаж",
"start_at": "2026-07-07T04:00:00+00:00",
"end_at": "2026-07-07T04:30:00+00:00",
"duration_minutes": 30,
"location": "Переговорная 1",
"video_url": null,
"participantIds": ["8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c"],
"recurrence_rule": "FREQ=WEEKLY;BYDAY=TU",
"owner_user_id": "1c2d3e4f-0000-4a5b-8c9d-bbbbbbbbbbbb"
}
],
"total": 6,
"limit": 500,
"offset": 0
}/meetingsСоздать встречу. Штатная внутренняя цепочка: участники для напоминаний, событие meeting.created, in-app + Telegram уведомления участникам и в общий чат. Владелец встречи — владелец токена; start_at в прошлом → 422.
| Параметр | Где · тип | Описание |
|---|---|---|
| title * | body · string | название встречи |
| start_at * | body · string | начало, ISO 8601 |
| end_at | body · string | конец; если не задан — start_at + 60 минут |
| participant_ids | body · array | участники (id пользователей); создатель добавляется автоматически |
| location / video_url / summary | body · string | место, ссылка на видеозвонок, повестка |
| recurrence_rule | body · string | RRULE повторения (RFC 5545) |
| reminder_minutes | body · int | напоминание за N минут |
curl -X POST https://api.taska.uz/api/public/v1/meetings \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"title": "Демо для клиента",
"start_at": "2026-07-09T10:00:00+05:00",
"participant_ids": ["8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c"]
}'{
"id": "m-000000000056",
"title": "Демо для клиента",
"start_at": "2026-07-09T05:00:00+00:00",
"end_at": "2026-07-09T06:00:00+00:00",
"participantIds": ["8a7e6d5c-4b3a-2f1e-0d9c-8b7a6f5e4d3c", "1c2d3e4f-0000-4a5b-8c9d-bbbbbbbbbbbb"]
}Заказы / коммерческие предложения — только чтение. deal_id пуст у standalone-заказов (созданных без сделки). items[] — позиции заказа.
/commercial-ordersСписок заказов/КП (не-архивные).
| Параметр | Где · тип | Описание |
|---|---|---|
| limit | query · int | 1–200, по умолчанию 50 |
| offset | query · int | смещение, по умолчанию 0 |
| deal_id | query · string | фильтр по сделке |
| client_id | query · string | фильтр по контрагенту (standalone-заказы) |
| status | query · string | draft | sent | confirmed | approved | transferred | fulfilled |
curl "https://api.taska.uz/api/public/v1/commercial-orders?status=approved" \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "co-000000000017",
"deal_id": "d-000000000042",
"client_id": "c-000000000001",
"title": "КП №17 — стеллажи",
"status": "approved",
"currency": "RUB",
"items": [ { "name": "Стеллаж 2000×600", "qty": 10, "price": 1800000 } ],
"production_order_id": "po-000000000009",
"approved_at": "2026-07-05T12:00:00+00:00",
"created_at": "2026-07-04T09:00:00+00:00"
}
],
"total": 2,
"limit": 50,
"offset": 0
}/commercial-orders/{id}Один заказ/КП — тот же набор полей, что в списке.
curl https://api.taska.uz/api/public/v1/commercial-orders/co-000000000017 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"id": "co-000000000017",
"deal_id": "d-000000000042",
"title": "КП №17 — стеллажи",
"status": "approved",
"items": [ { "name": "Стеллаж 2000×600", "qty": 10, "price": 1800000 } ]
}Исходящие вебхуки: Taska сама отправляет POST на ваш URL при событиях (создана сделка, оплата проведена и т.д.). Управление подпиской требует scope admin:all. Формат доставки и проверка подписи — в разделе «Вебхуки» ниже.
/webhooks/event-catalogКаталог событий, на которые можно подписаться.
curl https://api.taska.uz/api/public/v1/webhooks/event-catalog \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"events": [
"client.created", "client.updated",
"deal.created", "deal.updated", "deal.won", "deal.lost",
"finance_request.created", "finance_request.approved", "finance_request.paid",
"*"
]
}/webhooksСписок зарегистрированных вебхуков со статистикой доставки.
curl https://api.taska.uz/api/public/v1/webhooks \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{
"items": [
{
"id": "wh-000000000101",
"name": "1С интеграция",
"url": "https://erp.example.uz/taska/webhook",
"events": ["deal.won", "finance_request.paid"],
"isActive": true,
"failureCount": 0,
"lastSuccessAt": "2026-07-04T10:00:00+00:00",
"lastFailureAt": null
}
]
}/webhooksЗарегистрировать вебхук. secret возвращается ОДИН РАЗ — сохраните его для проверки HMAC-подписи. events — список из каталога или ["*"] для всех событий.
| Параметр | Где · тип | Описание |
|---|---|---|
| name * | body · string | название подписки |
| url * | body · string | HTTPS-URL вашего обработчика |
| events * | body · array | события из каталога или ["*"] |
curl -X POST https://api.taska.uz/api/public/v1/webhooks \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..." \
-H "Content-Type: application/json" \
-d '{
"name": "1С интеграция",
"url": "https://erp.example.uz/taska/webhook",
"events": ["deal.won", "finance_request.paid"]
}'{
"id": "wh-000000000101",
"name": "1С интеграция",
"url": "https://erp.example.uz/taska/webhook",
"events": ["deal.won", "finance_request.paid"],
"isActive": true,
"secret": "whsec_Zm9vYmFyYmF6cXV4...",
"note": "Секрет показывается один раз — сохраните его для проверки HMAC-подписи X-Webhook-Signature."
}/webhooks/{id}Отключить вебхук.
curl -X DELETE https://api.taska.uz/api/public/v1/webhooks/wh-000000000101 \
-H "Authorization: Bearer tsk_acme_4f9d21c07ab356e8..."{ "ok": true }Вместо постоянного опроса Taska сама отправляет POST на ваш URL при событиях: создана сделка, проведена оплата и т.д. Подписка — через группу «Вебхуки» справочника (scope admin:all).
На каждый настроенный URL приходит POST с JSON-телом: event — тип события, data — данные (entityType, entityId и контекст события), ts — время события.
{
"event": "deal.won",
"data": {
"entityType": "deal",
"entityId": "d4e5f6a7-0000-4000-8000-000000000021"
},
"ts": "2026-07-04T10:00:00+00:00"
}Каждая доставка подписана: заголовок X-Webhook-Signature — HMAC-SHA256 (hex) от сырого тела запроса с вашим secret (выдаётся один раз при создании вебхука). Проверяйте подпись до обработки.
import hashlib, hmac
def verify(secret: str, raw_body: bytes, signature: str) -> bool:
expected = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature)
# signature — значение заголовка X-Webhook-SignatureОтвечайте 2xx как можно быстрее (обработку выполняйте асинхронно). При сбое Taska повторит доставку до 5 раз с растущим интервалом: 1 мин → 5 мин → 30 мин → 2 ч → 8 ч.
Вебхуки — best-effort push в реальном времени. Для гарантированной синхронизации дополняйте их периодическим опросом (GET /movements?cursor=…, GET /deals) — он «догонит» события, если ваш сервер был недоступен.
Все ошибки приходят в едином JSON-конверте:
{
"error": "conflict",
"message": "Объект изменён параллельно — перечитайте и повторите.",
"request_id": "9c1d2e3f-4a5b-6c7d-8e9f-0a1b2c3d4e5f",
"details": { "error": "stale_version" }
}error — машинный код класса ошибки; message — человекочитаемое описание; details — контекст (код доменной ошибки, поля валидации); request_id — идентификатор запроса, приложите его к обращению в поддержку.
| 200 / 201 | Успех (201 — объект создан) |
| 401 | Нет или неверный токен (api_token_required) |
| 403 | Не хватает scope или права роли (insufficient_scope / forbidden) |
| 404 | Объект не найден (not_found) |
| 409 | Конфликт: дубликат id или устаревшая версия при If-Match (stale_version) |
| 422 | Ошибка валидации входных данных (validation_error) |
| 429 | Превышен лимит запросов — повторите после Retry-After |
Ориентир — до 300 запросов в минуту на токен; при 429 приходят заголовки Retry-After и X-RateLimit-*. POST-запросы поддерживают заголовок Idempotency-Key: повтор с тем же ключом и телом вернёт кэшированный ответ вместо дубля операции.
Открытое API спроектировано под типовой обмен с 1С: справочники, остатки, документы движения и события в реальном времени.
Соединение = Новый HTTPСоединение("api.taska.uz", 443,,,,, Новый ЗащищённоеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/api/public/v1/ping");
Запрос.Заголовки.Вставить("X-API-Token", "tsk_<слаг>_<секрет>");
Ответ = Соединение.Получить(Запрос);
// Ответ.ПолучитьТелоКакСтроку() → {"ok":true,"apiVersion":"v1","scopes":[...]}Нужна помощь с подключением 1С или нестандартный сценарий обмена — оставьте заявку, поможем спроектировать интеграцию.