curl --request GET \
--url https://collectwiseapi.com/payments \
--header 'collectwise_key: <api-key>'import requests
url = "https://collectwiseapi.com/payments"
headers = {"collectwise_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {collectwise_key: '<api-key>'}};
fetch('https://collectwiseapi.com/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://collectwiseapi.com/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 => [
"collectwise_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://collectwiseapi.com/payments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("collectwise_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://collectwiseapi.com/payments")
.header("collectwise_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://collectwiseapi.com/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["collectwise_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"object": "list.payments",
"period": {
"start_date": "2026-06-18",
"end_date": "2026-06-18"
},
"pagination": {
"limit": 50,
"has_more": false,
"next_cursor": null
},
"count": 1,
"payments": [
{
"id": "pi_3RxT81GhIJk2LmNo",
"object": "payment",
"debtor_id": "ACC482910",
"client_name": "Sunrise Medical Group",
"call_id": "call_9f2ab61c3d",
"amount": 245.16,
"currency": "usd",
"processor": "stripe",
"payment_type": "flat",
"payment_method": "CARD",
"status": "success",
"transaction_id": "ch_3RxT81GhIJk2LmNo",
"phone": "+15555550123",
"recurrence_rule": null,
"total_installments": null,
"next_payment_date": null,
"created_at": "2026-06-18T14:22:07.318Z"
}
]
}{
"error": {
"type": "invalid_request_error",
"message": "start_date is required and must be YYYY-MM-DD or a full ISO 8601 UTC timestamp (e.g. 2026-06-18T04:00:00Z)",
"param": "start_date"
}
}{
"error": {
"type": "invalid_request_error",
"message": "start_date is required and must be YYYY-MM-DD or a full ISO 8601 UTC timestamp (e.g. 2026-06-18T04:00:00Z)",
"param": "start_date"
}
}{
"error": "Forbidden: Invalid API Key - Contact CollectWise Support for Assistance"
}{
"error": {
"type": "invalid_request_error",
"message": "start_date is required and must be YYYY-MM-DD or a full ISO 8601 UTC timestamp (e.g. 2026-06-18T04:00:00Z)",
"param": "start_date"
}
}List Payments
Returns payments collected for your organization over a date range, newest first.
curl --request GET \
--url https://collectwiseapi.com/payments \
--header 'collectwise_key: <api-key>'import requests
url = "https://collectwiseapi.com/payments"
headers = {"collectwise_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {collectwise_key: '<api-key>'}};
fetch('https://collectwiseapi.com/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://collectwiseapi.com/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 => [
"collectwise_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://collectwiseapi.com/payments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("collectwise_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://collectwiseapi.com/payments")
.header("collectwise_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://collectwiseapi.com/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["collectwise_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"object": "list.payments",
"period": {
"start_date": "2026-06-18",
"end_date": "2026-06-18"
},
"pagination": {
"limit": 50,
"has_more": false,
"next_cursor": null
},
"count": 1,
"payments": [
{
"id": "pi_3RxT81GhIJk2LmNo",
"object": "payment",
"debtor_id": "ACC482910",
"client_name": "Sunrise Medical Group",
"call_id": "call_9f2ab61c3d",
"amount": 245.16,
"currency": "usd",
"processor": "stripe",
"payment_type": "flat",
"payment_method": "CARD",
"status": "success",
"transaction_id": "ch_3RxT81GhIJk2LmNo",
"phone": "+15555550123",
"recurrence_rule": null,
"total_installments": null,
"next_payment_date": null,
"created_at": "2026-06-18T14:22:07.318Z"
}
]
}{
"error": {
"type": "invalid_request_error",
"message": "start_date is required and must be YYYY-MM-DD or a full ISO 8601 UTC timestamp (e.g. 2026-06-18T04:00:00Z)",
"param": "start_date"
}
}{
"error": {
"type": "invalid_request_error",
"message": "start_date is required and must be YYYY-MM-DD or a full ISO 8601 UTC timestamp (e.g. 2026-06-18T04:00:00Z)",
"param": "start_date"
}
}{
"error": "Forbidden: Invalid API Key - Contact CollectWise Support for Assistance"
}{
"error": {
"type": "invalid_request_error",
"message": "start_date is required and must be YYYY-MM-DD or a full ISO 8601 UTC timestamp (e.g. 2026-06-18T04:00:00Z)",
"param": "start_date"
}
}Date Handling
Bothstart_date and end_date accept two formats:
- Date only (
YYYY-MM-DD) — Interpreted as full UTC days.start_datebegins at midnight UTC;end_datecovers that entire UTC day, including payments recorded in the final sub-second (e.g.23:59:59.750Z). - Full ISO timestamp (
YYYY-MM-DDTHH:mm:ssZ) — Exact UTC boundaries, inclusive on both ends. Use this when you need timezone-specific alignment.
Timezone-Aligned Example
To query the US Eastern Time day of June 18, 2026, send:start_date=2026-06-18T04:00:00Z
end_date=2026-06-19T03:59:59Z
id in case a payment lands exactly on a window boundary.
Pagination
Results are ordered newest first. Whenpagination.has_more is true, pass pagination.next_cursor as starting_after on the next request and keep the same date range and filters:
GET /payments?start_date=2026-06-01&end_date=2026-06-30&limit=100
GET /payments?start_date=2026-06-01&end_date=2026-06-30&limit=100&starting_after=<next_cursor>
Posting Payments
- Use
idas your idempotency key. It is stable across polls and unique per payment.transaction_idmay be null depending on the processor. recurrence_rule,total_installments, andnext_payment_dateare set on payment-plan installments and null on one-time payments — together they distinguish “installment 3 of 12” from a one-off when posting.phoneis derived from the originating call, falling back to the debtor record; it is null for payment-link records.
Relationship to the Payment Received Webhook
The Payment Received webhook fires once, in real time, when a payment is captured — the right integration for posting immediately without polling.GET /payments is the complement: same-day reconciliation sweeps, catching up after downtime, or backfilling a window your webhook consumer missed. Both surface the same payment id, so you can dedupe between the two streams.Authorizations
Query Parameters
Start of date range, inclusive. Accepts YYYY-MM-DD (interpreted as 00:00:00 UTC) or a full ISO 8601 UTC timestamp like 2026-06-18T04:00:00Z
End of date range. Accepts YYYY-MM-DD (covers that entire UTC day, including the final sub-second) or a full ISO 8601 UTC timestamp (inclusive). Must be on or after start_date and within 366 days of it.
Filter by payment status
success, failed, declined, error Filter by payment type. flat = one-time payment, subscription = payment-plan installment, settlement = settlement payment, remainder = remainder charge after a partial payment
flat, subscription, settlement, remainder Filter by payment method (matched case-insensitively)
ach, card Page size. Defaults to 50, maximum 100.
x <= 100Pagination cursor: the id of the last payment on the previous page (also returned as pagination.next_cursor). Must reference a payment of your organization inside the queried date range.
