API reference

Every v1 method. Each one names the scope it needs.

Me

GET/v1/meNo scope required

Who am I

Key, company and limits. No scope required.

Response · 200 · MeDto
curl -X GET "https://api.tg-desk.com/v1/me" \
  -H "Authorization: Bearer $TYGY_API_KEY"

Conversations

GET/v1/conversationsScope: conversations:read

List conversations

Newest activity first. Scope: `conversations:read`.

Parameters
FieldTypeDescription
limitstring query · optionalPage size, 1…100
starting_afterstring query · optionalCursor from the previous page’s `next_cursor`
statusstring query · optional
assignee_idstring query · optionalUser id of the assigned operator
contact_idstring query · optional
tagstring query · optionalTag id
channelstring query · optionalChannel the conversation came in on
updated_sincestring query · optionalOnly conversations changed at or after this ISO-8601 instant — for polling
Response · 200 · ConversationPageDto
curl -X GET "https://api.tg-desk.com/v1/conversations" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/conversations/{id}Scope: conversations:read

Get a conversation

Parameters
FieldTypeDescription
idstring path · required
Response · 200 · ConversationDto
curl -X GET "https://api.tg-desk.com/v1/conversations/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY"
PATCH/v1/conversations/{id}Scope: conversations:write

Update a conversation

Status, assignee and team. Goes through the same transitions the inbox uses — audit line, notifications and scenarios fire as for an operator. Scope: `conversations:write`.

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
statusstring optional`open` reopens a closed/spam dialog, wakes a snoozed one or unassigns an assigned one; `snoozed` needs `snoozed_until`; to assign, set `assignee_id` instead. open, closed, snoozed, spam
assignee_idstring | null optionalUser id, or null to unassign
team_idstring | null optionalTeam id, or null to clear
snoozed_untilstring optionalRequired with `status: snoozed`
Response · 200 · ConversationDto
curl -X PATCH "https://api.tg-desk.com/v1/conversations/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
GET/v1/conversations/{id}/messagesScope: conversations:read

List messages of a conversation

Oldest first by default. Internal notes (`type: note`) are returned only to keys holding `notes:write`.

Parameters
FieldTypeDescription
idstring path · required
limitstring query · optionalPage size, 1…100
starting_afterstring query · optionalCursor from the previous page’s `next_cursor`
orderstring query · optionalOldest first by default
Response · 200 · MessagePageDto
curl -X GET "https://api.tg-desk.com/v1/conversations/<id>/messages" \
  -H "Authorization: Bearer $TYGY_API_KEY"
POST/v1/conversations/{id}/messagesScope: messages:send

Send a reply or leave a note

Attributed to the key («API · <name>» in the inbox). `type: reply` needs `messages:send` and is delivered on the conversation’s channel; `type: note` needs `notes:write` and stays internal.

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
bodystring requiredPlain text; Markdown is rendered where the channel supports it
typestring optional`reply` reaches the customer (scope `messages:send`); `note` stays internal (scope `notes:write`) reply, note
Response · 201 · MessageDto
curl -X POST "https://api.tg-desk.com/v1/conversations/<id>/messages" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"body": "…"}'
POST/v1/conversations/{id}/tagsScope: conversations:write

Add a tag to a conversation

Idempotent.

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
tag_idstring required
Response · 200 · ConversationDto
curl -X POST "https://api.tg-desk.com/v1/conversations/<id>/tags" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tag_id": "…"}'
DELETE/v1/conversations/{id}/tags/{tagId}Scope: conversations:write

Remove a tag from a conversation

Idempotent.

Parameters
FieldTypeDescription
idstring path · required
tagIdstring path · required
Response · 200 · ConversationDto
curl -X DELETE "https://api.tg-desk.com/v1/conversations/<id>/tags/<tagId>" \
  -H "Authorization: Bearer $TYGY_API_KEY"

Contacts

GET/v1/contactsScope: contacts:read

List contacts

Most recently updated first. Scope: `contacts:read`.

Parameters
FieldTypeDescription
limitstring query · optionalPage size, 1…100
starting_afterstring query · optionalCursor from the previous page’s `next_cursor`
qstring query · optionalCase-insensitive substring of the name
emailstring query · optionalExact e-mail (any identifier)
phonestring query · optionalExact phone (any identifier)
organization_idstring query · optional
updated_sincestring query · optional
Response · 200 · ContactPageDto
curl -X GET "https://api.tg-desk.com/v1/contacts" \
  -H "Authorization: Bearer $TYGY_API_KEY"
POST/v1/contactsScope: contacts:write

Create a contact

An e-mail / phone / Telegram username already known in the project answers 409 with the existing id — the same address never creates a second person. Scope: `contacts:write`.

Request body
FieldTypeDescription
namestring required
emailstring optional
phonestring optionalE.164 preferred; national formats are normalised
telegram_usernamestring optional
organization_idstring optionalClient organization to link the contact to
Response · 201 · ContactDto
curl -X POST "https://api.tg-desk.com/v1/contacts" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "…"}'
GET/v1/contacts/{id}Scope: contacts:read

Get a contact

Parameters
FieldTypeDescription
idstring path · required
Response · 200 · ContactDto
curl -X GET "https://api.tg-desk.com/v1/contacts/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY"
PATCH/v1/contacts/{id}Scope: contacts:write

Update a contact

Absent fields stay; null clears.

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
namestring | null optional
emailstring | null optionalReplaces the primary e-mail; null removes it
phonestring | null optional
telegram_usernamestring | null optional
organization_idstring | null optionalnull unlinks
Response · 200 · ContactDto
curl -X PATCH "https://api.tg-desk.com/v1/contacts/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
POST/v1/contacts/{id}/identifiersScope: contacts:write

Add an e-mail / phone / Telegram username to a contact

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
typestring requiredemail, phone, telegram
valuestring required
Response · 200 · ContactDto
curl -X POST "https://api.tg-desk.com/v1/contacts/<id>/identifiers" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type": "email", "value": "…"}'
DELETE/v1/contacts/{id}/identifiers/{identifierId}Scope: contacts:write

Remove an identifier from a contact

Parameters
FieldTypeDescription
idstring path · required
identifierIdstring path · required
Response · 200 · ContactDto
curl -X DELETE "https://api.tg-desk.com/v1/contacts/<id>/identifiers/<identifierId>" \
  -H "Authorization: Bearer $TYGY_API_KEY"
POST/v1/contacts/{id}/tagsScope: contacts:write

Add a tag to a contact

Idempotent.

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
tag_idstring required
Response · 200 · ContactDto
curl -X POST "https://api.tg-desk.com/v1/contacts/<id>/tags" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tag_id": "…"}'
DELETE/v1/contacts/{id}/tags/{tagId}Scope: contacts:write

Remove a tag from a contact

Idempotent.

Parameters
FieldTypeDescription
idstring path · required
tagIdstring path · required
Response · 200 · ContactDto
curl -X DELETE "https://api.tg-desk.com/v1/contacts/<id>/tags/<tagId>" \
  -H "Authorization: Bearer $TYGY_API_KEY"

Organizations

GET/v1/organizationsScope: contacts:read

List client organizations

The B2B accounts contacts work for. Scope: `contacts:read`.

Parameters
FieldTypeDescription
limitstring query · optionalPage size, 1…100
starting_afterstring query · optionalCursor from the previous page’s `next_cursor`
qstring query · optionalCase-insensitive substring of the name
updated_sincestring query · optional
Response · 200 · OrganizationPageDto
curl -X GET "https://api.tg-desk.com/v1/organizations" \
  -H "Authorization: Bearer $TYGY_API_KEY"
POST/v1/organizationsScope: contacts:write

Create a client organization

Scope: `contacts:write`.

Request body
FieldTypeDescription
namestring required
emailstring optional
phonestring optional
websitestring optional
Response · 201 · OrganizationDto
curl -X POST "https://api.tg-desk.com/v1/organizations" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "…"}'
GET/v1/organizations/{id}Scope: contacts:read

Get a client organization

Parameters
FieldTypeDescription
idstring path · required
Response · 200 · OrganizationDto
curl -X GET "https://api.tg-desk.com/v1/organizations/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY"
PATCH/v1/organizations/{id}Scope: contacts:write

Rename a client organization

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
namestring optional
Response · 200 · OrganizationDto
curl -X PATCH "https://api.tg-desk.com/v1/organizations/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
POST/v1/organizations/{id}/tagsScope: contacts:write

Add a tag to a client organization

Idempotent.

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
tag_idstring required
Response · 200 · OrganizationDto
curl -X POST "https://api.tg-desk.com/v1/organizations/<id>/tags" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tag_id": "…"}'
DELETE/v1/organizations/{id}/tags/{tagId}Scope: contacts:write

Remove a tag from a client organization

Idempotent.

Parameters
FieldTypeDescription
idstring path · required
tagIdstring path · required
Response · 200 · OrganizationDto
curl -X DELETE "https://api.tg-desk.com/v1/organizations/<id>/tags/<tagId>" \
  -H "Authorization: Bearer $TYGY_API_KEY"

Tags

GET/v1/tagsScope: tags:read

List tags

Scope: `tags:read`.

Parameters
FieldTypeDescription
scopestring query · optional
Response · 200 · TagListDto
curl -X GET "https://api.tg-desk.com/v1/tags" \
  -H "Authorization: Bearer $TYGY_API_KEY"

Team

GET/v1/usersScope: team:read

List users (operators)

Active members only. Scope: `team:read`.

Response · 200 · UserListDto
curl -X GET "https://api.tg-desk.com/v1/users" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/teamsScope: team:read

List teams

Scope: `team:read`.

Response · 200 · TeamListDto
curl -X GET "https://api.tg-desk.com/v1/teams" \
  -H "Authorization: Bearer $TYGY_API_KEY"

Help center

GET/v1/kb/handbooksScope: kb:read

List handbooks

Active help centers of the project. Scope: `kb:read`.

Response · 200 · HandbookListDto
curl -X GET "https://api.tg-desk.com/v1/kb/handbooks" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/kb/handbooks/{id}/categoriesScope: kb:read

List categories of a handbook

Parameters
FieldTypeDescription
idstring path · required
Response · 200 · CategoryListDto
curl -X GET "https://api.tg-desk.com/v1/kb/handbooks/<id>/categories" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/kb/articlesScope: kb:read

List published articles

Titles only; fetch one article for its body.

Parameters
FieldTypeDescription
limitstring query · optionalPage size, 1…100
starting_afterstring query · optionalCursor from the previous page’s `next_cursor`
qstring query · optionalSearch words. Matches the article title and its short description, case-insensitively. The body is not searched — ask for the article to read it.
handbook_idstring query · optionalRestrict to one handbook
category_idstring query · optionalRestrict to one category
updated_sincestring query · optional
Response · 200 · ArticlePageDto
curl -X GET "https://api.tg-desk.com/v1/kb/articles" \
  -H "Authorization: Bearer $TYGY_API_KEY"
POST/v1/kb/articlesScope: kb:write

Create an article

The body is Markdown. Creates a DRAFT unless `status` says otherwise — a sync that goes wrong should not publish. Publishing is also what re-indexes the article for the AI operator. Scope: `kb:write`.

Request body
FieldTypeDescription
handbook_idstring requiredWhich handbook the article belongs to
titlestring requiredTitle of the article in this locale
markdownstring requiredThe body, as Markdown. Headings, paragraphs, lists and tables are understood; the same reader the file import uses converts it, so the result is identical to a typed article.
localestring optionalDefaults to the handbook's own locale
category_idstring | null optional
slugstring optionalDerived from the title when omitted
statusstring optionalDefaults to `draft`. Publishing is what re-indexes it for the AI operator. draft, published, archived
Response · 201 · ArticleDto
curl -X POST "https://api.tg-desk.com/v1/kb/articles" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"handbook_id": "…", "title": "…", "markdown": "…"}'
GET/v1/kb/articles/{id}Scope: kb:read

Get a published article with its body

Parameters
FieldTypeDescription
idstring path · required
localestring query · optionalReturn only this locale’s body (all locales by default)
Response · 200 · ArticleDto
curl -X GET "https://api.tg-desk.com/v1/kb/articles/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY"
PATCH/v1/kb/articles/{id}Scope: kb:write

Update an article

Every field is optional. Sending `markdown` replaces the body for that locale and requires `title` alongside it, because a translation carries both. Scope: `kb:write`.

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
titlestring optional
markdownstring optionalRequires `title` alongside it
localestring optional
category_idstring | null optional
slugstring optional
statusstring optionaldraft, published, archived
Response · 200 · ArticleDto
curl -X PATCH "https://api.tg-desk.com/v1/kb/articles/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
POST/v1/kb/categoriesScope: kb:write

Create a category

Scope: `kb:write`.

Request body
FieldTypeDescription
handbook_idstring required
slugstring required
translationsCategoryTranslationInputDto[] required
parent_idstring | null optionalNest under another category
Response · 201 · CategoryDto
curl -X POST "https://api.tg-desk.com/v1/kb/categories" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"handbook_id": "…", "slug": "…", "translations": "…"}'
PATCH/v1/kb/categories/{id}Scope: kb:write

Update a category

Scope: `kb:write`.

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
slugstring optional
parent_idstring | null optional
translationsCategoryTranslationInputDto[] optional
Response · 200 · CategoryDto
curl -X PATCH "https://api.tg-desk.com/v1/kb/categories/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Analytics

GET/v1/analytics/overviewScope: analytics:read

Overview

Headline numbers, the daily series and when the load actually lands. Scope: `analytics:read`.

Parameters
FieldTypeDescription
fromstring query · optionalISO-8601 start. Default: 30 days back.
tostring query · optionalISO-8601 end. Default: now. The period must not exceed 366 days.
channelstring query · optionalNarrow to channels. Comma-separated, or repeat the parameter.
teamstring query · optionalTeam ids, comma-separated or repeated.
operatorstring query · optionalUser ids, comma-separated or repeated.
Response · 200 · OverviewReportDto
curl -X GET "https://api.tg-desk.com/v1/analytics/overview" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/analytics/channelsScope: analytics:read

By channel

Volume, share, resolved share and resolution speed per channel. Scope: `analytics:read`.

Parameters
FieldTypeDescription
fromstring query · optionalISO-8601 start. Default: 30 days back.
tostring query · optionalISO-8601 end. Default: now. The period must not exceed 366 days.
channelstring query · optionalNarrow to channels. Comma-separated, or repeat the parameter.
teamstring query · optionalTeam ids, comma-separated or repeated.
operatorstring query · optionalUser ids, comma-separated or repeated.
Response · 200 · ChannelsReportDto
curl -X GET "https://api.tg-desk.com/v1/analytics/channels" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/analytics/teamsScope: analytics:read

By team

The same numbers per team, plus the team × channel breakdown. Scope: `analytics:read`.

Parameters
FieldTypeDescription
fromstring query · optionalISO-8601 start. Default: 30 days back.
tostring query · optionalISO-8601 end. Default: now. The period must not exceed 366 days.
channelstring query · optionalNarrow to channels. Comma-separated, or repeat the parameter.
teamstring query · optionalTeam ids, comma-separated or repeated.
operatorstring query · optionalUser ids, comma-separated or repeated.
Response · 200 · TeamsReportDto
curl -X GET "https://api.tg-desk.com/v1/analytics/teams" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/analytics/operatorsScope: analytics:read

By operator

Taken, closed and replies per operator. Scope: `analytics:read`.

Parameters
FieldTypeDescription
fromstring query · optionalISO-8601 start. Default: 30 days back.
tostring query · optionalISO-8601 end. Default: now. The period must not exceed 366 days.
channelstring query · optionalNarrow to channels. Comma-separated, or repeat the parameter.
teamstring query · optionalTeam ids, comma-separated or repeated.
operatorstring query · optionalUser ids, comma-separated or repeated.
Response · 200 · OperatorsReportDto
curl -X GET "https://api.tg-desk.com/v1/analytics/operators" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/analytics/revenueScope: analytics:read

Revenue

Won revenue, conversion and the split by channel and operator. Scope: `analytics:read`.

Parameters
FieldTypeDescription
recognitionstring query · optionalWhich date the money counts on. Default: `won`.
fromstring query · optionalISO-8601 start. Default: 30 days back.
tostring query · optionalISO-8601 end. Default: now. The period must not exceed 366 days.
channelstring query · optionalNarrow to channels. Comma-separated, or repeat the parameter.
teamstring query · optionalTeam ids, comma-separated or repeated.
operatorstring query · optionalUser ids, comma-separated or repeated.
Response · 200 · RevenueReportDto
curl -X GET "https://api.tg-desk.com/v1/analytics/revenue" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/analytics/qualityScope: analytics:read

Dialog quality

AI evaluation of dialogs: average, distribution and the weekly trend. Scope: `analytics:read`.

Parameters
FieldTypeDescription
fromstring query · optionalISO-8601 start. Default: 30 days back.
tostring query · optionalISO-8601 end. Default: now. The period must not exceed 366 days.
channelstring query · optionalNarrow to channels. Comma-separated, or repeat the parameter.
teamstring query · optionalTeam ids, comma-separated or repeated.
operatorstring query · optionalUser ids, comma-separated or repeated.
Response · 200 · QualityReportDto
curl -X GET "https://api.tg-desk.com/v1/analytics/quality" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/analytics/botScope: analytics:read

AI operator

How often the agent was used, and how those dialogs ended. Scope: `analytics:read`.

Parameters
FieldTypeDescription
fromstring query · optionalISO-8601 start. Default: 30 days back.
tostring query · optionalISO-8601 end. Default: now. The period must not exceed 366 days.
channelstring query · optionalNarrow to channels. Comma-separated, or repeat the parameter.
teamstring query · optionalTeam ids, comma-separated or repeated.
operatorstring query · optionalUser ids, comma-separated or repeated.
Response · 200 · BotReportDto
curl -X GET "https://api.tg-desk.com/v1/analytics/bot" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/analytics/filtersScope: analytics:read

Filter values

The channels, teams and operators that actually appear in this project — so a caller filters by real values instead of guessing. Scope: `analytics:read`.

Response · 200 · AnalyticsFiltersDto
curl -X GET "https://api.tg-desk.com/v1/analytics/filters" \
  -H "Authorization: Bearer $TYGY_API_KEY"

Meetings

GET/v1/meetingsScope: conferences:read

List meetings

Newest first. Scope: `conferences:read`.

Parameters
FieldTypeDescription
limitstring query · optionalPage size, 1…100
starting_afterstring query · optionalCursor from the previous page’s `next_cursor`
Response · 200 · MeetingPageDto
curl -X GET "https://api.tg-desk.com/v1/meetings" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/meetings/{id}Scope: conferences:read

Get a meeting with its summary and transcript

The summary and the transcript are present once the meeting reaches `ready`; before that they are null. Scope: `conferences:read`.

Parameters
FieldTypeDescription
idstring path · required
Response · 200 · MeetingDetailDto
curl -X GET "https://api.tg-desk.com/v1/meetings/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY"

Webhooks

GET/v1/webhooksScope: webhooks:manage

List webhook subscriptions

Scope: `webhooks:manage`.

Response · 200 · WebhookListDto
curl -X GET "https://api.tg-desk.com/v1/webhooks" \
  -H "Authorization: Bearer $TYGY_API_KEY"
POST/v1/webhooksScope: webhooks:manage

Create a webhook subscription

The signing secret is returned once, here. Verify a delivery as `HMAC-SHA256("<X-Webhook-Timestamp>.<raw body>", secret)` against `X-Webhook-Signature`.

Request body
FieldTypeDescription
namestring requiredHow the subscription is labelled in the settings list
urlstring requiredhttps:// endpoint (http:// allowed for localhost only)
eventsstring[] required
Response · 201 · WebhookWithSecretDto
curl -X POST "https://api.tg-desk.com/v1/webhooks" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "…", "url": "…", "events": ["…"]}'
GET/v1/webhooks/{id}Scope: webhooks:manage

Get a webhook subscription

Parameters
FieldTypeDescription
idstring path · required
Response · 200 · WebhookDto
curl -X GET "https://api.tg-desk.com/v1/webhooks/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY"
PATCH/v1/webhooks/{id}Scope: webhooks:manage

Update a webhook subscription

Parameters
FieldTypeDescription
idstring path · required
Request body
FieldTypeDescription
namestring optional
urlstring optional
eventsstring[] optional
activeboolean optionalfalse pauses deliveries; true clears a pause
Response · 200 · WebhookDto
curl -X PATCH "https://api.tg-desk.com/v1/webhooks/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
DELETE/v1/webhooks/{id}Scope: webhooks:manage

Delete a webhook subscription

Parameters
FieldTypeDescription
idstring path · required
Response · 204
curl -X DELETE "https://api.tg-desk.com/v1/webhooks/<id>" \
  -H "Authorization: Bearer $TYGY_API_KEY"
POST/v1/webhooks/{id}/rotate-secretScope: webhooks:manage

Rotate the signing secret

The new secret is returned once. Deliveries in flight are signed with the new one.

Parameters
FieldTypeDescription
idstring path · required
Response · 200 · WebhookWithSecretDto
curl -X POST "https://api.tg-desk.com/v1/webhooks/<id>/rotate-secret" \
  -H "Authorization: Bearer $TYGY_API_KEY"
POST/v1/webhooks/{id}/testScope: webhooks:manage

Send a test event

Queues a `webhook.test` delivery with a sample body; watch it in the log. The delivery is asynchronous, so the answer is `202` — it says the event was queued, not that the endpoint replied.

Parameters
FieldTypeDescription
idstring path · required
Response · 202 · WebhookTestResultDto
curl -X POST "https://api.tg-desk.com/v1/webhooks/<id>/test" \
  -H "Authorization: Bearer $TYGY_API_KEY"
GET/v1/webhooks/{id}/deliveriesScope: webhooks:manage

Delivery log of a subscription

Newest first, kept for 7 days.

Parameters
FieldTypeDescription
idstring path · required
limitstring query · required
Response · 200 · WebhookDeliveryListDto
curl -X GET "https://api.tg-desk.com/v1/webhooks/<id>/deliveries" \
  -H "Authorization: Bearer $TYGY_API_KEY"