Axuz Developers

GET /accounts/{accountId}/search

Busca full-text ranqueada na conta inteira, usando a coluna gerada `search_tsv` (migration 009) e o índice GIN.

  • Access: Signed in
  • Service: https://mail-api.axuz.net

Accepted authentication

  • sessionCookie — Sessão plena Axuz (cookie de sessão da casa). Sessão restrita é 403 enrollment_required.
  • bearerSession — JWT de acesso da sessão em `Authorization: Bearer`.

Busca full-text ranqueada na conta inteira, usando a coluna gerada search_tsv (migration 009) e o índice GIN.

searchMessages — GET /accounts/{accountId}/search?q=&limit=&offset=.

websearch_to_tsquery e não to_tsquery: o segundo é um parser estrito que LEVANTA ERRO em entrada que não seja uma expressão válida — um usuário digitando contrato & derrubaria a rota em 500. O primeiro aceita qualquer texto, entende a sintaxe que as pessoas já conhecem de buscador ("aspas" para frase, OR, - para excluir) e nunca falha por sintaxe. Numa caixa de entrada, busca que dá erro é pior que busca que não acha nada.

ts_rank_cd (e não ts_rank): leva em conta a proximidade entre os termos, o que importa quando alguém busca duas palavras que espera ver juntas.

Isolamento: o account_id do WHERE vem do path, mas só depois de ownsAccount provar que a conta é do caller — o mesmo gate das outras rotas de mensagem. O predicado no SQL é defense-in-depth: se o gate sumir num refactor, a query ainda não atravessa caixas.

Entradas: accountId no path; q obrigatório; limit (1..200, default 50) e offset (>= 0) opcionais.

Retorno: 200 {items, query, limit, offset}; 400 accountId ou q inválido; 403 conta de outro usuário; 500 erro de banco.

Parameters

NameInTypeRequiredDescription
accountIdpathstringyes

Responses

200

{items, query, limit, offset}

400

AccountId ou q inválido

NameTypeRequiredDescription
errorstringyes

401

Sem credencial valida

NameTypeRequiredDescription
errorstringyes

403

Sem permissao (nao e owner/admin; token sem escopo; token de integracao em rota nao permitida)

NameTypeRequiredDescription
errorstringyes

429

Limite de requisições excedido.

NameTypeRequiredDescription
errorstringyes

500

Erro de banco

NameTypeRequiredDescription
errorstringyes

Examples

"Try it" is turned off in this reference. Use the examples with your test credential.

curl

curl -sS -X GET 'https://mail-api.axuz.net/accounts/ACCOUNT_ID/search' \
  -H "Authorization: Bearer $AXUZ_TOKEN"

Node.js

const res = await fetch("https://mail-api.axuz.net/accounts/ACCOUNT_ID/search", {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.AXUZ_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
console.log(await res.json());

Python

import os
import requests

res = requests.request(
    "GET",
    "https://mail-api.axuz.net/accounts/ACCOUNT_ID/search",
    headers={
        "Authorization": f"Bearer {os.environ['AXUZ_TOKEN']}",
    },
    timeout=30,
)
res.raise_for_status()
print(res.json())