A API REST do IAJUS, para o servidor da sua empresa
Busca, decisão completa e dispositivo de legislação por HTTP, para integrar o IAJUS ao
sistema do seu escritório ou da sua empresa. É a mesma chave ik_… do MCP:
não existe segunda credencial.
Uma API proprietária, sob contrato
A API REST e o MCP do IAJUS são proprietários. Eles servem o acervo que o IAJUS coleta direto das fontes oficiais, sem agregador de terceiros, e que organiza e mantém por conta própria. Só respondem a quem tem chave e contrato: não é uma API pública aberta.
- Para quem: clientes corporativos, com condições exclusivas combinadas por contrato, e contas de teste vinculadas a um contrato corporativo.
- Uso do conteúdo: as condições de uso, inclusive o que pode ser feito com o conteúdo devolvido, são as do seu contrato e dos Termos de uso.
- Fonte oficial: decisões e normas voltam com o endereço da fonte oficial,
sempre que disponível (campos
link_completo,link_primarioesource_link). - O que este guia não traz: preços, cotas e valores de limite. Eles fazem parte das condições do contrato.
Uma chave, no cabeçalho Authorization
Se a sua chave já funciona no MCP, ela funciona aqui. Para obter uma, fale com a equipe IAJUS ou com o seu contato no IAJUS.
Authorization: Bearer <sua chave>
- A chave vai só no cabeçalho, nunca na URL, no corpo, em log, em commit ou em chat. Guarde-a em variável de ambiente ou em cofre de segredos e trate-a como uma senha.
- Os exemplos deste guia leem a chave da variável de ambiente
IAJUS_API_KEY: defina-a no seu servidor, nunca em código versionado. Sem ela, ou com um valor inválido, a resposta é 401. - Não envie o cookie de sessão do app junto com a chave: o pedido é recusado com 400.
- A chave precisa do escopo
search:read(o escopo padrão de quem faz buscas) e de direito à API corporativa. - Sem CORS: a API é para o seu servidor, não para o navegador. Toda resposta sai com
Cache-Control: no-store.
Três operações e a especificação
Endereço base: https://app.iajus.com.br/api/v1. O formato é
JSON em UTF-8. Versão do contrato: 1, a mesma do
campo info.version do OpenAPI.
| Método | Caminho | O que faz |
|---|---|---|
POST | /search/{modalidade} | Busca de jurisprudência e legislação |
GET | /decision/{entity_id} | Decisão completa (acórdão) |
GET | /legislacao | Dispositivo de legislação, com a vigência declarada |
GET | /openapi.json | Especificação OpenAPI (sem chave) |
Buscar jurisprudência e legislação
A consulta vai no corpo do pedido, nunca na URL. As
modalidades são hibrida,
semantica,
fts,
regex,
cnj,
jurimetria e
ontologia;
outro valor recebe 404. A hibrida (sinais combinados) é a de uso geral e a
que aceita mais filtros.
Corpo do pedido (JSON)
Qualquer campo que não conste desta lista é recusado com 422.
| Campo | Tipo | Descrição |
|---|---|---|
q | texto | Consulta. Em cnj, o número do processo. |
filtros | objeto | Filtros estruturados (abaixo). |
limit | inteiro | Tamanho da página. Fora da faixa aceita, 422; a faixa está no OpenAPI. |
cursor | texto | Cursor opaco da página seguinte (veja a paginação). |
sort | texto | relevancia (padrão), data ou ano. |
order | texto | desc (padrão) ou asc; vale para data e ano. |
facetas | booleano | false (padrão). Com true, a resposta traz também facetas (contagens por tribunal, ano, tipo e ramo) e, conforme o estado da busca, total_estimado. Os dois são calculados só sobre a janela de resultados já recuperada, não sobre todo o acervo. |
Filtros
Os mais usados em filtros:
tribunal,
ano_de,
ano_ate,
relator,
classe,
orgao_julgador,
data_julgamento_min e
data_julgamento_max (AAAA-MM-DD),
family
(jurisprudencia ou legislacao) e
is_repercussao_geral. A lista completa e os tipos estão no esquema do corpo, no
OpenAPI. Nem toda modalidade aplica todos os filtros: se você envia um filtro que a
modalidade escolhida não aplica, a API recusa com 422 e lista os filtros em
detail.filtros_nao_suportados, em vez de devolver uma lista mais larga do que a
que você pediu.
Exemplo e resposta
curl -s -X POST https://app.iajus.com.br/api/v1/search/hibrida \
-H "Authorization: Bearer $IAJUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q":"repercussão geral em matéria tributária","filtros":{"tribunal":"STF"}}'
Resposta 200, com os campos principais. Um campo opcional que o IAJUS não mediu fica ausente da resposta.
{
"hits": [
{"entity_id": "…", "tribunal": "…", "snippet": "…", "link_completo": "…"}
],
"page_info": {
"next_cursor": "…",
"has_more": true,
"sort": "relevancia",
"order": "desc",
"busca_status": "completa",
"aviso_busca": null
}
}
Leia o estado da busca antes de uma lista vazia
page_info.busca_status diz se a busca terminou. Quando houver
aviso, page_info.aviso_busca o explica em português. Só a busca
completa conta como pesquisa; parcial, incompleta, com
erro ou recusada não contam.
| Valor | Significado |
|---|---|
completa | A busca terminou. Lista vazia quer dizer que o acervo não tem o que você pediu. |
parcial | Parte da busca foi servida. Os resultados são um recorte. |
incompleta | A busca não estabeleceu o conjunto. Lista vazia não é «nenhum resultado»: repita a busca. |
Abrir a decisão completa
GET /decision/{entity_id}. O entity_id vem de
hits[].entity_id da busca. Um identificador acima do tamanho máximo aceito
recebe 422. Uma decisão que não existe, ou que pertence a outra conta, recebe o mesmo 404.
curl -s https://app.iajus.com.br/api/v1/decision/ENTITY_ID_DA_BUSCA \
-H "Authorization: Bearer $IAJUS_API_KEY"
Resposta 200. Campos que a fonte não informa ficam ausentes ou
null, e a API pode acrescentar campos novos sem aviso: ignore os que você não
conhece.
{
"entity_id": "…",
"family": "jurisprudencia",
"tribunal": "…",
"numero_processo": "…",
"relator": "…",
"data_publicacao": "…",
"ementa": "…",
"tese": "…",
"tem_inteiro_teor": true,
"inteiro_teor_text": "…",
"inteiro_teor_url": "…",
"link_primario": "…",
"classificacao": {}
}
Ler um dispositivo de legislação
GET /legislacao, com a vigência que a fonte declara.
| Parâmetro (query) | Obrigatório | Descrição |
|---|---|---|
norma | sim | Código da norma (CC, CP, CF, CLT, CPC…) ou o entity_id da norma. |
dispositivo | não | O artigo: 5, Art. 5º. |
curl -s -G https://app.iajus.com.br/api/v1/legislacao \
-H "Authorization: Bearer $IAJUS_API_KEY" \
--data-urlencode "norma=CC" \
--data-urlencode "dispositivo=Art. 5º"
Resposta 200, com os campos principais: entity_id,
dispositivo_id, dispositivo_label, texto,
anchor, source_link, breadcrumb (hierarquia),
dispositivos (subárvore), version_count e
status_vigencia. O status_vigencia traz a vigência que a fonte
declara (vigente, revogada…); ausente quer dizer «não
apurada», nunca «vigente». Norma ou dispositivo inexistente: 404. Consulta
inválida: 400. Sem o parâmetro norma: 422.
Cursor opaco, sem total
A busca pagina por cursor opaco, sem deslocamento (OFFSET) e sem
contagem total.
- Envie a primeira busca sem
cursor. - Se
page_info.has_morefortrue, repita o mesmo corpo com"cursor": "<page_info.next_cursor>". - Pare quando
has_moreforfalse(next_cursorvemnull).
curl -s -X POST https://app.iajus.com.br/api/v1/search/hibrida \
-H "Authorization: Bearer $IAJUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q":"repercussão geral em matéria tributária","filtros":{"tribunal":"STF"},"cursor":"CURSOR_DA_RESPOSTA_ANTERIOR"}'
O cursor é amarrado à busca: modalidade, q, filtros,
sort, order e limit. Mudar qualquer um deles com o
cursor da busca anterior, ou alterar o cursor, devolve 422; recomece sem
cursor. Não monte nem interprete o cursor.
A janela de resultados que uma busca alcança é limitada. Quando você chega
ao fim dela e pode haver mais no acervo, has_more vem false e o
aviso_busca diz que a janela foi limitada: refine a consulta, com mais filtros,
em vez de esperar outra página.
Um formato de erro só
Todo erro tem o mesmo formato, e nenhum traz conteúdo jurídico nem a chave:
{"detail": {"message": "Texto fixo do motivo."}}.
| Código | Quando | O que fazer |
|---|---|---|
| 400 | Cookie de sessão enviado junto com a chave; ou consulta inválida numa leitura (decisão ou legislação). | Envie só a chave. Corrija a consulta. |
| 401 | Chave ausente, malformada, desconhecida, revogada, vencida, de conta suspensa ou de conta de teste fora da vigência. | A resposta é idêntica para todos esses casos: o servidor não diz qual foi o motivo. Confira a chave; se ela era válida, fale com o seu contato IAJUS. O cabeçalho WWW-Authenticate acompanha a resposta. |
| 403 | A chave é válida, mas a conta não tem direito à API corporativa, ou a chave não tem o escopo search:read. | Fale com o seu contato IAJUS. |
| 404 | Modalidade desconhecida; decisão, norma ou dispositivo não encontrados (ou de outra conta: a resposta é a mesma). | Confira o identificador. |
| 422 | Corpo ou parâmetros fora do contrato; cursor inválido ou de outra busca; filtro que a modalidade não aplica. | Corrija o pedido. O corpo não repete o que você enviou. |
| 429 | Limite por minuto excedido, ou muitas recusas de autenticação seguidas vindas do mesmo IP. | Aguarde o tempo do cabeçalho Retry-After (em segundos) e repita. |
| 503 | A identidade ou o contador de uso não respondeu, ou a busca está indisponível. | Repita depois de alguns instantes, sem trocar a chave: ela não foi recusada. |
- Limite de uso: a API aplica um limite por minuto, contado por usuário titular da chave. Os valores fazem parte do contrato e não são publicados aqui. Pedido recusado por chave inválida (401) ou sem direito ou escopo (403) não gasta o limite. Se o contador de uso não responde, o pedido é recusado com 503, nunca liberado sem contar.
- Espera por IP: muitos 401 seguidos do mesmo IP colocam esse IP em espera por um tempo, mesmo com chave válida. Corrija a chave antes de insistir. O 403 só existe para chave válida e não conta para essa espera.
O mesmo acervo pelo MCP
O IAJUS também é servido por MCP (Model Context Protocol), em HTTP, para aplicativos de IA e agentes. O endereço do servidor é um só.
https://mcp.iajus.com.br/mcp
| Modo | Para quem | Como |
|---|---|---|
| OAuth 2.1 | Aplicativos conectores de IA | O aplicativo abre o login em app.iajus.com.br e você entra com a sua conta IAJUS. Não há chave para copiar. O passo a passo de cada plataforma está em Plataformas. |
| Chave Bearer | Clientes de servidor e agentes próprios | Cabeçalho Authorization: Bearer ik_…, com a mesma chave desta API REST. |
Exemplo: listar as ferramentas
curl -s -X POST https://mcp.iajus.com.br/mcp \
-H "Authorization: Bearer $IAJUS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Resposta 200 com a lista de ferramentas do servidor, em JSON ou como evento SSE. Sem chave, ou com chave inválida, a resposta é 401. A chave vai só no cabeçalho, nunca na URL. Os limites de uso do MCP também fazem parte do contrato e não são publicados aqui.
A especificação é a fonte para gerar clientes
O documento não exige chave, lista só as três rotas desta API, descreve o
corpo de sucesso e o corpo de erro de cada uma e declara o esquema Bearer. Use-o
para gerar clientes e para conferir tipos e faixas de parâmetros. Swagger e ReDoc não são
servidos.
curl -s https://app.iajus.com.br/api/v1/openapi.json
Este guia não cobre preços, cotas e valores de limite (condições do
contrato), a conexão do MCP em cada plataforma (veja
Plataformas) nem o
catálogo completo de filtros por modalidade, que está no esquema SearchIn do
OpenAPI. Especificação:
app.iajus.com.br/api/v1/openapi.json.