curl --request GET \
--url https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/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://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/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: Basic <encoded-value>"
],
]);
$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://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"data": [
{
"statement_id": "8A31B2C0-4F6D-4A21-9E3B-5C1D0F7A2B84",
"customer_id": "2EE24580-B97B-4949-A65C-929CCB9B9B8D",
"account_id": "7C1F9A34-2D6B-4E58-8A03-B15E7D9C4620",
"as_of": "2026-08-27T14:22:31Z",
"period_start_date": "2026-05-16T00:00:00Z",
"period_end_date": "2026-06-15T00:00:00Z",
"due_date": "2026-07-10T00:00:00Z",
"pdf_url": "https://imprint-statements.s3.us-east-1.amazonaws.com/statements/8A31B2C0.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600",
"currency": "USD",
"statement_balance": 123,
"minimum_due": 123,
"previous_balance": 123,
"purchases": 123,
"payments": 123,
"credits": 123,
"refunds": 123,
"interest": 123,
"fees": 123,
"overdue_amount": 123
}
],
"has_more": true,
"next_page_token": "eyJsYXN0X3N0YXRlbWVudF9pZCI6MTAzfQ"
}{
"path": "/v2/customers",
"details": [
"email: must be a well-formed email address"
],
"error": "Bad Request",
"status": 400,
"timestamp": "2025-01-20T18:18:22.923+00:00"
}{
"error": {
"type": "BAD_REQUEST_ERROR",
"message": "unsupported reward_type: INVALID, must be STATEMENT or DELAYED"
}
}{
"type": "CUSTOMER_NOT_FOUND_ERROR",
"message": "Customer not found for provided ID: CSMR-v1-123",
"param": "customer_id"
}List an account's statements
Returns the account’s closed billing statements, newest first. A statement appears here once its cycle has closed; the cycle in progress is not a statement yet — read the account itself for where the customer stands today.
Amounts follow the convention on a card statement: what the customer was
charged is positive and what was credited back to them is negative. So
purchases, interest, and fees are positive, while payments,
credits, and refunds are negative.
Each statement carries a pdf_url: a short-lived link to the statement
document as the cardholder sees it. Fetch it promptly rather than storing
it — see the field description for how long it lasts.
Results are paginated. When has_more is true, pass the response’s
next_page_token back as starting_after to retrieve the next page.
Each statement carries as_of: when it was read, which is when the
request was served. Not when the cycle closed — that is
period_end_date.
Required scope: ACCOUNT_READ — the same scope as the account reads.
A statement is a closed cycle of the account, so a key that can read the
account can read its statements.
curl --request GET \
--url https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/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://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/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: Basic <encoded-value>"
],
]);
$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://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://dev.sbx.imprint.co/v2/customers/{customer_id}/accounts/{account_id}/statements")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"data": [
{
"statement_id": "8A31B2C0-4F6D-4A21-9E3B-5C1D0F7A2B84",
"customer_id": "2EE24580-B97B-4949-A65C-929CCB9B9B8D",
"account_id": "7C1F9A34-2D6B-4E58-8A03-B15E7D9C4620",
"as_of": "2026-08-27T14:22:31Z",
"period_start_date": "2026-05-16T00:00:00Z",
"period_end_date": "2026-06-15T00:00:00Z",
"due_date": "2026-07-10T00:00:00Z",
"pdf_url": "https://imprint-statements.s3.us-east-1.amazonaws.com/statements/8A31B2C0.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600",
"currency": "USD",
"statement_balance": 123,
"minimum_due": 123,
"previous_balance": 123,
"purchases": 123,
"payments": 123,
"credits": 123,
"refunds": 123,
"interest": 123,
"fees": 123,
"overdue_amount": 123
}
],
"has_more": true,
"next_page_token": "eyJsYXN0X3N0YXRlbWVudF9pZCI6MTAzfQ"
}{
"path": "/v2/customers",
"details": [
"email: must be a well-formed email address"
],
"error": "Bad Request",
"status": 400,
"timestamp": "2025-01-20T18:18:22.923+00:00"
}{
"error": {
"type": "BAD_REQUEST_ERROR",
"message": "unsupported reward_type: INVALID, must be STATEMENT or DELAYED"
}
}{
"type": "CUSTOMER_NOT_FOUND_ERROR",
"message": "Customer not found for provided ID: CSMR-v1-123",
"param": "customer_id"
}Authorizations
Basic HTTP authentication. Allowed headers-- Authorization: Basic <base64(api_key_id:api_key_secret)>
Path Parameters
The unique identifier for the Imprint customer
"2EE24580-B97B-4949-A65C-929CCB9B9B8D"
The unique identifier for the account, as returned by list accounts
"7C1F9A34-2D6B-4E58-8A03-B15E7D9C4620"
Query Parameters
Limits the number of returned statements
1 <= x <= 100A cursor for use in pagination. Unlike other list endpoints, this
takes the opaque next_page_token from the previous response rather
than a statement id. Omit it for the first page.
Response
List of customer statements
Show child attributes
Show child attributes
Opaque cursor for the next page, present only when has_more is
true. Pass it back as starting_after to fetch the following page.
Treat it as opaque — its contents are not a statement id and may
change.
"eyJsYXN0X3N0YXRlbWVudF9pZCI6MTAzfQ"