GET
/
v1
/
customers
/
{customerId}
/
accounts
/
{accountId}
/
statements
Generate a statement
curl --request GET \
  --url https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/statements \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/statements"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/statements', 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.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/statements",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/statements"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/statements")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/statements")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "success": true,
  "data": {
    "dataURI": "data:application/pdf;base64,JVBERi0xLjcKJeLjz9MKMSAwIG9iago8PC9UeXBlL0NhdGFsb2c+PgplbmRvYmoK",
    "format": "pdf"
  }
}
{
"success": false,
"code": "<string>",
"message": "<string>"
}
{
"success": false,
"code": "<string>",
"message": "<string>"
}
Generates an account statement. Choose the format (pdf or csv) and exactly one period:
PeriodSend
Whole yearyear=2026
One monthchosenMonth=2026-05
Custom rangestartDate=2026-01-01&endDate=2026-03-31 (both required, inclusive)
The document comes back inline as a base64 data URI — render or download it client-side. Fee charges are merged into the statement automatically.
If there are no transactions in the chosen period, the API returns a 404 with STATEMENT_NO_TRANSACTIONS rather than an empty statement.

Authorizations

Authorization
string
header
required

The user's access token.

Path Parameters

customerId
string
required

The customer's ID.

accountId
string
required

The account's ID.

Query Parameters

format
enum<string>
required

Required. Output format.

Available options:
pdf,
csv
year
integer

Full-year statement. Use this, chosenMonth, or startDate+endDate — exactly one.

Example:

2026

chosenMonth
string

Single-month statement (YYYY-MM).

Example:

"2026-05"

startDate
string<date>

Custom range start (YYYY-MM-DD). Requires endDate.

endDate
string<date>

Custom range end (inclusive). Requires startDate.

Response

Statement document

success
boolean
Example:

true

data
object