Modelos de relatórios
curl --request GET \
--url http://api.gu1.ai/report-templates \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'X-Organization-ID: <x-organization-id>' \
--data '
{
"format": "<string>",
"emailLocale": "<string>",
"params": {},
"delivery": "<string>",
"recipientEmails": [
"<string>"
]
}
'import requests
url = "http://api.gu1.ai/report-templates"
payload = {
"format": "<string>",
"emailLocale": "<string>",
"params": {},
"delivery": "<string>",
"recipientEmails": ["<string>"]
}
headers = {
"Authorization": "<authorization>",
"X-Organization-ID": "<x-organization-id>",
"Content-Type": "application/json"
}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
Authorization: '<authorization>',
'X-Organization-ID': '<x-organization-id>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
format: '<string>',
emailLocale: '<string>',
params: {},
delivery: '<string>',
recipientEmails: ['<string>']
})
};
fetch('http://api.gu1.ai/report-templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "http://api.gu1.ai/report-templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'format' => '<string>',
'emailLocale' => '<string>',
'params' => [
],
'delivery' => '<string>',
'recipientEmails' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json",
"X-Organization-ID: <x-organization-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://api.gu1.ai/report-templates"
payload := strings.NewReader("{\n \"format\": \"<string>\",\n \"emailLocale\": \"<string>\",\n \"params\": {},\n \"delivery\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("GET", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("X-Organization-ID", "<x-organization-id>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://api.gu1.ai/report-templates")
.header("Authorization", "<authorization>")
.header("X-Organization-ID", "<x-organization-id>")
.header("Content-Type", "application/json")
.body("{\n \"format\": \"<string>\",\n \"emailLocale\": \"<string>\",\n \"params\": {},\n \"delivery\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://api.gu1.ai/report-templates")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
request["X-Organization-ID"] = '<x-organization-id>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"format\": \"<string>\",\n \"emailLocale\": \"<string>\",\n \"params\": {},\n \"delivery\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_bodyModelos de relatórios
Listar modelos operacionais Gu1 e enfileirar execuções async para object storage (e-mail opcional).
GET
/
report-templates
Modelos de relatórios
curl --request GET \
--url http://api.gu1.ai/report-templates \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'X-Organization-ID: <x-organization-id>' \
--data '
{
"format": "<string>",
"emailLocale": "<string>",
"params": {},
"delivery": "<string>",
"recipientEmails": [
"<string>"
]
}
'import requests
url = "http://api.gu1.ai/report-templates"
payload = {
"format": "<string>",
"emailLocale": "<string>",
"params": {},
"delivery": "<string>",
"recipientEmails": ["<string>"]
}
headers = {
"Authorization": "<authorization>",
"X-Organization-ID": "<x-organization-id>",
"Content-Type": "application/json"
}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
Authorization: '<authorization>',
'X-Organization-ID': '<x-organization-id>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
format: '<string>',
emailLocale: '<string>',
params: {},
delivery: '<string>',
recipientEmails: ['<string>']
})
};
fetch('http://api.gu1.ai/report-templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "http://api.gu1.ai/report-templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'format' => '<string>',
'emailLocale' => '<string>',
'params' => [
],
'delivery' => '<string>',
'recipientEmails' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json",
"X-Organization-ID: <x-organization-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://api.gu1.ai/report-templates"
payload := strings.NewReader("{\n \"format\": \"<string>\",\n \"emailLocale\": \"<string>\",\n \"params\": {},\n \"delivery\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("GET", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("X-Organization-ID", "<x-organization-id>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://api.gu1.ai/report-templates")
.header("Authorization", "<authorization>")
.header("X-Organization-ID", "<x-organization-id>")
.header("Content-Type", "application/json")
.body("{\n \"format\": \"<string>\",\n \"emailLocale\": \"<string>\",\n \"params\": {},\n \"delivery\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://api.gu1.ai/report-templates")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
request["X-Organization-ID"] = '<x-organization-id>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"format\": \"<string>\",\n \"emailLocale\": \"<string>\",\n \"params\": {},\n \"delivery\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_bodyResumo
A Gu1 publica um catálogo code-first de modelos operacionais (alertas por regras, exportações em massa e vistas do Metrics Hub). Os mesmos modelos alimentam Relatórios (sob demanda) e a ação de automationsend_report / Gerar relatório (reportPresetId ou reportTemplateCode + params).
| Método | Path | Uso |
|---|---|---|
GET | /report-templates | Listar catálogo (category opcional) |
GET | /report-templates/{code} | Detalhe + parameterDefinitions |
POST | /report-templates/{code}/preview | Baixar preview CSV/PDF com dados de exemplo |
POST | /report-templates/{code}/run | Enfileirar exportação async (download ou email) |
alerts_by_rules) enfileiram um job em segundo plano, gravam o arquivo em object storage e respondem 202 com result.jobId. Baixe depois em Jobs de exportação de relatórios (Relatórios Downloads). Compartilham o cooldown de export por organização quando aplicável.
Autenticação e tenant
string
required
Bearer YOUR_API_KEY — ver Autenticação.Permissões
| Endpoint | Permissão granular |
|---|---|
GET list / get | reports:read |
POST preview / run | reports:export |
Listar modelos
GET http://api.gu1.ai/report-templates
string
Filtro opcional:
alerts, metrics, entities, transactions, investigations.Obter um modelo
GET http://api.gu1.ai/report-templates/{code}
404 com REPORT_TEMPLATE_NOT_FOUND se o código não existir.
Pré-visualização (dados de exemplo)
POST http://api.gu1.ai/report-templates/{code}/preview
string
csv (default) ou pdf.string
Opcional:
es, en ou pt (copy do PDF).Content-Disposition: attachment (preview-{code}.csv|pdf).
Executar um modelo
POST http://api.gu1.ai/report-templates/{code}/run
object
Parâmetros do modelo (
lookbackDays, ruleIds, emailLocale, filters, etc.).string
Deve estar em
formats do modelo. Default: defaultFormat.string
required
download (apenas enfileirar job) ou email (enfileirar job + enviar e-mail). A UI de Relatórios sempre usa download.string[]
Obrigatório se
delivery for email.Resposta (202)
{
"success": true,
"result": {
"success": true,
"jobId": "…",
"status": "queued",
"delivery": "download"
}
}
Semântica: alerts_by_rules
Exporta alertas já criadas do tenant cujo alerted_at cai na janela lookbackDays.
ruleIds(array UUID, opcional): se enviado, filtratrigger_rule_id IN (...). Vazio = todas as regras.- Colunas: entidade, tax ID, alerta, severidade, status, score, regra, nº da investigação, link do caso/alerta, data.
- Ordem: nome da entidade, depois data da alerta.
- Não recalcula a matriz nem inventa limiares: apenas lista alertas persistidas.
Rate limit
Se houve outra exportação recente na org, pode responder 429 comEXPORT_RATE_LIMIT, header Retry-After e retryAfterSeconds / cooldownSeconds em error.details.
Exemplo
{
"params": {
"lookbackDays": 30,
"ruleIds": ["aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"]
},
"format": "xlsx",
"delivery": "email",
"recipientEmails": ["ops@example.com"]
}
Resposta 202 (email)
{
"success": true,
"result": {
"success": true,
"code": "alerts_by_rules",
"delivery": "email",
"jobId": "…",
"status": "queued"
}
}
Resposta 202 (download)
{
"success": true,
"result": {
"success": true,
"code": "alerts_by_rules",
"delivery": "download",
"jobId": "…",
"status": "queued"
}
}
Automations
A entrega agendada usasend_report (Gerar relatório) com:
reportPresetId(canônico): executa o preset congelado; sempre cria um job no S3. ComsendEmail: trueerecipientEmailstambém envia o arquivo por e-mail.- Legacy:
reportTemplateCode+params, oureportTypesem preset.
/automations/builder?type=scheduled&reportPresetId=….
Ver Jobs de exportação de relatórios para Downloads.
Filtros configuráveis
Os templates operacionais oferecem um construtorcampo → operador → valor. Envie as condições em params.filters; todas são combinadas com E. Uma lista vazia inclui todos os registros. Os presets de relatórios congelam as condições completas.
Os campos com catálogo alteram o controle conforme o operador: equals recebe um valor e in recebe um array. Por exemplo, país aceita { "operator": "equals", "value": "AR" } ou { "operator": "in", "value": ["AR", "BR"] }.
{
"params": {
"filters": [
{ "id": "f1", "field": "tax_id", "operator": "in_custom_list", "value": "11111111-1111-4111-8111-111111111111" },
{ "id": "f2", "field": "age", "operator": "gte", "value": "18" },
{ "id": "f3", "field": "is_pep", "operator": "is_true", "value": "" }
]
},
"format": "xlsx",
"delivery": "download"
}
- Alertas: regra (
in), severidade, status, tipo afetado, score, falso positivo, data e tipo do alerta. - Entidades: tipo, status, Tax ID exato ou em lista personalizada, país, ID externo, busca, idade, score, status KYC, regra com hit, datas de criação/enriquecimento, PEP, sanções, mídia adversa, MEI, processos legais —incluindo criminais—, sócios, relações, atividade eleitoral, atividades econômicas e investigações ativas.
- Transações: tipo, status, meio de pagamento, score, valor, moeda, data, regra com hit, Tax ID relacionado, IDs externos de origem/destino, autotransação, ausência de avaliação, hit de regra shadow, busca, marcada e presença de alertas.
- Investigações: status, prioridade, tipologia, score, tipo de alvo, datas de criação/atualização e busca em título/descrição.
equals, contains, in, gte, lte, between, before, after, is_true, is_false, in_custom_list e not_in_custom_list. O catálogo retornado por GET /report-templates inclui filterFields com os operadores e opções válidos de cada template.Was this page helpful?