KanutusDocs
kanutus.com Entrar / Criar contaEntrar

Reuniões e agendamento

GET/v1/meetings

Listar reuniões agendadas

Permissão: calendar:read

Parâmetros

NomeTipoDescrição
fromquery · string
toquery · string
limitquery · integer

Resposta 200

NomeTipoDescrição
data obrigatórioobject[]
data[].id obrigatóriostring
data[].url obrigatóriostring
data[].title obrigatóriostring
data[].visibility obrigatório"private" | "public"
data[].status obrigatório"scheduled" | "live" | "ended"
data[].created_at obrigatóriostring
data[].expires_at obrigatóriostring
data[].starts_at obrigatóriostring | null
data[].duration_min obrigatóriointeger | null
data[].invitees obrigatóriostring[]
data[].langs obrigatóriostring[]
data[].livemode obrigatóriobooleanfalse for objects created with a kt_test_ key (simulator).

Exemplo

curl
curl "https://api.kanutus.com/v1/meetings" \
  -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/meetings

Respostas por status

200 Meetings by start time
200
{
  "data": [
    {
      "id": "kqz-mbdt-wpa",
      "url": "https://example.com",
      "title": "string",
      "visibility": "private",
      "status": "scheduled",
      "created_at": "string",
      "expires_at": "string",
      "starts_at": "string",
      "duration_min": 0,
      "invitees": [
        "string"
      ],
      "langs": [
        "string"
      ],
      "livemode": 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

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/meetings

Agendar uma reunião (sala com data, convidados e línguas)

Permissão: calendar:write

Parâmetros

NomeTipoDescrição
idempotency-key obrigatórioheader · stringUnique key per create request; retries with the same key return the same result.

Corpo da requisição

NomeTipoDescrição
title obrigatóriostringlength 1–120
starts_at obrigatóriostring
duration_mininteger5…720 · default 30
inviteesstring[]
langsstring[]Languages of the participants, e.g. ["pt", "ja"].
visibility"private" | "public"default "private"

Resposta 201

NomeTipoDescrição
id obrigatóriostring
url obrigatóriostring
title obrigatóriostring
visibility obrigatório"private" | "public"
status obrigatório"scheduled" | "live" | "ended"
created_at obrigatóriostring
expires_at obrigatóriostring
starts_at obrigatóriostring | null
duration_min obrigatóriointeger | null
invitees obrigatóriostring[]
langs obrigatóriostring[]
livemode obrigatóriobooleanfalse for objects created with a kt_test_ key (simulator).

Exemplo

curl
curl -X POST "https://api.kanutus.com/v1/meetings" \
  -H "Authorization: Bearer $KANUTUS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"title":"Revisão com Kenji","starts_at":"2026-10-12T13:00:00-03:00","duration_min":30,"invitees":[],"langs":[],"visibility":"private"}'
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/meetings

Respostas por status

201 Meeting scheduled; share url with invitees
201
{
  "id": "kqz-mbdt-wpa",
  "url": "https://example.com",
  "title": "string",
  "visibility": "private",
  "status": "scheduled",
  "created_at": "string",
  "expires_at": "string",
  "starts_at": "string",
  "duration_min": 0,
  "invitees": [
    "string"
  ],
  "langs": [
    "string"
  ],
  "livemode": 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

409 Conflict (idempotency or state)
409 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 409,
  "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/meetings/{id}

Cancelar uma reunião agendada

Permissão: calendar:write

Parâmetros

NomeTipoDescrição
id obrigatóriopath · string

Resposta 200

NomeTipoDescrição
id obrigatóriostring
url obrigatóriostring
title obrigatóriostring
visibility obrigatório"private" | "public"
status obrigatório"scheduled" | "live" | "ended"
created_at obrigatóriostring
expires_at obrigatóriostring
starts_at obrigatóriostring | null
duration_min obrigatóriointeger | null
invitees obrigatóriostring[]
langs obrigatóriostring[]
livemode obrigatóriobooleanfalse for objects created with a kt_test_ key (simulator).

Exemplo

curl
curl -X DELETE "https://api.kanutus.com/v1/meetings/kqz-mbdt-wpa" \
  -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/meetings/{id}

Respostas por status

200 Canceled
200
{
  "id": "kqz-mbdt-wpa",
  "url": "https://example.com",
  "title": "string",
  "visibility": "private",
  "status": "scheduled",
  "created_at": "string",
  "expires_at": "string",
  "starts_at": "string",
  "duration_min": 0,
  "invitees": [
    "string"
  ],
  "langs": [
    "string"
  ],
  "livemode": 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

GET/v1/event-types

Listar seus links de agendamento (tipos de evento)

Permissão: calendar:read

Resposta 200

NomeTipoDescrição
data obrigatórioobject[]
data[].id obrigatóriostring
data[].title obrigatóriostring
data[].duration_min obrigatóriointeger
data[].page obrigatóriostringBooking page slug (person or team)
data[].slug obrigatóriostring
data[].url obrigatóriostring
data[].active obrigatórioboolean

Exemplo

curl
curl "https://api.kanutus.com/v1/event-types" \
  -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/event-types

Respostas por status

200 Event types
200
{
  "data": [
    {
      "id": "string",
      "title": "string",
      "duration_min": 0,
      "page": "paulo",
      "slug": "30min",
      "url": "https://example.com",
      "active": 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

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/event-types/{id}/slots

Horários livres de um link de agendamento

Permissão: calendar:read

Parâmetros

NomeTipoDescrição
id obrigatóriopath · string
fromquery · string
toquery · string

Resposta 200

NomeTipoDescrição
tz obrigatóriostringHost time zone
duration_min obrigatóriointeger
slots obrigatóriostring[]Free start times (ISO 8601, UTC)
full_days obrigatóriostring[]

Exemplo

curl
curl "https://api.kanutus.com/v1/event-types/8f14e45f-ceea-4c8e-9b3a-2f1d5a7c3b10/slots" \
  -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/event-types/{id}/slots

Respostas por status

200 Free start times
200
{
  "tz": "string",
  "duration_min": 0,
  "slots": [
    "string"
  ],
  "full_days": [
    "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/bookings

Agendar um horário num link (seu ou de outra pessoa)

Permissão: calendar:write

Parâmetros

NomeTipoDescrição
idempotency-key obrigatórioheader · stringUnique key per create request; retries with the same key return the same result.

Corpo da requisição

NomeTipoDescrição
event_type_idstring
pagestringBooking page slug, when booking someone else's link
eventstringEvent slug on that page
start obrigatóriostring
guest obrigatórioobject
guest.name obrigatóriostringlength 1–80
guest.email obrigatóriostringlength 0–254
guest.speak obrigatóriostring
guest.hearstring
guest.tzstringlength 0–64 · default "UTC"
guest.localestringlength 0–8 · default "en"
answersobject

Resposta 201

NomeTipoDescrição
id obrigatóriostring
room_url obrigatóriostring | null
manage_url obrigatóriostring | null
start obrigatóriostring
livemode obrigatórioboolean

Exemplo

curl
curl -X POST "https://api.kanutus.com/v1/bookings" \
  -H "Authorization: Bearer $KANUTUS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"event_type_id":"string","page":"string","event":"string","start":"2026-10-14T13:00:00Z","guest":{"name":"string","email":"ana@example.com","speak":"ja","hear":"string","tz":"UTC","locale":"en"},"answers":{}}'
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/bookings

Respostas por status

201 Booked; the room is created with the guest's language and invitations are emailed
201
{
  "id": "string",
  "room_url": "https://example.com",
  "manage_url": "https://example.com",
  "start": "string",
  "livemode": 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

409 Conflict (idempotency or state)
409 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 409,
  "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