Request production (live mode) access
curl --request POST \
--url https://api.example.com/v1/access/request \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"legalName": "ACME Imports LLC",
"cnpj": "23236594000130",
"businessContactEmail": "ops@acme.com",
"expectedMonthlyVolume": "250000.00",
"corridors": [
"US-BR",
"EU-BR"
]
}
'import requests
url = "https://api.example.com/v1/access/request"
payload = {
"legalName": "ACME Imports LLC",
"cnpj": "23236594000130",
"businessContactEmail": "ops@acme.com",
"expectedMonthlyVolume": "250000.00",
"corridors": ["US-BR", "EU-BR"]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
legalName: 'ACME Imports LLC',
cnpj: '23236594000130',
businessContactEmail: 'ops@acme.com',
expectedMonthlyVolume: '250000.00',
corridors: ['US-BR', 'EU-BR']
})
};
fetch('https://api.example.com/v1/access/request', 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.example.com/v1/access/request",
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([
'legalName' => 'ACME Imports LLC',
'cnpj' => '23236594000130',
'businessContactEmail' => 'ops@acme.com',
'expectedMonthlyVolume' => '250000.00',
'corridors' => [
'US-BR',
'EU-BR'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.example.com/v1/access/request"
payload := strings.NewReader("{\n \"legalName\": \"ACME Imports LLC\",\n \"cnpj\": \"23236594000130\",\n \"businessContactEmail\": \"ops@acme.com\",\n \"expectedMonthlyVolume\": \"250000.00\",\n \"corridors\": [\n \"US-BR\",\n \"EU-BR\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.example.com/v1/access/request")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"legalName\": \"ACME Imports LLC\",\n \"cnpj\": \"23236594000130\",\n \"businessContactEmail\": \"ops@acme.com\",\n \"expectedMonthlyVolume\": \"250000.00\",\n \"corridors\": [\n \"US-BR\",\n \"EU-BR\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/access/request")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"legalName\": \"ACME Imports LLC\",\n \"cnpj\": \"23236594000130\",\n \"businessContactEmail\": \"ops@acme.com\",\n \"expectedMonthlyVolume\": \"250000.00\",\n \"corridors\": [\n \"US-BR\",\n \"EU-BR\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "ckpar001",
"orgId": "ckorg001",
"legalName": "ACME Imports LLC",
"cnpj": "23236594000130",
"businessContactEmail": "ops@acme.com",
"expectedMonthlyVolume": "250000.00",
"corridors": [
"US-BR",
"EU-BR"
],
"status": "pending",
"note": null,
"requestedAt": "2026-06-30T12:00:00.000Z",
"decidedAt": null
}{
"statusCode": 400,
"error": "ValidationError",
"message": "The request body failed validation (e.g. CNPJ is not 14 digits, or at least one corridor is required)."
}Access
Request production (live mode) access
Submit the organization’s company details (legal name, CNPJ, business contact) plus expected monthly USD volume and corridors so the Caratuva team can qualify it for live mode. Idempotent — an org with an open (pending) or already-approved request gets that existing row back instead of a duplicate; a previously-rejected org may submit a fresh request. The Caratuva team is notified and approves out-of-band.
POST
/
v1
/
access
/
request
Request production (live mode) access
curl --request POST \
--url https://api.example.com/v1/access/request \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"legalName": "ACME Imports LLC",
"cnpj": "23236594000130",
"businessContactEmail": "ops@acme.com",
"expectedMonthlyVolume": "250000.00",
"corridors": [
"US-BR",
"EU-BR"
]
}
'import requests
url = "https://api.example.com/v1/access/request"
payload = {
"legalName": "ACME Imports LLC",
"cnpj": "23236594000130",
"businessContactEmail": "ops@acme.com",
"expectedMonthlyVolume": "250000.00",
"corridors": ["US-BR", "EU-BR"]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
legalName: 'ACME Imports LLC',
cnpj: '23236594000130',
businessContactEmail: 'ops@acme.com',
expectedMonthlyVolume: '250000.00',
corridors: ['US-BR', 'EU-BR']
})
};
fetch('https://api.example.com/v1/access/request', 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.example.com/v1/access/request",
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([
'legalName' => 'ACME Imports LLC',
'cnpj' => '23236594000130',
'businessContactEmail' => 'ops@acme.com',
'expectedMonthlyVolume' => '250000.00',
'corridors' => [
'US-BR',
'EU-BR'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.example.com/v1/access/request"
payload := strings.NewReader("{\n \"legalName\": \"ACME Imports LLC\",\n \"cnpj\": \"23236594000130\",\n \"businessContactEmail\": \"ops@acme.com\",\n \"expectedMonthlyVolume\": \"250000.00\",\n \"corridors\": [\n \"US-BR\",\n \"EU-BR\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.example.com/v1/access/request")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"legalName\": \"ACME Imports LLC\",\n \"cnpj\": \"23236594000130\",\n \"businessContactEmail\": \"ops@acme.com\",\n \"expectedMonthlyVolume\": \"250000.00\",\n \"corridors\": [\n \"US-BR\",\n \"EU-BR\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/access/request")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"legalName\": \"ACME Imports LLC\",\n \"cnpj\": \"23236594000130\",\n \"businessContactEmail\": \"ops@acme.com\",\n \"expectedMonthlyVolume\": \"250000.00\",\n \"corridors\": [\n \"US-BR\",\n \"EU-BR\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "ckpar001",
"orgId": "ckorg001",
"legalName": "ACME Imports LLC",
"cnpj": "23236594000130",
"businessContactEmail": "ops@acme.com",
"expectedMonthlyVolume": "250000.00",
"corridors": [
"US-BR",
"EU-BR"
],
"status": "pending",
"note": null,
"requestedAt": "2026-06-30T12:00:00.000Z",
"decidedAt": null
}{
"statusCode": 400,
"error": "ValidationError",
"message": "The request body failed validation (e.g. CNPJ is not 14 digits, or at least one corridor is required)."
}Authorizations
apiKeybearer
Body
application/json
Response
Production-access request created (or the existing open/approved request returned)
Available options:
pending, approved, rejected ⌘I