◆ Sapport для разработчиков Справочник API Каталог ошибок OpenAPI
Разделы

Вебхуки

Методов в разделе: 8. Все методы

МетодПутьОписаниеОбластиСтатус
GET/webhooksСписок подписокwebhooks:manageДоступно
POST/webhooksСоздать подпискуwebhooks:manageДоступно
GET/webhooks/{id}Получить подпискуwebhooks:manageДоступно
PATCH/webhooks/{id}Изменить подпискуwebhooks:manageДоступно
DELETE/webhooks/{id}Удалить подпискуwebhooks:manageДоступно
POST/webhooks/{id}/rotate-secretЗаменить секретwebhooks:manageДоступно
POST/webhooks/{id}/testТестовая доставкаwebhooks:manageДоступно
GET/webhooks/{id}/deliveriesЖурнал доставокwebhooks:manageДоступно
GET /webhooks Доступно

#Список подписок

Подписки этой интеграции (не больше 10). Секрет подписи не возвращается.

Области
webhooks:manage
Предел частоты
чтение
Идемпотентность
не требуется
Успешный ответ
200 Страница подписок.

Тело ответа

ПолеТипОписание
dataarray<Webhook>
обязательное
next_cursorstring
обязательное, может быть null
Курсор следующей страницы; null — список закончился. Живёт 24 часа.

Примеры

Запрос
curl -X GET 'https://wfacademy.org/api/public/v1/webhooks' \
  -H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Ответ 200
{
  "data": [
    {
      "id": "EXAMPLE_ID",
      "url": "https://example.com/hooks/sapport",
      "events": [
        null
      ],
      "include_pii": false,
      "description": null,
      "status": "active",
      "created_at": "2026-10-11T09:00:00Z",
      "updated_at": "2026-10-11T09:00:00Z",
      "secret_rotated_at": null,
      "previous_secret_expires_at": null
    }
  ],
  "next_cursor": "EXAMPLE_CURSOR"
}
Пример ошибки
{
  "type": "https://wfacademy.org/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing

POST /webhooks Доступно

#Создать подписку

Создаёт подписку на события. Секрет подписи показывается один раз, в этом ответе. Адрес проверяется защитой от SSRF; include_pii: true разрешён только для событий lead.*, contact.*, conversation.*.

Области
webhooks:manage
Предел частоты
запись
Идемпотентность
обязателен Idempotency-Key
Успешный ответ
201 Подписка с секретом.

Параметры

ПолеТипОписание
Idempotency-Keystring
обязательное
Где: header. Уникальная строка (обычно UUID v4), новая для каждой новой операции. Повтор с тем же ключом и телом даёт тот же результат.

Тело запроса Параметры подписки.

ПолеТипОписание
urlstring
обязательное
Адрес приёма: https, порт 443, имя хоста (не IP), без переадресаций.
eventsarray<string>
обязательное
Типы событий: точный тип или шаблон семейства "семейство.*". Доступные типы: conversation.created, message.created, conversation.handoff_requested, conversation.summary_ready, lead.created, lead.updated, lead.scored, lead.status_changed, lead.action_requested, task.created, task.completed, contact.merged, crm.mode_changed, article.ready, article.published, article.generation.failed, strategist.report.ready, strategist.turn.completed, operation.completed, api_key.expiring.
include_piiboolean
необязательное
Полная нагрузка с персональными данными; только для событий lead.*, contact.*, conversation.*. По умолчанию false.
descriptionstring
необязательное, может быть null
Пометка для вас, до 200 знаков.

Тело ответа

ПолеТипОписание
idstring
обязательное
Идентификатор подписки.
urlstring
обязательное
Адрес приёма: https, порт 443, имя хоста (не IP), без переадресаций.
eventsarray<string>
обязательное
Типы событий: точный тип или шаблон семейства "семейство.*". Доступные типы: conversation.created, message.created, conversation.handoff_requested, conversation.summary_ready, lead.created, lead.updated, lead.scored, lead.status_changed, lead.action_requested, task.created, task.completed, contact.merged, crm.mode_changed, article.ready, article.published, article.generation.failed, strategist.report.ready, strategist.turn.completed, operation.completed, api_key.expiring.
include_piiboolean
обязательное
Полная нагрузка с персональными данными; только для событий lead.*, contact.*, conversation.*. По умолчанию false.
descriptionstring
обязательное, может быть null
Пометка для вас, до 200 знаков.
statusstring
обязательное
active — доставки идут; paused — приостановлена.
Значения: active paused
created_atstring
обязательное
ISO 8601 UTC.
updated_atstring
обязательное
ISO 8601 UTC.
secret_rotated_atstring
обязательное, может быть null
Время последней ротации секрета; null — не менялся.
previous_secret_expires_atstring
обязательное, может быть null
Пока окно ротации открыто (24 часа) — когда прежний секрет перестанет действовать; иначе null.
secretstring
обязательное, может быть null
Секрет подписи: показывается ОДИН раз, в ответе создания или ротации. При идемпотентном повторе запроса — null: сохраните секрет из первого ответа.

Примеры

Запрос
curl -X POST 'https://wfacademy.org/api/public/v1/webhooks' \
  -H 'Authorization: Bearer '"$SAPPORT_API_KEY" \
  -H 'Idempotency-Key: '"$(uuidgen)" \
  -H 'Content-Type: application/json' \
  -d '{
  "url": "https://example.com/hooks/sapport",
  "events": [
    "string"
  ],
  "include_pii": false,
  "description": "string"
}'
Ответ 201
{
  "id": "EXAMPLE_ID",
  "url": "https://example.com/hooks/sapport",
  "events": [
    "string"
  ],
  "include_pii": false,
  "description": "string",
  "status": "active",
  "created_at": "2026-10-11T09:00:00Z",
  "updated_at": "2026-10-11T09:00:00Z",
  "secret_rotated_at": "2026-10-11T09:00:00Z",
  "previous_secret_expires_at": "2026-10-11T09:00:00Z",
  "secret": "string"
}
Пример ошибки
{
  "type": "https://wfacademy.org/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing pii_transfer_not_allowed bad_request validation_failed payload_too_large idempotency_key_required idempotency_conflict operation_in_progress invalid_state

GET /webhooks/{id} Доступно

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

Подписка без секрета.

Области
webhooks:manage
Предел частоты
чтение
Идемпотентность
не требуется
Успешный ответ
200 Подписка.

Параметры

ПолеТипОписание
idstring
обязательное
Где: path. Идентификатор подписки.

Тело ответа

ПолеТипОписание
idstring
обязательное
Идентификатор подписки.
urlstring
обязательное
Адрес приёма: https, порт 443, имя хоста (не IP), без переадресаций.
eventsarray<string>
обязательное
Типы событий: точный тип или шаблон семейства "семейство.*". Доступные типы: conversation.created, message.created, conversation.handoff_requested, conversation.summary_ready, lead.created, lead.updated, lead.scored, lead.status_changed, lead.action_requested, task.created, task.completed, contact.merged, crm.mode_changed, article.ready, article.published, article.generation.failed, strategist.report.ready, strategist.turn.completed, operation.completed, api_key.expiring.
include_piiboolean
обязательное
Полная нагрузка с персональными данными; только для событий lead.*, contact.*, conversation.*. По умолчанию false.
descriptionstring
обязательное, может быть null
Пометка для вас, до 200 знаков.
statusstring
обязательное
active — доставки идут; paused — приостановлена.
Значения: active paused
created_atstring
обязательное
ISO 8601 UTC.
updated_atstring
обязательное
ISO 8601 UTC.
secret_rotated_atstring
обязательное, может быть null
Время последней ротации секрета; null — не менялся.
previous_secret_expires_atstring
обязательное, может быть null
Пока окно ротации открыто (24 часа) — когда прежний секрет перестанет действовать; иначе null.

Примеры

Запрос
curl -X GET 'https://wfacademy.org/api/public/v1/webhooks/EXAMPLE_ID' \
  -H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Ответ 200
{
  "id": "EXAMPLE_ID",
  "url": "https://example.com/hooks/sapport",
  "events": [
    "string"
  ],
  "include_pii": false,
  "description": "string",
  "status": "active",
  "created_at": "2026-10-11T09:00:00Z",
  "updated_at": "2026-10-11T09:00:00Z",
  "secret_rotated_at": "2026-10-11T09:00:00Z",
  "previous_secret_expires_at": "2026-10-11T09:00:00Z"
}
Пример ошибки
{
  "type": "https://wfacademy.org/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found

PATCH /webhooks/{id} Доступно

#Изменить подписку

Меняет адрес, события, пометку, статус (active или paused) и include_pii. Передайте хотя бы одно поле.

Области
webhooks:manage
Предел частоты
запись
Идемпотентность
не требуется
Успешный ответ
200 Подписка после правки.

Параметры

ПолеТипОписание
idstring
обязательное
Где: path. Идентификатор подписки.

Тело запроса Изменяемые поля.

ПолеТипОписание
urlstring
необязательное
Адрес приёма: https, порт 443, имя хоста (не IP), без переадресаций.
eventsarray<string>
необязательное
Типы событий: точный тип или шаблон семейства "семейство.*". Доступные типы: conversation.created, message.created, conversation.handoff_requested, conversation.summary_ready, lead.created, lead.updated, lead.scored, lead.status_changed, lead.action_requested, task.created, task.completed, contact.merged, crm.mode_changed, article.ready, article.published, article.generation.failed, strategist.report.ready, strategist.turn.completed, operation.completed, api_key.expiring.
include_piiboolean
необязательное
Полная нагрузка с персональными данными; только для событий lead.*, contact.*, conversation.*. По умолчанию false.
descriptionstring
необязательное, может быть null
Пометка для вас, до 200 знаков.
statusstring
необязательное
Приостановить или возобновить доставки.
Значения: active paused

Тело ответа

ПолеТипОписание
idstring
обязательное
Идентификатор подписки.
urlstring
обязательное
Адрес приёма: https, порт 443, имя хоста (не IP), без переадресаций.
eventsarray<string>
обязательное
Типы событий: точный тип или шаблон семейства "семейство.*". Доступные типы: conversation.created, message.created, conversation.handoff_requested, conversation.summary_ready, lead.created, lead.updated, lead.scored, lead.status_changed, lead.action_requested, task.created, task.completed, contact.merged, crm.mode_changed, article.ready, article.published, article.generation.failed, strategist.report.ready, strategist.turn.completed, operation.completed, api_key.expiring.
include_piiboolean
обязательное
Полная нагрузка с персональными данными; только для событий lead.*, contact.*, conversation.*. По умолчанию false.
descriptionstring
обязательное, может быть null
Пометка для вас, до 200 знаков.
statusstring
обязательное
active — доставки идут; paused — приостановлена.
Значения: active paused
created_atstring
обязательное
ISO 8601 UTC.
updated_atstring
обязательное
ISO 8601 UTC.
secret_rotated_atstring
обязательное, может быть null
Время последней ротации секрета; null — не менялся.
previous_secret_expires_atstring
обязательное, может быть null
Пока окно ротации открыто (24 часа) — когда прежний секрет перестанет действовать; иначе null.

Примеры

Запрос
curl -X PATCH 'https://wfacademy.org/api/public/v1/webhooks/EXAMPLE_ID' \
  -H 'Authorization: Bearer '"$SAPPORT_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "url": "https://example.com/hooks/sapport",
  "events": [
    "string"
  ],
  "include_pii": false,
  "description": "string",
  "status": "active"
}'
Ответ 200
{
  "id": "EXAMPLE_ID",
  "url": "https://example.com/hooks/sapport",
  "events": [
    "string"
  ],
  "include_pii": false,
  "description": "string",
  "status": "active",
  "created_at": "2026-10-11T09:00:00Z",
  "updated_at": "2026-10-11T09:00:00Z",
  "secret_rotated_at": "2026-10-11T09:00:00Z",
  "previous_secret_expires_at": "2026-10-11T09:00:00Z"
}
Пример ошибки
{
  "type": "https://wfacademy.org/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing pii_transfer_not_allowed not_found bad_request validation_failed payload_too_large

DELETE /webhooks/{id} Доступно

#Удалить подписку

Удаляет подписку вместе с журналом доставок. Повторное удаление вернёт not_found.

Области
webhooks:manage
Предел частоты
запись
Идемпотентность
не требуется
Успешный ответ
204 Подписка удалена; тела нет.

Параметры

ПолеТипОписание
idstring
обязательное
Где: path. Идентификатор подписки.

Примеры

Запрос
curl -X DELETE 'https://wfacademy.org/api/public/v1/webhooks/EXAMPLE_ID' \
  -H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Ответ 204
HTTP/1.1 204
Пример ошибки
{
  "type": "https://wfacademy.org/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found

POST /webhooks/{id}/rotate-secret Доступно

#Заменить секрет

Выпускает новый секрет (показывается один раз). 24 часа действуют оба секрета, каждая доставка подписана обоими.

Области
webhooks:manage
Предел частоты
запись
Идемпотентность
обязателен Idempotency-Key
Успешный ответ
200 Подписка с новым секретом.

Параметры

ПолеТипОписание
idstring
обязательное
Где: path. Идентификатор подписки.
Idempotency-Keystring
обязательное
Где: header. Уникальная строка (обычно UUID v4), новая для каждой новой операции. Повтор с тем же ключом и телом даёт тот же результат.

Тело ответа

ПолеТипОписание
idstring
обязательное
Идентификатор подписки.
urlstring
обязательное
Адрес приёма: https, порт 443, имя хоста (не IP), без переадресаций.
eventsarray<string>
обязательное
Типы событий: точный тип или шаблон семейства "семейство.*". Доступные типы: conversation.created, message.created, conversation.handoff_requested, conversation.summary_ready, lead.created, lead.updated, lead.scored, lead.status_changed, lead.action_requested, task.created, task.completed, contact.merged, crm.mode_changed, article.ready, article.published, article.generation.failed, strategist.report.ready, strategist.turn.completed, operation.completed, api_key.expiring.
include_piiboolean
обязательное
Полная нагрузка с персональными данными; только для событий lead.*, contact.*, conversation.*. По умолчанию false.
descriptionstring
обязательное, может быть null
Пометка для вас, до 200 знаков.
statusstring
обязательное
active — доставки идут; paused — приостановлена.
Значения: active paused
created_atstring
обязательное
ISO 8601 UTC.
updated_atstring
обязательное
ISO 8601 UTC.
secret_rotated_atstring
обязательное, может быть null
Время последней ротации секрета; null — не менялся.
previous_secret_expires_atstring
обязательное, может быть null
Пока окно ротации открыто (24 часа) — когда прежний секрет перестанет действовать; иначе null.
secretstring
обязательное, может быть null
Секрет подписи: показывается ОДИН раз, в ответе создания или ротации. При идемпотентном повторе запроса — null: сохраните секрет из первого ответа.

Примеры

Запрос
curl -X POST 'https://wfacademy.org/api/public/v1/webhooks/EXAMPLE_ID/rotate-secret' \
  -H 'Authorization: Bearer '"$SAPPORT_API_KEY" \
  -H 'Idempotency-Key: '"$(uuidgen)"
Ответ 200
{
  "id": "EXAMPLE_ID",
  "url": "https://example.com/hooks/sapport",
  "events": [
    "string"
  ],
  "include_pii": false,
  "description": "string",
  "status": "active",
  "created_at": "2026-10-11T09:00:00Z",
  "updated_at": "2026-10-11T09:00:00Z",
  "secret_rotated_at": "2026-10-11T09:00:00Z",
  "previous_secret_expires_at": "2026-10-11T09:00:00Z",
  "secret": "string"
}
Пример ошибки
{
  "type": "https://wfacademy.org/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found idempotency_key_required idempotency_conflict operation_in_progress

POST /webhooks/{id}/test Доступно

#Тестовая доставка

Ставит в очередь событие webhook.test (livemode: false) только для этой подписки. Подписка должна быть active.

Области
webhooks:manage
Предел частоты
запись
Идемпотентность
обязателен Idempotency-Key
Успешный ответ
202 Событие поставлено в очередь.

Параметры

ПолеТипОписание
idstring
обязательное
Где: path. Идентификатор подписки.
Idempotency-Keystring
обязательное
Где: header. Уникальная строка (обычно UUID v4), новая для каждой новой операции. Повтор с тем же ключом и телом даёт тот же результат.

Тело ответа

ПолеТипОписание
event_idstring
обязательное, может быть null
Идентификатор тестового события.
typestring
обязательное
statusstring
обязательное
Событие в очереди; уйдёт на ближайшем запуске доставщика (до минуты).

Примеры

Запрос
curl -X POST 'https://wfacademy.org/api/public/v1/webhooks/EXAMPLE_ID/test' \
  -H 'Authorization: Bearer '"$SAPPORT_API_KEY" \
  -H 'Idempotency-Key: '"$(uuidgen)"
Ответ 202
{
  "event_id": "EXAMPLE_ID",
  "type": "string",
  "status": "string"
}
Пример ошибки
{
  "type": "https://wfacademy.org/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found invalid_state idempotency_key_required idempotency_conflict operation_in_progress

GET /webhooks/{id}/deliveries Доступно

#Журнал доставок

Попытки доставки подписки, новые первыми; хранятся 30 суток.

Области
webhooks:manage
Предел частоты
чтение
Идемпотентность
не требуется
Успешный ответ
200 Страница журнала.

Параметры

ПолеТипОписание
idstring
обязательное
Где: path. Идентификатор подписки.
limitinteger
необязательное
Где: query. Размер страницы: от 1 до 100, по умолчанию 25.
cursorstring
необязательное
Где: query. Значение next_cursor из предыдущего ответа. Живёт 24 часа; при смене фильтров начинайте заново.
statestring
необязательное
Где: query. Фильтр по состоянию доставки.

Тело ответа

ПолеТипОписание
dataarray<WebhookDelivery>
обязательное
next_cursorstring
обязательное, может быть null
Курсор следующей страницы; null — список закончился. Живёт 24 часа.

Примеры

Запрос
curl -X GET 'https://wfacademy.org/api/public/v1/webhooks/EXAMPLE_ID/deliveries' \
  -H 'Authorization: Bearer '"$SAPPORT_API_KEY"
Ответ 200
{
  "data": [
    {
      "id": "EXAMPLE_ID",
      "event_id": "EXAMPLE_ID",
      "state": "pending",
      "attempt": 0,
      "status_code": null,
      "duration_ms": null,
      "error": null,
      "next_attempt_at": null,
      "delivered_at": null,
      "created_at": "2026-10-11T09:00:00Z"
    }
  ],
  "next_cursor": "EXAMPLE_CURSOR"
}
Пример ошибки
{
  "type": "https://wfacademy.org/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found validation_failed