Bulk entity export
curl --request POST \
--url http://api.gu1.ai/entities/export/jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"deliveryMode": "<string>",
"recipientEmails": [
"<string>"
],
"format": "<string>",
"filters": {},
"emailLocale": "<string>",
"columns": [
"<string>"
],
"fromSenderId": {},
"fromEmail": "<string>"
}
'import requests
url = "http://api.gu1.ai/entities/export/jobs"
payload = {
"deliveryMode": "<string>",
"recipientEmails": ["<string>"],
"format": "<string>",
"filters": {},
"emailLocale": "<string>",
"columns": ["<string>"],
"fromSenderId": {},
"fromEmail": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
deliveryMode: '<string>',
recipientEmails: ['<string>'],
format: '<string>',
filters: {},
emailLocale: '<string>',
columns: ['<string>'],
fromSenderId: {},
fromEmail: '<string>'
})
};
fetch('http://api.gu1.ai/entities/export/jobs', 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/export/jobs",
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([
'deliveryMode' => '<string>',
'recipientEmails' => [
'<string>'
],
'format' => '<string>',
'filters' => [
],
'emailLocale' => '<string>',
'columns' => [
'<string>'
],
'fromSenderId' => [
],
'fromEmail' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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/export/jobs"
payload := strings.NewReader("{\n \"deliveryMode\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"format\": \"<string>\",\n \"filters\": {},\n \"emailLocale\": \"<string>\",\n \"columns\": [\n \"<string>\"\n ],\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/export/jobs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"deliveryMode\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"format\": \"<string>\",\n \"filters\": {},\n \"emailLocale\": \"<string>\",\n \"columns\": [\n \"<string>\"\n ],\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://api.gu1.ai/entities/export/jobs")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"deliveryMode\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"format\": \"<string>\",\n \"filters\": {},\n \"emailLocale\": \"<string>\",\n \"columns\": [\n \"<string>\"\n ],\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyBulk entity export
Queue an asynchronous job that exports filtered entities to CSV, XLSX, or JSON for history download and optional email delivery.
POST
/
entities
/
export
/
jobs
Bulk entity export
curl --request POST \
--url http://api.gu1.ai/entities/export/jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"deliveryMode": "<string>",
"recipientEmails": [
"<string>"
],
"format": "<string>",
"filters": {},
"emailLocale": "<string>",
"columns": [
"<string>"
],
"fromSenderId": {},
"fromEmail": "<string>"
}
'import requests
url = "http://api.gu1.ai/entities/export/jobs"
payload = {
"deliveryMode": "<string>",
"recipientEmails": ["<string>"],
"format": "<string>",
"filters": {},
"emailLocale": "<string>",
"columns": ["<string>"],
"fromSenderId": {},
"fromEmail": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
deliveryMode: '<string>',
recipientEmails: ['<string>'],
format: '<string>',
filters: {},
emailLocale: '<string>',
columns: ['<string>'],
fromSenderId: {},
fromEmail: '<string>'
})
};
fetch('http://api.gu1.ai/entities/export/jobs', 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/export/jobs",
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([
'deliveryMode' => '<string>',
'recipientEmails' => [
'<string>'
],
'format' => '<string>',
'filters' => [
],
'emailLocale' => '<string>',
'columns' => [
'<string>'
],
'fromSenderId' => [
],
'fromEmail' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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/export/jobs"
payload := strings.NewReader("{\n \"deliveryMode\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"format\": \"<string>\",\n \"filters\": {},\n \"emailLocale\": \"<string>\",\n \"columns\": [\n \"<string>\"\n ],\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/export/jobs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"deliveryMode\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"format\": \"<string>\",\n \"filters\": {},\n \"emailLocale\": \"<string>\",\n \"columns\": [\n \"<string>\"\n ],\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://api.gu1.ai/entities/export/jobs")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"deliveryMode\": \"<string>\",\n \"recipientEmails\": [\n \"<string>\"\n ],\n \"format\": \"<string>\",\n \"filters\": {},\n \"emailLocale\": \"<string>\",\n \"columns\": [\n \"<string>\"\n ],\n \"fromSenderId\": {},\n \"fromEmail\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyOverview
Exports entities using the same filters asGET /entities and builds a file (csv, xlsx, or json). With deliveryMode: "download_only", the file remains available in export history without sending email or consuming email credits. With deliveryMode: "email", it is also sent to the specified recipients. Returns 202 with jobId.
Endpoint
POST http://api.gu1.ai/entities/export/jobs
Auth, permissions, marketplace
Always requiresAuthorization, X-Organization-ID, and entities:export. The global_sender_email integration, sender, and balance are checked only for deliveryMode: "email"; billing is per recipient. download_only does not consume email credits.
Domain and sender
Same rules as the PDF email export:fromEmail: verified org domain; no sender row required.fromSenderId: UUID inorganization_email_senders.- Do not send both.
Request Body
string
download_only to keep the file only in export history, or email to add email delivery. For backward compatibility, omitting it while providing recipients is treated as email.string[]
Required and non-empty for
deliveryMode: "email" (max 26 after deduplication). Must be [] for download_only.string
required
csv, xlsx, or json.object
Same shape as
GET /entities query filters. Default {}.string
en, es, or pt for the completion email when deliveryMode is email.string[]
Optional snake_case export column keys; omit or
[] for all allowed columns.string (uuid)
Sender UUID. Applies only to
email and is mutually exclusive with fromEmail.string
From address on a verified domain. Applies only to
email and is mutually exclusive with fromSenderId.Example without email
{
"deliveryMode": "download_only",
"recipientEmails": [],
"format": "xlsx",
"filters": { "type": "person" }
}
Example with email
{
"deliveryMode": "email",
"recipientEmails": ["analyst@example.com"],
"format": "xlsx",
"emailLocale": "en",
"fromEmail": "exports@your-domain.com",
"filters": { "type": "person" }
}
202 response
{
"jobId": "job-uuid",
"status": "queued",
"deliveryMode": "download_only",
"message": "β¦"
}
Job follow-up
GET /entities/export/jobsβ paginated organization export history.GET /entities/export/jobs/{jobId}β status (queued,running,completed,completed_email_failed,failed) and delivery mode.GET /entities/export/jobs/{jobId}/downloadβ authenticated download while the file remains available.- If email delivery fails after file generation, the job becomes
completed_email_failedand remains downloadable from history.
fileExpiresAt. It is nullable: null means the
stored file has no expiration. linkExpiresAt is separate and only indicates when
the signed link sent by email stops working. New entity and transaction export files
do not expire and remain available in history unless they are explicitly removed.
400 errors
Mode errors includeEXPORT_RECIPIENTS_REQUIRED, EXPORT_RECIPIENTS_NOT_ALLOWED, and EXPORT_STORAGE_REQUIRED. With deliveryMode: "email", the pre-flight errors from report-export-email also apply, including unverified domain and insufficient balance.
Related
- Email entity PDF report β
POST /entities/{id}/report-export/email.
Was this page helpful?