Request a report
Request a report. It is generated in the background: the response is the
report with status PENDING. Poll GET /v1/reports/{reportId}, or listen for
the report.ready and report.failed webhooks, then download it.
Up to 5 reports can be in progress at once per organization.
Supports Nxos-On-Behalf-Of to request a report on a client, with an active
letter of authorization. The report then belongs to the client.
curl --request POST \
--url https://api.nxos.io/v1/reports \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "ACCOUNT_STATEMENT",
"format": "PDF",
"from": "2026-09-01",
"to": "2026-09-30",
"currency": "USD"
}
'import requests
url = "https://api.nxos.io/v1/reports"
payload = {
"type": "ACCOUNT_STATEMENT",
"format": "PDF",
"from": "2026-09-01",
"to": "2026-09-30",
"currency": "USD"
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'ACCOUNT_STATEMENT',
format: 'PDF',
from: '2026-09-01',
to: '2026-09-30',
currency: 'USD'
})
};
fetch('https://api.nxos.io/v1/reports', 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.nxos.io/v1/reports",
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([
'type' => 'ACCOUNT_STATEMENT',
'format' => 'PDF',
'from' => '2026-09-01',
'to' => '2026-09-30',
'currency' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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.nxos.io/v1/reports"
payload := strings.NewReader("{\n \"type\": \"ACCOUNT_STATEMENT\",\n \"format\": \"PDF\",\n \"from\": \"2026-09-01\",\n \"to\": \"2026-09-30\",\n \"currency\": \"USD\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
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.nxos.io/v1/reports")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"ACCOUNT_STATEMENT\",\n \"format\": \"PDF\",\n \"from\": \"2026-09-01\",\n \"to\": \"2026-09-30\",\n \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nxos.io/v1/reports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"ACCOUNT_STATEMENT\",\n \"format\": \"PDF\",\n \"from\": \"2026-09-01\",\n \"to\": \"2026-09-30\",\n \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"object": "report",
"reportId": "rpt_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"type": "ACCOUNT_STATEMENT",
"format": "PDF",
"status": "READY",
"from": "2026-09-01",
"to": "2026-09-30",
"asOf": null,
"currency": "USD",
"fileName": "NXOS - Account statement - 2026-09 - Acme Ltd.pdf",
"sizeBytes": 48211,
"createdAt": "2026-10-01T09:12:44.000Z",
"readyAt": "2026-10-01T09:12:51.000Z"
}Headers
Bearer token. Format: Bearer <api_key>
Unique key per logical operation. UUID v4 recommended. Max 255 characters.
Body
- Option 1
- Option 2
- Option 3
A report request, discriminated by type.
ACCOUNT_STATEMENT or TRANSACTION_STATEMENT.
ACCOUNT_STATEMENT, TRANSACTION_STATEMENT File format.
PDF, CSV First day covered (YYYY-MM-DD, UTC). No earlier than 2024-01-01.
Last day covered, inclusive (YYYY-MM-DD, UTC). At most 366 days after from; a range reaching today runs up to now.
Asset code of the one currency to cover. Omit or pass null for every currency.
Response
The request has succeeded and a new resource has been created as a result.
A report of your organization: a statement, a balance certificate or a bank confirmation letter.
Object type. Always report.
report Report identifier.
The kind of document.
ACCOUNT_STATEMENT, TRANSACTION_STATEMENT, BALANCE_CERTIFICATE, BANK_CONFIRMATION_LETTER File format.
PDF, CSV Where the report stands. Download it once READY.
PENDING, PROCESSING, READY, FAILED First day covered (YYYY-MM-DD, UTC) for a statement; null otherwise.
Last day covered, inclusive (YYYY-MM-DD, UTC) for a statement; null otherwise.
The day whose closing balances a certificate states (YYYY-MM-DD, UTC); null for other reports.
The one currency covered, or null when the report covers every currency.
File name, once READY.
File size in bytes, once READY.
When the report was requested.
When the file became available. null until READY.
curl --request POST \
--url https://api.nxos.io/v1/reports \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "ACCOUNT_STATEMENT",
"format": "PDF",
"from": "2026-09-01",
"to": "2026-09-30",
"currency": "USD"
}
'import requests
url = "https://api.nxos.io/v1/reports"
payload = {
"type": "ACCOUNT_STATEMENT",
"format": "PDF",
"from": "2026-09-01",
"to": "2026-09-30",
"currency": "USD"
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'ACCOUNT_STATEMENT',
format: 'PDF',
from: '2026-09-01',
to: '2026-09-30',
currency: 'USD'
})
};
fetch('https://api.nxos.io/v1/reports', 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.nxos.io/v1/reports",
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([
'type' => 'ACCOUNT_STATEMENT',
'format' => 'PDF',
'from' => '2026-09-01',
'to' => '2026-09-30',
'currency' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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.nxos.io/v1/reports"
payload := strings.NewReader("{\n \"type\": \"ACCOUNT_STATEMENT\",\n \"format\": \"PDF\",\n \"from\": \"2026-09-01\",\n \"to\": \"2026-09-30\",\n \"currency\": \"USD\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
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.nxos.io/v1/reports")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"ACCOUNT_STATEMENT\",\n \"format\": \"PDF\",\n \"from\": \"2026-09-01\",\n \"to\": \"2026-09-30\",\n \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nxos.io/v1/reports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"ACCOUNT_STATEMENT\",\n \"format\": \"PDF\",\n \"from\": \"2026-09-01\",\n \"to\": \"2026-09-30\",\n \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"object": "report",
"reportId": "rpt_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"type": "ACCOUNT_STATEMENT",
"format": "PDF",
"status": "READY",
"from": "2026-09-01",
"to": "2026-09-30",
"asOf": null,
"currency": "USD",
"fileName": "NXOS - Account statement - 2026-09 - Acme Ltd.pdf",
"sizeBytes": 48211,
"createdAt": "2026-10-01T09:12:44.000Z",
"readyAt": "2026-10-01T09:12:51.000Z"
}