curl --request POST \
--url https://api.legal.usecroma.com/v1/exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"entity": "processes",
"format": "csv",
"filters": {
"status": "TRACKING",
"date_from": "2024-01-01"
}
}
'import requests
url = "https://api.legal.usecroma.com/v1/exports"
payload = {
"entity": "processes",
"format": "csv",
"filters": {
"status": "TRACKING",
"date_from": "2024-01-01"
}
}
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({
entity: 'processes',
format: 'csv',
filters: {status: 'TRACKING', date_from: '2024-01-01'}
})
};
fetch('https://api.legal.usecroma.com/v1/exports', 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 => "https://api.legal.usecroma.com/v1/exports",
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([
'entity' => 'processes',
'format' => 'csv',
'filters' => [
'status' => 'TRACKING',
'date_from' => '2024-01-01'
]
]),
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 := "https://api.legal.usecroma.com/v1/exports"
payload := strings.NewReader("{\n \"entity\": \"processes\",\n \"format\": \"csv\",\n \"filters\": {\n \"status\": \"TRACKING\",\n \"date_from\": \"2024-01-01\"\n }\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("https://api.legal.usecroma.com/v1/exports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entity\": \"processes\",\n \"format\": \"csv\",\n \"filters\": {\n \"status\": \"TRACKING\",\n \"date_from\": \"2024-01-01\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.legal.usecroma.com/v1/exports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"entity\": \"processes\",\n \"format\": \"csv\",\n \"filters\": {\n \"status\": \"TRACKING\",\n \"date_from\": \"2024-01-01\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"url": "https://files.usecroma.com/legal-exports/processes-2026-08-21.csv",
"entity": "processes",
"format": "csv",
"rows": 1280,
"bytes": 418233,
"truncated": false,
"expires_at": "2026-08-22T14:03:10.000Z"
}
}{
"job": {
"id": "run_abc123def456",
"status": "running",
"endpoint": "/v1/exports",
"created_at": "2026-08-21T14:03:10.000Z",
"finished_at": null,
"status_url": "https://api.legal.usecroma.com/jobs/run_abc123def456"
},
"data": null,
"error": null
}{
"error": {
"type": "invalid_request_error",
"code": "invalid_param",
"message": "Invalid option: expected one of \"processes\"|\"actions\"|\"defendants\"",
"param": "entity",
"details": {
"issues": [
{
"path": "entity",
"message": "Invalid option: expected one of \"processes\"|\"actions\"|\"defendants\""
}
]
}
}
}{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Invalid or missing API key."
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Rate limit exceeded. Try again in 42 seconds."
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Internal error. Contact support with the X-Request-Id if it persists."
}
}{
"error": {
"type": "api_error",
"code": "job_failed",
"message": "The job could not be completed."
}
}Create an export
Generate a downloadable CSV or JSONL file with the complete filtered dataset of one entity (up to 100,000 rows). Runs as an async job: the request waits inline up to Prefer: wait=N seconds (default 20, max 55) and returns 200 { data } with the download URL if the file is ready in time; otherwise it returns 202 with a job envelope to poll at GET /jobs/{id} (or delivers it to callback_url). The URL expires 24 hours after completion.
curl --request POST \
--url https://api.legal.usecroma.com/v1/exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"entity": "processes",
"format": "csv",
"filters": {
"status": "TRACKING",
"date_from": "2024-01-01"
}
}
'import requests
url = "https://api.legal.usecroma.com/v1/exports"
payload = {
"entity": "processes",
"format": "csv",
"filters": {
"status": "TRACKING",
"date_from": "2024-01-01"
}
}
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({
entity: 'processes',
format: 'csv',
filters: {status: 'TRACKING', date_from: '2024-01-01'}
})
};
fetch('https://api.legal.usecroma.com/v1/exports', 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 => "https://api.legal.usecroma.com/v1/exports",
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([
'entity' => 'processes',
'format' => 'csv',
'filters' => [
'status' => 'TRACKING',
'date_from' => '2024-01-01'
]
]),
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 := "https://api.legal.usecroma.com/v1/exports"
payload := strings.NewReader("{\n \"entity\": \"processes\",\n \"format\": \"csv\",\n \"filters\": {\n \"status\": \"TRACKING\",\n \"date_from\": \"2024-01-01\"\n }\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("https://api.legal.usecroma.com/v1/exports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entity\": \"processes\",\n \"format\": \"csv\",\n \"filters\": {\n \"status\": \"TRACKING\",\n \"date_from\": \"2024-01-01\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.legal.usecroma.com/v1/exports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"entity\": \"processes\",\n \"format\": \"csv\",\n \"filters\": {\n \"status\": \"TRACKING\",\n \"date_from\": \"2024-01-01\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"url": "https://files.usecroma.com/legal-exports/processes-2026-08-21.csv",
"entity": "processes",
"format": "csv",
"rows": 1280,
"bytes": 418233,
"truncated": false,
"expires_at": "2026-08-22T14:03:10.000Z"
}
}{
"job": {
"id": "run_abc123def456",
"status": "running",
"endpoint": "/v1/exports",
"created_at": "2026-08-21T14:03:10.000Z",
"finished_at": null,
"status_url": "https://api.legal.usecroma.com/jobs/run_abc123def456"
},
"data": null,
"error": null
}{
"error": {
"type": "invalid_request_error",
"code": "invalid_param",
"message": "Invalid option: expected one of \"processes\"|\"actions\"|\"defendants\"",
"param": "entity",
"details": {
"issues": [
{
"path": "entity",
"message": "Invalid option: expected one of \"processes\"|\"actions\"|\"defendants\""
}
]
}
}
}{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Invalid or missing API key."
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Rate limit exceeded. Try again in 42 seconds."
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Internal error. Contact support with the X-Request-Id if it persists."
}
}{
"error": {
"type": "api_error",
"code": "job_failed",
"message": "The job could not be completed."
}
}Authorizations
Use Authorization: Bearer YOUR_API_KEY
Headers
wait=N: seconds to wait inline before returning 202 (default 20, max 55). wait=0 returns 202 immediately.
Body
Dataset to export.
processes, actions, defendants csv (UTF-8 with BOM, Excel-friendly) or jsonl (one JSON object per line).
csv, jsonl Same names as the list endpoints' query params. One flat object for every entity: filters that do not apply to the chosen entity are ignored.
Show child attributes
Show child attributes
Public HTTPS URL to POST the finished job envelope to. When set, the request returns 202 immediately.
Response
Successful response
Show child attributes
Show child attributes