Documentação da API — Atlas da Notícia
Atualizada em 8 jul. 2026 com base no código atual da API (voltdatalab/api-atlasdanoticia, branchcaprover, commitda433d4) e conferência de endpoints em produção (https://api.atlas.jor.br).
Visão geral
A API do Atlas da Notícia é uma API REST versionada. A versão pública principal continua em v1.
- Base da API:
https://api.atlas.jor.br/api/v1 - Formato de retorno: JSON
- Autenticação: JWT no header
Authorization, com esquemaBearere o JWT emitido pela API. - Cadastro de usuário:
https://api.atlas.jor.br/register?ref=atlas.jor.br
Alguns endpoints são públicos, mas a maioria exige JWT. Há também um token “dummy” público para consultas específicas, descrito abaixo.
1. Autenticação
Login
POST https://api.atlas.jor.br/api/v1/auth/login
Content-Type: application/json
{
"email": "seu@email",
"password": "sua senha"
}
Resposta:
{
"access_token": "seu_token",
"token_type": "bearer",
"expires_in": 3600
}
Use o token nas próximas requisições:
Authorization: <Bearer JWT_AQUI>
Renovar token
POST https://api.atlas.jor.br/api/v1/auth/refresh
Authorization: <Bearer JWT_AQUI>
Retorna um novo JSON no mesmo formato do login.
Logout
POST https://api.atlas.jor.br/api/v1/auth/logout
Authorization: <Bearer JWT_AQUI>
Resposta:
{
"message": "Successfully logged out"
}
Token público para consultas online
A API também possui um endpoint público que retorna um JWT de usuário técnico/dummy:
GET https://api.atlas.jor.br/api/v1/auth/dummy-jwt
Esse token permite acessar endpoints liberados para a role dummy, como GET /media/online e os endpoints de dados em /data/*.
2. Filtros e seleção de campos
Os endpoints de dados em /data/* aceitam filtros usando os campos retornados por suas rotas /definitions.
Tipos de filtro
| Tipo | Exemplo | Descrição |
|---|---|---|
| Igualdade | ?estado=SP |
Retorna registros em que o campo é igual ao valor informado. |
Lista / IN |
?estado[]=SP&estado[]=RJ |
Retorna registros em que o campo está em uma lista de valores. |
| Busca parcial | ?cidade[lk]=Paulo |
Equivalente a LIKE '%Paulo%'. |
| Maior ou igual | ?populacao[gt]=100000 |
Retorna valores maiores ou iguais. |
| Menor ou igual | ?populacao[lt]=500000 |
Retorna valores menores ou iguais. |
| Intervalo | ?populacao[gt]=100000&populacao[lt]=500000 |
Combina limites inferior e superior. |
Seleção de campos
Use field[] para limitar os campos retornados:
GET /data/analytic?field[]=id&field[]=nome_veiculo&field[]=estado
Campos não listados por /definitions são ignorados.
3. Endpoints públicos e semipúblicos da v1
| Método | Endpoint | Autenticação | Descrição |
|---|---|---|---|
POST |
/auth/login |
Não | Gera JWT para usuário cadastrado. |
GET |
/auth/dummy-jwt |
Não | Gera JWT técnico/dummy para consultas públicas específicas. |
POST |
/auth/refresh |
Sim | Renova JWT. |
POST |
/auth/logout |
Sim | Invalida JWT. |
GET |
/media/verified |
Não | Lista veículos online verificados com pelo menos 8 critérios de transparência. |
GET |
/media/online |
JWT dummy | Lista veículos do segmento online, sem paginação. Aceita filtro por name. |
GET |
/verification-form |
Não | Lista formulários de verificação, paginado. |
POST |
/verification-form |
Não | Envia formulário de verificação. |
GET |
/verification-form/{mediaId} |
Não | Lista formulários de verificação de um veículo. |
GET |
/verification-form/{mediaId}/last |
Não | Retorna o formulário de verificação mais recente de um veículo online ativo. |
GET |
/cities/all |
JWT | Lista cidades para apoio a formulários. |
GET |
/cities/{stateId}/all |
JWT | Lista cidades de um estado. |
GET |
/states/cities |
JWT | Lista cidades agrupadas/relacionadas a estados. |
GET |
/sponsors/all |
JWT | Lista organizações mantenedoras/sponsors. |
GET |
/segments/all |
JWT | Lista segmentos. |
GET |
/regions/all |
JWT | Lista regiões. |
GET |
/states/all |
JWT | Lista estados. |
GET |
/employees-ranges/all |
JWT | Lista faixas de funcionários. |
GET |
/business-models/all |
JWT | Lista modelos de negócio. |
GET |
/features/all |
JWT | Lista características/features. |
GET |
/collaborators/all |
JWT | Lista colaboradores. |
GET |
/channels/all |
JWT | Lista canais. |
GET |
/media-sources/all |
JWT | Lista fontes de mídia. |
GET |
/suggestion/all?value=termo |
JWT | Busca veículos por nome ou ID para sugestão/edição. |
GET |
/suggestion/{mediaId} |
JWT | Retorna dados de um veículo para sugestão. |
POST |
/suggestion |
JWT | Envia sugestão de novo veículo. |
PUT |
/suggestion/{mediaId} |
JWT | Envia sugestão de atualização de veículo existente. |
4. Endpoints de dados (/data)
Todos os endpoints abaixo exigem JWT. É possível usar o token retornado por /auth/dummy-jwt quando a consulta for pública.
Cada endpoint possui uma rota /definitions, que retorna os campos disponíveis para filtro e seleção.
4.1 Veículos — Atlas Analytic
GET /data/analytic
GET /data/analytic/definitions
Descrição: lista veículos jornalísticos com dados principais e relações como modelos de negócio, características, colaboradores e canais.
Campos disponíveis em produção:
[
"id",
"nome_veiculo",
"media_source_id",
"fonte",
"segment_id",
"segmento",
"city_id",
"cidade",
"cod_mun_ibge",
"state_id",
"estado",
"region_id",
"regiao",
"address",
"annotations",
"email",
"employees_range_id",
"num_funcionarios",
"periodicity",
"another_periodicity",
"eh_jornal",
"eh_site_pago",
"data_fechamento",
"ativo",
"data_inclusao"
]
Exemplo:
GET /data/analytic?estado=SP&field[]=id&field[]=nome_veiculo&field[]=cidade&field[]=estado
Authorization: <Bearer JWT_AQUI>
4.2 Pesquisa — Atlas Analytic Research
GET /data/analytic_research
Descrição: endpoint alternativo de dados analíticos para pesquisa.
Observação: há método no controller para definições (analyticResearchDefs), mas a rota /data/analytic_research/definitions não está registrada no código atual. Em produção, essa rota não deve ser documentada como disponível até ser registrada em routes/api.php.
4.3 Cidades sem veículos
GET /data/cities-without-media
GET /data/cities-without-media/definitions
Campos:
[
"codmun",
"municipio",
"uf",
"regiao",
"populacao",
"ano_populacao",
"IDHM",
"IDHM_R",
"IDHM_E"
]
4.4 IDHM médio por UF e região
GET /data/med-idhm-2010-state-region
GET /data/med-idhm-2010-state-region/definitions
Campos:
[
"estado",
"regiao",
"med_idhm",
"med_idhm_e",
"med_idhm_r",
"populacao",
"qtd_veiculos",
"veiculos_por_100k_hab",
"ano_populacao"
]
4.5 Quantidade de cidades sem veículos por região
GET /data/qtd-cities-without-media-region
GET /data/qtd-cities-without-media-region/definitions
Campos:
[
"estado",
"qtd_cidades",
"qtd_desertos"
]
4.6 Quantidade de cidades sem veículos por estado
GET /data/qtd-cities-without-media-state
GET /data/qtd-cities-without-media-state/definitions
Campos:
[
"estado",
"qtd_cidades",
"qtd_desertos"
]
4.7 Quantidade de cidades sem veículos por estado e região
GET /data/qtd-cities-without-media-state-region
GET /data/qtd-cities-without-media-state-region/definitions
Campos:
[
"estado",
"regiao",
"qtd_desertos"
]
4.8 Quase desertos
GET /data/almost-deserts
GET /data/almost-deserts/definitions
Descrição: municípios com poucos veículos jornalísticos.
Campos:
[
"cidade",
"estado",
"regiao",
"qtd_veiculos",
"codmun_ibge",
"populacao",
"ano_populacao",
"veiculos_por_100k_hab",
"IDHM",
"IDHM_R",
"IDHM_E"
]
4.9 Veículos por 100 mil habitantes
GET /data/medias-100k-hab
GET /data/medias-100k-hab/definitions
Campos:
[
"cidade",
"estado",
"regiao",
"qtd_veiculos",
"codmun_ibge",
"populacao",
"ano_populacao",
"veiculos_por_100k_hab",
"IDHM",
"IDHM_R",
"IDHM_E"
]
5. Veículos online e veículos verificados
Listar veículos online
GET /media/online
Authorization: <Bearer JWT_AQUI>
Aceita filtro opcional por nome:
GET /media/online?name=acre
Authorization: <Bearer JWT_AQUI>
Campos retornados:
[
{
"id": 13960,
"name": "ACRELANDIA NEWS",
"city": "Acrelândia",
"state": "AC"
}
]
Listar veículos verificados
GET /media/verified
Não exige autenticação. Aceita filtro opcional:
GET /media/verified?search=jornal
Retorna veículos com criterios >= 8 a partir da view v_atlas_qtd_criterios_veiculos.
Campos principais observados em produção:
[
{
"id": 1969,
"nome": "JORNAL ATUAL",
"cidade": "Itaguaí",
"estado": "RJ",
"regiao": "Sudeste",
"cod_municipio": "3302007",
"ultima_atualizacao": "2026-04-16 14:46:04",
"criterios": 12,
"expediente": "sim",
"expediente_url": "https://...",
"principiosEditoriais": "sim",
"principiosEditoriais_url": "https://..."
}
]
A resposta completa pode incluir pares de campos para critérios de transparência, como expediente/expediente_url, politicaDeCorrecao/politicaDeCorrecao_url, identificacaoDeAutoria/identificacaoDeAutoria_url, acessibilidade/acessibilidade_url etc.
6. Formulário de verificação
Enviar formulário
POST /verification-form
Content-Type: application/json
Estrutura esperada:
{
"media_id": 123,
"criterios": {
"expediente": {
"resposta": "sim",
"url": "https://exemplo.com/expediente",
"data": "2026-07-08",
"observacoes": ["observação opcional"]
}
}
}
Validações principais:
| Campo | Regra |
|---|---|
media_id |
obrigatório, inteiro |
criterios |
obrigatório |
criterios.*.resposta |
opcional; apenas sim ou não |
criterios.*.url |
opcional; URL válida |
criterios.*.data |
opcional; data válida |
criterios.*.observacoes |
opcional |
Resposta de sucesso:
{
"msg": "Formulário de verificação enviado com sucesso"
}
Último formulário de um veículo
GET /verification-form/{mediaId}/last
Retorna erro 400 se o veículo não estiver ativo ou não for do segmento online. Retorna 404 se não houver formulário para o veículo.
7. Sugestões de veículos
Os endpoints de sugestão exigem JWT.
Buscar veículos para sugestão/edição
GET /suggestion/all?value=termo
Authorization: <Bearer JWT_AQUI>
Retorna veículos cujo nome ou ID combine com o termo pesquisado.
Enviar sugestão de novo veículo
POST /suggestion
Authorization: <Bearer JWT_AQUI>
Content-Type: application/json
Enviar sugestão de atualização
PUT /suggestion/{mediaId}
Authorization: <Bearer JWT_AQUI>
Content-Type: application/json
Campos principais aceitos dentro de media:
| Campo | Tipo/regra |
|---|---|
media.media.text |
obrigatório |
media.segment_id |
obrigatório; deve existir em segments |
media.city_id |
obrigatório |
media.email |
opcional; e-mail válido |
media.periodicity |
opcional; um de continuous, daily, biweekly, triweekly, monfri, weekly, monsat, fortnightly, monthly, bimonthly, trimonthly, undefined, another |
media.another_periodicity |
obrigatório se periodicity=another |
media.paid_site |
opcional; booleano |
media.journalism |
opcional |
media.businessModels |
opcional; array |
media.features |
opcional; array |
media.mediaChannels |
opcional; array |
media.collaborator_id |
opcional; deve existir em collaborators |
media.employees_range_id |
opcional; deve existir em employees_ranges |
media.sponsor.value |
opcional; deve existir em sponsors |
media.initiative_start_year |
opcional; inteiro entre 1800 e 2100 |
media.main_coverage_topic |
opcional; string |
media.other_coverage_topics |
opcional; array |
media.target_audiences |
opcional; array |
media.coverage_scopes |
opcional; array |
media.produces_original_content |
opcional; booleano |
media.primary_platform |
opcional; string |
media.primary_platform_followers |
opcional; inteiro >= 0 |
media.secondary_platform |
opcional; string |
media.secondary_platform_followers |
opcional; inteiro >= 0 |
media.has_responsible_journalist |
opcional; booleano |
media.responsible_journalist_name |
obrigatório se has_responsible_journalist=1 |
media.has_suffered_legal_harassment |
opcional; booleano |
media.has_had_channel_suspended |
opcional; booleano |
media.receives_platform_transfers |
opcional; booleano |
media.accessibility_features |
opcional; array |
media.channel_descriptions |
opcional; array |
media.has_editorial_principles |
opcional; booleano |
media.editorial_principles_link |
obrigatório se has_editorial_principles=1; URL válida |
media.content_typologies |
opcional; array |
Campos principais aceitos dentro de media_form:
| Campo | Regra |
|---|---|
media_form.name |
obrigatório |
media_form.organization |
obrigatório |
media_form.is_closing_alert |
obrigatório |
media_form.closing_date |
obrigatório se is_closing_alert=true; formato YYYY-MM |
Resposta de sucesso:
{
"msg": "Sugestão de mídia enviada com sucesso"
}
8. Observação sobre v2
O código atual também expõe rotas em /api/v2, voltadas principalmente ao painel/admin:
GET /api/v2/auth/meGET /api/v2/dashboard/*- recursos administrativos como
medias,media-forms,states,regions,sponsors,segments,media-sources,employees-ranges,collaborators,cities,features,channels,business-models
Essas rotas exigem JWT e roles específicas (api, admin, regular; algumas apenas admin/regular). Recomenda-se não apresentá-las como API pública geral sem uma documentação separada de painel/admin.
9. Exemplos com curl
Obter token dummy e consultar veículos online
JWT=$(curl -s https://api.atlas.jor.br/api/v1/auth/dummy-jwt | jq -r .access_token)
curl -H "Authorization: Bearer $JWT" \
"https://api.atlas.jor.br/api/v1/media/online?name=acre"
Consultar definições de campos
JWT=$(curl -s https://api.atlas.jor.br/api/v1/auth/dummy-jwt | jq -r .access_token)
curl -H "Authorization: Bearer $JWT" \
"https://api.atlas.jor.br/api/v1/data/analytic/definitions"
Consultar veículos por estado com campos selecionados
JWT=$(curl -s https://api.atlas.jor.br/api/v1/auth/dummy-jwt | jq -r .access_token)
curl -G "https://api.atlas.jor.br/api/v1/data/analytic" \
-H "Authorization: Bearer $JWT" \
--data-urlencode "estado=SP" \
--data-urlencode "field[]=id" \
--data-urlencode "field[]=nome_veiculo" \
--data-urlencode "field[]=cidade" \
--data-urlencode "field[]=estado"
10. Mudanças relevantes em relação à documentação antiga
GET /auth/dummy-jwtexiste e é útil para consultas públicas com token técnico.POST /auth/logoutexiste e deve ser documentado junto de login/refresh.GET /media/onlineexiste, mas exige JWT com roledummy.GET /media/verifiedexiste e não exige autenticação.- Os endpoints de
verification-formestão públicos no código atual. - Os endpoints auxiliares de formulário (
cities/all,segments/all,business-models/alletc.) existem e exigem JWT. GET /data/analytic/definitionsagora inclui campos adicionais comomedia_source_id, IDs relacionais,ativoedata_inclusao./data/analytic_researchestá registrado, mas/data/analytic_research/definitionsnão está registrado.- Há novas validações/campos na sugestão de veículo relacionados a plataforma, audiência, cobertura, responsável jornalístico, acessibilidade e princípios editoriais.