curl --request GET \
--url https://api.recoupable.dev/api/accounts/{id}/payments \
--header 'x-api-key: <api-key>'import requests
url = "https://api.recoupable.dev/api/accounts/{id}/payments"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.recoupable.dev/api/accounts/{id}/payments', 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.recoupable.dev/api/accounts/{id}/payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.recoupable.dev/api/accounts/{id}/payments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.recoupable.dev/api/accounts/{id}/payments")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/accounts/{id}/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"account_id": "550e8400-e29b-41d4-a716-446655440000",
"payments": [
{
"id": "in_1U5xj400JObOnOb5BE0CmxCt",
"createdAt": "2026-09-04T14:33:00Z",
"description": "Pro, monthly",
"amountCents": 9900,
"currency": "usd",
"status": "paid",
"url": "https://invoice.stripe.com/i/acct_123/test_456"
}
],
"hasMore": false
}{
"error": "limit must be between 1 and 100"
}{
"error": "Unauthorized"
}{
"error": "Account not found"
}List Account Payments
List the invoices paid or owed by an account, newest first: subscription renewals, credit purchases, and invoiced enterprise plans alike. Invoices are merged across every Stripe customer tagged with the account id, so a card saved on one customer and an invoiced plan on another appear in one list. Non-draft rows carry the hosted invoice URL for the receipt; url is null for drafts. Returns an empty list (not 404) when the account has no tagged Stripe customer or no invoices yet. startingAfter is an invoice id from a previous page; the next page holds invoices created before it. id may be the authenticated account or an organization the caller belongs to.
curl --request GET \
--url https://api.recoupable.dev/api/accounts/{id}/payments \
--header 'x-api-key: <api-key>'import requests
url = "https://api.recoupable.dev/api/accounts/{id}/payments"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.recoupable.dev/api/accounts/{id}/payments', 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.recoupable.dev/api/accounts/{id}/payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.recoupable.dev/api/accounts/{id}/payments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.recoupable.dev/api/accounts/{id}/payments")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/accounts/{id}/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"account_id": "550e8400-e29b-41d4-a716-446655440000",
"payments": [
{
"id": "in_1U5xj400JObOnOb5BE0CmxCt",
"createdAt": "2026-09-04T14:33:00Z",
"description": "Pro, monthly",
"amountCents": 9900,
"currency": "usd",
"status": "paid",
"url": "https://invoice.stripe.com/i/acct_123/test_456"
}
],
"hasMore": false
}{
"error": "limit must be between 1 and 100"
}{
"error": "Unauthorized"
}{
"error": "Account not found"
}Authorizations
Your Recoup API key. Learn more.
Path Parameters
The unique identifier (UUID) of the account. Must be the authenticated account or another accessible via organization membership.
Query Parameters
Maximum rows to return.
1 <= x <= 100Cursor for the next page: the id of the last payment from the previous response.
Response
Payments retrieved successfully
The account these payments belong to.
"550e8400-e29b-41d4-a716-446655440000"
Invoices, newest first, merged across every Stripe customer tagged with the account id. Empty when the account has no tagged Stripe customer or no invoices.
Show child attributes
Show child attributes
True when another page exists; pass the last id as startingAfter.
false
Was this page helpful?
