Email entity PDF report
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_bodyAPI Reference
Email entity PDF report
Queue a server-generated entity PDF report (same layout as the dashboard export) and email it to one or more recipients via the entities API.
POST
/
entities
/
{id}
/
report-export
/
email
Email entity PDF report
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_bodyOverview
Queues asynchronous generation of a full entity PDF on the server and delivery by email. The PDF uses the same jsPDF pipeline as the in-app βexport reportβ download. Your integration calls this endpoint with an API key; recipients receive the attachment (subject/body depend onemailLocale).
The HTTP response is 202 Accepted as soon as the job is queued. Generation and sending happen in the background; failures are logged server-side (check support if emails do not arrive).
Endpoint
POST http://api.gu1.ai/entities/{id}/report-export/email
Authentication & tenant
string
required
Bearer YOUR_API_KEY β see Authentication.string
required
Production or Sandbox organization UUID β see Environments.
Permissions
Requires granular permissionentities:export on the API key (same as POST /entities/{id}/export and GET /entities/{id}/export-data).
Marketplace and billing
- The organization must have
global_sender_emailenabled (Applications / Marketplace) and the API must have MS Provider configured. - Each address in
recipientEmails(after server-side deduplication) bills one Email pack execution or, if no pack remains, tokens perbase_price_cents. - Pre-flight checks balance/executions for all recipients before queuing.
Domain and sender (fromEmail)
To send from your organization:
- Register the domain under Settings β Email β Domains and complete DNS verification.
- Send
fromEmailin the body with any address on that domain (e.g.noreply@your-domain.com). You do not need a matching row under Senders when the domain is already verified. - Alternatively, send
fromSenderId(UUID fromorganization_email_senders). - Omit both for the platform default (
noreply@gueno.com).
fromSenderId and fromEmail in the same request.
Current risk and AML screening in the PDF
The PDF header shows the entityβs current risk:- If a manual override is active, the manual score appears with a
MANUAL RISKbadge plus user, date, justification and previous score; the matrix score is rendered below, flagged as historical and no longer current. - With no override, the matrix score and its label are shown.
sections.checks) uses normalized screening rather than execution logs:
- Every row carries result, relevant matches, lists and the risk level reported by the data source (
reportedRiskLevel, includingunknownwhen that is what was returned). If no level was reported, a value derived from the matches is used. - A check that ran but left no normalized screening is reported as undetermined, not as βno matchesβ.
GET /entities/{id}/export-data under riskSummary, amlScreening and checks[].
Path parameters
string
required
Entity UUID (
id returned by create/list/get).Request body (JSON)
string[]
required
One or more email addresses (max 26 after deduplication). Email is sent only to these addresses; the API key userβs account email is not added automatically.
string
Email template language:
en, es, or pt. Defaults to en if omitted or invalid.string (uuid)
UUID of a sender under Settings β Email β Senders. Mutually exclusive with
fromEmail.string
Full From address (e.g.
reports@your-domain.com). The domain must be verified for the org. If a sender row exists for that address, its display name is used; otherwise a verified domain is enough. Mutually exclusive with fromSenderId.object
required
Booleans for each report section (same semantics as the dashboard export modal). All keys optional; defaults match the API validator (
generalInfo defaults to true, others to false if omitted).Keys: generalInfo, kyc, documents, checks, enrichments, alerts, aiAnalysis, relationships, timeline, riskAnalysis.Example body
{
"recipientEmails": ["compliance@example.com"],
"emailLocale": "en",
"fromEmail": "noreply@your-domain.com",
"sections": {
"generalInfo": true,
"riskAnalysis": true,
"enrichments": true,
"alerts": true
}
}
Example request
curl -X POST "http://api.gu1.ai/entities/550e8400-e29b-41d4-a716-446655440000/report-export/email" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Organization-ID: YOUR_ORG_UUID" \
-H "Content-Type: application/json" \
-d '{
"recipientEmails": ["compliance@example.com"],
"emailLocale": "en",
"fromEmail": "noreply@your-domain.com",
"sections": {
"generalInfo": true,
"riskAnalysis": true,
"enrichments": true
}
}'
Responses
202 Accepted β queued
{
"success": true,
"status": "queued",
"message": "β¦"
}
message is localized from emailLocale.
400 β validation / pre-flight
| Code / case | Description |
|---|---|
NO_RECIPIENTS | Empty recipientEmails after deduplication. |
TOO_MANY_RECIPIENTS | More than 26 recipients. |
EMAIL_INTEGRATION_INACTIVE | global_sender_email disabled or MS Provider not configured. |
DOMAIN_NOT_VERIFIED | fromEmail domain not registered or DNS not verified. |
SENDER_NOT_CONFIGURED | Unknown fromSenderId for the org. |
INVALID_SENDER | Both fromSenderId and fromEmail, or invalid format. |
INSUFFICIENT_BALANCE | Not enough tokens or pack executions for all recipients. |
404 β entity not found or hidden
Same shape as other entity routes when the ID does not exist in the org or entity visibility denies the caller.500 β server error
Rare; includes a generic error payload.Related endpoints
POST /entities/{id}/exportβ synchronous PDF download (response body = PDF file).GET /entities/{id}/export-dataβ JSON bundle used by the dashboard export; the email PDF uses the same server-side data assembly.- Bulk export by email β
POST /entities/export/jobs(CSV/XLSX/JSON with list filters). - Get entity β
GET /entities/{id}.
Was this page helpful?