From alternative-payments
Lists and filters Alternative Payments transactions by type, status, customer, invoice, and payment method; retrieves single transactions; lists and retrieves payouts and their transactions for reconciliation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/alternative-payments:paymentsWhen to use
When listing or filtering transactions, retrieving a transaction, or listing and reconciling payouts and the transactions inside them. Use when: alternative payments transaction, list transactions, transaction status, alternative payments payout, list payouts, payout transactions, reconcile payout, failed payment, declined transaction, or alternativepayments payout.
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill covers the **read-only** money-visibility surface in Alternative
This skill covers the read-only money-visibility surface in Alternative Payments: transactions (individual payment records) and payouts (settled batches of funds deposited to your account). It is used for reporting and reconciliation — matching transactions to invoices and customers, and tracing which transactions make up a given payout.
There is no create-payment tool here. This integration never charges a card
or moves money (POST /payments, the direct charge, is excluded by design). To
collect from a customer, generate a hosted payment link or payment request — see
Alternative Payments Invoicing.
A transaction is a single payment event against an invoice or payment request.
Note that the transactions resource lives at GET /payments — but only the
read (list/get) verbs are exposed.
| Field | Type | Description |
|---|---|---|
id | string | Transaction identifier |
type | string | Transaction type (e.g. payment, refund) |
status | string | succeeded, pending, failed, declined |
amount | number | Transaction amount |
currency | string | ISO currency code |
customer_id | string | Customer the transaction belongs to |
invoice_id | string | Invoice the transaction settled (if any) |
payment_method | string | card or standard_ach |
payout_id | string | Payout this transaction settled into (if settled) |
created_at | datetime | When the transaction occurred |
A payout is a batch of funds Alternative Payments deposits to your bank account. Each payout aggregates many settled transactions — reconciling a payout means listing its transactions and matching them back to invoices and customers.
| Field | Type | Description |
|---|---|---|
id | string | Payout identifier |
amount | number | Total payout amount deposited |
currency | string | ISO currency code |
status | string | pending, paid, failed |
arrival_date | datetime | Expected/actual deposit date |
created_at | datetime | When the payout was created |
All requests carry a bearer token (Authorization: Bearer <token>). See
Alternative Payments API Patterns for the OAuth2 token
flow, the 5 req/sec rate limit, and cursor pagination.
GET /payments lists transactions. Supported filters:
| Filter | Values / Format | Purpose |
|---|---|---|
type | e.g. payment, refund | Filter by transaction type |
status | succeeded, pending, failed, declined | Filter by outcome |
customer_id | customer id | Transactions for one customer |
invoice_id | invoice id | Transactions settling one invoice |
payment_method | card or standard_ach | Filter by method |
created_at_start | YYYY-MM-DD | Start of date range |
created_at_end | YYYY-MM-DD | End of date range |
cursor | cursor string | Pagination (with limit) |
# Failed and declined card transactions in June 2026
curl -s "https://public-api.alternativepayments.io/payments?status=failed&payment_method=card&created_at_start=2026-06-01&created_at_end=2026-06-30&limit=100" \
-H "Authorization: Bearer ${TOKEN}"
# All transactions for one customer
curl -s "https://public-api.alternativepayments.io/payments?customer_id=${CUSTOMER_ID}&limit=100" \
-H "Authorization: Bearer ${TOKEN}"
# Transactions that settled a specific invoice
curl -s "https://public-api.alternativepayments.io/payments?invoice_id=${INVOICE_ID}" \
-H "Authorization: Bearer ${TOKEN}"
Responses are cursor-paginated — items in data[], with next_cursor /
has_more. Pass cursor=<next_cursor> to fetch the next page.
curl -s "https://public-api.alternativepayments.io/payments/${TRANSACTION_ID}" \
-H "Authorization: Bearer ${TOKEN}"
curl -s "https://public-api.alternativepayments.io/payouts?limit=100" \
-H "Authorization: Bearer ${TOKEN}"
curl -s "https://public-api.alternativepayments.io/payouts/${PAYOUT_ID}" \
-H "Authorization: Bearer ${TOKEN}"
curl -s "https://public-api.alternativepayments.io/payouts/${PAYOUT_ID}/transactions?limit=100" \
-H "Authorization: Bearer ${TOKEN}"
async function reconcilePayout(token, payoutId) {
const base = 'https://public-api.alternativepayments.io';
const headers = { 'Authorization': `Bearer ${token}` };
const payout = JSON.parse(
await (await fetch(`${base}/payouts/${payoutId}`, { headers })).text()
);
// Pull every transaction in the payout (cursor pagination).
const txns = [];
let cursor;
do {
const url = new URL(`${base}/payouts/${payoutId}/transactions`);
url.searchParams.set('limit', '100');
if (cursor) url.searchParams.set('cursor', cursor);
const body = JSON.parse(await (await fetch(url, { headers })).text());
txns.push(...(body.data ?? []));
cursor = body.has_more ? body.next_cursor : undefined;
} while (cursor);
const sum = txns.reduce((t, x) => t + x.amount, 0);
return {
payout,
transactionCount: txns.length,
transactionTotal: sum,
reconciles: Math.abs(sum - payout.amount) < 0.01,
transactions: txns
};
}
List transactions with status=succeeded, group by invoice_id, and confirm
each open invoice has a matching settled transaction. Invoices with no
succeeded transaction are still outstanding.
Filter with status=failed (and status=declined) over a recent date range to
build a follow-up list. For each, the linked customer_id / invoice_id tells
you who to contact — then generate a fresh hosted payment link from the
Invoicing skill.
List a payout's transactions, sum their amounts, and confirm the total matches the payout amount. Trace each transaction back to its invoice and customer so the deposit can be tied to specific receivables.
| Code | Meaning | Action |
|---|---|---|
| 200 | Success | Process data[] / object |
| 401 | Unauthorized | Refresh token, retry once |
| 404 | Transaction / payout not found | Verify the id |
| 429 | Rate limited | Back off (Retry-After), retry |
status, customer_id, invoice_id, and date filters rather than fetching everything.has_more / next_cursor (pass cursor=).| Endpoint | Method | Description |
|---|---|---|
/payments | GET | List transactions (filterable, cursor-paginated) |
/payments/{id} | GET | Get a single transaction |
/payouts | GET | List payouts (cursor-paginated) |
/payouts/{id} | GET | Get a single payout |
/payouts/{id}/transactions | GET | List the transactions in a payout |
Excluded by design:
POST /payments(direct charge). Money movement is out of scope.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin alternative-paymentsLists, retrieves, creates, and archives Alternative Payments invoices with line items, and generates hosted payment links or standalone payment requests. Hosted links let customers choose to pay without moving money on their behalf.
Records and tracks Xero payments including allocation, overpayments, prepayments, and batch operations for MSP client billing and reconciliation.
Manages Tray payment records via REST API: CRUD on /payments, plus active payment options and global settings (7 endpoints total).