# API de jurisprudência do Jurisconsulto

> API REST de jurisprudência brasileira: busca semântica em mais de 42 milhões de decisões do STF, STJ, TST, TNU, CARF, tribunais de justiça, tribunais regionais federais e tribunais regionais do trabalho, com resposta em JSON.

Cada busca recebe uma consulta em linguagem natural, sem operadores booleanos, e devolve na mesma resposta jurisprudências, precedentes vinculantes e legislação relacionada. Cada decisão vem com tribunal, número do processo, órgão julgador, relator, data de julgamento, ementa, trecho citado, score de relevância e link para o inteiro teor no site do tribunal.

A API é usada como etapa de recuperação (RAG) em assistentes jurídicos, como busca de jurisprudência dentro de softwares jurídicos e em levantamentos por tribunal, período, órgão julgador e relator. A contratação é feita com o time do Jurisconsulto: https://www.jurisconsulto.com.br/api.html

Fluxo recomendado:
1. Use `POST /auth/login` para obter `accessToken` e `refreshToken`.

2. Envie `Authorization: Bearer <accessToken>` nos endpoints protegidos.

3. Use `POST /auth/refresh` com o `refreshToken` para renovar a sessão.

4. Use `POST /jurisearch/search` para executar buscas jurídicas.

## Endereços

- Servidor da API: https://juri.onrender.com
- Documentação interativa: https://juri.onrender.com/docs/rest
- Especificação OpenAPI 3.0 em JSON: https://juri.onrender.com/docs/rest/openapi.json
- Página da API de jurisprudência (contratação e exemplos): https://www.jurisconsulto.com.br/api.html
- Suporte: suporte@jurisconsulto.com.br

## Autenticação

- `access-token`: bearer JWT. Use o accessToken retornado por POST /auth/login nos endpoints REST protegidos.
- `refresh-token`: bearer JWT. Use o refreshToken retornado por POST /auth/login ao chamar POST /auth/refresh.

## Endpoints

### POST /auth/login

**Autenticar usuário**

Autentica um usuário com **email** e **senha**.

Retorna **accessToken**, **refreshToken** e um resumo do usuário autenticado.

O backend também valida o domínio do **email** durante o login.

Autenticação: obrigatória (`Authorization: Bearer <token>`).

**Corpo da requisição** (`application/json`, obrigatório): [LogInRequest](#loginrequest)

**Respostas**

- `200`: Autenticação realizada com sucesso e tokens emitidos para uso na API REST. Corpo: [AuthTokens](#authtokens).
- `400`: **email** ou **senha** ausente, ou com tipo inválido.
- `401`: Credenciais inválidas ou usuário sem permissão para autenticar com a conta ou domínio informado.

### POST /auth/refresh

**Renovar sessão REST**

Renova a sessão REST usando o **refreshToken** enviado no header **Authorization**.

Retorna um novo **accessToken**, um novo **refreshToken** e o resumo do usuário autenticado.

Autenticação: obrigatória (`Authorization: Bearer <token>`).

**Respostas**

- `200`: Tokens renovados com sucesso. Corpo: [AuthTokens](#authtokens).
- `400`: Payload do **refreshToken** sem os campos obrigatórios.
- `401`: Header **Authorization** ausente, inválido, ou **refreshToken** não é mais válido.

### GET /tribunais

**Listar tribunais disponíveis para filtro**

Retorna os códigos de tribunais prontos para produção que podem ser enviados em `filtros.tribunais` ao chamar `POST /jurisearch/search`.

Autenticação: obrigatória (`Authorization: Bearer <token>`).

**Respostas**

- `200`: Tribunais disponíveis retornados com sucesso. Corpo: [TribunaisResponse](#tribunaisresponse).
- `401`: Header Authorization ausente ou accessToken inválido.
- `403`: O usuário autenticado não possui assinatura ativa ou acesso à API REST.

### GET /orgaos-julgadores

**Listar órgãos julgadores de um tribunal**

Retorna os órgãos julgadores catalogados para o tribunal informado, com a grafia canônica aceita em `filtros.orgaosJulgadores` ao chamar `POST /jurisearch/search`.

Autenticação: obrigatória (`Authorization: Bearer <token>`).

**Parâmetros de query**

| Nome | Obrigatório | Tipo | Descrição |
| --- | --- | --- | --- |
| `tribunal` | sim | `BACEN` | `CARF` | `CSJT` | `CVM` | `RFB` | `STF` | `STJ` | `TJAC` | `TJAL` | `TJAM` | `TJBA` | `TJCE` | `TJDFT` | `TJES` | `TJGO` | `TJMA` | `TJMG` | `TJMS` | `TJMT` | `TJPB` | `TJPI` | `TJPR` | `TJRJ` | `TJRN` | `TJRR` | `TJRS` | `TJSC` | `TJSE` | `TJSP` | `TJTO` | `TNU` | `TRF2` | `TRF3` | `TRF4` | `TRF6` | `TRT1` | `TRT10` | `TRT11` | `TRT12` | `TRT13` | `TRT14` | `TRT15` | `TRT16` | `TRT17` | `TRT18` | `TRT19` | `TRT2` | `TRT20` | `TRT21` | `TRT22` | `TRT23` | `TRT24` | `TRT3` | `TRT4` | `TRT5` | `TRT6` | `TRT7` | `TRT8` | `TRT9` | `TST` | Código do tribunal, um dos retornados por `GET /tribunais`. |

**Respostas**

- `200`: Órgãos julgadores retornados com sucesso. Corpo: [OrgaosJulgadoresResponse](#orgaosjulgadoresresponse).
- `400`: Parâmetro `tribunal` ausente, repetido, inválido ou indisponível na API.
- `401`: Header Authorization ausente ou accessToken inválido.
- `403`: O usuário autenticado não possui assinatura ativa ou acesso à API REST.
- `429`: Limite de requisições excedido para este endpoint. Tente novamente em instantes.

### GET /relatores

**Listar relatores de um tribunal**

Retorna os relatores catalogados para o tribunal informado, com a grafia exata aceita em `filtros.relatores` ao chamar `POST /jurisearch/search`. Envie `consulta` para restringir a lista aos nomes que contêm o texto informado, sem diferenciar acentos, maiúsculas ou pontuação.

Autenticação: obrigatória (`Authorization: Bearer <token>`).

**Parâmetros de query**

| Nome | Obrigatório | Tipo | Descrição |
| --- | --- | --- | --- |
| `tribunal` | sim | `BACEN` | `CARF` | `CSJT` | `CVM` | `RFB` | `STF` | `STJ` | `TJAC` | `TJAL` | `TJAM` | `TJBA` | `TJCE` | `TJDFT` | `TJES` | `TJGO` | `TJMA` | `TJMG` | `TJMS` | `TJMT` | `TJPB` | `TJPI` | `TJPR` | `TJRJ` | `TJRN` | `TJRR` | `TJRS` | `TJSC` | `TJSE` | `TJSP` | `TJTO` | `TNU` | `TRF2` | `TRF3` | `TRF4` | `TRF6` | `TRT1` | `TRT10` | `TRT11` | `TRT12` | `TRT13` | `TRT14` | `TRT15` | `TRT16` | `TRT17` | `TRT18` | `TRT19` | `TRT2` | `TRT20` | `TRT21` | `TRT22` | `TRT23` | `TRT24` | `TRT3` | `TRT4` | `TRT5` | `TRT6` | `TRT7` | `TRT8` | `TRT9` | `TST` | Código do tribunal, um dos retornados por `GET /tribunais`. |
| `consulta` | não | string | Trecho opcional do nome do relator. Quando omitido ou vazio, retorna a lista completa do tribunal. |

**Respostas**

- `200`: Relatores retornados com sucesso. Corpo: [RelatoresResponse](#relatoresresponse).
- `400`: Parâmetro `tribunal` ausente, repetido, inválido ou indisponível na API, ou `consulta` repetida.
- `401`: Header Authorization ausente ou accessToken inválido.
- `403`: O usuário autenticado não possui assinatura ativa ou acesso à API REST.
- `429`: Limite de requisições excedido para este endpoint. Tente novamente em instantes.

### POST /jurisearch/search

**Buscar jurisprudência, precedentes e legislação**

Executa o fluxo principal de busca REST.

Requer `accessToken` no header `Authorization`.
Body mínimo aceito:
```json
{
  "consulta": "texto da busca"
}
```

É possível enviar filtros opcionais por tribunais e intervalo de datas.

Para limitar ou paginar as jurisprudências, envie `paginacao` com `pagina`, `resultadosPorPagina` e/ou `maxResultados` (todos entre 1 e 100). O teto de 100 corresponde à capacidade de resultados finais do pipeline atual; a busca continua avaliando o pool interno de candidatos para preservar a relevância.

Exemplo com paginação:
```json
{
  "consulta": "responsabilidade civil por erro médico",
  "paginacao": {
    "pagina": 2,
    "resultadosPorPagina": 10,
    "maxResultados": 50
  }
}
```

**Separação por posição:** quando a consulta pede decisões de um lado de uma questão jurídica, a busca identifica a tese em discussão e classifica cada jurisprudência pela ementa, em `posicao`:

- `FAVORAVEL`: o julgado acolhe a tese;
- `DESFAVORAVEL`: o julgado rejeita a tese;
- `SEM_POSICAO_CLARA`: a ementa não deixa clara a posição.

A tese segue o sentido em que a questão costuma ser levada ao tribunal. Em "julgados favoráveis ao dano moral por atraso de voo", a tese é "o atraso de voo gera dano moral" e `posicaoProcurada` vem como `FAVORAVEL`. Em "precedentes que negam dano moral por atraso de voo", a tese é a mesma e `posicaoProcurada` vem como `DESFAVORAVEL`.

As jurisprudências da `posicaoProcurada` vêm primeiro, depois as sem posição clara e por último as da posição oposta; dentro de cada grupo, a ordem é a de relevância. A separação considera todo o pool interno de candidatos antes do corte de `maxResultados`, então os julgados da posição procurada têm prioridade para entrar no resultado. Ela acrescenta alguns segundos ao tempo da busca.

Exemplo de resposta de uma busca com lado (campos resumidos):
```json
{
  "jurisprudencias": [
    { "numeroProcesso": "REsp 1234567", "posicao": "DESFAVORAVEL" },
    { "numeroProcesso": "AgInt no AREsp 7654321", "posicao": "SEM_POSICAO_CLARA" },
    { "numeroProcesso": "REsp 2345678", "posicao": "FAVORAVEL" }
  ],
  "posicaoProcurada": "DESFAVORAVEL"
}
```

Quando a consulta não indica um lado, ou se a separação não puder ser feita, `posicaoProcurada` e `posicao` vêm como `null` e a lista segue só a ordem de relevância. A classificação é automática: confira o acórdão antes de citá-lo.

**Observação sobre score de relevância:** `scoreRelevancia` é um indicador de precisão de acordo com o input (query) do usuário.

**Observação sobre inteiro teor:** *nem todos os documentos disponíveis na plataforma possuem inteiro teor armazenado ou acessível no momento da consulta. Por isso, em alguns casos, o link do inteiro teor pode não ser retornado. Esse comportamento é esperado para parte da base.*

Autenticação: obrigatória (`Authorization: Bearer <token>`).

**Corpo da requisição** (`application/json`, obrigatório): [JurisearchRequest](#jurisearchrequest)

**Respostas**

- `200`: Busca executada com sucesso. Retorna apenas os dados úteis para consumo do cliente. Corpo: [JurisearchResponse](#jurisearchresponse).
- `400`: `consulta` ausente ou inválida, datas de filtro inválidas, ou paginação fora do intervalo permitido.
- `401`: Header Authorization ausente ou accessToken inválido.
- `403`: O usuário autenticado não possui assinatura ativa ou acesso à organização.
- `429`: Limite de requisições excedido para este endpoint. Tente novamente em instantes.

### GET /usage

**Consultar o uso da API**

Retorna o usuário, o plano atual e o histórico paginado de buscas REST. Quando o usuário pertence a uma organização ativa, retorna também o uso combinado da organização, com a quebra por credencial.

Autenticação: obrigatória (`Authorization: Bearer <token>`).

**Parâmetros de query**

| Nome | Obrigatório | Tipo | Descrição |
| --- | --- | --- | --- |
| `pagina` | não | integer | Página do histórico. O padrão é 1. |
| `itensPorPagina` | não | integer | Quantidade de itens por página. O máximo é 100. |
| `dataInicial` | não | string (date-time) | Início opcional do intervalo de uso, em ISO 8601. |
| `dataFinal` | não | string (date-time) | Fim opcional do intervalo de uso, em ISO 8601. |

**Respostas**

- `200`: Informações de uso retornadas com sucesso. Corpo: [RespostaUsoApi](#respostausoapi).
- `400`: Parâmetros de paginação ou datas inválidos.
- `401`: Header Authorization ausente ou accessToken inválido.
- `403`: O usuário autenticado não possui assinatura ativa ou acesso à API REST.

## Esquemas

### LogInRequest

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `email` | string | sim | Email do usuário usado para autenticar na API REST. |
| `password` | string | sim | Senha do usuário. |

### AuthUser

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `id` | string | sim | Identificador único do usuário. |
| `email` | string | sim | Email do usuário autenticado. |

### AuthTokens

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `accessToken` | string | sim | JWT **accessToken** usado nos endpoints REST protegidos. |
| `refreshToken` | string | sim | JWT **refreshToken** usado para renovar a sessão. |
| `user` | [AuthUser](#authuser) | sim | Resumo do usuário autenticado. |

### TribunaisResponse

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `tribunais` | array de `BACEN` | `CARF` | `CSJT` | `CVM` | `RFB` | `STF` | `STJ` | `TJAC` | `TJAL` | `TJAM` | `TJBA` | `TJCE` | `TJDFT` | `TJES` | `TJGO` | `TJMA` | `TJMG` | `TJMS` | `TJMT` | `TJPB` | `TJPI` | `TJPR` | `TJRJ` | `TJRN` | `TJRR` | `TJRS` | `TJSC` | `TJSE` | `TJSP` | `TJTO` | `TNU` | `TRF2` | `TRF3` | `TRF4` | `TRF6` | `TRT1` | `TRT10` | `TRT11` | `TRT12` | `TRT13` | `TRT14` | `TRT15` | `TRT16` | `TRT17` | `TRT18` | `TRT19` | `TRT2` | `TRT20` | `TRT21` | `TRT22` | `TRT23` | `TRT24` | `TRT3` | `TRT4` | `TRT5` | `TRT6` | `TRT7` | `TRT8` | `TRT9` | `TST` | sim | Códigos de tribunais disponíveis para uso em filtros de busca. |
| `nomes` | object | sim | Mapa do código do tribunal para o seu nome completo, contendo exatamente os mesmos tribunais listados em `tribunais`. |

### OrgaosJulgadoresResponse

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `tribunal` | `BACEN` | `CARF` | `CSJT` | `CVM` | `RFB` | `STF` | `STJ` | `TJAC` | `TJAL` | `TJAM` | `TJBA` | `TJCE` | `TJDFT` | `TJES` | `TJGO` | `TJMA` | `TJMG` | `TJMS` | `TJMT` | `TJPB` | `TJPI` | `TJPR` | `TJRJ` | `TJRN` | `TJRR` | `TJRS` | `TJSC` | `TJSE` | `TJSP` | `TJTO` | `TNU` | `TRF2` | `TRF3` | `TRF4` | `TRF6` | `TRT1` | `TRT10` | `TRT11` | `TRT12` | `TRT13` | `TRT14` | `TRT15` | `TRT16` | `TRT17` | `TRT18` | `TRT19` | `TRT2` | `TRT20` | `TRT21` | `TRT22` | `TRT23` | `TRT24` | `TRT3` | `TRT4` | `TRT5` | `TRT6` | `TRT7` | `TRT8` | `TRT9` | `TST` | sim | Código do tribunal consultado. |
| `orgaosJulgadores` | array de string | sim | Órgãos julgadores do tribunal, com os valores canônicos aceitos em `filtros.orgaosJulgadores`. |

### RelatoresResponse

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `tribunal` | `BACEN` | `CARF` | `CSJT` | `CVM` | `RFB` | `STF` | `STJ` | `TJAC` | `TJAL` | `TJAM` | `TJBA` | `TJCE` | `TJDFT` | `TJES` | `TJGO` | `TJMA` | `TJMG` | `TJMS` | `TJMT` | `TJPB` | `TJPI` | `TJPR` | `TJRJ` | `TJRN` | `TJRR` | `TJRS` | `TJSC` | `TJSE` | `TJSP` | `TJTO` | `TNU` | `TRF2` | `TRF3` | `TRF4` | `TRF6` | `TRT1` | `TRT10` | `TRT11` | `TRT12` | `TRT13` | `TRT14` | `TRT15` | `TRT16` | `TRT17` | `TRT18` | `TRT19` | `TRT2` | `TRT20` | `TRT21` | `TRT22` | `TRT23` | `TRT24` | `TRT3` | `TRT4` | `TRT5` | `TRT6` | `TRT7` | `TRT8` | `TRT9` | `TST` | sim | Código do tribunal consultado. |
| `relatores` | array de string | sim | Relatores do tribunal, com os nomes exatos aceitos em `filtros.relatores`. |

### JuriSearchFilters

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `tribunais` | array de `BACEN` | `CARF` | `CSJT` | `CVM` | `RFB` | `STF` | `STJ` | `TJAC` | `TJAL` | `TJAM` | `TJBA` | `TJCE` | `TJDFT` | `TJES` | `TJGO` | `TJMA` | `TJMG` | `TJMS` | `TJMT` | `TJPB` | `TJPI` | `TJPR` | `TJRJ` | `TJRN` | `TJRR` | `TJRS` | `TJSC` | `TJSE` | `TJSP` | `TJTO` | `TNU` | `TRF2` | `TRF3` | `TRF4` | `TRF6` | `TRT1` | `TRT10` | `TRT11` | `TRT12` | `TRT13` | `TRT14` | `TRT15` | `TRT16` | `TRT17` | `TRT18` | `TRT19` | `TRT2` | `TRT20` | `TRT21` | `TRT22` | `TRT23` | `TRT24` | `TRT3` | `TRT4` | `TRT5` | `TRT6` | `TRT7` | `TRT8` | `TRT9` | `TST` | não | Filtro opcional de tribunais. Quando omitido, o backend pode buscar em toda a base ou inferir os tribunais a partir da consulta. |
| `dataInicial` | string (date) | não | Data inicial opcional para filtrar decisões. |
| `dataFinal` | string (date) | não | Data final opcional para filtrar decisões. |
| `orgaosJulgadores` | array de string | não | Filtro de órgãos julgadores (valores canônicos). Consulte os valores aceitos em `GET /orgaos-julgadores`. |
| `relatores` | array de string | não | Filtro de relatores (nomes exatos). Consulte os nomes aceitos em `GET /relatores`. |

### JurisearchPaginationRequest

Configura o recorte de jurisprudências. Quando omitido, a API preserva o comportamento atual: primeira página, até 100 resultados.

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `pagina` | integer | não | Página solicitada, começando em 1. |
| `resultadosPorPagina` | integer | não | Quantidade máxima de jurisprudências por página. |
| `maxResultados` | integer | não | Teto de jurisprudências consideradas para paginação nesta busca. |

### JurisearchRequest

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `consulta` | string | sim | Consulta jurídica principal em texto livre. |
| `filtros` | [JuriSearchFilters](#jurisearchfilters) | não | Filtros opcionais de busca. |
| `paginacao` | [JurisearchPaginationRequest](#jurisearchpaginationrequest) | não | Personalização opcional da quantidade e da página de jurisprudências retornadas. |

### TemaRelacionado

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `numero` | string | sim | Número do tema. |
| `relator` | string | sim | Relator do tema. |
| `titulo` | string | sim | Título do tema. |
| `tese` | string | não | Texto da tese, quando disponível. |
| `processoParadigma` | string | sim | Processo paradigma do tema. |
| `tribunalOrigem` | string | sim | Tribunal de origem do tema. |
| `url` | string | sim | Link oficial do tema. |

### Jurisprudencia

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `scoreRelevancia` | number | não | Indicador de precisão normalizado entre 0 e 1 de acordo com o input (query) do usuário. |
| `tribunal` | `BACEN` | `CARF` | `CSJT` | `CVM` | `RFB` | `STF` | `STJ` | `TJAC` | `TJAL` | `TJAM` | `TJBA` | `TJCE` | `TJDFT` | `TJES` | `TJGO` | `TJMA` | `TJMG` | `TJMS` | `TJMT` | `TJPB` | `TJPI` | `TJPR` | `TJRJ` | `TJRN` | `TJRR` | `TJRS` | `TJSC` | `TJSE` | `TJSP` | `TJTO` | `TNU` | `TRF2` | `TRF3` | `TRF4` | `TRF6` | `TRT1` | `TRT10` | `TRT11` | `TRT12` | `TRT13` | `TRT14` | `TRT15` | `TRT16` | `TRT17` | `TRT18` | `TRT19` | `TRT2` | `TRT20` | `TRT21` | `TRT22` | `TRT23` | `TRT24` | `TRT3` | `TRT4` | `TRT5` | `TRT6` | `TRT7` | `TRT8` | `TRT9` | `TST` | sim |  |
| `nomeTribunal` | string | sim |  |
| `dataPublicacao` | string (date-time) | sim |  |
| `numeroProcesso` | string | sim |  |
| `ementa` | string | sim | Ementa ou resumo da decisão. |
| `relator` | string | não |  |
| `orgaoJulgador` | string | não |  |
| `tipoDecisao` | string | não |  |
| `numeroDecisao` | string | não |  |
| `dataJulgamento` | string (date-time) | não |  |
| `citacao` | string | não | Referência jurisprudencial que identifica o julgado em peças, pareceres e demais documentos jurídicos. |
| `url` | string (uri) | não |  |
| `urlInteiroTeor` | string (uri) | não |  |
| `temasRelacionados` | array de [TemaRelacionado](#temarelacionado) | não |  |
| `posicao` | `FAVORAVEL` | `DESFAVORAVEL` | `SEM_POSICAO_CLARA` | não | Posição do julgado em relação à tese identificada na consulta: `FAVORAVEL` (acolhe a tese), `DESFAVORAVEL` (rejeita a tese) ou `SEM_POSICAO_CLARA`. `null` quando a busca não separou os resultados por posição. |

### PrecedenteVinculante

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `scoreRelevancia` | number | não |  |
| `titulo` | string | sim |  |
| `numero` | integer | sim |  |
| `vinculante` | boolean | sim |  |
| `tribunal` | `BACEN` | `CARF` | `CSJT` | `CVM` | `RFB` | `STF` | `STJ` | `TJAC` | `TJAL` | `TJAM` | `TJBA` | `TJCE` | `TJDFT` | `TJES` | `TJGO` | `TJMA` | `TJMG` | `TJMS` | `TJMT` | `TJPB` | `TJPI` | `TJPR` | `TJRJ` | `TJRN` | `TJRR` | `TJRS` | `TJSC` | `TJSE` | `TJSP` | `TJTO` | `TNU` | `TRF2` | `TRF3` | `TRF4` | `TRF6` | `TRT1` | `TRT10` | `TRT11` | `TRT12` | `TRT13` | `TRT14` | `TRT15` | `TRT16` | `TRT17` | `TRT18` | `TRT19` | `TRT2` | `TRT20` | `TRT21` | `TRT22` | `TRT23` | `TRT24` | `TRT3` | `TRT4` | `TRT5` | `TRT6` | `TRT7` | `TRT8` | `TRT9` | `TST` | sim |  |
| `texto` | string | sim |  |
| `situacao` | `Aprovada` | `Alterada` | `Cancelada` | sim | Situação da súmula no tribunal de origem. `Cancelada` só ocorre no TST, que é coletado com as súmulas canceladas para a consulta mostrar que elas não vigoram mais. |
| `precedentesRelacionados` | array de string | sim |  |

### Legislacao

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `scoreRelevancia` | number | não |  |
| `numeroLei` | string | sim |  |
| `tipoLei` | string | sim |  |
| `nomeLei` | string | não |  |
| `artigo` | string | sim |  |
| `texto` | string | sim |  |

### JurisearchPaginationResponse

`totalResultados` representa os resultados encontrados dentro de `maxResultados`, não uma contagem total da base.

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `pagina` | integer | sim |  |
| `resultadosPorPagina` | integer | sim |  |
| `maxResultados` | integer | sim |  |
| `totalResultados` | integer | sim |  |
| `totalPaginas` | integer | sim |  |

### JurisearchResponse

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `jurisprudencias` | array de [Jurisprudencia](#jurisprudencia) | sim |  |
| `precedentesVinculantes` | array de [PrecedenteVinculante](#precedentevinculante) | sim |  |
| `legislacao` | array de [Legislacao](#legislacao) | sim |  |
| `paginacao` | [JurisearchPaginationResponse](#jurisearchpaginationresponse) | sim |  |
| `posicaoProcurada` | `FAVORAVEL` | `DESFAVORAVEL` | não | Posição que a consulta pede, quando ela indica um lado de uma questão jurídica. As jurisprudências dessa posição vêm primeiro. `null` quando a busca não separou os resultados por posição. |

### UsuarioUsoApi

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `id` | string | sim |  |
| `nome` | string | sim |  |
| `email` | string | sim |  |

### PlanoAtualUsoApi

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `nivel` | `inicial` | `intermediário` | `crescimento` | `escala` | `empresarial` | sim |  |
| `nome` | string | sim |  |
| `limitePorMinuto` | integer | sim |  |
| `totalBuscasIncluidas` | integer | sim |  |
| `personalizado` | boolean | sim |  |
| `limitePadraoPorMinuto` | integer | sim |  |

### EntradaHistoricoUsoApi

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `id` | string | sim |  |
| `consulta` | string | sim |  |
| `tribunais` | array de string | sim |  |
| `quantidadeResultados` | integer | sim |  |
| `criadoEm` | string (date-time) | sim |  |

### PaginacaoUsoApi

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `pagina` | integer | sim |  |
| `itensPorPagina` | integer | sim |  |
| `totalItens` | integer | sim |  |
| `totalPaginas` | integer | sim |  |

### ResumoBuscasUsoApi

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `buscasHoje` | integer | sim |  |
| `buscasSemana` | integer | sim |  |
| `buscasMes` | integer | sim |  |

### CredencialOrganizacaoUsoApi

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `usuarioId` | string | sim |  |
| `email` | string | sim |  |
| `buscasHoje` | integer | sim |  |
| `buscasSemana` | integer | sim |  |
| `buscasMes` | integer | sim |  |

### OrganizacaoUsoApi

Uso combinado das credenciais da organização ativa do usuário. É `null` quando o usuário não pertence a uma organização ativa.

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `id` | string | sim |  |
| `nome` | string | sim |  |
| `resumo` | [ResumoBuscasUsoApi](#resumobuscasusoapi) | sim |  |
| `grafico` | object | sim |  |
| `credenciais` | array de [CredencialOrganizacaoUsoApi](#credencialorganizacaousoapi) | sim |  |

### RespostaUsoApi

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `usuario` | [UsuarioUsoApi](#usuariousoapi) | sim |  |
| `planoAtual` | [PlanoAtualUsoApi](#planoatualusoapi) | sim |  |
| `historico` | array de [EntradaHistoricoUsoApi](#entradahistoricousoapi) | sim |  |
| `paginacao` | [PaginacaoUsoApi](#paginacaousoapi) | sim |  |
| `organizacao` | [OrganizacaoUsoApi](#organizacaousoapi) | sim |  |
