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:
- Build the AI that answers the business WhatsApp from an interview with the owner, then test its replies (
agente_criar,agente_testar). - Read recent WhatsApp conversations and a full conversation history (
conversas_listar,conversa_ler). - Teach or fix what the AI knows: knowledge base entries and products (
cerebro_*,produto_salvar). - Run the calendar: list, book, reschedule, confirm, cancel and block time (
agenda_*). The customer is not notified by the API. - Work the CRM pipeline, contacts and tasks (
crm_*), and read phone calls with transcripts (ligacoes_listar,ligacao_ler). - Keep business records: stock, cash book, monthly result, orders and payment requests (
erp_*,pedido*,cobranca*). - Prepare ads: generate a campaign kit, publish it paused, read results, pause it or change its budget (
anuncio*). - Draft and publish replies to Google reviews (
google_*). Partners manage their client accounts withconta.
Not a fit
- Sending messages to customers: no tool sends WhatsApp, email or SMS to a customer.
- Turning on ad spend: campaigns are always created paused and there is no tool that activates one.
- Connecting the WhatsApp number or paying: the owner does that in the app.
- Bulk or cold messaging of any kind.
Get started in three steps
- Create an account. It starts with 7 days free, no card: https://certuai.com/create-my-agent.
- 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. - Call the API with
Authorization: Bearer <key>. Start withGET /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
- 60 requests per minute per key (headers
X-RateLimit-LimitandX-RateLimit-Remaining; a 429 carriesRetry-After). - 5 active keys and 2,000 tool calls per day per account, across all keys. Request body up to 1 MB.
- Every action still follows the account plan and credits. Read
GET /contafirst so you do not promise something the plan does not include. - Errors are JSON with the HTTP status. Rely on the
errorcode; themessagetext explains it.
| Status | error | Meaning |
|---|---|---|
| 400 | parametros_invalidos, json_invalido | Invalid parameters or body. detalhes lists each problem. |
| 401 | chave_invalida, chave_na_url | Key missing, invalid, expired or revoked, or sent in the URL. |
| 402 | plano | The account cannot use the API. |
| 403 | escopo_insuficiente, sandbox, conta_sem_acesso | Missing scope, a write the test key cannot run, or no access to that account. |
| 404 | rota_inexistente | Path or record not found. |
| 413 | corpo_grande | Body over 1 MB. |
| 429 | limite, limite_diario | Per-minute key limit or daily account quota. |
| 500 | falha_interna | Failure 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.
| Method | Path | What it does | Tool |
|---|---|---|---|
| account | |||
GET | /conta | Account summary (read) | conta_resumo |
| conversations | |||
GET | /conversas | List conversations (read) | conversas_listar |
GET | /conversas/{contato} | Read a conversation (read) | conversa_ler |
| knowledge-base | |||
GET | /cerebro | List knowledge base entries (read) | cerebro_listar |
POST | /cerebro | Save a knowledge base entry (write) | cerebro_salvar |
POST | /cerebro/apagar | Delete knowledge base entries (write) | cerebro_apagar |
GET | /produtos | List products and services (read) | produtos_listar |
POST | /produtos | Save a product or service (write) | produto_salvar |
| whatsapp-agent | |||
GET | /agente | View the AI settings (read) | agente_ler |
PATCH | /agente | Adjust the AI (write) | agente_ajustar |
POST | /agente/criar | Build the WhatsApp AI (write) | agente_criar |
POST | /agente/testar | Test the WhatsApp AI (write) | agente_testar |
| ads | |||
GET | /anuncios | List campaign kits (read) | anuncios_listar |
GET | /anuncios/opcoes | Ad options (read) | anuncio_opcoes |
POST | /anuncios/gerar | Generate a campaign kit (write) | anuncio_gerar |
GET | /anuncios/campanhas | Campaign 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}/pausar | Pause a campaign (write) | anuncio_pausar |
POST | /anuncios/{campanha_id}/orcamento | Change a campaign's budget (write) | anuncio_orcamento |
POST | /anuncios/{kit_id}/publicar | Publish a paused campaign (write) | anuncio_publicar_pausado |
| website | |||
GET | /site | View the website (read) | site_ler |
POST | /site/criar | Build the website with AI (write) | site_criar |
POST | /site/publicar | Publish the website (write) | site_publicar |
GET | /site/artigos | Website blog articles (read) | site_artigos |
GET | /site/artigos/{slug} | Website blog articles (one article by slug) (read) | site_artigos |
| google-business-profile | |||
GET | /google | Google Business Profile (read) | google_perfil |
GET | /google/avaliacoes | Google reviews (read) | google_avaliacoes |
POST | /google/rascunho | Draft for Google (write) | google_rascunho |
POST | /google/publicar | Publish on Google (write) | google_publicar |
GET | /google/concorrentes | Competitors on Google Maps (read) | google_concorrentes |
| partners | |||
GET | /parceiro/clientes | Partner's clients (read) | parceiro_clientes |
| crm | |||
POST | /crm | Update the CRM (write) | crm_alterar |
GET | /crm/funil | View the sales pipeline (read) | crm_funil |
GET | /crm/contatos | Search contacts (read) | crm_contatos |
GET | /crm/tarefas | View tasks (read) | crm_tarefas |
GET | /retornos | List recall reminders (read) | retornos_listar |
GET | /retornos/roteiros | Recall playbooks (read) | retorno_roteiros |
GET | /retornos/roteiros/{roteiro_id} | Recall playbooks (one sequence by id) (read) | retorno_roteiros |
| calls | |||
GET | /ligacoes | List phone calls (read) | ligacoes_listar |
GET | /ligacoes/{id} | Read a phone call (read) | ligacao_ler |
| business-records | |||
GET | /estoque | View stock (read) | erp_estoque |
POST | /estoque/movimentos | Record a stock movement (write) | erp_estoque_movimentar |
GET | /caixa | View the month's cash book (read) | erp_caixa |
POST | /caixa | Record a cash-book entry (write) | erp_caixa_lancar |
GET | /caixa/resultado | Income statement (read) | erp_resultado |
GET | /pedidos | List orders and work orders (read) | pedidos_listar |
POST | /pedidos | Create an order or work order (write) | pedido_criar |
GET | /pedidos/{id} | Read an order or work order (read) | pedido_ler |
POST | /pedidos/{id}/etapa | Change the stage of an order (write) | pedido_mudar_etapa |
GET | /comissoes | Commissions for the month (read) | comissoes_resumo |
| calendar | |||
GET | /agenda | View the calendar (read) | agenda_listar |
POST | /agenda | Book an appointment (write) | agenda_marcar |
POST | /agenda/bloqueios | Block or unblock time (write) | agenda_bloquear |
DELETE | /agenda/bloqueios/{bloqueio_id} | Block or unblock time (removes a block) (write) | agenda_bloquear |
POST | /agenda/{id}/remarcar | Reschedule an appointment (write) | agenda_remarcar |
POST | /agenda/{id}/confirmar | Confirm a pending appointment (write) | agenda_confirmar |
POST | /agenda/{id}/cancelar | Cancel an appointment (write) | agenda_cancelar |
| payment-requests | |||
GET | /cobrancas | List charges (read) | cobrancas_listar |
POST | /cobrancas | Create a charge (write) | cobranca_criar |
| pets | |||
GET | /pets | List pets (read) | pets_listar |
GET | /pets/vacinas | Upcoming pet vaccines (read) | pet_vacinas_proximas |
GET | /pets/{contato_id}/{pet} | Read a pet's medical record (read) | pet_prontuario_ler |
| real-estate | |||
GET | /imoveis | List properties (read) | imoveis_listar |
GET | /imoveis/{id} | Read a property (read) | imovel_ler |
GET | /imobiliaria/leads | Leads and agent rotation (read) | imob_leads_roleta |
| invoices | |||
GET | /notas | List tax invoices (read) | notas_listar |
GET | /notas/{id} | Status of a tax invoice (read) | nota_status |
| clinic | |||
GET | /clinica/nps | Post-visit survey results (read) | clinica_nps_resumo |