KanutusDocs
kanutus.com Entrar / Criar contaEntrar

Webhooks e eventos

GET/v1/webhook-endpoints

Listar endpoints de webhook

Permissão: webhooks:write

Resposta 200

NomeTipoDescrição
data obrigatórioobject[]
data[].id obrigatóriostring
data[].url obrigatóriostring
data[].events obrigatóriostring[]
data[].status obrigatório"active" | "disabled"
data[].livemode obrigatórioboolean
data[].created_at obrigatóriostring

Exemplo

curl
curl "https://api.kanutus.com/v1/webhook-endpoints" \
  -H "Authorization: Bearer $KANUTUS_API_KEY"
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

GET /v1/webhook-endpoints

Respostas por status

200 Endpoints of this environment
200
{
  "data": [
    {
      "id": "string",
      "url": "string",
      "events": [
        "string"
      ],
      "status": "active",
      "livemode": true,
      "created_at": "string"
    }
  ]
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

POST/v1/webhook-endpoints

Criar endpoint de webhook (o segredo de assinatura aparece uma vez)

Permissão: webhooks:write

Corpo da requisição

NomeTipoDescrição
url obrigatóriostringlength 0–2000
events obrigatório"room.started" | "room.ended" | "room.participant_joined" | "room.participant_left" | "session.started" | "session.ended" | "call.ringing" | "call.answered" | "call.voicemail" | "call.completed" | "call.failed" | "call.blocked" | "call.ended" | "meeting.created" | "meeting.updated" | "meeting.canceled" | "booking.created" | "booking.rescheduled" | "booking.canceled" | "transcript.ready" | "summary.ready" | "voice.consent_completed" | "voice.ready" | "voice.failed" | "usage.threshold" | "credential.expiring"[]
descriptionstringlength 0–200

Resposta 201

NomeTipoDescrição
id obrigatóriostring
url obrigatóriostring
events obrigatóriostring[]
status obrigatório"active" | "disabled"
livemode obrigatórioboolean
created_at obrigatóriostring
secret obrigatóriostringwhsec_… shown only now

Exemplo

curl
curl -X POST "https://api.kanutus.com/v1/webhook-endpoints" \
  -H "Authorization: Bearer $KANUTUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","events":["room.started"],"description":"string"}'
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

POST /v1/webhook-endpoints

Respostas por status

201 Created
201
{
  "id": "string",
  "url": "string",
  "events": [
    "string"
  ],
  "status": "active",
  "livemode": true,
  "created_at": "string",
  "secret": "string"
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

DELETE/v1/webhook-endpoints/{id}

Apagar um endpoint de webhook

Permissão: webhooks:write

Parâmetros

NomeTipoDescrição
id obrigatóriopath · string

Resposta 200

NomeTipoDescrição
id obrigatóriostring
deleted obrigatóriotrue

Exemplo

curl
curl -X DELETE "https://api.kanutus.com/v1/webhook-endpoints/8f14e45f-ceea-4c8e-9b3a-2f1d5a7c3b10" \
  -H "Authorization: Bearer $KANUTUS_API_KEY"
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

DELETE /v1/webhook-endpoints/{id}

Respostas por status

200 Deleted
200
{
  "id": "string",
  "deleted": true
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

404 Not found
404 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 404,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

POST/v1/webhook-endpoints/{id}/rotate-secret

Trocar o segredo de assinatura (os dois assinam por 24 h)

Permissão: webhooks:write

Parâmetros

NomeTipoDescrição
id obrigatóriopath · string

Resposta 200

NomeTipoDescrição
id obrigatóriostring
secret obrigatóriostring

Exemplo

curl
curl -X POST "https://api.kanutus.com/v1/webhook-endpoints/8f14e45f-ceea-4c8e-9b3a-2f1d5a7c3b10/rotate-secret" \
  -H "Authorization: Bearer $KANUTUS_API_KEY"
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

POST /v1/webhook-endpoints/{id}/rotate-secret

Respostas por status

200 New secret, shown once
200
{
  "id": "string",
  "secret": "string"
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

404 Not found
404 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 404,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

POST/v1/webhook-endpoints/{id}/test

Enviar agora um evento de teste assinado

Permissão: webhooks:write

Parâmetros

NomeTipoDescrição
id obrigatóriopath · string

Corpo da requisição

NomeTipoDescrição
type"room.started" | "room.ended" | "room.participant_joined" | "room.participant_left" | "session.started" | "session.ended" | "call.ringing" | "call.answered" | "call.voicemail" | "call.completed" | "call.failed" | "call.blocked" | "call.ended" | "meeting.created" | "meeting.updated" | "meeting.canceled" | "booking.created" | "booking.rescheduled" | "booking.canceled" | "transcript.ready" | "summary.ready" | "voice.consent_completed" | "voice.ready" | "voice.failed" | "usage.threshold" | "credential.expiring"default "meeting.created"

Resposta 200

NomeTipoDescrição
ok obrigatórioboolean
status obrigatórionumber | null
latency_ms obrigatórionumber
delivery_id obrigatóriostring
error obrigatóriostring | null

Exemplo

curl
curl -X POST "https://api.kanutus.com/v1/webhook-endpoints/8f14e45f-ceea-4c8e-9b3a-2f1d5a7c3b10/test" \
  -H "Authorization: Bearer $KANUTUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"meeting.created"}'
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

POST /v1/webhook-endpoints/{id}/test

Respostas por status

200 Delivery result
200
{
  "ok": true,
  "status": 0,
  "latency_ms": 0,
  "delivery_id": "string",
  "error": "string"
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

404 Not found
404 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 404,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

GET/v1/events

Eventos recentes (para conciliar o que o webhook perdeu; 30 dias)

Permissão: events:read

Parâmetros

NomeTipoDescrição
typequery · string
sincequery · string
limitquery · integer

Resposta 200

NomeTipoDescrição
data obrigatórioobject[]
data[].id obrigatóriostring
data[].type obrigatóriostring
data[].created obrigatóriointeger
data[].livemode obrigatórioboolean
data[].data obrigatórioobject
data[].data.object obrigatórioobject

Exemplo

curl
curl "https://api.kanutus.com/v1/events" \
  -H "Authorization: Bearer $KANUTUS_API_KEY"
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

GET /v1/events

Respostas por status

200 Events, newest first
200
{
  "data": [
    {
      "id": "string",
      "type": "string",
      "created": 0,
      "livemode": true,
      "data": {
        "object": {}
      }
    }
  ]
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro