API Reference
Returns a club's payment activity: the same rows and totals shown on Club Wallet → Activity.
X-API-Key headerThe API key is provided by the Helping With Flags team. Keep it on your server. Never put it in a browser, mobile app or code repository. If the key may have leaked, contact us and we will replace it.
curl -G "https://www.helpingwithflags.com/api/v1/club-wallet/activity" \ -H "X-API-Key: YOUR_API_KEY" \ -H "Accept: application/json" \ --data-urlencode "club_slug=SpringfieldRotary" \ --data-urlencode "date_type=custom" \ --data-urlencode "payments_for=03-01-2026 / 03-31-2026" \ --data-urlencode "per_page=50"
Send as query parameters. Only club_slug is required; with no filters you get the current calendar year, all payment types and all statuses, 10 rows per page.
| Name | Type | Description |
|---|---|---|
club_slugrequired | string | The club to read payments for, by its slug (the name in its web address, e.g. SpringfieldRotary). Letter case doesn't matter. Ask the Helping With Flags team for it. |
date_type | string | calendar, custom or fiscal. Default calendar. |
calendar_input | date range | Range for calendar. Default: Jan 1 – Dec 31 of the current year. |
payments_for | date range | Range for custom. Required when date_type=custom. |
fiscal_input | date range | Subscription year for fiscal; the end date's year is used. Required when date_type=fiscal. Only for clubs on a yearly subscription cycle. |
filter_name | string | Customer name contains this text. |
filter_product | integer | Only this product. Splits payments per product line, see Calculations. |
filter_account | string | hwf for the Helping With Flags account, or the ID of the club's own payment account. |
card_paymentcash_paymentcheck_paymentecheck_payment | 0 / 1 | Payment types to include. Card covers new and saved cards. If none are sent, all types are included; setting all that you send to 0 is an error. |
payment_status | string | paid, refund or processing. Default: all three. |
page | integer | Page number, 1–1,000,000. Default 1. |
per_page | integer | Payments per page, 1–100. Default 10. With filter_product one payment can return several rows, so a page may hold more rows than this. |
Date ranges use MM-DD-YYYY / MM-DD-YYYY (space, slash, space), US Central time, both days included. URL-encode the value.
{
"type": "success",
"code": 200,
"message": "Payment activity retrieved successfully.",
"data": {
"club": { "id": 123, "slug": "SpringfieldRotary", "name": "Springfield Rotary Club" },
"gateway": "stripe",
"filters": {
"date_type": "custom", "date_from": "2026-03-01", "date_to": "2026-03-31", "subscription_year": null,
"payment_types": ["CARD", "STORED_CARD", "CASH", "CHECK", "E_CHECK"],
"payment_status": ["paid", "refund", "processing"],
"filter_name": null, "filter_product": null, "filter_account": null
},
"payments": [
{
"payment_id": 82601,
"payment_date": "2026-03-14T10:22:05-05:00",
"full_name": "Jane Smith",
"payment_type": "CARD",
"payment_status": "paid",
"gateway": "stripe",
"flags": 2,
"flag_amount": 100.00,
"processing_fee": 3.20,
"gateway_fee": 3.29,
"total": 99.91
}
],
"totals": {
"flags": 2, "flag_amount": 100.00, "processing_fee": 3.20,
"sub_total": 103.20, "gateway_fee": 3.29, "total": 99.91
},
"pagination": { "current_page": 1, "per_page": 50, "total": 1, "last_page": 1 }
}
}| Field | Type | Description |
|---|---|---|
payment_id | integer | Unique, stable payment ID. |
payment_date | string | Date and time, ISO 8601 with time zone. |
full_name | string | Customer name on the payment. |
payment_type | string | CARD, STORED CARD, CASH, CHECK or eCheck. |
payment_status | string | paid, refund or processing (eCheck clearing). |
gateway | string / null | Payment company that processed this payment: authorize.net, paypal, squareup, stripe. null when no company was involved (for example cash or check). |
flags | integer | Number of flags. |
flag_amount | number | Amount for the flags. |
processing_fee | number | Fee paid by the customer on top, if the club charges one. |
gateway_fee | number | Fee taken by the payment company named in gateway. 0 if none. |
total | number | Net amount for the club, see Calculations. |
| Field | Description |
|---|---|
club | The club you asked for: id, slug and name. |
gateway | The club's current payment company: authorize.net, paypal, squareup, stripe. Older payments may have gone through a different account, so use each payment's own gateway. |
filters | Filters actually applied, defaults included. subscription_year is set only for fiscal. |
totals | Sums across all pages, refunds subtracted, so they can be negative (for example with payment_status=refund). sub_total includes processing fees; total is the net received after fees. |
pagination | total is the number of matching payments. Request pages until current_page equals last_page. |
Amounts are in US dollars, rounded to 2 decimals (sent as JSON numbers, so 50 means 50.00). Payment row amounts are always positive; refunds are identified by payment_status: "refund".
Amounts follow the same rules as the Club Wallet Activity page, so both always match.
| Payment | gateway_fee | total |
|---|---|---|
Card or eCheck, paid / processing | Payment company's fee | flag_amount + processing_fee − gateway_fee |
| Cash, check, and all refunds | 0 | flag_amount |
With filter_product, each payment is split into one row per matching product line (same payment_id). The amount, fees and flags are shared out by that line's part of the payment, donations excluded, and cash and check rows add the processing fee to total. Totals cover that product across all pages, except totals.flags, which counts every flag on the matching payments.
totals.gateway_fee counts card fees only, and is 0 when card payments are excluded or payment_status=refund. Unpaid "pay later" requests and payments imported from other systems are never listed.
Errors return type: "error" with code equal to the HTTP status. Validation errors also list each problem by parameter.
{
"type": "error",
"code": 422,
"message": "The request has some problems. Please check the errors list.",
"errors": { "payments_for": ["Use the format MM-DD-YYYY / MM-DD-YYYY with real dates, for example 03-01-2026 / 03-31-2026."] }
}| Status | Meaning |
|---|---|
| 401 | API key missing or invalid. |
| 403 | Club account is suspended. |
| 404 | No club with this club_slug, or the API address is wrong. |
| 405 | Wrong HTTP method. Use GET. |
| 422 | Invalid or missing parameter. See errors. |
| 429 | Rate limit reached. Wait the number of seconds in the Retry-After header, then retry. |
| 500 | Server error. Retry later; contact us if it persists. |
No matching payments is not an error: you get 200 with an empty payments list.
Questions or a new API key: contact the Helping With Flags team.