Rooms
GET/v1/rooms
List rooms
Parameters
| Name | Type | Description |
|---|---|---|
limit | query · integer |
Response 200
| Name | Type | Description |
|---|---|---|
data required | object[] | |
data[].id required | string | |
data[].url required | string | |
data[].title required | string | |
data[].visibility required | "private" | "public" | |
data[].status required | "scheduled" | "live" | "ended" | |
data[].created_at required | string | |
data[].expires_at required | string | |
data[].starts_at required | string | null | |
data[].duration_min required | integer | null | |
data[].invitees required | string[] | |
data[].langs required | string[] | |
data[].livemode required | boolean | false for objects created with a kt_test_ key (simulator). |
Example
curl
curl "https://api.kanutus.com/v1/rooms" \
-H "Authorization: Bearer $KANUTUS_API_KEY"Node.js
const res = await fetch("https://api.kanutus.com/v1/rooms", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.KANUTUS_API_KEY}`,
},
});
console.log(res.status, await res.json());Python
import os, uuid, requests
r = requests.request(
"GET",
"https://api.kanutus.com/v1/rooms",
headers={"Authorization": f"Bearer {os.environ['KANUTUS_API_KEY']}"},
)
print(r.status_code, r.json())Try it
Runs from your browser against the real API. Use a kt_test_ key: nothing is charged. The key stays in this tab only.
GET /v1/roomsResponses by status
200 Rooms, newest first
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_…"
}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_…"
}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_…"
}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_…"
}POST/v1/rooms
Create an instant room
Parameters
| Name | Type | Description |
|---|---|---|
idempotency-key required | header · string | Unique key per create request; retries with the same key return the same result. |
Request body
| Name | Type | Description |
|---|---|---|
title | string | length 0–120 · default "" |
visibility | "private" | "public" | default "private" |
langs | string[] | Languages expected in the room (helps warm-up). |
Response 201
| Name | Type | Description |
|---|---|---|
id required | string | |
url required | string | |
title required | string | |
visibility required | "private" | "public" | |
status required | "scheduled" | "live" | "ended" | |
created_at required | string | |
expires_at required | string | |
starts_at required | string | null | |
duration_min required | integer | null | |
invitees required | string[] | |
langs required | string[] | |
livemode required | boolean | false for objects created with a kt_test_ key (simulator). |
Example
curl
curl -X POST "https://api.kanutus.com/v1/rooms" \
-H "Authorization: Bearer $KANUTUS_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"title":"Proposta com a Andes","visibility":"private","langs":[]}'Node.js
const res = await fetch("https://api.kanutus.com/v1/rooms", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.KANUTUS_API_KEY}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify({"title":"Proposta com a Andes","visibility":"private","langs":[]}),
});
console.log(res.status, await res.json());Python
import os, uuid, requests
r = requests.request(
"POST",
"https://api.kanutus.com/v1/rooms",
headers={"Authorization": f"Bearer {os.environ['KANUTUS_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={"title":"Proposta com a Andes","visibility":"private","langs":[]},
)
print(r.status_code, r.json())Try it
Runs from your browser against the real API. Use a kt_test_ key: nothing is charged. The key stays in this tab only.
POST /v1/roomsResponses by status
201 Room created (share its url)
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_…"
}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_…"
}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_…"
}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_…"
}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_…"
}GET/v1/rooms/{id}
Get a room
Parameters
| Name | Type | Description |
|---|---|---|
id required | path · string |
Response 200
| Name | Type | Description |
|---|---|---|
id required | string | |
url required | string | |
title required | string | |
visibility required | "private" | "public" | |
status required | "scheduled" | "live" | "ended" | |
created_at required | string | |
expires_at required | string | |
starts_at required | string | null | |
duration_min required | integer | null | |
invitees required | string[] | |
langs required | string[] | |
livemode required | boolean | false for objects created with a kt_test_ key (simulator). |
Example
curl
curl "https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa" \
-H "Authorization: Bearer $KANUTUS_API_KEY"Node.js
const res = await fetch("https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.KANUTUS_API_KEY}`,
},
});
console.log(res.status, await res.json());Python
import os, uuid, requests
r = requests.request(
"GET",
"https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa",
headers={"Authorization": f"Bearer {os.environ['KANUTUS_API_KEY']}"},
)
print(r.status_code, r.json())Try it
Runs from your browser against the real API. Use a kt_test_ key: nothing is charged. The key stays in this tab only.
GET /v1/rooms/{id}Responses by status
200 The room
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_…"
}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_…"
}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_…"
}404 Not found
404 application/problem+json
{
"type": "https://docs.kanutus.com/errors",
"title": "<code>",
"status": 404,
"code": "<code>",
"message": "…",
"request_id": "req_…"
}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_…"
}DELETE/v1/rooms/{id}
End a room for everyone
Parameters
| Name | Type | Description |
|---|---|---|
id required | path · string |
Response 200
| Name | Type | Description |
|---|---|---|
id required | string | |
url required | string | |
title required | string | |
visibility required | "private" | "public" | |
status required | "scheduled" | "live" | "ended" | |
created_at required | string | |
expires_at required | string | |
starts_at required | string | null | |
duration_min required | integer | null | |
invitees required | string[] | |
langs required | string[] | |
livemode required | boolean | false for objects created with a kt_test_ key (simulator). |
Example
curl
curl -X DELETE "https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa" \
-H "Authorization: Bearer $KANUTUS_API_KEY"Node.js
const res = await fetch("https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa", {
method: "DELETE",
headers: {
Authorization: `Bearer ${process.env.KANUTUS_API_KEY}`,
},
});
console.log(res.status, await res.json());Python
import os, uuid, requests
r = requests.request(
"DELETE",
"https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa",
headers={"Authorization": f"Bearer {os.environ['KANUTUS_API_KEY']}"},
)
print(r.status_code, r.json())Try it
Runs from your browser against the real API. Use a kt_test_ key: nothing is charged. The key stays in this tab only.
DELETE /v1/rooms/{id}Responses by status
200 The ended room
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_…"
}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_…"
}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_…"
}404 Not found
404 application/problem+json
{
"type": "https://docs.kanutus.com/errors",
"title": "<code>",
"status": 404,
"code": "<code>",
"message": "…",
"request_id": "req_…"
}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_…"
}POST/v1/rooms/{id}/join-links
Create a guest join link (name and language prefilled)
Parameters
| Name | Type | Description |
|---|---|---|
id required | path · string |
Request body
| Name | Type | Description |
|---|---|---|
name | string | length 1–80 |
speak | string | Language the guest speaks (prefilled). |
hear | string | Language the guest wants to hear (prefilled). |
Response 201
| Name | Type | Description |
|---|---|---|
url required | string | |
room_id required | string |
Example
curl
curl -X POST "https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa/join-links" \
-H "Authorization: Bearer $KANUTUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Kenji","speak":"pt","hear":"pt"}'Node.js
const res = await fetch("https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa/join-links", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.KANUTUS_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({"name":"Kenji","speak":"pt","hear":"pt"}),
});
console.log(res.status, await res.json());Python
import os, uuid, requests
r = requests.request(
"POST",
"https://api.kanutus.com/v1/rooms/kqz-mbdt-wpa/join-links",
headers={"Authorization": f"Bearer {os.environ['KANUTUS_API_KEY']}"},
json={"name":"Kenji","speak":"pt","hear":"pt"},
)
print(r.status_code, r.json())Try it
Runs from your browser against the real API. Use a kt_test_ key: nothing is charged. The key stays in this tab only.
POST /v1/rooms/{id}/join-linksResponses by status
201 Link to share; opens the room directly
201
{
"url": "https://example.com",
"room_id": "string"
}400 Invalid request
400 application/problem+json
{
"type": "https://docs.kanutus.com/errors",
"title": "<code>",
"status": 400,
"code": "<code>",
"message": "…",
"request_id": "req_…"
}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_…"
}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_…"
}404 Not found
404 application/problem+json
{
"type": "https://docs.kanutus.com/errors",
"title": "<code>",
"status": 404,
"code": "<code>",
"message": "…",
"request_id": "req_…"
}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_…"
}