curl --request POST \
--url https://api.tungo.kz/v1/companies/{co}/automations/hooks/{id}/test \
--header 'Content-Type: application/json' \
--cookie tungo.session_token= \
--data '
{
"body": {
"data": {
"payment_id": "PAY-1001",
"status": "paid",
"amount": 150000
}
},
"content_type": "<string>",
"run": true
}
'import requests
url = "https://api.tungo.kz/v1/companies/{co}/automations/hooks/{id}/test"
payload = {
"body": { "data": {
"payment_id": "PAY-1001",
"status": "paid",
"amount": 150000
} },
"content_type": "<string>",
"run": True
}
headers = {
"cookie": "tungo.session_token=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {cookie: 'tungo.session_token=', 'Content-Type': 'application/json'},
body: JSON.stringify({
body: JSON.stringify({data: {payment_id: 'PAY-1001', status: 'paid', amount: 150000}}),
content_type: '<string>',
run: true
})
};
fetch('https://api.tungo.kz/v1/companies/{co}/automations/hooks/{id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"hook_id": "hk_01jz8x3m4n5p6q7r8s9t0v1w2x",
"signed": true,
"signature_note": "<string>",
"json": true,
"external_id": "PAY-1001",
"external_id_source": "id_path",
"external_id_note": "<string>",
"scenarios": [
{
"scenario_id": "scn_01jz8x3m4n5p6q7r8s9t0v1w2x",
"name": "<string>",
"enabled": true,
"matched": true,
"would_run": true,
"failed_condition": {
"index": 123,
"path": "data.status",
"op": "eq"
},
"reason": "<string>"
}
],
"event_id": "<string>",
"run_ids": [
"run_01jz8x3m4n5p6q7r8s9t0v1w2x"
]
}{
"hook_id": "hk_01jz8x3m4n5p6q7r8s9t0v1w2x",
"signed": true,
"signature_note": "<string>",
"json": true,
"external_id": "PAY-1001",
"external_id_source": "id_path",
"external_id_note": "<string>",
"scenarios": [
{
"scenario_id": "scn_01jz8x3m4n5p6q7r8s9t0v1w2x",
"name": "<string>",
"enabled": true,
"matched": true,
"would_run": true,
"failed_condition": {
"index": 123,
"path": "data.status",
"op": "eq"
},
"reason": "<string>"
}
],
"event_id": "<string>",
"run_ids": [
"run_01jz8x3m4n5p6q7r8s9t0v1w2x"
]
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}Пробное событие хука
Проверить фильтр сценариев и id_path хука на своём теле, не дожидаясь настоящего события. Тело проходит тот же разбор, что у приёма POST /hooks/: JSON, номер операции по id_path, фильтр каждого сценария хука. Подпись не проверяется — вызов идёт от вас, — но в ответе сказано, требует ли её хук.
Без run (или run: false) ничего не сохраняется и ИИ не вызывается — бесплатно. С run: true событие сохраняется как пробное (номер операции оно не занимает: настоящая доставка с тем же id потом — новое событие, а не повтор), и подошедшим включённым сценариям ставятся пробные запуски (trial): ИИ вызывается и стоит как обычный запуск, а в 1С само ничего не пишется. Если среди включённых сценариев хука есть сценарий с ИИ, run: true — только с chat.use (иначе 403 permission_error, permission chat.use). Очередь компании полна — 429 automation_queue_full.
Доступ: automations.manage | company.manage.
Доступно по ключу API.
curl --request POST \
--url https://api.tungo.kz/v1/companies/{co}/automations/hooks/{id}/test \
--header 'Content-Type: application/json' \
--cookie tungo.session_token= \
--data '
{
"body": {
"data": {
"payment_id": "PAY-1001",
"status": "paid",
"amount": 150000
}
},
"content_type": "<string>",
"run": true
}
'import requests
url = "https://api.tungo.kz/v1/companies/{co}/automations/hooks/{id}/test"
payload = {
"body": { "data": {
"payment_id": "PAY-1001",
"status": "paid",
"amount": 150000
} },
"content_type": "<string>",
"run": True
}
headers = {
"cookie": "tungo.session_token=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {cookie: 'tungo.session_token=', 'Content-Type': 'application/json'},
body: JSON.stringify({
body: JSON.stringify({data: {payment_id: 'PAY-1001', status: 'paid', amount: 150000}}),
content_type: '<string>',
run: true
})
};
fetch('https://api.tungo.kz/v1/companies/{co}/automations/hooks/{id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"hook_id": "hk_01jz8x3m4n5p6q7r8s9t0v1w2x",
"signed": true,
"signature_note": "<string>",
"json": true,
"external_id": "PAY-1001",
"external_id_source": "id_path",
"external_id_note": "<string>",
"scenarios": [
{
"scenario_id": "scn_01jz8x3m4n5p6q7r8s9t0v1w2x",
"name": "<string>",
"enabled": true,
"matched": true,
"would_run": true,
"failed_condition": {
"index": 123,
"path": "data.status",
"op": "eq"
},
"reason": "<string>"
}
],
"event_id": "<string>",
"run_ids": [
"run_01jz8x3m4n5p6q7r8s9t0v1w2x"
]
}{
"hook_id": "hk_01jz8x3m4n5p6q7r8s9t0v1w2x",
"signed": true,
"signature_note": "<string>",
"json": true,
"external_id": "PAY-1001",
"external_id_source": "id_path",
"external_id_note": "<string>",
"scenarios": [
{
"scenario_id": "scn_01jz8x3m4n5p6q7r8s9t0v1w2x",
"name": "<string>",
"enabled": true,
"matched": true,
"would_run": true,
"failed_condition": {
"index": 123,
"path": "data.status",
"op": "eq"
},
"reason": "<string>"
}
],
"event_id": "<string>",
"run_ids": [
"run_01jz8x3m4n5p6q7r8s9t0v1w2x"
]
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}{
"type": "error",
"error": {
"type": "payment_required_error",
"message": "Баланс доп. использования закончился — пополнить его или включить автопополнение могут владелец и админ workspace.",
"code": "balance_exhausted",
"permission": "proposals.approve",
"resets_at": "2026-11-01T19:00:00.000Z",
"retry_after_seconds": 42,
"next_request_at": "2026-11-12T09:30:42.000Z",
"allowed_methods": [
"email_otp"
],
"role": "<string>",
"permissions": [
"<string>"
],
"fields": [
{
"path": "bin",
"code": "invalid_format",
"message": "БИН/ИИН — 12 цифр"
}
]
},
"request_id": "req_4f9c2a7e1b3d4c5a8e6f7a9b0c1d2e3f"
}Авторизации
Сессия кабинета: cookie ставит вход через /v1/auth/* (Better Auth), браузер шлёт её сам — фронтенду кабинета ничего добавлять не нужно (fetch с credentials: 'include'). За HTTPS имя cookie — __Secure-tungo.session_token. Сессия кончилась — 401 authentication_error: отправить на вход.
Параметры пути
Тело
Пробное событие хука.
Тело события, как его пришлёт отправитель: любое значение JSON (объект, массив, число…) — оно берётся как JSON-текст; строка — как сырой текст тела (так можно проверить и тело не-JSON). Не больше hook_body_max_bytes.
{
"data": {
"payment_id": "PAY-1001",
"status": "paid",
"amount": 150000
}
}
Ответ
Разбор без запуска (run не передан или false)
Разбор пробного события хука.