How responses are structured
The API returns errors in two general shapes: Validation errors — for most endpoints, a top-levelerrors object keyed by field name:
message string, either at the top level or nested under data:
data object or array containing the resource, or a confirmation message for actions like void, refund, and delete.
Message placement is inconsistent across endpoints — sometimes
message, sometimes data.message, and permission denials differ too (see Permission denials). Error wording also varies slightly between endpoints. The tables below reflect the API exactly as it behaves.Pagination: every list endpoint uses cursor pagination and returns up to 500 records per page, not just the customer list.Permission denials
Permission-denied responses are not uniform across the API:
Handle both shapes when checking for authorization failures.
Common messages
These appear across multiple endpoints.Merchant Management
List Merchants GET /api/merchant/list
Show Merchant GET /api/merchant/show
Create Merchant POST /api/merchant/create
Update Merchant PATCH /api/merchant/update
Get Signup Form Link GET /api/merchant/get-form-link
Transaction Management
List Transactions GET /api/transactions
Charge a Credit Card POST /api/transaction/charge-card
status_code and status_text are passed through from the processor. 00 / APPROVAL and 05 / DECLINE are the most common but other processor codes are possible.Charge a Bank Account (ACH) POST /api/transaction/charge-ach
Tokenize a Credit Card POST /api/transaction/tokenize-card
Show Transaction GET /api/transaction
Refund Transaction POST /api/transaction/refund
The ACH hold message includes a live countdown (
N day(s) remaining). You can surface that number directly in your own UI. The 7-day ACH refund hold is explained for merchants in ACH Refund Hold.Void Transaction PATCH /api/transaction/void
Addresses
List / Show / Create / Update / Delete GET /api/address/*
Customer Management
List / Show / Create / Update / Delete GET|POST|PATCH /api/customer/*
Deleting a customer also cancels any recurring payments associated with that customer.
Deposit Management
List Deposits GET /api/deposit/list
List with Transactions / Show Deposit GET /api/deposit/list-with-trans GET /api/deposit/show
Payment Method Management
List / Show / Create / Update / Delete GET|POST|PATCH /api/payment-method/*
To delete a payment method that has active recurring payments, cancel or reassign those recurring payments first.
Recurring Payments
All Recurring Payment endpoints GET|POST|PATCH /api/recurring-payment/*
Notable fields in success responses:
last_run_status (Success or Failed), last_run_failed_count, and error — a processor-provided reason such as EXPIRED CARD when the last attempt failed.
Pause defaults paused_until_date to 2099-12-31 if no date is provided.
Invoice Management
Invoice endpoints share a common error pattern. Beyond validation and auth, most return404 Invalid sid when data.sid does not match an accessible merchant, and several return 422 for state-specific conflicts.
Shared error pattern GET|POST|PATCH /api/invoice*
Endpoint-specific conflicts (422)
Recurring Invoices
All recurring-invoice endpoints GET|POST|PATCH /api/recurring-invoice*
Subscription Plans
All subscription-plan endpoints GET|POST|PATCH /api/subscription-plan/*
POST /api/subscription-plan/subscribe charges the customer’s saved payment method for the first period and enrolls them. A declined first charge returns 422 Charge failed. On success it returns 201 and fires the Subscription Created webhook. A plan cannot be deleted while it still has subscribers (422 Has subscribers) — archive it instead.Subscriptions
All subscription endpoints GET|PATCH /api/subscription/*
Lifecycle actions (
pause, resume, cancel) each fire the matching subscription webhook on success. See Webhooks.
Zapier Endpoints
For the transactions by phone endpoint, the request body must use either
last_days or start_date + end_date — not both.

