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
The
409 means a merchant you already have looks like the one you’re creating. Check whether it’s the same business before creating another.Update Merchant PATCH /api/merchant/update
Get Signup Form Link GET /api/merchant/get-form-link
Get Application Status GET /api/merchant/application-status
boarded is the field that tells you whether the merchant can take money. A merchant can be live without application_status being approved, because declines and holds are sometimes resolved directly with underwriting.Transaction Management
Idempotency keys. The charge, authorize, capture, refund and void endpoints accept an optional
Idempotency-Key header. A reused key can also return 400 (malformed key), 409 (the first request with that key is still in progress) or 422 (the key was used for a different request), and a replayed response carries Idempotent-Replayed: true. See Retrying Safely.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
Authorize a Credit Card POST /api/transaction/authorize
Capture an Authorized Credit Card POST /api/transaction/capture
See Authorize and Capture for the full flow.
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.Refunding inside the ACH hold. Send
override_ach_settlement_wait: true to refund an ACH payment before the 7 days are up. It has no scope of its own: any token that can refund (transaction:charge-card-token) can send it. Use it only for cases like a duplicate charge or confirmed fraud. If the customer’s bank later returns the original payment, the merchant is out that amount with nothing left to recover it from. The flag has no effect on card refunds or on ACH payments that have already settled.Refunding a card payment that hasn’t settled yet voids it instead. The response is
"message": "void" rather than "refund", and the Credit Card Void webhook fires instead of Credit Card Refund.Void Transaction PATCH /api/transaction/void
Chargeback Management
List / Show Chargebacks GET /api/chargeback/list GET /api/chargeback/show
Chargeback data is imported once a day. See Disputes.
Document Management
Upload Documents POST /api/document/upload
List Documents GET /api/document/list
Held Funds
Get Balance / List Releasable Transactions GET /api/funds/balance GET /api/funds/transactions
Release Held Funds POST /api/funds/release
See Held Funds for idempotency and the
unknown status.
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.

