Documentação da API Reportei V2
Bem-vindo à documentação completa da API Reportei V2.
Escolha seu caminho
Sou novo na API Reportei
- 1Gere seu token de autenticação
- 2Importe a Postman Collection
- 3Teste com
GET /v2/companies/settings - 4Entenda Paginação e Filtros
- 5Revise Erros e Limites de Requisição
- 6Explore os endpoints por recurso
Já uso a API v1 e quero migrar
- 1Leia o Guia de Migração v1 → v2
- 2Confira o Changelog completo
- 3Importe a Postman Collection v2
- 4Execute endpoints v1 e v2 em paralelo
- 5Migre gradualmente, endpoint a endpoint
Precisa consultar a documentação antiga? API v1 →
Base URL
https://app.reportei.com/api/v2Quick Start
1. Configure seu Token
Gere seu token na seção Autenticação e depois configure a variável abaixo.
export TOKEN="seu-token-aqui"2. Seu primeiro request
curl -H "Authorization: Bearer $TOKEN" \
"https://app.reportei.com/api/v2/companies/settings"3. Listar seus projetos
curl -H "Authorization: Bearer $TOKEN" \
"https://app.reportei.com/api/v2/projects?page=1&per_page=50"4. Criar um relatório
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"https://app.reportei.com/api/v2/reports" \
-d '{
"title": "Relatorio Mensal",
"subtitle": "Janeiro 2025",
"start": "2025-01-01",
"end": "2025-01-31",
"template_id": 1,
"integration_ids": [1, 2],
"project_id": 1
}'Recursos Disponíveis
| Recurso | Endpoints |
|---|---|
| Empresas | GET |
| Projetos | GET |
| Integrações | GET |
| Métricas | GET, POST |
| Templates | GET |
| Relatórios | GET, POST |
| Dashboards | GET, POST |
| Webhooks | GET, POST, PUT, DELETE |
| Eventos da Timeline | GET, POST, PUT, DELETE |
Exemplo: Criar relatório automatizado
// 1. Buscar configuracoes da empresa
const settings = await fetch('/v2/companies/settings', {
headers: { 'Authorization': `Bearer ${TOKEN}` }
});
// 2. Listar projetos
const projects = await fetch('/v2/projects?per_page=100', {
headers: { 'Authorization': `Bearer ${TOKEN}` }
});
const projectId = projects.data[0].id;
// 3. Buscar integracoes do projeto
const integrations = await fetch(`/v2/integrations?project_id=${projectId}`, {
headers: { 'Authorization': `Bearer ${TOKEN}` }
});
const integrationIds = integrations.data.map(i => i.id);
// 4. Listar templates disponiveis
const templates = await fetch('/v2/templates', {
headers: { 'Authorization': `Bearer ${TOKEN}` }
});
const templateId = templates.data[0].id;
// 5. Criar relatorio
const report = await fetch('/v2/reports', {
method: 'POST',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: "Relatorio de Vendas",
subtitle: "Relatorio de Janeiro 2025",
start: "2025-01-01",
end: "2025-01-31",
project_id: projectId,
template_id: templateId,
integration_ids: integrationIds
})
});
console.log(`Relatorio criado: ${report.external_url}`);Autenticação
Todas as requisições da API requerem autenticação através do header Authorization utilizando um Bearer token.
Como gerar seu Token de API
- 1Acesse app.reportei.com
- 2Faça login na sua conta
- 3Navegue até Configurações da Empresa
- 4Acesse a seção "API Reportei"
- 5Clique em Gerar novo token ou copie seu token existente
Importante
Mantenha seu token seguro e nunca o exponha em código do lado do cliente ou repositórios públicos.
Header de Autenticação
Authorization: Bearer {your_token_here}Exemplo de Requisição
curl -X GET "https://app.reportei.com/api/v2/companies/settings" \
-H "Authorization: Bearer seu-token-aqui" \
-H "Content-Type: application/json"Paginação e Filtros
A maioria dos endpoints de listagem são paginados e suportam filtros. Você pode controlar o tamanho da página, ordenação e aplicar filtros.
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| page | integer | 1 | Número da página atual |
| per_page | integer | 15 | Itens por página (máx: 100) |
| sortBy | string | created_at | Campo para ordenação |
| descending | boolean | false | Ordem descendente |
Filtros Específicos por Endpoint
Além dos parâmetros de paginação, cada endpoint pode ter filtros específicos:
Projects
q (busca por nome)Integrations
project_idnameslugReports
project_idcreated_atupdated_atDashboards
project_idcreated_atupdated_atWebhooks
project_idevent_typestatusTimeline Events
project_idreport_iddateExemplo de Filtro Combinado
GET /v2/reports?project_id=123&created_at=2024-01-01&page=1&per_page=50Exemplo de Resposta Paginada
{
"data": [...],
"links": {
"first": "https://app.reportei.com/api/v2/projects?page=1",
"last": "https://app.reportei.com/api/v2/projects?page=10",
"prev": null,
"next": "https://app.reportei.com/api/v2/projects?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 10,
"per_page": 15,
"to": 15,
"total": 142
}
}Tratamento de Erros
Todos os erros retornarão um código de status HTTP junto com uma mensagem descritiva no corpo da resposta.
Unauthorized
Bearer token inválido ou ausente
Forbidden
Acesso ao recurso não permitido
Not Found
O recurso solicitado não foi encontrado
Unprocessable Entity
Dados enviados incorretos ou incompletos
Too Many Requests
Rate limit excedido
Internal Server Error
Algo deu errado do nosso lado
Exemplo de Resposta Bem-sucedida
{
"project": {
"id": 1,
"name": "Projeto 1",
"logo": "logo.png",
"timezone": "America/Sao_Paulo",
"locale": "pt_br",
"date_format": "DD/MM/YYYY",
"decimal_separator_format": "dot_comma"
}
}Exemplo de Erro (404)
{
"message": "O recurso solicitado nao foi encontrado."
}Exemplo de Erro de Validação (422)
{
"message": "Os dados fornecidos sao invalidos.",
"errors": {
"project_id": [
"O campo project_id e obrigatorio."
],
"start_date": [
"O campo start_date deve ser uma data valida.",
"O campo start_date deve ser anterior a end_date."
]
}
}Formatos de Respostas
Todas as respostas da API são retornadas em formato JSON.
Para respostas de listagem (paginadas), consulte a seção Paginação e Filtros.
Resposta de Recurso Único
Em geral, respostas de recurso único retornam um objeto dentro de uma chave com o nome do recurso (ex.: project).
{
"project": {
"id": 1,
"name": "Projeto 1",
"logo": "logo.png",
"timezone": "America/Sao_Paulo",
"locale": "pt_br",
"date_format": "DD/MM/YYYY",
"decimal_separator_format": "dot_comma"
}
}Campos Comuns
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | Identificador único do recurso |
| created_at | string (datetime) | Data de criação (ex.: "2024-09-24 17:07:34") |
| updated_at | string (datetime) | Data da última atualização (ex.: "2024-09-24 17:07:34") |
Limites de Requisição
Para garantir performance e equidade, a API impõe limites de requisição (rate limits). Os limites são aplicados por empresa (company/conta). Existem dois níveis de limite: um limite global por token que se aplica a todos os endpoints, e limites isolados por endpoint para operações específicas.
Limite Global
Todas as requisições à API compartilham um limite global vinculado ao seu token. Todos os endpoints (GET, POST, PUT, DELETE) consomem o mesmo bucket global.
| Tipo de Conta | Limite por Minuto | Limite por Segundo |
|---|---|---|
| Trial | 50 req/min | 4 req/s |
| Paga | 100 req/min | 4 req/s |
Limites Isolados por Endpoint
Alguns endpoints possuem limites próprios (buckets isolados), independentes do limite global. Atingir o limite de um endpoint isolado não afeta os demais.
| Endpoint | Limite | Escopo |
|---|---|---|
POST /v2/metrics/get-data | 100 req/min | Por empresa |
POST /v2/reports | 30 req/dia | Por empresa |
POST /v2/dashboards | 30 req/dia | Por empresa |
Headers de Resposta
Todas as respostas da API incluem headers de rate limit para que você possa monitorar seu consumo programaticamente.
| Header | Quando | Descrição |
|---|---|---|
| X-RateLimit-Limit | Todas as respostas | Número máximo de requisições permitidas na janela atual |
| X-RateLimit-Remaining | Todas as respostas | Número de requisições restantes na janela atual |
| Retry-After | Apenas em 429 | Segundos para aguardar antes de enviar uma nova requisição |
Comportamento ao Receber 429
Ao receber um status 429 (Too Many Requests), não existe bloqueio temporário adicional nem penalidade. Basta aguardar o tempo indicado no header Retry-After e reenviar a requisição. Também não existem limites extras de burst ou concorrência além do rate limit.
// Response Headers
Retry-After: 42
X-RateLimit-Limit: 150
X-RateLimit-Remaining: 0
// Response Body
{
"message": "Too many requests. Try again later."
}Empresas
Na API v2, companies representa a conta/empresa do usuário na plataforma. Não é possível enumerar as companies no Reportei, então este é o único endpoint de company disponível na API.
/v2/companies/settingsRetorna os dados da company atual autenticada.
Exemplo de Resposta JSON
{
"company": {
"id": 1,
"name": "Reportei",
"logo": "1638307862-logo.jpeg",
"type": "agency",
"potential_clients": "11-15",
"company_specialty": "paid traffic"
}
}Copiar como cURL
curl -X GET "https://app.reportei.com/api/v2/companies/settings" \
-H "Authorization: Bearer seu-token-aqui"Projetos
Gerencie projetos (clientes) da sua conta. Projetos são a unidade principal para organizar integrações, relatórios e dashboards.
/v2/projectsLista todos os projetos da empresa com suporte a paginação e filtros.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | integer | Não | Número da página |
| per_page | integer | Não | Itens por página (padrão: 100) |
| sortBy | string | Não | Campo para ordenação |
| descending | boolean | Não | Ordenação descendente |
Exemplo de Resposta JSON
{
"data": [
{
"id": 1,
"name": "Projeto 1",
"logo": "logo.png",
"timezone": "America/Sao_Paulo",
"locale": "pt_br",
"date_format": "DD/MM/YYYY",
"decimal_separator_format": "dot_comma"
},
{
"id": 2,
"name": "Projeto 2",
"logo": "logo.png",
"timezone": "America/Sao_Paulo",
"locale": "pt_br",
"date_format": "DD/MM/YYYY",
"decimal_separator_format": "dot_comma"
}
],
"meta": {
"current_page": 2,
"from": 101,
"last_page": 650,
"path": "https://app.reportei.com/api/v2/projects",
"per_page": 100,
"to": 200,
"total": 9750,
"sortBy": null,
"descending": false
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/projects"/v2/projects/{id}Retorna detalhes de um projeto específico.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do projeto |
Exemplo de Resposta JSON
{
"project": {
"id": 1,
"name": "Projeto 1",
"logo": "logo.png",
"timezone": "America/Sao_Paulo",
"locale": "pt_br",
"date_format": "DD/MM/YYYY",
"decimal_separator_format": "dot_comma"
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/projects/1"Integrações
Na API v2, integrations permitem que você acesse as integrações conectadas aos projetos da sua company. É possível listar todas as integrações ou filtrar por projeto específico.
/v2/integrationsLista todas as integrações de todos os projetos de uma company. Use project_id para filtrar por projeto específico.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| project_id | integer | Não | Filtrar por projeto específico |
| name | string | Não | Filtrar pelo nome da integração |
| slug | string | Não | Filtrar pelo tipo de integração (facebook_ads, google_analytics_4, etc) |
| page | integer | Não | Número da página |
| per_page | integer | Não | Itens por página (máx: 100) |
| sortBy | string | Não | Campo para ordenação |
| descending | boolean | Não | Ordem descendente |
Exemplo de Resposta JSON
{
"data": [
{
"id": 1,
"name": "Reportei International",
"slug": "facebook_ads",
"status": "active",
"project_id": 1,
"project_name": "Cliente Teste",
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
},
{
"id": 2,
"name": "Reportei Brasil",
"slug": "google_analytics_4",
"status": "active",
"project_id": 1,
"project_name": "Cliente Teste",
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
],
"meta": {
"current_page": 2,
"from": 101,
"last_page": 650,
"path": "https://app.reportei.com/api/v2/integrations",
"per_page": 100,
"to": 200,
"total": 9750,
"sortBy": null,
"descending": false
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/integrations?per_page=100&page=2&project_id=1"/v2/integrations/{id}Retorna os detalhes de uma integração específica a partir do id.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID da integração |
Exemplo de Resposta JSON
{
"integration": {
"id": 1,
"name": "Reportei International",
"slug": "facebook_ads",
"status": "active",
"project_id": 1,
"project_name": "Cliente Teste",
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/integrations/1"Métricas
Colete dados e métricas das integrações conectadas. Este é o endpoint principal para obter dados de performance.
/v2/metricsLista todas as métricas disponíveis para uma integração específica. O parâmetro integration_slug é obrigatório para filtrar o resultado a apenas uma integração.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| integration_slug | string | Sim | Slug da integração (ex: facebook_ads, google_analytics) |
| page | integer | Não | Número da página |
| per_page | integer | Não | Itens por página (padrão: 100) |
Exemplo de Resposta JSON
{
"data": [
{
"id": "1d59ec11-9288-4949-8e3a-d3f2c8415f211",
"reference_key": "fb_ads:spend",
"component": "number_v1",
"metrics": ["spend"],
"type": ["spend"]
},
{
"id": "2a48bc22-1234-5678-9abc-def012345678",
"reference_key": "fb_ads:impressions",
"component": "number_v1",
"metrics": ["impressions"],
"type": ["impressions"]
}
],
"meta": {
"current_page": 2,
"from": 101,
"last_page": 5,
"path": "http://api.reportei.com/v2/metrics",
"per_page": 100,
"to": 200,
"total": 450,
"sortBy": null,
"descending": false
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/metrics?per_page=100&page=2&integration_slug=facebook_ads"/v2/metrics/get-dataRetorna os dados de todas as métricas requisitadas de uma integração de um projeto para um período específico.
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| start | string | Sim | Data de início do período (YYYY-MM-DD) |
| end | string | Sim | Data de fim do período (YYYY-MM-DD) |
| integration_id | integer | Sim | ID da integração |
| metrics | array | Sim | Array de métricas a serem consultadas |
| comparison_start | string | Não | Data de início do período de comparação (YYYY-MM-DD) |
| comparison_end | string | Não | Data de fim do período de comparação (YYYY-MM-DD) |
Exemplo de Requisição JSON
{
"start": "2025-02-01",
"end": "2025-02-28",
"comparison_start": "2025-01-01",
"comparison_end": "2025-01-31",
"integration_id": 1,
"metrics": [
{
"id": "1d59ec11-9288-4949-8e3a-d3f2c8415f211",
"reference_key": "fb_ads:spend",
"component": "number_v1",
"metrics": ["spend"],
"type": ["spend"]
},
{
"id": "2a48bc22-1234-5678-9abc-def012345678",
"reference_key": "fb_ads:impressions",
"component": "number_v1",
"metrics": ["impressions"],
"type": ["impressions"]
}
]
}Exemplo de Resposta JSON
{
"data": {
"1d59ec11-9288-4949-8e3a-d3f2c8415f211": {
"values": 6995,
"comparison": {
"values": 6948,
"difference": 0.67645365572827,
"absoluteDifference": 47
}
},
"2a48bc22-1234-5678-9abc-def012345678": {
"values": 125000,
"comparison": {
"values": 118500,
"difference": 5.48523206751055,
"absoluteDifference": 6500
}
}
}
}Copiar como cURL
curl -s -X POST -H "Authorization: Bearer seu-token-aqui" -H "Content-Type: application/json" \
-d '{"start":"2025-02-01","end":"2025-02-28","comparison_start":"2025-01-01","comparison_end":"2025-01-31","integration_id":1,"metrics":[{"id":"1d59ec11-9288-4949-8e3a-d3f2c8415f211","reference_key":"fb_ads:spend","component":"number_v1","metrics":["spend"],"type":["spend","ads-cost_per_conversion"]}]}' \
https://app.reportei.com/api/v2/metrics/get-dataTemplates
Gerencie templates de relatórios reutilizáveis.
/v2/templatesLista todos os templates disponíveis na empresa.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | integer | Não | Número da página |
| per_page | integer | Não | Itens por página |
Exemplo de Resposta JSON
{
"data": [
{
"id": 1,
"title": "Template: Relatório Completo",
"description": "Template padrão com todas as métricas",
"used_count": 1513970,
"created_at": "2024-01-20T16:23:24.000000Z",
"updated_at": "2024-04-19T21:16:29.000000Z"
},
{
"id": 2,
"title": "Template: Redes Sociais",
"description": "Focado em métricas de redes sociais",
"used_count": 45230,
"created_at": "2024-02-15T10:00:00.000000Z",
"updated_at": "2024-05-20T14:30:00.000000Z"
}
],
"meta": {
"current_page": 1,
"total": 15
}
}Copiar como cURL
curl -X GET "https://app.reportei.com/api/v2/templates" \
-H "Authorization: Bearer seu-token-aqui"/v2/templates/{id}Retorna detalhes de um template específico.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do template |
Exemplo de Resposta JSON
{
"template": {
"id": 1,
"title": "Template: Relatório Completo",
"description": "Template padrão com todas as métricas",
"sections": [
{
"id": 1,
"title": "Visão Geral",
"widgets": ["sessions", "users", "pageviews"]
},
{
"id": 2,
"title": "Redes Sociais",
"widgets": ["followers", "engagement", "reach"]
}
],
"used_count": 1513970
}
}Copiar como cURL
curl -X GET "https://app.reportei.com/api/v2/templates/1" \
-H "Authorization: Bearer seu-token-aqui"Relatórios
Na API v2, reports permitem que você acesse e crie relatórios da sua company. É possível listar, filtrar por projeto e criar novos reports.
/v2/reportsLista todos os relatórios com suporte a filtros por projeto e datas.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| project_id | integer | Não | Filtrar por projeto específico (client_id) |
| created_at | string | Não | Filtrar por data de criação (YYYY-MM-DD) |
| updated_at | string | Não | Filtrar por data de atualização (YYYY-MM-DD) |
| page | integer | Não | Número da página |
| per_page | integer | Não | Itens por página (padrão: 100) |
| sortBy | string | Não | Campo para ordenação |
| descending | boolean | Não | Ordenação descendente |
Exemplo de Resposta JSON
{
"data": [
{
"id": 1,
"title": "Test title",
"subtitle": "Subtitle test",
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"comparison_start_date": "2024-01-01",
"comparison_end_date": "2024-01-31",
"template_id": 1,
"client_id": 1,
"views": 0,
"created_at": "2025-01-01T00:00:00",
"internal_url": "https://internal.example",
"external_url": "https://external.example"
}
],
"meta": {
"current_page": 2,
"from": 101,
"last_page": 650,
"path": "https://app.reportei.com/api/v2/reports",
"per_page": 100,
"to": 200,
"total": 9750,
"sortBy": null,
"descending": false
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/reports?per_page=100&page=2&project_id=1"/v2/reports/{id}Retorna os detalhes de um relatório específico a partir do id.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do relatório |
Exemplo de Resposta JSON
{
"report": {
"id": 1,
"title": "Test title",
"subtitle": "Subtitle test",
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"comparison_start_date": "2024-01-01",
"comparison_end_date": "2024-01-31",
"template_id": 1,
"client_id": 1,
"views": 0,
"created_at": "2025-01-01T00:00:00",
"internal_url": "https://internal.example",
"external_url": "https://external.example"
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/reports/1"/v2/reportsCria um novo relatório. Consulte projects para IDs de projetos, integrations para IDs de integrações e templates para IDs de templates.
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| title | string | Sim | Título do relatório |
| subtitle | string | Sim | Legenda do relatório |
| start | string | Sim | Data de início da análise (YYYY-MM-DD) |
| end | string | Sim | Data de fim da análise (YYYY-MM-DD) |
| template_id | integer | Sim | ID do template |
| integration_ids | array | Sim | Array de IDs das integrações selecionadas |
| project_id | integer | Sim | ID do projeto |
| comparison_start | string | Não | Data de início da comparação (YYYY-MM-DD) |
| comparison_end | string | Não | Data de fim da comparação (YYYY-MM-DD) |
Exemplo de Requisição JSON
{
"title": "Relatório de Vendas",
"subtitle": "Relatório de Vendas de 2025",
"start": "2025-01-01",
"end": "2025-01-31",
"comparison_start": "2024-01-01",
"comparison_end": "2024-01-31",
"project_id": 1,
"template_id": 16,
"integration_ids": [1, 2, 3]
}Exemplo de Resposta JSON
{
"report": {
"id": 2,
"title": "Relatório de Vendas",
"subtitle": "Relatório de Vendas de 2025",
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"comparison_start_date": "2024-01-01",
"comparison_end_date": "2024-01-31",
"template_id": 16,
"views": 0,
"created_at": "2025-01-01T00:00:00",
"internal_url": "https://internal.example",
"external_url": "https://external.example"
}
}Copiar como cURL
curl -s -X POST -H "Authorization: Bearer seu-token-aqui" -H "Content-Type: application/json" \
-d '{"title":"Relatório de Vendas","subtitle":"Relatório de Vendas de 2025","start":"2025-01-01","end":"2025-01-31","comparison_start":"2024-01-01","comparison_end":"2024-01-31","template_id":16,"integration_ids":[1,2,3],"project_id":1}' \
https://app.reportei.com/api/v2/reportsDashboards
Na API v2, dashboards permitem que você acesse e crie dashboards da sua company. É possível listar, filtrar por projeto e criar novos dashboards.
/v2/dashboardsLista todos os dashboards com suporte a filtros por projeto e datas.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| project_id | integer | Não | Filtrar por projeto específico (client_id) |
| created_at | string | Não | Filtrar por data de criação (YYYY-MM-DD) |
| updated_at | string | Não | Filtrar por data de atualização (YYYY-MM-DD) |
| page | integer | Não | Número da página |
| per_page | integer | Não | Itens por página (padrão: 100) |
| sortBy | string | Não | Campo para ordenação |
| descending | boolean | Não | Ordenação descendente |
Exemplo de Resposta JSON
{
"data": [
{
"id": 1,
"title": "Test title",
"subtitle": "Subtitle test",
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"comparison_start_date": "2024-01-01",
"comparison_end_date": "2024-01-31",
"template_id": 1,
"client_id": 1,
"views": 0,
"created_at": "2025-01-01T00:00:00",
"internal_url": "https://internal.example",
"external_url": "https://external.example"
}
],
"meta": {
"current_page": 2,
"from": 101,
"last_page": 650,
"path": "https://app.reportei.com/api/v2/reports",
"per_page": 100,
"to": 200,
"total": 9750,
"sortBy": null,
"descending": false
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/dashboards?per_page=100&page=2&project_id=1"/v2/dashboards/{id}Retorna os detalhes de um dashboard específico a partir do id.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do dashboard |
Exemplo de Resposta JSON
{
"dashboard": {
"id": 1,
"title": "Test title",
"subtitle": "Subtitle test",
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"comparison_start_date": "2024-01-01",
"comparison_end_date": "2024-01-31",
"template_id": 1,
"client_id": 1,
"views": 0,
"created_at": "2025-01-01T00:00:00",
"internal_url": "https://internal.example",
"external_url": "https://external.example"
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/dashboards/1"/v2/dashboardsCria um novo dashboard. Consulte projects para IDs de projetos, integrations para IDs de integrações e templates para IDs de templates.
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| title | string | Sim | Título do dashboard |
| subtitle | string | Sim | Legenda do dashboard |
| start | string | Sim | Data de início da análise (YYYY-MM-DD) |
| end | string | Sim | Data de fim da análise (YYYY-MM-DD) |
| template_id | integer | Sim | ID do template |
| integration_ids | array | Sim | Array de IDs das integrações selecionadas |
| project_id | integer | Sim | ID do projeto |
| comparison_start | string | Não | Data de início da comparação (YYYY-MM-DD) |
| comparison_end | string | Não | Data de fim da comparação (YYYY-MM-DD) |
Exemplo de Requisição JSON
{
"title": "Dashboard de Vendas",
"subtitle": "Dashboard de Vendas de 2025",
"start": "2025-01-01",
"end": "2025-01-31",
"comparison_start": "2024-01-01",
"comparison_end": "2024-01-31",
"project_id": 1,
"template_id": 16,
"integration_ids": [1, 2, 3]
}Exemplo de Resposta JSON
{
"dashboard": {
"id": 2,
"title": "Dashboard de Vendas",
"subtitle": "Dashboard de Vendas de 2025",
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"comparison_start_date": "2024-01-01",
"comparison_end_date": "2024-01-31",
"template_id": 16,
"views": 0,
"created_at": "2025-01-01T00:00:00",
"internal_url": "https://internal.example",
"external_url": "https://external.example"
}
}Copiar como cURL
curl -s -X POST -H "Authorization: Bearer seu-token-aqui" -H "Content-Type: application/json" \
-d '{"title":"Dashboard de Vendas","subtitle":"Dashboard de Vendas de 2025","start":"2025-01-01","end":"2025-01-31","comparison_start":"2024-01-01","comparison_end":"2024-01-31","template_id":16,"integration_ids":[1,2,3],"project_id":1}' \
https://app.reportei.com/api/v2/dashboardsWebhooks
Configure webhooks para receber notificações em tempo real sobre eventos na plataforma.
/v2/webhooksRetorna uma lista paginada de todos os webhooks em que o usuário está inscrito.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| project_id | integer | Não | Filtrar por projeto (client_id) |
| event_type | string | Não | Filtrar por tipo de evento |
| source | string | Não | Filtrar por source (custom, make, zapier, n8n, etc) |
| status | integer | Não | Filtrar por status |
| page | integer | Não | Número da página |
| per_page | integer | Não | Itens por página |
| sortBy | string | Não | Campo para ordenação |
| descending | boolean | Não | Ordenação descendente |
Exemplo de Resposta JSON
{
"data": [
{
"id": 1,
"url": "http://localhost:5678/webhook-test",
"event_type": "report_created",
"source": "custom",
"company_id": 1,
"project_id": 1,
"status": 1,
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
},
{
"id": 2,
"url": "http://localhost:5678/webhook-test-2",
"event_type": "report_created",
"source": "make",
"company_id": 1,
"project_id": null,
"status": 1,
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "http://api.reportei.com/v2/webhooks",
"per_page": 15,
"to": 2,
"total": 2,
"sortBy": null,
"descending": false
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
https://app.reportei.com/api/v2/webhooks/v2/webhooks/eventsRetorna uma lista de todos os eventos de webhook disponíveis na API, independente de subscriptions.
Exemplo de Resposta JSON
{
"events": ["report_viewed", "report_created", "dashboard_created", "automation_executed", "control_goal_met", "control_goal_not_met", "timeline_milestone_added"]
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
https://app.reportei.com/api/v2/webhooks/events/v2/webhooks/{id}Retorna os detalhes de uma inscrição de webhook específica a partir do id.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do webhook |
Exemplo de Resposta JSON
{
"webhook": {
"id": 1,
"url": "http://localhost:5678/webhook-test",
"event_type": "report_created",
"source": "custom",
"company_id": 1,
"project_id": 1,
"status": 1,
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
https://app.reportei.com/api/v2/webhooks/1/v2/webhooksCria uma nova inscrição de webhook para algum evento.
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| url | string | Sim | URL de callback para receber os eventos |
| event_type | string | Sim | Tipo de evento a monitorar |
| project_id | integer | Não | ID do projeto para filtrar eventos de um projeto específico |
Exemplo de Requisição JSON
{
"url": "http://localhost:5678/webhook-test",
"event_type": "report_created",
"project_id": 1
}Exemplo de Resposta JSON
{
"webhook": {
"id": 1,
"url": "http://localhost:5678/webhook-test",
"event_type": "report_created",
"source": "custom",
"company_id": 1,
"project_id": 1,
"status": 1,
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
}Copiar como cURL
curl -s -X POST -H "Authorization: Bearer seu-token-aqui" -H "Content-Type: application/json" \
-d '{"url":"http://localhost:5678/webhook-test","event_type":"report_created","project_id":1}' \
https://app.reportei.com/api/v2/webhooks/v2/webhooks/{id}Atualiza uma inscrição de webhook existente.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do webhook |
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| url | string | Não | URL de callback atualizada |
| event_type | string | Não | Tipo de evento atualizado |
| project_id | integer | Não | ID do projeto (opcional) |
Exemplo de Requisição JSON
{
"url": "http://localhost:5678/webhook-test-updated",
"event_type": "report_created",
"project_id": 1
}Exemplo de Resposta JSON
{
"webhook": {
"id": 1,
"url": "http://localhost:5678/webhook-test-updated",
"event_type": "report_created",
"source": "custom",
"company_id": 1,
"project_id": 1,
"status": 1,
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
}Copiar como cURL
curl -s -X PUT -H "Authorization: Bearer seu-token-aqui" -H "Content-Type: application/json" \
-d '{"url":"http://localhost:5678/webhook-test-updated","event_type":"report_created","project_id":1}' \
https://app.reportei.com/api/v2/webhooks/1/v2/webhooks/{id}Deleta uma inscrição de webhook.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do webhook |
Exemplo de Resposta JSON
{
"success": true,
"message": "Webhook successfully removed"
}Copiar como cURL
curl -s -X DELETE -H "Authorization: Bearer seu-token-aqui" \
https://app.reportei.com/api/v2/webhooks/1Eventos da Timeline
Adicione eventos personalizados à timeline dos relatórios para documentar ações e marcos importantes.
/v2/timeline-eventsLista todos os eventos das timelines de cada projeto em sua company.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| project_id | integer | Não | Filtrar por projeto (client_id) |
| report_id | integer | Não | Filtrar por relatório |
| date | string | Não | Filtrar por data (YYYY-MM-DD) |
| page | integer | Não | Número da página |
| per_page | integer | Não | Itens por página |
| sortBy | string | Não | Campo para ordenação |
| descending | boolean | Não | Ordenação descendente |
Exemplo de Resposta JSON
{
"data": [
{
"id": 1,
"title": "Evento 1",
"content": "<p>Exemplo de conteúdo HTML</p>",
"project_id": 1,
"report_id": 1,
"date": "2025-01-01",
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
},
{
"id": 2,
"title": "Evento 2",
"content": "<p>Exemplo de conteúdo HTML</p>",
"project_id": 1,
"report_id": null,
"date": "2025-01-01",
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://app.reportei.com/api/v2/timeline-events",
"per_page": 15,
"to": 2,
"total": 2,
"sortBy": null,
"descending": false
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/timeline-events"/v2/timeline-events/{id}Retorna os detalhes de um evento da timeline específico a partir do id.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do evento |
Exemplo de Resposta JSON
{
"timeline_event": {
"id": 1,
"title": "Evento 1",
"content": "<p>Exemplo de conteúdo HTML</p>",
"project_id": 1,
"report_id": 1,
"date": "2025-01-01",
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
}Copiar como cURL
curl -s -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/timeline-events/1"/v2/timeline-eventsCria um novo evento na timeline.
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| project_id | integer | Sim | ID do projeto |
| report_id | integer | Não | ID do relatório (opcional) |
| title | string | Sim | Título do evento |
| content | string | Sim | Conteúdo do evento (aceita HTML) |
Exemplo de Requisição JSON
{
"title": "Evento 1",
"content": "<p>Exemplo de conteúdo HTML</p>",
"report_id": 1,
"project_id": 1
}Exemplo de Resposta JSON
{
"timeline_event": {
"id": 1,
"title": "Evento 1",
"content": "<p>Exemplo de conteúdo HTML</p>",
"project_id": 1,
"report_id": 1,
"date": "2025-01-01",
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
}Copiar como cURL
curl -s -X POST -H "Authorization: Bearer seu-token-aqui" \
-H "Content-Type: application/json" \
-d '{"title":"Evento 1","content":"<p>Exemplo de conteúdo HTML</p>","report_id":1,"project_id":1}' \
"https://app.reportei.com/api/v2/timeline-events"/v2/timeline-events/{id}Atualiza um evento da timeline existente.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do evento |
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| project_id | integer | Sim | ID do projeto |
| report_id | integer | Não | ID do relatório (opcional) |
| title | string | Sim | Título do evento |
| content | string | Sim | Conteúdo do evento (aceita HTML) |
Exemplo de Requisição JSON
{
"title": "Evento 1 atualizado",
"content": "<p>Exemplo de conteúdo HTML atualizado</p>",
"report_id": 1,
"project_id": 1
}Exemplo de Resposta JSON
{
"timeline_event": {
"id": 1,
"title": "Evento 1 atualizado",
"content": "<p>Exemplo de conteúdo HTML atualizado</p>",
"project_id": 1,
"report_id": 1,
"date": "2025-01-01",
"created_at": "2025-01-01T00:00:00",
"updated_at": "2025-01-01T00:00:00"
}
}Copiar como cURL
curl -s -X PUT -H "Authorization: Bearer seu-token-aqui" \
-H "Content-Type: application/json" \
-d '{"title":"Evento 1 atualizado","content":"<p>Exemplo de conteúdo HTML atualizado</p>","report_id":1,"project_id":1}' \
"https://app.reportei.com/api/v2/timeline-events/1"/v2/timeline-events/{id}Remove um evento da timeline.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do evento |
Exemplo de Resposta JSON
{
"success": true,
"message": "Evento da timeline removido com sucesso"
}Copiar como cURL
curl -s -X DELETE -H "Authorization: Bearer seu-token-aqui" \
"https://app.reportei.com/api/v2/timeline-events/1"Como Coletar Métricas
Existem duas formas principais de obter métricas: copiando o payload diretamente de um relatório existente ou construindo a consulta via API.
Opção A: Copiar payload de um relatório
A forma mais rápida de obter métricas é copiando o payload de um relatório ou dashboard existente no Reportei.
Importante: ao copiar o payload, mantenha a opção "Formato para o connect" desmarcada.
Copiar payload de uma rede completa
Passe o mouse em cima da rede desejada e clique no botão "Copiar payload" para obter todas as métricas.

Copiar payload de uma métrica específica
Passe o mouse em cima do widget desejado e clique em "Gerar consulta de widget" para obter apenas aquela métrica.

Exemplo: Payload de uma rede completa
Payload copiado ao clicar em "Copiar payload" sobre uma rede inteira. Contém todas as métricas daquela integração.
{
"start": "2025-01-01",
"end": "2025-01-31",
"comparison_start": "2024-01-01",
"comparison_end": "2024-01-31",
"integration_id": 123,
"metrics": [
{
"id": "1d59ec11-9288-4949-8e3a-d3f2c8415f211",
"reference_key": "fb_ads:spend",
"component": "number_v1",
"metrics": ["spend"],
"type": ["spend"]
},
{
"id": "2a48bc22-1234-5678-9abc-def012345678",
"reference_key": "fb_ads:reach",
"component": "number_v1",
"metrics": ["reach"],
"type": ["reach"]
},
{
"id": "3b59cd33-2345-6789-0def-123456789abc",
"reference_key": "fb_ads:impressions",
"component": "number_v1",
"metrics": ["impressions"],
"type": ["impressions"]
}
]
}Exemplo: Payload de uma métrica individual
Payload copiado ao clicar em "Copiar payload" sobre um widget específico.
{
"start": "2025-01-01",
"end": "2025-01-31",
"comparison_start": "2024-01-01",
"comparison_end": "2024-01-31",
"integration_id": 123,
"metrics": [
{
"id": "1d59ec11-9288-4949-8e3a-d3f2c8415f211",
"reference_key": "fb_ads:page_follows",
"component": "number_v1",
"metrics": ["page_follows"]
}
]
}Opção B: Construir consulta via API
Para automações e integrações, você pode construir a consulta de métricas do zero via API.
Descobrir o project_id
Liste os projetos para encontrar o ID do projeto desejado.
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://app.reportei.com/api/v2/projects?q=Cliente ABC"Resultado: o project_id é 456
Descobrir o integration_id e slug
Liste as integrações do projeto para obter o ID e slug da integração.
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://app.reportei.com/api/v2/integrations?project_id=456&slug=facebook_ads"Resultado: o integration_id é 789 e o slug é facebook_ads
Listar métricas disponíveis
Descubra quais métricas estão disponíveis para a integração.
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://app.reportei.com/api/v2/metrics?integration_slug=facebook_ads&per_page=100"Resultado: lista de métricas disponíveis com IDs e estrutura
Consultar dados das métricas
Envie a requisição com as métricas desejadas e o período.
curl -s -X POST -H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"start": "2025-01-01",
"end": "2025-01-31",
"comparison_start": "2024-12-01",
"comparison_end": "2024-12-31",
"integration_id": 789,
"metrics": [
{
"id": "a1b2c3d4-1234-5678-9abc-def012345678",
"reference_key": "fb_ads:spend",
"component": "number_v1",
"metrics": ["spend"],
"type": "spend"
},
{
"id": "b2c3d4e5-2345-6789-0abc-ef0123456789",
"reference_key": "fb_ads:reach",
"component": "number_v1",
"metrics": ["reach"],
"type": "reach"
}
]
}' \
"https://app.reportei.com/api/v2/metrics/get-data"Resultado: dados das métricas com valores do período e comparação
| Etapa | Endpoint |
|---|---|
| 1 | GET /v2/projects?q={nome} |
| 2 | GET /v2/integrations?project_id={id} |
| 3 | GET /v2/metrics?integration_slug={slug} |
| 4 | POST /v2/metrics/get-data |
Dica de Performance
O endpoint de métricas tem rate limit de 100 requisições por minuto. Para coletar muitas métricas, agrupe widgets na mesma requisição.
Casos de Uso
Exemplos práticos de uso da API Reportei v2, com fluxos completos passo a passo.
Obter valores de métricas de um relatório
Copie o payload diretamente de um relatório ou dashboard existente no Reportei e envie para POST /v2/metrics/get-data. Existem duas opções:
Opção A: Rede completa
Copie o payload de uma rede inteira para obter todas as métricas daquela integração.
Opção B: Métrica individual
Copie o payload de um widget específico para obter apenas aquela métrica.
Veja exemplos completos com payloads e respostas na seção Como Coletar Métricas acima.
Construir consulta de métricas via API
Construa uma consulta de métricas do zero via API, sem precisar copiar payload de um relatório existente. Útil para automações e integrações.
| Etapa | Endpoint |
|---|---|
| 1 | GET /v2/projects?q={nome} |
| 2 | GET /v2/integrations?project_id={id}&slug={tipo} |
| 3 | GET /v2/metrics?integration_slug={slug} |
| 4 | POST /v2/metrics/get-data |
Veja o fluxo completo com requisições e respostas de cada etapa na seção Como Coletar Métricas > Opção B acima.
Criar evento na Linha do Tempo
Registre eventos importantes (campanhas, lançamentos, mudanças) que serão visualizados nos relatórios. O campo content aceita HTML.
Etapa 1: Descobrir o project_id
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://app.reportei.com/api/v2/projects?q=Cliente ABC"Etapa 2 (opcional): Descobrir o report_id para vincular
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://app.reportei.com/api/v2/reports?project_id=456&per_page=5"Exemplo A: Criar evento SEM vincular a relatório
curl -s -X POST -H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Lancamento Campanha Black Friday",
"content": "<p>Nova campanha de <strong>Black Friday 2024</strong> lancada!</p><ul><li>Budget: R$ 50.000</li><li>Duracao: 15 dias</li><li>Redes: Facebook Ads + Google Ads</li></ul>",
"project_id": 456,
"date": "2024-11-15"
}' \
"https://app.reportei.com/api/v2/timeline-events"Exemplo B: Criar evento vinculado a um relatório
curl -s -X POST -H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Lancamento Campanha Black Friday",
"content": "<p>Nova campanha de <strong>Black Friday 2024</strong> lancada!</p><ul><li>Budget: R$ 50.000</li><li>Duracao: 15 dias</li><li>Redes: Facebook Ads + Google Ads</li></ul>",
"project_id": 456,
"report_id": 1234,
"date": "2024-11-15"
}' \
"https://app.reportei.com/api/v2/timeline-events"Operações adicionais com eventos
# Atualizar evento
curl -s -X PUT -H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Campanha Black Friday - ATUALIZADO","content":"<p>Campanha encerrada com sucesso!</p>","project_id":456,"date":"2024-11-15"}' \
"https://app.reportei.com/api/v2/timeline-events/789"
# Deletar evento
curl -s -X DELETE -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://app.reportei.com/api/v2/timeline-events/789"
# Listar eventos de um projeto
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://app.reportei.com/api/v2/timeline-events?project_id=456"Dicas: Use HTML no conteudo para formatacao rica. Use a data real do evento (lancamento, mudanca), nao a data de criacao do registro. Vincule a relatorios quando o evento for relevante ao periodo.
Migração v1 → v2
Guia completo para migrar seus sistemas da API v1 para a v2.
Base URL v1
https://app.reportei.com/api/v1Base URL v2 (atual)
https://app.reportei.com/api/v2A API v1 está em Maintenance Mode
A v1 continuará funcionando, mas apenas receberá correções de segurança e bugs críticos. Novos recursos e melhorias serão desenvolvidos exclusivamente na v2.
Checklist de Migração
- 1Atualizar base URL /v1 → /v2
- 2Renomear recursos: clients → projects
- 3Atualizar rotas nested para query params
- 4Ajustar paginação/ordenação em endpoints de listagem
- 5Revisar mudanças de contrato (tipos, campos obrigatórios, novos endpoints)
- 6Migrar widgets para API de métricas
- 7Migrar webhooks para novo CRUD
- 8Remover dependências de endpoints deprecated em v1
Mudanças de Nomenclatura
A v2 adota nomenclatura mais alinhada com a interface do Reportei. O principal destaque é a mudança de clients para projects.
| v1 | v2 | Nota |
|---|---|---|
| GET /v1/clients | GET /v2/projects | Lista projetos |
| GET /v1/clients/{id} | GET /v2/projects/{id} | Detalhes do projeto |
| GET /v1/clients/{id}/reports | GET /v2/reports?project_id={id} | Filtro via query param |
| GET /v1/clients/{id}/integrations | GET /v2/integrations?project_id={id} | Filtro via query param |
| GET /v1/me | GET /v2/companies/settings | Rota renomeada |
Exemplo de Migração
const clients = await fetch('/v1/clients', { headers: { 'Authorization': `Bearer ${token}` } });
const reports = await fetch(`/v1/clients/${clientId}/reports`, { headers: { 'Authorization': `Bearer ${token}` } });Mapeamento de Parâmetros
| Conceito | v1 | v2 |
|---|---|---|
| Projeto/Cliente | client_id | project_id |
| Empresa | company_id | company_id (sem mudança) |
| Integração | integration_id | integration_id (sem mudança) |
Paginação e Filtros
A v2 possui paginação consistente em todos os endpoints de listagem.
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| page | integer | 1 | Página atual (1-based) |
| per_page | integer | 15 | Itens por página (max: 100) |
| sortBy | string | created_at | Campo de ordenação |
| descending | boolean | true | Ordenação descendente |
| q | string | - | Busca textual |
Exemplo de chamada v2
GET /v2/projects?page=1&per_page=50&sortBy=name&descending=false&q=searchExemplo de resposta com meta
{
"data": [...],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://app.reportei.com/api/v2/reports",
"per_page": 100,
"to": 7,
"total": 7,
"sortBy": null,
"descending": false
}
}Filtros específicos por endpoint
Projects
Integrations
Reports
Dashboards
Webhooks
Timeline Events
Migração Endpoint por Endpoint
Tratamento de Erros Padronizado
A v2 possui respostas de erro consistentes e mais informativas.
{
"error": "Client not found"
}Recomendação
Migre endpoint por endpoint e rode as duas versões em paralelo durante a transição. Isso permite validar cada mudança antes de desativar completamente a v1.
Changelog
Este changelog documenta todas as mudanças na API do Reportei.
Política de depreciação
Quando algo for marcado como Deprecated, nós: Deprecated
- 1. Anunciamos neste changelog com antecedência;
- 2. Disponibilizamos um caminho de migração (guia / exemplos);
- 3. Recomendamos que você migre para a nova versão o quanto antes.
Convenções usadas
[2.0.0]
2026-01-14Breaking Changes
Mudanças de Nomenclatura
Clientes para Projetos: O recurso /clients foi renomeado para /projects
Reestruturação de rotas nested
Removidas rotas nested em favor de filtros via query parameters
Webhooks
Rota de eventos movida de /v1/webhook/events para /v2/webhooks/events
Integrations - Widgets
Removidas rotas de widgets em favor da nova API de métricas
Company settings
Rota renomeada de /v1/me para /v2/companies/settings
Added
Novos recursos em v2
- Listagem de integrações:
GET /v2/integrations - API de Métricas:
GET /v2/metrics/POST /v2/metrics/get-data - CRUD de Relatórios:
POST /v2/reports - CRUD de Dashboards:
GET, POST /v2/dashboards - CRUD completo de Webhooks
- CRUD de Timeline Events
Paginação padronizada
Todos os endpoints de listagem suportam: page, per_page, sortBy, descending, q
Filtros avançados
Filtros por data (created_at, updated_at), relacionamento (project_id), e status
Deprecated
GET /v1/clients — Migre para GET /v2/projects
GET /v1/clients/{id}/reports — Migre para GET /v2/reports?project_id={id}
GET /v1/integrations/{id}/widgets — Migre para GET /v2/metrics?integration_slug={slug}
GET /v1/me — Migre para GET /v2/companies/settings
[1.x]
Maintenance ModeNovos recursos serão desenvolvidos exclusivamente na v2. Recomendamos migrar para v2 o quanto antes para aproveitar novos recursos e melhorias de performance.