APIv3
Exit Documentation

Payments Report

Retrieve the invoice payments shown in the Payments Report, with date, customer, and salesperson filters.


Endpoints

MethodEndpointRequired scopeDescription
GET/api/v3/reports/paymentsreports:readList payments report rows and their filtered net total.

Permissions

Requires reports:read and the user's current report and invoice-list permissions. Inherit-all credentials follow the user's live permissions. Restricted credentials must explicitly include reports:read; invoices:read alone does not grant report access.

All rows, counts, and monetary totals are scoped to the authenticated account. Users without permission to view all invoices are restricted to invoices assigned to themselves, even if another user_id is requested. The response echoes the effective user filter. This is the invoice salesperson, not the user who entered the payment.

Payments Report

GET/api/v3/reports/payments

Required scope: reports:read

Query parameters

ParameterDefaultDescription
date_fromToday minus 30 daysInclusive payment date in YYYY-MM-DD format. Supply both dates together or omit both.
date_toTodayInclusive payment date in YYYY-MM-DD format, on or after date_from.
customer_idAll visible customersOptional customer UUID.
user_idAll permitted salespeopleOptional invoice salesperson UUID, subject to visibility restrictions.
sorttransaction_datetransaction_date, customer_name, amount, document_number, reference, or sales_person_name.
directiondescasc or desc. Equal sort values use invoice number descending and transaction ID descending as tie-breakers (invoice-number sorting uses transaction ID).
page1Page number, minimum 1.
limit20Rows per page, clamped to 1–100.
include_totaltrueInclude exact pagination counts. Accepts true, false, 1, or 0.
include_summarytrueInclude the net payment total for the entire filtered result. Accepts true, false, 1, or 0.

Dates filter the recorded payment date, not the invoice issue date or transaction creation timestamp. Dates are calendar dates without timezone conversion. The default range follows the web report's application calendar and includes both endpoints. Valid years are 1000–9999.

Invalid dates, incomplete or reversed ranges, invalid UUID filters, unsupported sorting, and invalid boolean values return 422 with code: "invalid_query_parameter" and the offending param. Well-formed filters with no visible matches return an empty list and a zero summary.

bash
curl 'https://yourbusiness.salesbinder.com/api/v3/reports/payments?date_from=2026-10-01&date_to=2026-10-31&limit=100' \
  --header 'Authorization: Bearer YOUR_API_KEY'

Response

The response uses the standard paginated list. Each row contains id, object: "payment", invoice_id, invoice_number, customer_id, customer_name, user_id, sales_person_name, payment_date, amount, type, reference, and card. Card data is either null or an object with brand and last4; provider tokens and accounting sync status are not returned.

Amounts are decimal strings rounded to the account's currency_decimal_places (0–4), using the same calculation as the web report. Negative amounts have type: "refund"; nonnegative amounts have type: "payment". currency identifies the account's reporting currency. This endpoint does not perform currency conversion.

json
{
  "object": "list",
  "url": "/api/v3/reports/payments",
  "has_more": false,
  "data": [],
  "pagination": { "page": 1, "per_page": 100, "total_pages": 0, "total_records": 0 },
  "filters": {
    "date_from": "2026-10-01",
    "date_to": "2026-10-31",
    "customer_id": null,
    "user_id": null,
    "sort": "transaction_date",
    "direction": "desc"
  },
  "currency": "USD",
  "currency_decimal_places": 2,
  "summary": { "total_amount": "0.00" }
}

summary.total_amount is the signed sum across all matching rows, not just the current page. It includes invoice payments, refunds, full overpayment cash receipts, and reversals of overpayments. Customer-credit applications and their reversals are excluded because they are not new cash payments. Purchase-order payments are excluded.

Set include_total=false to skip the exact count query; total_records and total_pages are then omitted. Set include_summary=false to skip the aggregate query and omit summary. The options are independent. For larger exports, request the summary on the first page only and disable both aggregates on subsequent pages. Large page offsets still have a cost; records may change between requests, so deduplicate by payment ID. Responses are marked Cache-Control: no-store.