ReferênciaAPI RESTAutenticação da API

REST API

Autenticação da API

Escolha OAuth ou a transferência de um segredo de ambiente com escopo conforme o cliente e a superfície da API.

Duas superfícies autenticadas

O endpoint MCP hospedado e a API REST usam autenticação diferente. Escolha a opção correspondente ao cliente que você está integrando e nunca coloque uma credencial em uma configuração pública ou em uma URL gerada.

  • MCP — OAuth quando o cliente oferecer suporte; caso contrário, Authorization: Bearer ${XMEMO_KEY}.
  • Plano de dados REST — X-API-Key: <your-assigned-api-key> (Authorization: Bearer <token> também é aceito pelo servidor). POST /v1/agents/temporary-register permite registro anônimo sob suas condições de integração e cota diária por IP.
  • Cabeçalhos de identidade servem apenas para atribuição e nunca concedem acesso.

URL base

Defina BASE_URL como a origem da implantação. O produto hospedado usa https://xmemo.dev; o documento OpenAPI versionado também declara http://localhost:8000 para desenvolvimento local e https://api.memory-os.example.com como servidor de exemplo. As chamadas do plano de dados REST usam caminhos /v1.

BASE_URL="${BASE_URL:-https://xmemo.dev}"
curl -sS "$BASE_URL/v1/recall?query=connection%20check&limit=1" \
  -H "X-API-Key: $XMEMO_KEY"

Cabeçalho de autenticação REST

A maioria das solicitações REST leva o cabeçalho de chave da API. Solicitações sem uma credencial válida são rejeitadas antes que qualquer memória seja lida ou gravada; POST /v1/agents/temporary-register é a exceção documentada de registro temporário. Credenciais apresentadas inválidas são rejeitadas.

X-API-Key: <your-assigned-api-key>

Autenticação MCP

Clientes OAuth precisam apenas da URL do servidor hospedado. Clientes dinâmicos não verificados devem solicitar explicitamente os escopos de memória e conhecimento; clientes verificados mantêm o padrão existente quando o escopo é omitido. A concessão fornece apenas os escopos aprovados. Clientes diretos e headless leem o token do ambiente.

{
  "servers": {
    "XMemo": {
      "type": "http",
      "url": "https://xmemo.dev/mcp"
    }
  }
}

Escopos

O servidor avalia os escopos da credencial e o espaço de memória solicitado separadamente. Use memory:read para recall, search, context, list e leituras de projeto; use memory:write para gravações e mutações. Operações de knowledge exigem estritamente knowledge:read e rejeitam tokens com memory:read com 403. Tokens diretos avançados podem usar capacidades mais restritas, como memory:update, memory:delete, memory:restore, memory:redact ou memory:hard_delete. Os aliases REST legados read:memories e write:memories continuam sendo valores de compatibilidade; o escopo nunca amplia a autorização do proprietário, da equipe ou do espaço do token.

  • Leitura: memory:read.
  • Gravação: memory:write; operações de mutação podem exigir uma capacidade mais específica quando o perfil do token oferecer suporte.
  • Knowledge: knowledge:read; estritamente necessário para busca e listagem de knowledge (tokens memory:read retornam 403).
  • Acesso ao projeto/equipe: o proprietário do token ou a equipe vinculada, além da função ativa, também devem autorizar o escopo/team_id solicitado.
  • Cabeçalhos de atribuição e campos source identificam o chamador; não são escopos e não concedem acesso.

Formato de erro

Os caminhos OpenAPI declaram HTTPValidationError para validação da solicitação (422) e deixam sem tipo a maioria dos demais esquemas de resposta. O erro REST padrão continua sendo um objeto JSON com um valor detail. Falhas de autorização reconhecidas também podem ser solicitadas como application/problem+json no estilo RFC 9457; use o campo code no tratamento de máquina, em vez de comparar texto.

{
  "detail": "invalid_token"
}

{
  "type": "urn:xmemo:problem:invalid_token",
  "title": "Invalid access token",
  "status": 401,
  "code": "invalid_token",
  "detail": "The presented access token is missing, expired, revoked, or otherwise invalid."
}

Limites de requisição

O OpenAPI não publica cotas de limite de requisições. O runtime usa uma janela fixa de 60 segundos quando habilitado (habilitado por padrão fora de development/local/test): a categoria do plano de dados permite 600 solicitações por minuto, gravações de memória usam uma política de 180 por minuto e leituras de busca/recall/context usam uma política de 300 por minuto. Os operadores podem substituir esses valores com as variáveis de ambiente MEMORY_OS_RATE_LIMIT_*; não fixe uma cota no cliente.

  • Resposta 429: { detail: Rate limit exceeded, category, policy, limit, window_seconds, retry_after_seconds }.
  • Cabeçalhos 429: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset e X-RateLimit-Policy.
  • Respostas bem-sucedidas também expõem os cabeçalhos X-RateLimit-* de limite, restante, redefinição e política quando o limitador está habilitado.

Origem: Matriz de capacidades do cliente