Skip to main content

Querying

List endpoints support pagination and selected filters.

Pagination​

List endpoints use page and limit.

  • page defaults to 1.
  • limit defaults to 10.
  • limit must be between 1 and 100.

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​

  • search is a text search where supported.
  • Member status supports active and inactive.
  • Pass status supports active, inactive, expired, and void.
  • includeVoid controls 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.

ResourceAdditional filters
Eventsstatus, audience, slug, search, startsAfter, startsBefore
Event registrationseventId, memberId, orderId, status, paymentStatus, role, email
Event orderseventId, status, paymentStatus, fulfillmentStatus, ticketMode
DonationscampaignId, memberId, subscriptionId, status, frequency, email, currency, anonymous
Donation subscriptionscampaignId, memberId, status, email, currency, cancelAtPeriodEnd
Donation campaignsstatus, slug, search, currency, allowRecurring
Membership typesactive, 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.

  1. Save the timestamp immediately before starting a sync
  2. Request page 1 with updatedSince set to your previous checkpoint, keeping a small overlap to cover equal timestamps and clock differences
  3. Keep the same filters and advance page until pagination.hasNextPage is false
  4. 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.