Querying
List endpoints support pagination and selected filters.
Pagination
List endpoints use page and limit.
pagedefaults to1.limitdefaults to10.limitmust be between1and100.
Pagination metadata is returned in the response:
{
"pagination": {
"currentPage": 1,
"totalPages": 5,
"totalItems": 47,
"itemsPerPage": 10,
"hasNextPage": true,
"hasPrevPage": false
}
}
Filters
- Members:
search,status - Passes:
status,memberId,includeVoid - Pass templates:
search
The OpenAPI reference lists the exact filters available for each endpoint.
Filter Notes
searchis a text search where supported.- Member
statussupportsactiveandinactive. - Pass
statussupportsactive,inactive,expired, andvoid. includeVoidcontrols whether revoked passes are included in pass list results.
Examples
GET /api/v1/public/members?search=john&status=active&page=1&limit=25
GET /api/v1/public/passes?status=active&includeVoid=false&page=1&limit=10
Resource filters
The following new read resources have list and get-by-ID endpoints. All list endpoints accept page, limit, updatedSince, createdAfter and createdBefore.
| Resource | Additional filters |
|---|---|
| Events | status, audience, slug, search, startsAfter, startsBefore |
| Event registrations | eventId, memberId, orderId, status, paymentStatus, role, email |
| Event orders | eventId, status, paymentStatus, fulfillmentStatus, ticketMode |
| Donations | campaignId, memberId, subscriptionId, status, frequency, email, currency, anonymous |
| Donation subscriptions | campaignId, memberId, status, email, currency, cancelAtPeriodEnd |
| Donation campaigns | status, slug, search, currency, allowRecurring |
| Membership types | active, groupId, search, renewalMode |
Relationship filters require a RemyPass MongoDB _id, not a custom member number or a Stripe identifier. Boolean filters use true or false. Currency codes and exact email filters are case-insensitive. Search treats input as literal text. Date bounds are inclusive ISO 8601 timestamps with a timezone, such as 2026-10-06T12:00:00Z. Invalid filters and reversed date ranges return 400.
Webhook subscription and delivery lists support pagination and updatedSince; see subscription management for their filters.
Incremental sync
The new resource lists and webhook management lists sort by updatedAt ascending, then _id ascending. updatedSince includes records at the supplied timestamp. An updated record can appear again; upsert by _id and compare updatedAt.
- Save the timestamp immediately before starting a sync
- Request page 1 with
updatedSinceset to your previous checkpoint, keeping a small overlap to cover equal timestamps and clock differences - Keep the same filters and advance
pageuntilpagination.hasNextPageis false - Save the sync start timestamp as the next checkpoint only after all pages have been processed successfully
GET /api/v1/public/donations?updatedSince=2026-10-06T10:00:00Z&page=1&limit=100
Pagination reads current data rather than a database snapshot. Concurrent changes can move records between pages, so repeat overlapping syncs and periodically reconcile the full dataset. updatedSince returns current records, not an event log, and cannot return permanently deleted records. Process deletion webhooks and use periodic full reconciliation to detect missed deletions. Delivery history itself expires after approximately 90 days.
Amounts and timestamps
Event prices, event registration payments and event order payments use major currency units: GBP 25.50 is 25.5. Donations, donation subscriptions, campaign amounts and membership type prices use minor currency units: GBP 25.50 is 2550. Webhook snapshots use minor currency units, so convert event API amounts when comparing them with webhook amounts. Currency codes are lowercase. Always use the endpoint’s documented units.
Statuses are stored RemyPass states, not live payment-provider lookups. Optional dates and relationships may be absent or null. Anonymous donations still include donor details in authorised organisation API responses; anonymity applies to public displays.
Event lists use GET /events; organisation-scoped event lookup uses GET /event-records/{id}. The existing public browsing routes /events/{companySlug} and /events/{companySlug}/{eventSlug} retain their original behaviour, including requests with authentication headers and hexadecimal company slugs.