Equipe e plataformaGuia

API da plataforma e tokens de acesso

Cada ação do app é uma rota da API da plataforma: listar execuções, atualizar um script, pausar um agendamento, rodar um flow. Fora do Waiso você a chama em https://waiso.dev/api (numa instalação auto-hospedada, <endereço do seu Waiso>/api) com um token de acesso. Dentro de um script as mesmas chamadas são a biblioteca waiso.api, já autenticada como quem iniciou a execução. Todas as rotas, com parâmetros e exemplos, estão na referência da API.

8 min de leituraAntes: Crie um projetoAbrir no Waiso
O que você vai aprender
  • Criar um token de acesso com exatamente o acesso necessário
  • Chamar a API por HTTP e ler os erros dela
  • Usar as mesmas chamadas dentro de um script como waiso.api

Uma API, três entradas

De ondeComo se autenticaO que pode fazer
HTTP (curl, CI, outro sistema)Um token de acesso: Authorization: Bearer waiso_at_…O que o escopo do token permite, nunca mais do que o dono pode fazer agora.
Um script no Waiso (waiso.api)Nada a configurar: é a identidade da própria execução.O que a pessoa (ou o token) que iniciou a execução pode fazer.
Um agente de IA (MCP, Code Mode)O mesmo token de acesso.O mesmo escopo, pelas ferramentas MCP ou por um programa.
PerfilE-mail globalADMINTokens de acessoApp GoogleADMIN
Tokens para a API da plataforma e para agentes de IA via MCP — cada um limitado aos projetos e áreas que você escolher.Novo token
Claude Code — laptopwaiso_at_1a2… · docs-demo: editar · 1.204 chamadasÚltimo usohá 4 minStatusAtivo
Cursorwaiso_at_7f0… · 2 projetos: lerÚltimo usoOntemStatusAtivo
VS Code — CIdocs-demo · só Scripts e FlowsÚltimo usoNuncaStatusAtivo
Desktop antigotoken antigo · todos os projetos: lerÚltimo uso2 setStatusRevogado
Resumo
3Tokens ativos4 minÚltimo uso
Conectar um cliente
Crie um token e a janela entrega o comando exato para Claude, Cursor ou VS Code.Docs do MCP
Configurações → Tokens de acesso: cada token com os primeiros caracteres do valor, o escopo, o número de chamadas e o último uso.

O escopo vale por projeto e por área. Um token em Editar em Scripts e Ler em Execuções pode atualizar um script e listar execuções, e nada mais; o mesmo token num projeto que não recebeu responde como se o projeto não existisse. E, diga o que disser o escopo, o token também é limitado pelo que o dono pode fazer agora: se um admin reduz o acesso do dono, todos os tokens dessa pessoa se estreitam na hora.

Crie um token de acesso

  1. Abra Tokens de acesso

    Abra Configurações → Tokens de acesso e clique em Novo token.

  2. Escolha o que ele alcança

    Ligue cada projeto que ele pode alcançar, em Ler, Editar ou Excluir — ou abra Personalizar áreas para dar a cada área (Scripts, Flows, Execuções, Agendamentos…) o próprio nível, ou nenhum.

  3. Defina quando expira

    Escolha uma validade, ou nunca. Ele aparece uma vez: copie agora. A lista depois mostra os primeiros caracteres, quando foi usado por último e quantas chamadas fez.

Revogue um token na mesma lista: a próxima chamada com ele é recusada. Admins veem todos os tokens do workspace em Todos os tokens.

Chame por HTTP

curl
curl -H "Authorization: Bearer $WAISO_TOKEN" \
  "https://waiso.dev/api/projects/$PROJECT_ID/runs?status=failed&limit=5"
RespostaSignifica
401 unauthenticatedSem token, desconhecido, revogado ou expirado.
403 token_not_allowedUma rota que só uma pessoa logada pode chamar.
403 access_deniedFalta ao token (ou ao dono) o nível da área; a resposta diz area, have e need.
404 not_foundUm projeto que o token não alcança responde como um que não existe.
429 rate_limitedMais de 600 chamadas por minuto com este token; Retry-After diz quando.

As mesmas chamadas dentro de um script

Num script, waiso.api não precisa de token nem de endereço: age como quem iniciou a execução (o dono do projeto em agendamentos e endpoints), e uma chamada que não diz o projeto age no do próprio script.

main.py
import waiso

def main():
    failed = waiso.api.runs.list(status="failed", limit=20)["items"]
    for run in failed:
        waiso.api.runs.cancel(run["id"]) if run["status"] == "running" else None
    return {"failed": len(failed)}