Members API Documentation
Overview
This collection is the members report: it returns one row for each member — that is, each person covered by a membership. It includes membership owners and, for group memberships, every covered member. A person who holds more than one membership appears once per membership, so de-duplicate on customer_id if you need a unique list of people.
This collection complements two related ones:
- Customer Memberships — one row per membership (subscription), owner-centric. Each member row here links to its customer membership via
membership_id. - Membership Types — the membership plans/types. Each member row here links to its membership type via
membership_type_id.
This collection is read-only and supports only the list operation; there is no per-member detail URL. Rows are ordered by member last name, then first name.
Response shape: unlike most collections, this endpoint returns a plain JSON array — it is not paginated and has no count / next / results envelope. A single request returns every matching member. See Pulling All Members.
Members included: by default only members of active, frozen, and payment-failed memberships are returned. Members of cancelled/ended, denied, and not-yet-started (awaiting initial payment) memberships are not retrievable through this collection. See Statuses.
Fields
All fields are read-only. They are grouped below by purpose for readability; all groups appear together in each row.
Member
The person this row is about (the covered member, who may or may not be the owner).
| Name | Type | Description |
|---|---|---|
| customer_id | integer | The identifier of the member's customer record. |
| customer_url | string (URL) | The API URL of the member's customer record. |
| first_name | string | The member's first name. |
| last_name | string | The member's last name. |
| birthday | string (ISO-8601 date) | The member's birthday. |
| string | The member's email address. | |
| telephone | string | The member's telephone number. |
| address_postcode | string | The postcode or zip code of the member's address. |
| address_street_1 | string | The member's street address line 1. |
| address_street_2 | string | The member's street address line 2. |
| address_city | string | The city of the member's address. |
| address_state | string | The state or province of the member's address. |
| address_country | string | The two-letter country code of the member's address. |
| home_location_id | integer or null | The identifier of the member's home location. |
| home_location_name | string or null | The name of the member's home location. |
| add_ons | list of JSON objects | The add-ons applied to this member for this membership. See the add-on object. |
Membership
| Name | Type | Description |
|---|---|---|
| membership_id | integer | The identifier of the customer membership (subscription) this member belongs to. Note: the membership_id query parameter means something different — see Filters. |
| membership_url | string (URL) | The API URL of the customer membership. |
| membership_type_id | integer | The identifier of the membership type (plan). |
| membership_type_url | string (URL) | The API URL of the membership type. |
| membership_name | string | The name of the membership type. |
| membership_purchase_type | string | The membership type's purchase type: REC (Recurring), PRE (Prepaid), or BEN (Benefit). |
| membership_interval | string | The billing interval for recurring memberships (e.g. MON), or empty otherwise. See billing intervals. |
| membership_is_group | boolean | Whether the membership type is a group membership. |
| membership_is_youth_programming | boolean | Whether the membership type is a youth programming membership. |
| membership_duration_years | integer or null | The membership type's duration in years, if applicable. |
| membership_duration_months | integer or null | The membership type's duration in months, if applicable. |
| membership_duration_days | integer or null | The membership type's duration in days, if applicable. |
| location_id | integer or null | The identifier of the membership's location. |
| location_url | string (URL) or null | The API URL of the membership's location. |
| location_name | string or null | The name of the membership's location. |
Owner
The customer who owns the membership. For a solo membership this is the same person as the member; for a group membership it is the account that holds the membership.
| Name | Type | Description |
|---|---|---|
| owner_id | integer | The identifier of the owning customer. |
| owner_url | string (URL) | The API URL of the owning customer. |
| owner_first_name | string | The owner's first name. |
| owner_last_name | string | The owner's last name. |
| owner_birthday | string (ISO-8601 date) | The owner's birthday. |
| owner_email | string | The owner's email address. |
| owner_telephone | string | The owner's telephone number. |
Status & Dates
| Name | Type | Description |
|---|---|---|
| status | string | The member's effective status. One of the statuses. If the membership is active but this individual member is frozen, the status is FRZ. |
| is_pending_staff_approval | boolean | Whether the membership is awaiting staff approval. |
| start_date | string (ISO-8601 date) | The membership's start date, in the local time of your organization. |
| end_date | string (ISO-8601 date) | The membership's end date (or next bill date for recurring memberships), in organization-local time. |
| has_payment_method | boolean | Whether a saved payment method is on file for the membership. |
Billing Fields (Optional)
These fields are included only when the request is made with include_billing_info=true.
| Name | Type | Description |
|---|---|---|
| membership_num_members | integer | The number of members on the membership. |
| billing_amount | string (decimal) | The next bill total for recurring memberships; 0 for non-recurring memberships. |
| billing_amount_per_member | string (decimal) | The next bill total divided by the number of members. |
| last_invoice_id | integer or null | The identifier of the most recent invoice for the membership. |
| last_invoice_amount | string (decimal) or null | The amount of the most recent invoice. |
| last_invoice_tax_amount | string (decimal) or null | The tax amount of the most recent invoice. |
| last_invoice_date | string (ISO-8601 date) or null | The date of the most recent invoice, in organization-local time. |
Add-on Object
Each entry in a member's add_ons list is a JSON object with the following fields:
| Name | Type | Description |
|---|---|---|
| id | string | The identifier of the add-on. |
| name | string | The add-on's name. |
| fee | string (decimal) | The add-on's fee. |
| is_visible | boolean | Whether the add-on is visible to customers. |
| icon_color_hex | string | The hex color of the add-on's icon. |
| icon_initials | string | The initials shown on the add-on's icon. |
| revenue_account_codes | JSON object | A mapping of location ID to the revenue account code for the add-on. |
| tax_rate_id | integer or null | The identifier of the add-on's tax rate, if any. |
| tax_rate_per_location | JSON object or null | A mapping of location ID to tax rate, where the add-on is taxed per location. |
Statuses
The status field takes one of the following values. They are grouped by the status_in token used to request them (see Filters). For the full meaning of each code, see the Customer Memberships statuses.
status_in token | Status codes returned |
|---|---|
active | ACT (Active), IPP (Initial Payment Processing), PPR (Renewal Payment Processing) |
frozen | FRZ (Frozen), FPR (Freeze Payment Processing), plus individually-frozen members |
failed | PAF (Renewal Payment Failed), FPF (Freeze Payment Failed) |
Filters
See the filtering documentation for more information on how to use filters in the Capitan API.
| Name | Syntax | Description |
|---|---|---|
| Status | status_in |
A comma-separated list of the tokens active, frozen, and failed, selecting which membership statuses to return (see Statuses). If omitted, all three are returned. Tokens for cancelled, ended, denied, and not-yet-started memberships are not available. |
| Membership Type | membership_id |
Filters for members enrolled in the given membership type ID. Note: despite its name, this parameter takes a membership type ID (the value of membership_type_id in each row), not the membership_id field. An unknown ID returns HTTP 400. |
| Purchase Type | purchase_type |
Filters for members whose membership type has the given purchase type (REC, PRE, or BEN). |
| Is Group | is_group |
Filters for members whose membership type is (true) or is not (false) a group membership. |
| Is Youth Programming | is_youth_programming |
Filters for members whose membership type is (true) or is not (false) a youth programming membership. |
| Add-on Name | add_on_name |
Filters for members who have an add-on with exactly the given name. |
| Home Location | home_location_id |
Filters for members whose own home location is the given ID. (This filters on the member's home location, not the membership's location.) |
| Minimum Start Date | start_date_min |
Filters for members whose membership starts on or after the given date (in the local time of your organization). |
| Maximum Start Date | start_date_max |
Filters for members whose membership starts on or before the given date (in the local time of your organization). The given date is inclusive of its whole local day. |
| Has Payment Method | has_payment_method |
If true, filters for members whose membership has a saved payment method; any other value filters for those without one. |
| Include Billing Info | include_billing_info |
If true, adds the billing fields to each row. Defaults to false. |
Operations
List
Returns a plain JSON array (no pagination envelope).
Request
GET /api/members/
Response
200 OK
[
{
"customer_id": 4822,
"customer_url": "https://api.hellocapitan.com/api/customers/4822/",
"first_name": "Ben",
"last_name": "Anderson",
"birthday": "1992-11-03",
"email": "ben@example.com",
"telephone": "",
"address_postcode": "BS1 5TF",
"address_city": "Bristol",
"home_location_id": 7,
"home_location_name": "Bristol Central",
"add_ons": [],
"membership_id": 9912,
"membership_url": "https://api.hellocapitan.com/api/customer-memberships/9912/",
"membership_type_id": 33,
"membership_type_url": "https://api.hellocapitan.com/api/memberships/33/",
"membership_name": "Family Monthly",
"membership_purchase_type": "REC",
"membership_interval": "MON",
"membership_is_group": true,
"membership_is_youth_programming": false,
"location_id": 7,
"location_name": "Bristol Central",
"owner_id": 4821,
"owner_url": "https://api.hellocapitan.com/api/customers/4821/",
"owner_first_name": "Ada",
"owner_last_name": "Anderson",
"owner_email": "ada@example.com",
"status": "ACT",
"is_pending_staff_approval": false,
"start_date": "2025-09-01",
"end_date": "2026-07-01",
"has_payment_method": true
},
...
]
Pulling All Members
A single unfiltered request returns every member of an active, frozen, or payment-failed membership, as a plain (unpaginated) array:
GET /api/members/
Add include_billing_info=true to include billing fields. Keep in mind:
- The response is the complete set in one payload — there is no paging. For a large organization this can be a sizeable response.
- Members of cancelled/ended, denied, and not-yet-started memberships cannot be retrieved here. To include those, use the Customer Memberships collection, which returns all statuses except the two never-paid initial states.
- A person with multiple memberships appears once per membership; de-duplicate on
customer_idfor a unique list of people.