Relatório PDF da entidade por e-mail
curl --request POST \
--url http://api.gu1.ai/entities/{id}/report-export/email \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'X-Organization-ID: <x-organization-id>' \
--data '
{
"recipientEmails": [
"<string>"
],
"emailLocale": "<string>",
"fromSenderId": {},
"fromEmail": "<string>",
"sections": {}
}
'import requests
url = "http://api.gu1.ai/entities/{id}/report-export/email"
payload = {
"recipientEmails": ["<string>"],
"emailLocale": "<string>",
"fromSenderId": {},
"fromEmail": "<string>",
"sections": {}
}
headers = {
"Authorization": "<authorization>",
"X-Organization-ID": "<x-organization-id>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: '<authorization>',
'X-Organization-ID': '<x-organization-id>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
recipientEmails: ['<string>'],
emailLocale: '<string>',
fromSenderId: {},
fromEmail: '<string>',
sections: {}
})
};
fetch('http://api.gu1.ai/entities/{id}/report-export/email', 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/entities/{id}/report-export/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'recipientEmails' => [
'<string>'
],
'emailLocale' => '<string>',
'fromSenderId' => [
],
'fromEmail' => '<string>',
'sections' => [
]
]),
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/entities/{id}/report-export/email"
payload := strings.NewReader("{\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"emailLocale\": \"<string>\",\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\",\n \"sections\": {}\n}")
req, _ := http.NewRequest("POST", 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.post("http://api.gu1.ai/entities/{id}/report-export/email")
.header("Authorization", "<authorization>")
.header("X-Organization-ID", "<x-organization-id>")
.header("Content-Type", "application/json")
.body("{\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"emailLocale\": \"<string>\",\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\",\n \"sections\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://api.gu1.ai/entities/{id}/report-export/email")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["X-Organization-ID"] = '<x-organization-id>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"emailLocale\": \"<string>\",\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\",\n \"sections\": {}\n}"
response = http.request(request)
puts response.read_bodyReferência API
Relatório PDF da entidade por e-mail
Enfileira no servidor a geração do PDF completo da entidade (mesmo layout da exportação do painel) e o envia por e-mail a um ou mais destinatários.
POST
/
entities
/
{id}
/
report-export
/
email
Relatório PDF da entidade por e-mail
curl --request POST \
--url http://api.gu1.ai/entities/{id}/report-export/email \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'X-Organization-ID: <x-organization-id>' \
--data '
{
"recipientEmails": [
"<string>"
],
"emailLocale": "<string>",
"fromSenderId": {},
"fromEmail": "<string>",
"sections": {}
}
'import requests
url = "http://api.gu1.ai/entities/{id}/report-export/email"
payload = {
"recipientEmails": ["<string>"],
"emailLocale": "<string>",
"fromSenderId": {},
"fromEmail": "<string>",
"sections": {}
}
headers = {
"Authorization": "<authorization>",
"X-Organization-ID": "<x-organization-id>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: '<authorization>',
'X-Organization-ID': '<x-organization-id>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
recipientEmails: ['<string>'],
emailLocale: '<string>',
fromSenderId: {},
fromEmail: '<string>',
sections: {}
})
};
fetch('http://api.gu1.ai/entities/{id}/report-export/email', 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/entities/{id}/report-export/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'recipientEmails' => [
'<string>'
],
'emailLocale' => '<string>',
'fromSenderId' => [
],
'fromEmail' => '<string>',
'sections' => [
]
]),
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/entities/{id}/report-export/email"
payload := strings.NewReader("{\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"emailLocale\": \"<string>\",\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\",\n \"sections\": {}\n}")
req, _ := http.NewRequest("POST", 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.post("http://api.gu1.ai/entities/{id}/report-export/email")
.header("Authorization", "<authorization>")
.header("X-Organization-ID", "<x-organization-id>")
.header("Content-Type", "application/json")
.body("{\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"emailLocale\": \"<string>\",\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\",\n \"sections\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://api.gu1.ai/entities/{id}/report-export/email")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["X-Organization-ID"] = '<x-organization-id>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"emailLocale\": \"<string>\",\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\",\n \"sections\": {}\n}"
response = http.request(request)
puts response.read_bodyVisão geral
Enfileira de forma assíncrona a geração do PDF da entidade no servidor e o envio por e-mail. O PDF usa o mesmo fluxo jsPDF do download “exportar relatório” no app. Sua integração chama o endpoint com API key; os destinatários recebem o anexo (assunto/corpo conformeemailLocale).
A resposta HTTP é 202 Accepted assim que o trabalho é enfileirado. Geração e envio ocorrem em segundo plano; falhas ficam nos logs do servidor.
Endpoint
POST http://api.gu1.ai/entities/{id}/report-export/email
Autenticação e tenant
string
required
Bearer SUA_API_KEY — ver Autenticação.Permissões
Exige permissão granularentities:export na API key (igual a POST /entities/{id}/export e GET /entities/{id}/export-data).
Marketplace e faturamento
- A organização deve ter
global_sender_emailativa (Aplicações / Marketplace) e o servidor com MS Provider configurado. - Cada endereço em
recipientEmails(após deduplicação) consome uma execução do pacote de E-mail ou tokens conformebase_price_cents. - O pre-flight valida saldo/execuções para todos os destinatários antes de enfileirar.
Domínio e remetente (fromEmail)
- Cadastre o domínio em Ajustes → E-mail → Domínios e conclua a verificação DNS.
- Envie
fromEmailcom qualquer endereço desse domínio (ex.:noreply@seu-dominio.com). Não é obrigatório cadastrar o endereço em “Remetentes” se o domínio já estiver verificado. - Alternativa:
fromSenderId(UUID emorganization_email_senders). - Omita ambos para o remetente padrão da plataforma (
noreply@gueno.com).
fromSenderId e fromEmail no mesmo request.
Risco vigente e screening AML no PDF
O cabeçalho do PDF mostra o risco vigente da entidade:- Se houver um override manual ativo, o score manual aparece com o badge
RISCO MANUALmais usuário, data, justificativa e score anterior; o score da matriz fica abaixo, marcado como histórico e não vigente. - Sem override, é exibido o score da matriz com sua etiqueta.
sections.checks) usa o screening normalizado, não os logs de execução:
- Cada linha traz resultado, correspondências relevantes, listas e o nível de risco informado pela fonte (
reportedRiskLevel, incluindounknownquando é o valor recebido). Se a fonte não informou nível, usa-se um valor derivado das correspondências. - Uma verificação que rodou mas não deixou screening normalizado é informada como não determinada, não como “sem correspondências”.
GET /entities/{id}/export-data em riskSummary, amlScreening e checks[].
Parâmetros de rota
string
required
UUID da entidade (
id retornado por criar/listar/obter).Corpo JSON
string[]
required
Um ou mais e-mails (máx. 26 após deduplicação). O envio vai somente para esses endereços; o e-mail do usuário da API key não é adicionado automaticamente.
string
Idioma do e-mail:
en, es ou pt. Padrão en se omitido ou inválido.string (uuid)
UUID do remetente em Ajustes → E-mail → Remetentes. Exclusivo com
fromEmail.string
Endereço completo de envio (ex.:
relatorios@seu-dominio.com). O domínio deve estar verificado. Exclusivo com fromSenderId.object
required
Booleanos por seção do relatório (mesma semântica do modal de exportação). Chaves opcionais; padrões alinhados ao validador da API (
generalInfo padrão true, demais false se omitidos).Chaves: generalInfo, kyc, documents, checks, enrichments, alerts, aiAnalysis, relationships, timeline, riskAnalysis.Exemplo de corpo
{
"recipientEmails": ["compliance@exemplo.com"],
"emailLocale": "pt",
"fromEmail": "noreply@seu-dominio.com",
"sections": {
"generalInfo": true,
"riskAnalysis": true,
"enrichments": true
}
}
Exemplo curl
curl -X POST "http://api.gu1.ai/entities/550e8400-e29b-41d4-a716-446655440000/report-export/email" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "X-Organization-ID: UUID_DA_ORG" \
-H "Content-Type: application/json" \
-d '{
"recipientEmails": ["compliance@exemplo.com"],
"emailLocale": "pt",
"fromEmail": "noreply@seu-dominio.com",
"sections": {
"generalInfo": true,
"riskAnalysis": true,
"enrichments": true
}
}'
Respostas
202 Accepted — enfileirado
{
"success": true,
"status": "queued",
"message": "…"
}
400 — validação / pre-flight
Códigos comuns:NO_RECIPIENTS, TOO_MANY_RECIPIENTS, EMAIL_INTEGRATION_INACTIVE, DOMAIN_NOT_VERIFIED, SENDER_NOT_CONFIGURED, INVALID_SENDER, INSUFFICIENT_BALANCE (mesma semântica da documentação em espanhol).
404 / 500
Entidade inexistente ou oculta; erro interno.Endpoints relacionados
POST /entities/{id}/export— download síncrono do PDF.- Exportação em massa por e-mail —
POST /entities/export/jobs. - Obter entidade —
GET /entities/{id}.
Was this page helpful?