CertuAI

CertuAI API and MCP

The CertuAI API lets a program or an AI agent operate a CertuAI account: the AI that answers the business WhatsApp, conversations, the knowledge base, CRM, calendar, business records, ads and the Google Business Profile. The same tools answer over REST and over MCP.

REST base
https://certuai.com/api/v1
MCP endpoint
POST https://certuai.com/api/v1/mcp
OpenAPI 3.1
https://certuai.com/openapi.json
Auth
Authorization: Bearer certu_sk_...
Sandbox
Test keys (certu_sk_test_...) read real data and simulate every write
Limits
60/min per key · 5 active keys · 2,000 calls/day per account
Start
7 days free, no card. Create an account · Plans

When to use the CertuAI API

Use it when a person or an agent needs to run a small or medium business that answers customers on WhatsApp:

Not a fit

Get started in three steps

  1. Create an account. It starts with 7 days free, no card: https://certuai.com/create-my-agent.
  2. Create a key in the app, under Settings, Connect to Claude. It starts with certu_sk_ and is shown once. Step-by-step guide: https://certuai.com/claude.
  3. Call the API with Authorization: Bearer <key>. Start with GET /conta, which says what the plan includes.

Authentication

Every request carries the key in the Authorization: Bearer header. A key in the URL is refused (chave_na_url).

The key operates the account that created it. Keys are self-serve: the owner creates and revokes them in the app, with no approval step.

The claude.ai connector signs in with OAuth instead of a key. Discovery: /.well-known/oauth-protected-resource.

Test keys (sandbox) and scopes

A test key (certu_sk_test_...) reads the real account and simulates every write: parameters are validated exactly as in production, and the answer is {"sandbox": true, "simulado": true, ...} with nothing saved, no credits spent and nothing sent. Responses carry the header Certu-Modo: teste.

Test keys and scoped keys are created at POST /api/v1/keys, authenticated by the app sign-in (not by another key). Scopes are area:ler (read) or area:escrever (write, which includes read), plus area:*, *:ler and *. Areas: conta, conversas, cerebro, agente, anuncios, site, agenda, erp, ligacoes, crm, google, parceiro, webhooks, cobrancas, pets, imoveis, fiscal, clinica.

POST https://certuai.com/api/v1/keys
{"nome": "Sandbox integration", "teste": true, "escopos": ["crm:ler", "agenda:escrever"]}

Limits and errors

StatuserrorMeaning
400parametros_invalidos, json_invalidoInvalid parameters or body. detalhes lists each problem.
401chave_invalida, chave_na_urlKey missing, invalid, expired or revoked, or sent in the URL.
402planoThe account cannot use the API.
403escopo_insuficiente, sandbox, conta_sem_acessoMissing scope, a write the test key cannot run, or no access to that account.
404rota_inexistentePath or record not found.
413corpo_grandeBody over 1 MB.
429limite, limite_diarioPer-minute key limit or daily account quota.
500falha_internaFailure on our side. Try again.

MCP server

Endpoint: POST https://certuai.com/api/v1/mcp. Streamable HTTP, stateless, JSON responses only (no SSE); GET answers 405. Protocol versions: 2025-11-25, 2025-06-18, 2025-03-26.

Methods: initialize, ping, tools/list, tools/call. The 65 tools are the same operations as the REST API.

In claude.ai or the Claude app, add a custom connector with the address https://certuai.com/api/v1/mcp and sign in; no key needed. Full guide: https://certuai.com/claude.

Claude Code

claude mcp add --transport http certuai https://certuai.com/api/v1/mcp --header "Authorization: Bearer YOUR_KEY"

Cursor and other MCP clients

{
  "mcpServers": {
    "certuai": {
      "url": "https://certuai.com/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Examples

Account summary: plan, credits and what the plan includes

curl https://certuai.com/api/v1/conta \
  -H "Authorization: Bearer $CERTUAI_KEY"

Confirmed bookings for a week

curl "https://certuai.com/api/v1/agenda?de=2026-10-12&ate=2026-10-18&status=confirmado" \
  -H "Authorization: Bearer $CERTUAI_KEY"

Teach the AI one fact (with a test key, this is simulated and nothing is saved)

curl -X POST https://certuai.com/api/v1/cerebro \
  -H "Authorization: Bearer $CERTUAI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"titulo": "Opening hours", "conteudo": "Monday to Friday, 9am to 6pm."}'

List the MCP tools

curl -X POST https://certuai.com/api/v1/mcp \
  -H "Authorization: Bearer $CERTUAI_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

Acting on another account

A partner, an owner of more than one business or an admin of another account passes conta (query string, or in the body of a POST) to act on that account. GET /parceiro/clientes lists the accounts the key can reach. Without conta, the call acts on the key owner's account.

Webhooks

Outgoing webhooks live at /api/v1/webhooks (scope webhooks:ler / webhooks:escrever) and are part of the enterprise API, enabled per account. Events: mensagem.recebida, conversa.transferida_humano, contato.criado, negocio.criado, ligacao.concluida.

REST endpoints

All paths are relative to https://certuai.com/api/v1. Parameters, request bodies and schemas are in the OpenAPI spec.

MethodPathWhat it doesTool
account
GET/contaAccount summary (read)conta_resumo
conversations
GET/conversasList conversations (read)conversas_listar
GET/conversas/{contato}Read a conversation (read)conversa_ler
knowledge-base
GET/cerebroList knowledge base entries (read)cerebro_listar
POST/cerebroSave a knowledge base entry (write)cerebro_salvar
POST/cerebro/apagarDelete knowledge base entries (write)cerebro_apagar
GET/produtosList products and services (read)produtos_listar
POST/produtosSave a product or service (write)produto_salvar
whatsapp-agent
GET/agenteView the AI settings (read)agente_ler
PATCH/agenteAdjust the AI (write)agente_ajustar
POST/agente/criarBuild the WhatsApp AI (write)agente_criar
POST/agente/testarTest the WhatsApp AI (write)agente_testar
ads
GET/anunciosList campaign kits (read)anuncios_listar
GET/anuncios/opcoesAd options (read)anuncio_opcoes
POST/anuncios/gerarGenerate a campaign kit (write)anuncio_gerar
GET/anuncios/campanhasCampaign results (read)anuncios_campanhas
GET/anuncios/campanhas/{campanha_id}Campaign report (read)anuncio_relatorio
GET/anuncios/{kit_id}List campaign kits (one kit by id) (read)anuncios_listar
POST/anuncios/{campanha_id}/pausarPause a campaign (write)anuncio_pausar
POST/anuncios/{campanha_id}/orcamentoChange a campaign's budget (write)anuncio_orcamento
POST/anuncios/{kit_id}/publicarPublish a paused campaign (write)anuncio_publicar_pausado
website
GET/siteView the website (read)site_ler
POST/site/criarBuild the website with AI (write)site_criar
POST/site/publicarPublish the website (write)site_publicar
GET/site/artigosWebsite blog articles (read)site_artigos
GET/site/artigos/{slug}Website blog articles (one article by slug) (read)site_artigos
google-business-profile
GET/googleGoogle Business Profile (read)google_perfil
GET/google/avaliacoesGoogle reviews (read)google_avaliacoes
POST/google/rascunhoDraft for Google (write)google_rascunho
POST/google/publicarPublish on Google (write)google_publicar
GET/google/concorrentesCompetitors on Google Maps (read)google_concorrentes
partners
GET/parceiro/clientesPartner's clients (read)parceiro_clientes
crm
POST/crmUpdate the CRM (write)crm_alterar
GET/crm/funilView the sales pipeline (read)crm_funil
GET/crm/contatosSearch contacts (read)crm_contatos
GET/crm/tarefasView tasks (read)crm_tarefas
GET/retornosList recall reminders (read)retornos_listar
GET/retornos/roteirosRecall playbooks (read)retorno_roteiros
GET/retornos/roteiros/{roteiro_id}Recall playbooks (one sequence by id) (read)retorno_roteiros
calls
GET/ligacoesList phone calls (read)ligacoes_listar
GET/ligacoes/{id}Read a phone call (read)ligacao_ler
business-records
GET/estoqueView stock (read)erp_estoque
POST/estoque/movimentosRecord a stock movement (write)erp_estoque_movimentar
GET/caixaView the month's cash book (read)erp_caixa
POST/caixaRecord a cash-book entry (write)erp_caixa_lancar
GET/caixa/resultadoIncome statement (read)erp_resultado
GET/pedidosList orders and work orders (read)pedidos_listar
POST/pedidosCreate an order or work order (write)pedido_criar
GET/pedidos/{id}Read an order or work order (read)pedido_ler
POST/pedidos/{id}/etapaChange the stage of an order (write)pedido_mudar_etapa
GET/comissoesCommissions for the month (read)comissoes_resumo
calendar
GET/agendaView the calendar (read)agenda_listar
POST/agendaBook an appointment (write)agenda_marcar
POST/agenda/bloqueiosBlock or unblock time (write)agenda_bloquear
DELETE/agenda/bloqueios/{bloqueio_id}Block or unblock time (removes a block) (write)agenda_bloquear
POST/agenda/{id}/remarcarReschedule an appointment (write)agenda_remarcar
POST/agenda/{id}/confirmarConfirm a pending appointment (write)agenda_confirmar
POST/agenda/{id}/cancelarCancel an appointment (write)agenda_cancelar
payment-requests
GET/cobrancasList charges (read)cobrancas_listar
POST/cobrancasCreate a charge (write)cobranca_criar
pets
GET/petsList pets (read)pets_listar
GET/pets/vacinasUpcoming pet vaccines (read)pet_vacinas_proximas
GET/pets/{contato_id}/{pet}Read a pet's medical record (read)pet_prontuario_ler
real-estate
GET/imoveisList properties (read)imoveis_listar
GET/imoveis/{id}Read a property (read)imovel_ler
GET/imobiliaria/leadsLeads and agent rotation (read)imob_leads_roleta
invoices
GET/notasList tax invoices (read)notas_listar
GET/notas/{id}Status of a tax invoice (read)nota_status
clinic
GET/clinica/npsPost-visit survey results (read)clinica_nps_resumo