Autenticação¶
O Nodexa usa API keys para autenticar todas as requests. Esta página explica como incluir sua chave nas requests e o que cada escopo permite.
Formato da API Key¶
As API keys do Nodexa usam o prefixo nxk_ seguido de um payload criptografado em base64url:
As chaves são emitidas pelo administrador da sua plataforma Nodexa. São segredos estáticos — trate-as como senhas. Nunca faça commit de API keys no controle de versão nem as exponha em código client-side.
Nunca exponha API keys no client-side
API keys dão acesso às capacidades de IA e aos dados dos usuários da sua plataforma. Use-as sempre a partir de um serviço de backend. Se uma chave for comprometida, fale com seu administrador para revogá-la e emitir uma nova.
Como Passar sua API Key¶
O Nodexa aceita API keys em dois headers HTTP. Ambos são equivalentes — use o que melhor se encaixar no seu fluxo.
Opção 1: header x-api-key (recomendado)¶
curl https://your-admin.example.com/v1/responses \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "model": "YOUR_ASSISTANT_ID", "input": "Hello" }'
Opção 2: header Authorization: Bearer¶
curl https://your-admin.example.com/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "model": "YOUR_ASSISTANT_ID", "input": "Hello" }'
Compatibilidade com o OpenAI SDK
O OpenAI SDK envia a API key como Authorization: Bearer por padrão. Ambos os headers são aceitos, então o SDK funciona sem nenhuma configuração extra.
Escopos de Chave¶
Cada API key é emitida com um ou mais escopos que controlam quais endpoints ela pode acessar.
| Escopo | Endpoints Acessíveis | Caso de Uso Típico |
|---|---|---|
full_access |
Todos os endpoints | Serviços internos, ferramentas de administração |
assistant |
POST /v1/responses |
Integrações de chat, backends de funcionalidades de IA |
user |
/v1/memory/*, /user-claims/* |
Gerenciamento de perfil de usuário, fluxos de opt-out de memória |
Princípio do menor privilégio
Solicite apenas os escopos que sua integração precisa. Uma chave com escopo assistant não pode ler nem escrever user claims, limitando o impacto caso a chave vaze.
Detalhes dos Escopos¶
full_access
Concede acesso irrestrito a todos os endpoints da API. Use apenas para serviços de backend confiáveis que precisam gerenciar tanto dados de conversação quanto dados de usuário.
assistant
Concede acesso apenas ao POST /v1/responses. Este é o escopo certo para um serviço de backend que:
- Envia mensagens do usuário para um assistant
- Recebe respostas com ou sem streaming
- Invoca tools e lida com callbacks
requires_action
user
Concede acesso aos endpoints com escopo de usuário:
GET /user-claims/:userIdGET /user-claims/:userId/:claimKeyPOST /user-claimsPOST /user-claims/bulkDELETE /user-claims/:userId/:claimKeyGET /v1/memoryDELETE /v1/memoryPOST /v1/memory/opt-outDELETE /v1/memory/opt-outDELETE /v1/memory/:itemId
Headers Opcionais¶
Além do header de autenticação, alguns headers opcionais controlam o comportamento em tempo de execução.
x-user-id¶
Um identificador de string para o usuário final que está fazendo a request. Quando fornecido, o assistant usa esse ID para carregar e salvar memória por usuário.
curl https://your-admin.example.com/v1/responses \
-H "x-api-key: YOUR_API_KEY" \
-H "x-user-id: user_abc123" \
-H "Content-Type: application/json" \
-d '{ "model": "YOUR_ASSISTANT_ID", "input": "What did we discuss last time?" }'
Formato do user ID
O valor de x-user-id é uma string opaca do ponto de vista do Nodexa. Use qualquer identificador natural do seu sistema (UUID do banco de dados, e-mail com hash, etc.). Evite usar PII como endereços de e-mail em texto puro como IDs de usuário.
x-user-token¶
Um token de autenticação único do usuário final, encaminhado diretamente para servidores MCP durante chamadas de tools. Isso permite que servidores MCP verifiquem a identidade do usuário de forma independente, sem confiar no Nodexa como intermediário.
O caso de uso mais comum é encaminhar um Firebase ID token para que seu servidor MCP possa chamar verifyIdToken() diretamente:
curl https://your-admin.example.com/v1/responses \
-H "x-api-key: YOUR_API_KEY" \
-H "x-user-token: eyJhbGciOiJSUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{ "model": "YOUR_ASSISTANT_ID", "input": "Mostre meus itens salvos" }'
Como funciona o fluxo:
App mobile (Firebase ID token)
→ Seu backend (verifica o token, encaminha)
→ Nodexa (header x-user-token)
→ Chamada de tool no servidor MCP (x-user-token encaminhado)
→ Firebase Admin verifyIdToken() → uid → operações no Firestore
Seu servidor MCP recebe o token e o verifica:
const decodedToken = await getAuth().verifyIdToken(userToken);
const uid = decodedToken.uid;
// prossiga com operações no Firestore como este usuário
Quando usar x-user-token vs x-user-id
Use x-user-token quando seu servidor MCP precisar verificar independentemente a identidade do usuário (ex: tokens Firebase, Auth0, Supabase). Use x-user-id quando o Nodexa precisar apenas de um identificador de usuário para memória e rastreamento de conversas. Você pode usar ambos juntos.
Tratamento do token
O Nodexa trata o token como uma string opaca — não valida nem decodifica. O token é encaminhado aos servidores MCP exatamente como recebido. A expiração e verificação do token são responsabilidade do servidor MCP.
x-user-tokens¶
Um objeto JSON mapeando identificadores de provedores OAuth para access tokens. Use quando uma tool configurada no assistant precisar de credenciais OAuth de um usuário (por exemplo, acessar o Google Calendar ou o GitHub em nome do usuário).
curl https://your-admin.example.com/v1/responses \
-H "x-api-key: YOUR_API_KEY" \
-H "x-user-id: user_abc123" \
-H "x-user-tokens: {\"google\": \"ya29.a0...\"}" \
-H "Content-Type: application/json" \
-d '{ "model": "YOUR_ASSISTANT_ID", "input": "What meetings do I have tomorrow?" }'
Consulte API Keys — OAuth Token Passthrough para o formato completo.
Erros de Autenticação¶
| Status HTTP | Erro | Significado |
|---|---|---|
401 Unauthorized |
missing_api_key |
Nenhum header de API key foi enviado |
401 Unauthorized |
invalid_api_key |
A chave está malformada ou não foi reconhecida |
403 Forbidden |
insufficient_scope |
A chave não tem o escopo necessário para este endpoint |
Exemplo de corpo de resposta de erro:
{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "The provided API key is invalid or has been revoked."
}
}
Consulte Erros para a referência completa de erros.