Atenda API

API REST para criar e gerenciar sessoes de video consulta seguras com tokens individuais.

Base URL: https://api.atenda.dev/v1
Todas as requisicoes usam HTTPS. Respostas em JSON.

Autenticacao

Todas as chamadas requerem um API key no header Authorization:

HTTP
Authorization: Bearer sk_live_sua_api_key_aqui

Voce recebe suas keys no painel de controle. Use sk_test_* para sandbox e sk_live_* para producao.

Quickstart

Crie sua primeira sessao em 3 linhas:

TypeScript
const session = await fetch("https://api.atenda.dev/v1/rooms", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    participants: ["Dr. Silva", "Ana Costa"],
    maxParticipants: 2,
    tokenTtl: "2h",
  }),
}).then(r => r.json());

// session.participants[0].joinUrl → link seguro do Dr. Silva
// session.participants[1].joinUrl → link seguro da Ana Costa
cURL
curl -X POST https://api.atenda.dev/v1/rooms \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "participants": ["Dr. Silva", "Ana Costa"],
    "maxParticipants": 2,
    "tokenTtl": "2h"
  }'

Criar sessao

POST /v1/rooms

Cria uma sala e gera tokens JWT individuais para cada participante.

Body parameters

ParametroTipoDescricao
participants required string[] Nomes dos participantes. Cada um recebe um token unico.
roomName optional string Nome da sala. Se omitido, gera automaticamente (ex: abc1-def2).
maxParticipants optional number Maximo de participantes na sala. Default: 2. Max: 20.
tokenTtl optional string Tempo de vida do token. Default: "2h". Min: "30m", Max: "8h".

Response

JSON — 201 Created
{
  "roomName": "abc1-def2",
  "maxParticipants": 2,
  "tokenTtl": "2h",
  "participants": [
    {
      "name": "Dr. Silva",
      "token": "eyJhbGciOiJIUzI1NiIs...",
      "joinUrl": "https://app.atenda.dev/rooms/abc1-def2?token=eyJ..."
    },
    {
      "name": "Ana Costa",
      "token": "eyJhbGciOiJIUzI1NiIs...",
      "joinUrl": "https://app.atenda.dev/rooms/abc1-def2?token=eyJ..."
    }
  ]
}
Seguranca: Cada token e vinculado a uma identity unica. Se o link vazar, terceiros nao conseguem entrar — o token ja esta associado ao participante original.

Detalhes da sessao

GET /v1/rooms/:roomName

Retorna informacoes da sala incluindo participantes conectados e status.

JSON — 200 OK
{
  "roomName": "abc1-def2",
  "status": "active",
  "maxParticipants": 2,
  "createdAt": "2026-02-18T14:30:00Z",
  "participants": [
    { "name": "Dr. Silva", "status": "connected", "joinedAt": "2026-02-18T14:30:15Z" },
    { "name": "Ana Costa", "status": "connected", "joinedAt": "2026-02-18T14:31:02Z" }
  ]
}

Listar sessoes

GET /v1/rooms

Lista todas as salas ativas. Suporta filtros via query params.

ParametroTipoDescricao
status optional string active | finished | all. Default: active.
limit optional number Resultados por pagina. Default: 20. Max: 100.
offset optional number Offset para paginacao. Default: 0.

Encerrar sessao

DELETE /v1/rooms/:roomName

Encerra uma sala ativa imediatamente. Todos os participantes sao desconectados.

Server URL

GET /v1/server-url

Retorna a URL WebSocket publica para clientes que conectam via token pre-gerado.

JSON — 200 OK
{ "serverUrl": "wss://video.atenda.dev" }

Webhooks

Configure uma URL no painel para receber eventos em tempo real via POST.

JSON — Webhook payload
{
  "event": "room_finished",
  "room": {
    "name": "abc1-def2",
    "duration": 2820,
    "noShow": false,
    "participants": 2
  },
  "timestamp": "2026-02-18T15:17:00Z"
}

Tipos de evento

EventoDescricao
room_startedSala criada e pronta para conexoes.
participant_joinedParticipante entrou na sala.
participant_leftParticipante saiu da sala.
room_finishedSala encerrada. Inclui flag noShow.
no_show_detectedSessao encerrou sem a quantidade minima de participantes.

Metricas Prometheus

Exponha metricas no formato Prometheus via GET /metrics:

Prometheus
# HELP atenda_sessions_total Total sessions created
# TYPE atenda_sessions_total counter
atenda_sessions_total 1842

# HELP atenda_active_rooms Current active rooms
# TYPE atenda_active_rooms gauge
atenda_active_rooms 23

# HELP atenda_noshow_rate No-show rate (0-1)
# TYPE atenda_noshow_rate gauge
atenda_noshow_rate 0.12

# HELP atenda_participant_minutes_total Total participant-minutes
# TYPE atenda_participant_minutes_total counter
atenda_participant_minutes_total 89412

Dashboard admin

O dashboard admin esta disponivel em /admin e oferece:

Dica: O dashboard atualiza automaticamente a cada 5 segundos. Use os filtros para investigar sessoes com no-show ou segmentar por origem (API vs UI).