Общ преглед на уебхуковете
Sursa записва събитие за всяка важна промяна: карта е публикувана, проверена или архивирана, съобщение е прочетено, въпрос е останал без отговор. Може да получавате събитията по два начина и да използвате двата заедно:
| Уебхукове | Лента със събития | |
|---|---|---|
| Как | Sursa изпраща всяко събитие на вашия HTTPS адрес в момента, в който се случи. | Четете GET /v1/webhook-events, когато искате. |
| Закъснение | Секунди. | Толкова често, колкото проверявате. |
| Изисква | Публичен HTTPS получател. | Само API ключ с ролята admin и обхвата webhooks:manage. |
| Подходящ за | Реакция на промени: известяване, синхронизация, стартиране на работен процес. | Пакетни задания, наваксване след прекъсване, сверка. |
И двата начина носят едни и същи събития със същите ID. Всяко събитие се пази в лентата 30 дни, независимо дали някой уебхук е бил абониран за него.
Събитието
{
"id": "evt_0123456789abcdef0123456789abcdef",
"type": "card.updated",
"created_at": "2026-10-24T10:00:03Z",
"org_id": 1,
"api_version": "1.60.0",
"sequence": 1042,
"object": {"type": "card", "id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60"},
"payload": "full",
"data": {
"card": {"id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60", "title": "Refund policy", "collection": "support", "version": 4},
"actor_id": 7,
"previous_attributes": {"title": "Refunds"}
},
"test": false
}
| Поле | Значение |
|---|---|
id | ID на събитието: evt_ и 32 шестнайсетични знака. Едно и също при всеки опит за доставка и в лентата. |
type | Какво се е случило, във вида <object>.<past-tense verb>: card.updated, access_request.resolved. |
created_at | Кога е станала промяната, в UTC. |
api_version | Версията на API, по чиято схема е data. |
object | Типът и ID на обекта, за който е събитието. |
data | Подробностите. Структурата им зависи от типа и е описана в каталога на събитията. |
data.previous_attributes | В събитията *.updated: предишните стойности на променените полета. |
sequence, payload, test | Само в доставките на уебхуковете: позицията в реда на доставките на уебхука, режимът на тялото и дали това е тестово събитие. |
data съдържа само онова, което всеки читател на обекта би могъл да види през API. То никога не съдържа списъци за
достъп, правата на други хора или скрити полета. Причините в събитията са кратки неутрални кодове като no_hits,
restricted или index_failed.
Типове събития
Събитията обхващат следните области:
| Област | Примери |
|---|---|
| Карти | card.created, card.updated, card.published, card.archived, card.deleted, card.indexed, card.index_failed |
| Проверка | card.verified, card.unverified, verification.expired, verification.requested |
| Структура | collection.created, folder.updated |
| Съвместна работа | comment.created, draft.publish_requested, announcement.sent, announcement.read |
| Отговори | question.unanswered, question.feedback_created, access_request.created |
| Хора и достъп | user.created, user.deactivated, group.member_added, api_key.expiring |
| Източници и импорт | source.sync_completed, import.sync_completed, import.document_failed |
| Задания | job.completed, job.failed, export.ready |
| Уебхукове | webhook.endpoint_disabled, webhook.ping |
Пълният списък със схемата и пример за всяко събитие е в каталога на събитията в
справочника на API. GET /v1/webhooks/catalog връща
типовете, налични във вашата инсталация.
С времето се добавят нови типове събития, а съществуващите събития получават нови полета. Типовете събития никога не се преименуват и не се премахват. Получателят ви трябва да пропуска типовете и полетата, които не познава.
Кой какво получава
Уебхукът получава събитие само ако обектът на събитието е видим за него – по същия начин, както за API ключ: според
ролята, профила за достъп и колекциите му. Уебхук, ограничен до колекцията support, никога не получава събития за
карти във finance. Събитията за хора, ключове, източници, импорти, задания, експорти, плащания, приложения и за
самите уебхукове отиват само към уебхуковете с ролята admin.
В тези граници всеки уебхук избира своите събития:
- по тип, с маски:
card.*за всяко събитие на карта,*за всяко събитие; - по колекция и по етикет – за събитията на карти.
Режимът на тялото на уебхука е full (събитието с data, по подразбиране) или thin (събитието без data:
получателят ви чете обекта през API със собствен ключ и винаги вижда текущото му състояние).
Накратко за доставката
- HTTPS
POSTсъс събитието като JSON, подписан с тайната на уебхука в два формата: Standard Webhooks (webhook-signature) и по-раннияX-KB-Signature. - Всеки отговор
2xxдо 10 секунди е успех. - При неуспех доставката се повтаря в продължение на почти три дни с нарастващи паузи.
Retry-Afterв отговор429или503се спазва;410изключва уебхука; 10 поредни неуспеха го спират временно, докато не бъде възобновен. - Доставките към един уебхук се изпращат строго по ред. Бавен уебхук не забавя другите уебхукове.
- Едно и също събитие може да пристигне повече от веднъж: отхвърляйте дубликатите по
webhook-id.
Получаване на уебхукове показва стъпка по стъпка цялостен получател с проверка на подписа на Node.js, Python и Go.
Управление на уебхуковете
| Задача | Операция |
|---|---|
| Създаване на уебхук и получаване на тайната му | POST /v1/webhooks |
| Промяна на адреса, събитията или състоянието | PATCH /v1/webhooks/{webhook_id} |
| Изпращане на тестово събитие | POST /v1/webhooks/{webhook_id}/test |
| Смяна на тайната | POST /v1/webhooks/{webhook_id}/rotate-secret |
| Възобновяване на временно спрян уебхук | POST /v1/webhooks/{webhook_id}/resume |
| Преглед на доставките и отговорите | GET /v1/webhooks/{webhook_id}/deliveries |
| Повторно изпращане на доставка | POST /v1/webhooks/{webhook_id}/deliveries/{delivery_id}/redeliver |
За управлението на уебхуковете е нужен ключ с ролята admin и обхвата webhooks:manage или администратор в
интерфейса за администриране. Една организация може да има до 20 уебхука. Уебхуковете са част от плана на организацията; без тях
тези операции отговарят с 403 и кода webhooks.feature_disabled.