Download OpenAPI specification:Download
CM Live Membership REST API. Tenant is the x-los-technical-link-id request header; caller identity is a JWT bearer token or, as a fallback, the x-cm-sso-accountguid header — set either via the Authorize button.
Resolves the display name, first name, and email of the caller identified by the platform guard (JWT or the legacy CM SSO header). Degrades to null fields on a CM outage or unknown person.
{- "displayName": "string",
- "firstName": "string",
- "email": "string"
}Returns the organisation resolved from the request tenant. The caller must have CM access to the logical account; access is validated by the platform guard before this handler runs.
{- "organisationId": "c9b3f279-e3b5-4204-ad99-646257417f98",
- "name": "string",
- "origin": "CM_PLATFORM",
- "currencyCode": "EUR",
- "languageCode": "EN",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Aggregate membership stats for the tenant resolved from the request.
{- "activeMembers": 0,
- "newMembersThisMonth": 0,
- "membersPerType": [
- {
- "membershipTypeName": {
- "property1": "string",
- "property2": "string"
}, - "count": 0
}
]
}Creates a party scoped to the tenant resolved from the request.
| type required | string Enum: "NATURAL_PERSON" "ORGANISATION" |
| initials | string or null Natural person only. |
| givenName | string Natural person only. Required when |
| familyName | string Natural person only. Required when |
| legalName | string Organisation only. Required when |
| gender | string Enum: "MALE" "FEMALE" "OTHER" Natural person only. |
| dateOfBirth | string or null <date> Natural person only. |
string or null | |
| phonePrimary | string or null |
| phoneSecondary | string or null |
{- "type": "NATURAL_PERSON",
- "givenName": "Anna",
- "familyName": "de Vries",
- "dateOfBirth": "1990-05-14",
- "phonePrimary": "+31612345678"
}{- "id": "string",
- "type": "NATURAL_PERSON",
- "initials": "string",
- "givenName": "string",
- "familyName": "string",
- "legalName": "string",
- "gender": "MALE",
- "dateOfBirth": "2019-08-24",
- "email": "string",
- "phonePrimary": "string",
- "phoneSecondary": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "roles": [
- "OWNER"
]
}Lists parties scoped to the tenant resolved from the request, optionally filtered by type, role and a free-text search term.
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
| searchTerm | string Example: searchTerm=Ada Free-text filter matched (case-insensitively) against given name, family name, full name, legal name, email, phone numbers, the start of the postal code of any of their addresses (spaces and case ignored), and the membership number of memberships the party belongs to or owns. |
| role | string Enum: "OWNER" "MEMBER" Filter results to parties holding this link role; omit to list every party. |
| type | string Enum: "NATURAL_PERSON" "ORGANISATION" Filter results by party type. |
{- "data": [
- {
- "id": "string",
- "type": "NATURAL_PERSON",
- "initials": "string",
- "givenName": "string",
- "familyName": "string",
- "legalName": "string",
- "gender": "MALE",
- "dateOfBirth": "2019-08-24",
- "email": "string",
- "phonePrimary": "string",
- "phoneSecondary": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "roles": [
- "OWNER"
]
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Searches parties by name, email, postal code or membership number across the entire tenant, scoped to the organisation resolved from the request. Ignores the current view's role/type filters and always searches all parties, returning at most 10 results.
| searchTerm required | any Example: searchTerm=Ada Search term matched (case-insensitively) against given name, family name, full name, legal name, email, the start of the postal code of any of their addresses (spaces and case ignored), and the membership number of memberships the party belongs to or owns. |
[- {
- "id": "string",
- "type": "NATURAL_PERSON",
- "initials": "string",
- "givenName": "string",
- "familyName": "string",
- "legalName": "string",
- "gender": "MALE",
- "dateOfBirth": "2019-08-24",
- "email": "string",
- "phonePrimary": "string",
- "phoneSecondary": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "roles": [
- "OWNER"
]
}
]Streams an .xlsx workbook of the tenant's parties. The Relations worksheet is always included; withAddresses and withCards add an Addresses and a Memberships worksheet respectively.
| language | string Enum: "DE" "EN" "ES" "FR" "HE" "NL" Language for translated names; defaults to the organisation language. |
| ids | Array of strings Relation ids to scope the export to; omit to export the whole tenant. |
| withCards | boolean Include a Memberships worksheet. |
| withAddresses | boolean Include an Addresses worksheet. |
Fetches a single party by its public id, scoped to the tenant resolved from the request. Returns 404 if the party does not exist or belongs to a different organisation.
| id required | string |
{- "id": "string",
- "type": "NATURAL_PERSON",
- "initials": "string",
- "givenName": "string",
- "familyName": "string",
- "legalName": "string",
- "gender": "MALE",
- "dateOfBirth": "2019-08-24",
- "email": "string",
- "phonePrimary": "string",
- "phoneSecondary": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "roles": [
- "OWNER"
]
}Partially updates a party, scoped to the tenant resolved from the request. Only fields present in the request body are changed. Returns 404 if the party does not exist or belongs to a different organisation.
| id required | string |
| type | string Enum: "NATURAL_PERSON" "ORGANISATION" |
| initials | string or null Natural person only. |
| givenName | string Natural person only. Required when |
| familyName | string Natural person only. Required when |
| legalName | string Organisation only. Required when |
| gender | string Enum: "MALE" "FEMALE" "OTHER" Natural person only. |
| dateOfBirth | string or null <date> Natural person only. |
string or null | |
| phonePrimary | string or null |
| phoneSecondary | string or null |
{- "phonePrimary": "+31687654321"
}{- "id": "string",
- "type": "NATURAL_PERSON",
- "initials": "string",
- "givenName": "string",
- "familyName": "string",
- "legalName": "string",
- "gender": "MALE",
- "dateOfBirth": "2019-08-24",
- "email": "string",
- "phonePrimary": "string",
- "phoneSecondary": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "roles": [
- "OWNER"
]
}Adds a party's first address of a kind, scoped to the tenant resolved from the request. Once a current (or pending) address of that kind exists, use POST /addresses/move instead - this returns 409 if one already does. Returns 404 if the party does not exist or belongs to a different organisation.
| id required | string |
| kind | string Default: "POSTAL" Enum: "POSTAL" "BILLING" Defaults to POSTAL. |
| attentionLine | string Company/department to address the mail to. |
| street required | string |
| houseNumber required | string |
| houseNumberSuffix | string |
| postalCode required | string |
| city required | string |
| countryCode | string ISO 3166-1 alpha-2 country code. Defaults to NL. |
| validFrom | string <date> Defaults to today. |
{- "kind": "POSTAL",
- "street": "Stationsplein",
- "houseNumber": "9",
- "houseNumberSuffix": "K",
- "postalCode": "4811 BM",
- "city": "Breda",
- "countryCode": "NL"
}{- "id": "string",
- "kind": "POSTAL",
- "attentionLine": "string",
- "street": "string",
- "houseNumber": "string",
- "houseNumberSuffix": "string",
- "postalCode": "string",
- "city": "string",
- "countryCode": "string",
- "validFrom": "2026-08-17",
- "validTo": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists all of a party's addresses (current, previous and pending), scoped to the tenant resolved from the request. Returns 404 if the party does not exist or belongs to a different organisation.
| id required | string |
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
{- "data": [
- {
- "id": "string",
- "kind": "POSTAL",
- "attentionLine": "string",
- "street": "string",
- "houseNumber": "string",
- "houseNumberSuffix": "string",
- "postalCode": "string",
- "city": "string",
- "countryCode": "string",
- "validFrom": "2026-08-17",
- "validTo": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Replaces every field of one of a party's addresses except kind/validFrom/validTo - this is a correction of the address itself, not a house move (use POST /addresses/move for that). Returns 404 if the party or the address does not exist, or the address does not belong to the party.
| id required | string |
| addressId required | string |
| attentionLine | string Company/department to address the mail to. |
| street required | string |
| houseNumber required | string |
| houseNumberSuffix | string |
| postalCode required | string |
| city required | string |
| countryCode | string ISO 3166-1 alpha-2 country code. Defaults to NL. |
{- "street": "Stationsplein",
- "houseNumber": "9",
- "houseNumberSuffix": "K",
- "postalCode": "4811 BN",
- "city": "Breda",
- "countryCode": "NL"
}{- "id": "string",
- "kind": "POSTAL",
- "attentionLine": "string",
- "street": "string",
- "houseNumber": "string",
- "houseNumberSuffix": "string",
- "postalCode": "string",
- "city": "string",
- "countryCode": "string",
- "validFrom": "2026-08-17",
- "validTo": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Cancels a pending (strictly future-dated) address move by deleting that row outright, scoped to the tenant resolved from the request. Returns 404 if the party or the address does not exist, or the address does not belong to the party; returns 409 if the address is not a pending move (i.e. its validFrom is today or in the past).
| id required | string |
| addressId required | string |
Closes a party's current address of a kind the day before effectiveDate and adds the new one from that date, scoped to the tenant resolved from the request. Returns 404 if the party does not exist or belongs to a different organisation, or has no current address of that kind yet (use POST /addresses for the first one); returns 409 if effectiveDate overlaps an existing address of that kind (e.g. another pending move).
| id required | string |
| kind | string Default: "POSTAL" Enum: "POSTAL" "BILLING" Defaults to POSTAL. |
| attentionLine | string Company/department to address the mail to. |
| street required | string |
| houseNumber required | string |
| houseNumberSuffix | string |
| postalCode required | string |
| city required | string |
| countryCode | string ISO 3166-1 alpha-2 country code. Defaults to NL. |
| effectiveDate required | string <date> The new address becomes current on this date. |
{- "street": "Prinsengracht",
- "houseNumber": "263",
- "postalCode": "1016 GV",
- "city": "Amsterdam",
- "countryCode": "NL",
- "effectiveDate": "2026-09-01"
}{- "id": "string",
- "kind": "POSTAL",
- "attentionLine": "string",
- "street": "string",
- "houseNumber": "string",
- "houseNumberSuffix": "string",
- "postalCode": "string",
- "city": "string",
- "countryCode": "string",
- "validFrom": "2026-08-17",
- "validTo": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Appends a free-text note to a party, scoped to the tenant resolved from the request. Returns 404 if the party does not exist or belongs to a different organisation.
| id required | string |
| text required | string |
{- "text": "Called the customer, they confirmed the new address."
}{- "id": "string",
- "partyId": "string",
- "text": "string",
- "createdByAccountGuid": "string",
- "author": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}Lists notes for a party, scoped to the tenant resolved from the request. Returns 404 if the party does not exist or belongs to a different organisation.
| id required | string |
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
{- "data": [
- {
- "id": "string",
- "partyId": "string",
- "text": "string",
- "createdByAccountGuid": "string",
- "author": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Creates a membership type scoped to the tenant resolved from the request.
| status | string Enum: "ACTIVE" "INACTIVE" Status of the membership type. Omit to leave unchanged on update; defaults to ACTIVE on create. |
| productType | string Enum: "MEMBERSHIP" "DONATION" Product type of the membership type. Omit to leave unchanged on update; defaults to MEMBERSHIP on create. |
| visibility | string Enum: "PUBLIC" "PRIVATE" Public (shops) or back-office only. Omit to leave unchanged on update; defaults to PUBLIC on create. |
object Optional human-readable description per language. | |
| maxMembers | number or null >= 1 Maximum number of members; null means unlimited. |
| trialPeriodDays | number [ 0 .. 3650 ] Whole days after a membership starts that count as its trial. Omit to leave unchanged; defaults to 0 on create. |
| gracePeriodDays | number [ 0 .. 3650 ] Whole days after a membership ends that count as its grace period. Omit to leave unchanged; defaults to 0 on create. |
required | object Human-readable membership type name per language. |
{- "status": "ACTIVE",
- "productType": "MEMBERSHIP",
- "visibility": "PUBLIC",
- "description": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "maxMembers": 1,
- "trialPeriodDays": 3650,
- "gracePeriodDays": 3650,
- "name": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}
}{- "id": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "status": "ACTIVE",
- "productType": "MEMBERSHIP",
- "visibility": "PUBLIC",
- "description": {
- "property1": "string",
- "property2": "string"
}, - "maxMembers": 0,
- "trialPeriodDays": 0,
- "gracePeriodDays": 0,
- "pricePlanCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists all membership types belonging to the tenant resolved from the request.
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
{- "data": [
- {
- "id": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "status": "ACTIVE",
- "productType": "MEMBERSHIP",
- "visibility": "PUBLIC",
- "description": {
- "property1": "string",
- "property2": "string"
}, - "maxMembers": 0,
- "trialPeriodDays": 0,
- "gracePeriodDays": 0,
- "pricePlanCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Fetches a single membership type, scoped to the tenant resolved from the request.
| id required | string |
{- "id": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "status": "ACTIVE",
- "productType": "MEMBERSHIP",
- "visibility": "PUBLIC",
- "description": {
- "property1": "string",
- "property2": "string"
}, - "maxMembers": 0,
- "trialPeriodDays": 0,
- "gracePeriodDays": 0,
- "pricePlanCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Updates a single membership type, scoped to the tenant resolved from the request.
| id required | string |
| status | string Enum: "ACTIVE" "INACTIVE" Status of the membership type. Omit to leave unchanged on update; defaults to ACTIVE on create. |
| productType | string Enum: "MEMBERSHIP" "DONATION" Product type of the membership type. Omit to leave unchanged on update; defaults to MEMBERSHIP on create. |
| visibility | string Enum: "PUBLIC" "PRIVATE" Public (shops) or back-office only. Omit to leave unchanged on update; defaults to PUBLIC on create. |
object Optional human-readable description per language. | |
| maxMembers | number or null >= 1 Maximum number of members; null means unlimited. |
| trialPeriodDays | number [ 0 .. 3650 ] Whole days after a membership starts that count as its trial. Omit to leave unchanged; defaults to 0 on create. |
| gracePeriodDays | number [ 0 .. 3650 ] Whole days after a membership ends that count as its grace period. Omit to leave unchanged; defaults to 0 on create. |
object Human-readable membership type name per language. |
{- "status": "ACTIVE",
- "productType": "MEMBERSHIP",
- "visibility": "PUBLIC",
- "description": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "maxMembers": 1,
- "trialPeriodDays": 3650,
- "gracePeriodDays": 3650,
- "name": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}
}{- "id": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "status": "ACTIVE",
- "productType": "MEMBERSHIP",
- "visibility": "PUBLIC",
- "description": {
- "property1": "string",
- "property2": "string"
}, - "maxMembers": 0,
- "trialPeriodDays": 0,
- "gracePeriodDays": 0,
- "pricePlanCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists the statutory VAT rates, optionally filtered to a single country.
| countryCode | string = 2 characters Example: countryCode=NL Filter by ISO 3166-1 alpha-2 country code. Case-insensitive. Omit to list every country. |
[- {
- "id": "string",
- "countryCode": "NL",
- "rateType": "STANDARD",
- "percentage": 21,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]Validates and stores the given settings items for the tenant; secrets are encrypted at rest.
required | Array of objects (UpsertSettingItemSchema) The settings items to upsert. | ||||
Array
| |||||
{- "items": [
- {
- "key": "application.languages",
- "value": "string"
}
]
}{- "items": [
- {
- "key": "application.languages",
- "value": "string",
- "isSet": true
}
]
}Creates a custom field definition scoped to the tenant resolved from the request.
| kind required | string Enum: "CUSTOM_FIELD" "CONSENT" |
| scope required | string Enum: "PARTY" "MEMBERSHIP" |
| key required | string |
required | object (TranslatedTextSchema) |
| type required | string Value: "TEXT" |
| required required | boolean |
| visibility required | string Enum: "PUBLIC" "PRIVATE" |
| defaultValue | string or null |
| sortOrder required | number |
{- "kind": "CUSTOM_FIELD",
- "scope": "PARTY",
- "key": "custom_field.shirt_size",
- "label": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "type": "TEXT",
- "required": true,
- "visibility": "PUBLIC",
- "defaultValue": "string",
- "sortOrder": 0
}{- "id": "string",
- "kind": "CUSTOM_FIELD",
- "scope": "PARTY",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "type": "TEXT",
- "required": true,
- "visibility": "PUBLIC",
- "defaultValue": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists custom field definitions for the tenant, optionally filtered by scope.
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
| scope | string Enum: "PARTY" "MEMBERSHIP" Restrict to a single scope. |
{- "data": [
- {
- "id": "string",
- "kind": "CUSTOM_FIELD",
- "scope": "PARTY",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "type": "TEXT",
- "required": true,
- "visibility": "PUBLIC",
- "defaultValue": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Fetches a single custom field definition, scoped to the tenant resolved from the request.
| id required | string |
{- "id": "string",
- "kind": "CUSTOM_FIELD",
- "scope": "PARTY",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "type": "TEXT",
- "required": true,
- "visibility": "PUBLIC",
- "defaultValue": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Updates a custom field definition; kind, scope and key are immutable.
| id required | string |
required | object (TranslatedTextSchema) |
| type required | string Value: "TEXT" |
| required required | boolean |
| visibility required | string Enum: "PUBLIC" "PRIVATE" |
| defaultValue | string or null |
| sortOrder required | number |
{- "label": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "type": "TEXT",
- "required": true,
- "visibility": "PUBLIC",
- "defaultValue": "string",
- "sortOrder": 0
}{- "id": "string",
- "kind": "CUSTOM_FIELD",
- "scope": "PARTY",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "type": "TEXT",
- "required": true,
- "visibility": "PUBLIC",
- "defaultValue": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Returns every definition in the given scope paired with its stored value for the target entity (null when none is stored yet).
| scope required | string Enum: "PARTY" "MEMBERSHIP" Which definition set the values belong to. |
| entityId required | string Opaque ulid of the target entity the values attach to. |
{- "items": [
- {
- "definition": {
- "id": "string",
- "kind": "CUSTOM_FIELD",
- "scope": "PARTY",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "type": "TEXT",
- "required": true,
- "visibility": "PUBLIC",
- "defaultValue": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "value": "string"
}
]
}Stores the given custom field values for the target entity, scoped to the tenant.
| scope required | string Enum: "PARTY" "MEMBERSHIP" Which definition set the values belong to. |
| entityId required | string Opaque ulid of the target entity the values attach to. |
required | Array of objects (UpsertCustomFieldValueItemSchema) | ||||
Array
| |||||
{- "items": [
- {
- "definitionId": "string",
- "value": "string"
}
]
}{- "items": [
- {
- "definition": {
- "id": "string",
- "kind": "CUSTOM_FIELD",
- "scope": "PARTY",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "type": "TEXT",
- "required": true,
- "visibility": "PUBLIC",
- "defaultValue": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "value": "string"
}
]
}Lists the lifecycle message templates for the tenant resolved from the request, together with the sender name (the sender name setting, falling back to the organisation name).
{- "senderName": "string",
- "templates": [
- {
- "id": "string",
- "type": "WELCOME",
- "subject": {
- "property1": "string",
- "property2": "string"
}, - "preheader": {
- "property1": "string",
- "property2": "string"
}, - "body": {
- "property1": "string",
- "property2": "string"
}, - "buttonLabel": {
- "property1": "string",
- "property2": "string"
}, - "isDefault": true
}
]
}Updates a single lifecycle message template, scoped to the tenant resolved from the request.
object Email subject per language. | |
object Email preheader per language. | |
object Email body per language. | |
object Call-to-action button label per language. |
{- "subject": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "preheader": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "body": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "buttonLabel": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}
}{- "id": "string",
- "type": "WELCOME",
- "subject": {
- "property1": "string",
- "property2": "string"
}, - "preheader": {
- "property1": "string",
- "property2": "string"
}, - "body": {
- "property1": "string",
- "property2": "string"
}, - "buttonLabel": {
- "property1": "string",
- "property2": "string"
}, - "isDefault": true
}Synchronously renders the current, possibly-unsaved form field values through mail-broker and returns the resulting HTML.
| preheader required | string <= 200 characters |
| body required | string <= 20000 characters |
| buttonLabel required | string <= 60 characters |
{- "preheader": "string",
- "body": "string",
- "buttonLabel": "string"
}{- "html": "string"
}Creates a consent definition scoped to the tenant resolved from the request.
| key required | string |
required | object (TranslatedTextSchema) |
| mandatory required | boolean When true, the consent must be granted before a sale can complete. |
object or null | |
| documentUrl | string or null |
| sortOrder required | number |
{- "key": "consent.privacy_policy",
- "label": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "mandatory": true,
- "legalText": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "documentUrl": "string",
- "sortOrder": 0
}{- "id": "string",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "mandatory": true,
- "version": 0,
- "legalText": {
- "property1": "string",
- "property2": "string"
}, - "documentUrl": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists consent definitions for the tenant, in display order.
{- "items": [
- {
- "id": "string",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "mandatory": true,
- "version": 0,
- "legalText": {
- "property1": "string",
- "property2": "string"
}, - "documentUrl": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}Fetches a single consent definition, scoped to the tenant resolved from the request.
| id required | string |
{- "id": "string",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "mandatory": true,
- "version": 0,
- "legalText": {
- "property1": "string",
- "property2": "string"
}, - "documentUrl": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Updates a consent definition; the key is immutable. Editing the legal text bumps the version.
| id required | string |
required | object (TranslatedTextSchema) |
| mandatory required | boolean |
object or null | |
| documentUrl | string or null |
| sortOrder required | number |
{- "label": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "mandatory": true,
- "legalText": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "documentUrl": "string",
- "sortOrder": 0
}{- "id": "string",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "mandatory": true,
- "version": 0,
- "legalText": {
- "property1": "string",
- "property2": "string"
}, - "documentUrl": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Creates a benefit in the tenant benefit library.
object Optional human-readable description per language. | |
| status | string Enum: "ACTIVE" "INACTIVE" Defaults to ACTIVE on create. |
| visibility | string Enum: "PUBLIC" "PRIVATE" Defaults to PRIVATE on create. |
any Its | |
Array of objects (ValidityRuleSchema) <= 20 items Decide when the benefit can be used; with no matching rule the membership period decides. Replaces the stored list. | |
| usageLimitCount | number or null [ 1 .. 10000 ] Maximum uses per window; null means unlimited. |
| usageLimitWindow | string Enum: "TOTAL" "DAY" "MEMBERSHIP_YEAR" Cleared together with the scope when |
| usageLimitScope | string Enum: "MEMBER" "MEMBERSHIP" |
| visibleUntil | string or null <date> Last day the benefit is returned by the API. |
| key | string Unique within the organisation and immutable after creation. Generated when omitted. |
required | object Human-readable benefit name per language. |
| type required | string Enum: "ACCESS" "PRODUCT_DISCOUNT" Immutable after creation. |
| visibleFrom required | string <date> First day the benefit is returned by the API. |
{- "description": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "status": "ACTIVE",
- "visibility": "PUBLIC",
- "config": {
- "type": "ACCESS"
}, - "validityRules": [
- {
- "name": "Freaky Friday",
- "priority": 1,
- "action": "ALLOW",
- "conditions": [
- {
- "field": "WEEKDAY",
- "operator": "IN",
- "value": [
- "18:00",
- "22:00"
]
}
]
}
], - "usageLimitCount": 1,
- "usageLimitWindow": "TOTAL",
- "usageLimitScope": "MEMBER",
- "visibleUntil": "2019-08-24",
- "key": "benefit.summer_evening",
- "name": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "type": "ACCESS",
- "visibleFrom": "2019-08-24"
}{- "id": "string",
- "key": "benefit.summer_evening",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "description": {
- "property1": "string",
- "property2": "string"
}, - "type": "ACCESS",
- "status": "ACTIVE",
- "visibility": "PUBLIC",
- "config": {
- "type": "ACCESS"
}, - "validityRules": [
- {
- "name": "Freaky Friday",
- "priority": 0,
- "action": "ALLOW",
- "conditions": [
- {
- "field": "WEEKDAY",
- "operator": "IN",
- "value": [
- "18:00",
- "22:00"
]
}
]
}
], - "usageLimitCount": 0,
- "usageLimitWindow": "TOTAL",
- "usageLimitScope": "MEMBER",
- "visibleFrom": "2019-08-24",
- "visibleUntil": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists the tenant benefit library, active benefits first.
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
| statuses | Array of strings Items Enum: "ACTIVE" "INACTIVE" |
| types | Array of strings Items Enum: "ACCESS" "PRODUCT_DISCOUNT" |
| notLinkedToMembershipTypeId | string Membership type id; leaves out the benefits already linked to it. |
{- "data": [
- {
- "id": "string",
- "key": "benefit.summer_evening",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "description": {
- "property1": "string",
- "property2": "string"
}, - "type": "ACCESS",
- "status": "ACTIVE",
- "visibility": "PUBLIC",
- "config": {
- "type": "ACCESS"
}, - "validityRules": [
- {
- "name": "Freaky Friday",
- "priority": 0,
- "action": "ALLOW",
- "conditions": [
- {
- "field": "WEEKDAY",
- "operator": "IN",
- "value": [
- "18:00",
- "22:00"
]
}
]
}
], - "usageLimitCount": 0,
- "usageLimitWindow": "TOTAL",
- "usageLimitScope": "MEMBER",
- "visibleFrom": "2019-08-24",
- "visibleUntil": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Fetches a single benefit.
| id required | string |
{- "id": "string",
- "key": "benefit.summer_evening",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "description": {
- "property1": "string",
- "property2": "string"
}, - "type": "ACCESS",
- "status": "ACTIVE",
- "visibility": "PUBLIC",
- "config": {
- "type": "ACCESS"
}, - "validityRules": [
- {
- "name": "Freaky Friday",
- "priority": 0,
- "action": "ALLOW",
- "conditions": [
- {
- "field": "WEEKDAY",
- "operator": "IN",
- "value": [
- "18:00",
- "22:00"
]
}
]
}
], - "usageLimitCount": 0,
- "usageLimitWindow": "TOTAL",
- "usageLimitScope": "MEMBER",
- "visibleFrom": "2019-08-24",
- "visibleUntil": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "linkedMembershipTypes": [
- {
- "id": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}
}
]
}Updates a benefit; its type cannot change.
| id required | string |
object Optional human-readable description per language. | |
| status | string Enum: "ACTIVE" "INACTIVE" Defaults to ACTIVE on create. |
| visibility | string Enum: "PUBLIC" "PRIVATE" Defaults to PRIVATE on create. |
any Its | |
Array of objects (ValidityRuleSchema) <= 20 items Decide when the benefit can be used; with no matching rule the membership period decides. Replaces the stored list. | |
| usageLimitCount | number or null [ 1 .. 10000 ] Maximum uses per window; null means unlimited. |
| usageLimitWindow | string Enum: "TOTAL" "DAY" "MEMBERSHIP_YEAR" Cleared together with the scope when |
| usageLimitScope | string Enum: "MEMBER" "MEMBERSHIP" |
| visibleUntil | string or null <date> Last day the benefit is returned by the API. |
object Human-readable benefit name per language. | |
| visibleFrom | string <date> First day the benefit is returned by the API. |
{- "description": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "status": "ACTIVE",
- "visibility": "PUBLIC",
- "config": {
- "type": "ACCESS"
}, - "validityRules": [
- {
- "name": "Freaky Friday",
- "priority": 1,
- "action": "ALLOW",
- "conditions": [
- {
- "field": "WEEKDAY",
- "operator": "IN",
- "value": [
- "18:00",
- "22:00"
]
}
]
}
], - "usageLimitCount": 1,
- "usageLimitWindow": "TOTAL",
- "usageLimitScope": "MEMBER",
- "visibleUntil": "2019-08-24",
- "name": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "visibleFrom": "2019-08-24"
}{- "id": "string",
- "key": "benefit.summer_evening",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "description": {
- "property1": "string",
- "property2": "string"
}, - "type": "ACCESS",
- "status": "ACTIVE",
- "visibility": "PUBLIC",
- "config": {
- "type": "ACCESS"
}, - "validityRules": [
- {
- "name": "Freaky Friday",
- "priority": 0,
- "action": "ALLOW",
- "conditions": [
- {
- "field": "WEEKDAY",
- "operator": "IN",
- "value": [
- "18:00",
- "22:00"
]
}
]
}
], - "usageLimitCount": 0,
- "usageLimitWindow": "TOTAL",
- "usageLimitScope": "MEMBER",
- "visibleFrom": "2019-08-24",
- "visibleUntil": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists the benefits linked to the membership type.
| membershipTypeId required | string |
[- {
- "id": "string",
- "key": "benefit.summer_evening",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "description": {
- "property1": "string",
- "property2": "string"
}, - "type": "ACCESS",
- "status": "ACTIVE",
- "visibility": "PUBLIC",
- "config": {
- "type": "ACCESS"
}, - "validityRules": [
- {
- "name": "Freaky Friday",
- "priority": 0,
- "action": "ALLOW",
- "conditions": [
- {
- "field": "WEEKDAY",
- "operator": "IN",
- "value": [
- "18:00",
- "22:00"
]
}
]
}
], - "usageLimitCount": 0,
- "usageLimitWindow": "TOTAL",
- "usageLimitScope": "MEMBER",
- "visibleFrom": "2019-08-24",
- "visibleUntil": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]Links an active benefit to the membership type.
| membershipTypeId required | string |
| benefitId required | string External identifier of the benefit to link. |
{- "benefitId": "string"
}{- "id": "string",
- "key": "benefit.summer_evening",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "description": {
- "property1": "string",
- "property2": "string"
}, - "type": "ACCESS",
- "status": "ACTIVE",
- "visibility": "PUBLIC",
- "config": {
- "type": "ACCESS"
}, - "validityRules": [
- {
- "name": "Freaky Friday",
- "priority": 0,
- "action": "ALLOW",
- "conditions": [
- {
- "field": "WEEKDAY",
- "operator": "IN",
- "value": [
- "18:00",
- "22:00"
]
}
]
}
], - "usageLimitCount": 0,
- "usageLimitWindow": "TOTAL",
- "usageLimitScope": "MEMBER",
- "visibleFrom": "2019-08-24",
- "visibleUntil": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists the benefit uses of one member or of a whole membership; a reversed use carries reversedAt.
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
| membershipNumber | string Example: membershipNumber=2630346069 One member. |
| membershipId | string Membership id: every member of the household. |
| benefitKey | string Example: benefitKey=benefit.lounge_access |
| type | string Enum: "ACCESS" "PRODUCT_DISCOUNT" |
| results | Array of strings Items Enum: "ALLOWED" "MEMBERSHIP_NOT_FOUND" "MEMBERSHIP_NOT_ENTITLED" "MEMBERSHIP_BLOCKED" "NOT_APPLICABLE" "DENIED_BY_RULE" "LIMIT_REACHED" Leave out to include every result. |
| from | string <date> First business date, inclusive. |
| to | string <date> Last business date, inclusive. |
{- "data": [
- {
- "id": "string",
- "result": "ALLOWED",
- "benefit": {
- "key": "benefit.lounge_access",
- "type": "ACCESS",
- "name": {
- "property1": "string",
- "property2": "string"
}
}, - "member": {
- "membershipNumber": "2662667052",
- "partyId": "string",
- "name": "string"
}, - "quantity": 0,
- "businessDate": "2019-08-24",
- "createdAt": "2019-08-24T14:15:22Z",
- "source": "API",
- "locationReference": "string",
- "externalReference": "string",
- "reversedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Checks and records a use atomically. Without benefitKey the best applicable benefit of the type is used.
| Idempotency-Key required | string Caller-generated key; a retry with the same key and payload returns the original outcome, a refusal included. Use a new key to try again. |
| membershipNumber required | string The membership number on the member's card. |
| type required | string Enum: "ACCESS" "PRODUCT_DISCOUNT" The question asked: may this member enter, or which discount applies. |
| benefitKey | string The benefit to redeem; without it the best applicable benefit of the type is used. |
| quantity required | number |
object (BenefitUsageContextSchema) |
{- "membershipNumber": "2662667052",
- "type": "ACCESS",
- "benefitKey": "string",
- "quantity": 1,
- "context": {
- "locationReference": "string",
- "externalReference": "string"
}
}{- "id": "string",
- "benefitKey": "benefit.free_entry",
- "quantity": 0,
- "remaining": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "reversedAt": "2019-08-24T14:15:22Z"
}Answers, for one benefit type, whether the member may use it right now and which benefits apply. Has no side effects.
| membershipNumber required | string The membership number on the member's card. |
| type required | string Enum: "ACCESS" "PRODUCT_DISCOUNT" The question asked: may this member enter, or which discount applies. |
| benefitKey | string Narrows the check to one benefit. |
| quantity | number Default: 1 Uses to check for, e.g. the member plus guests. |
{- "membershipNumber": "2662667052",
- "type": "ACCESS",
- "benefitKey": "benefit.free_entry",
- "quantity": 1
}{- "type": "ACCESS",
- "result": "ALLOWED",
- "appliedBenefitKey": "string",
- "member": {
- "membershipNumber": "2662667052",
- "firstName": "string",
- "membershipType": {
- "id": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}
}, - "phase": "TRIAL",
- "billingStatus": "SETTLED"
}, - "benefits": [
- {
- "key": "benefit.free_entry",
- "type": "ACCESS",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "remaining": 0,
- "limit": {
- "count": 0,
- "window": "TOTAL",
- "scope": "MEMBER"
}, - "config": {
- "type": "ACCESS"
}
}
]
}Gives the use back so it no longer counts toward the limit; reversing twice returns the same use.
| usageId required | string |
{- "id": "string",
- "benefitKey": "benefit.free_entry",
- "quantity": 0,
- "remaining": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "reversedAt": "2019-08-24T14:15:22Z"
}Returns every consent definition paired with the party's current state (the latest ledger record), including whether a granted consent is outdated.
| partyId required | string Opaque ulid of the party (data subject) whose consent state is requested. |
{- "items": [
- {
- "definition": {
- "id": "string",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "mandatory": true,
- "version": 0,
- "legalText": {
- "property1": "string",
- "property2": "string"
}, - "documentUrl": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "status": "GRANTED",
- "grantedVersion": 0,
- "recordedAt": "2019-08-24T14:15:22Z",
- "source": "TILL",
- "author": "string",
- "outdated": true
}
]
}Appends grant/withdraw records for the given party. Each decision is an immutable event; the latest per definition is the current state. Mandatory consents are not enforced here.
| partyId required | string Opaque ulid of the party (data subject) the decisions are for. |
required | Array of objects (ConsentGrantSchema) |
{- "partyId": "string",
- "items": [
- {
- "definitionId": "string",
- "granted": true
}
]
}{- "items": [
- {
- "definition": {
- "id": "string",
- "key": "string",
- "label": {
- "property1": "string",
- "property2": "string"
}, - "mandatory": true,
- "version": 0,
- "legalText": {
- "property1": "string",
- "property2": "string"
}, - "documentUrl": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "status": "GRANTED",
- "grantedVersion": 0,
- "recordedAt": "2019-08-24T14:15:22Z",
- "source": "TILL",
- "author": "string",
- "outdated": true
}
]
}Fetches a single price plan, scoped to the tenant resolved from the request.
| id required | string |
{- "id": "string",
- "membershipTypeId": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "billingMode": "RECURRING",
- "billingCycleLength": 1,
- "billingCycleUnit": "MONTH",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Changes a price plan's name, active state and, optionally, the end of its membership period. A new end date must be after the start date and in the future; null drops it and makes the plan open-ended. The start date and the billing cycle are fixed: changing either would rewrite the commercial terms of every membership already on the plan.
| id required | string |
object Human-readable price plan name per language. Omit to leave it unchanged. | |
| endDate | string <date> Calendar day the membership period ends — must be after the start date and in the future. Only valid on a plan that already has an end date: the period type cannot change. |
| active | boolean Whether the plan can still be subscribed to. |
{- "name": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "endDate": "2090-01-01",
- "active": true
}{- "id": "string",
- "membershipTypeId": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "billingMode": "RECURRING",
- "billingCycleLength": 1,
- "billingCycleUnit": "MONTH",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Creates a price plan under the given membership type. The membership period starts on startDate; supply an endDate for a fixed-term period, or omit it for an open-ended plan that does not end.
| membershipTypeId required | string |
required | object Human-readable price plan name per language. |
| billingMode required | string Enum: "RECURRING" "SINGLE" Whether the plan bills on a recurring cycle or takes exactly one payment. |
| billingCycleLength | number [ 1 .. 60 ] How many |
| billingCycleUnit | string Enum: "MONTH" "YEAR" The unit |
| startDate required | string <date> Calendar day the membership period starts. Fixed once the plan exists. |
| endDate | string or null <date> Calendar day the membership period ends. Omit it or send null for an open-ended plan that does not end. |
{- "name": {
- "DE": "string",
- "EN": "string",
- "ES": "string",
- "FR": "string",
- "HE": "string",
- "NL": "string"
}, - "billingMode": "RECURRING",
- "billingCycleLength": 1,
- "billingCycleUnit": "MONTH",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01"
}{- "id": "string",
- "membershipTypeId": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "billingMode": "RECURRING",
- "billingCycleLength": 1,
- "billingCycleUnit": "MONTH",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists the price plans belonging to the given membership type.
| membershipTypeId required | string |
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
{- "data": [
- {
- "id": "string",
- "membershipTypeId": "string",
- "name": {
- "property1": "string",
- "property2": "string"
}, - "billingMode": "RECURRING",
- "billingCycleLength": 1,
- "billingCycleUnit": "MONTH",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}A price that has not taken effect yet accepts every field. Once its validFrom has passed only renewalPrice may still change — attempting anything else returns 422.
| id required | string |
| vatRateId | string Opaque external identifier of the VAT rate that applies to this price. |
| initialPrice | number [ 0 .. 99999999.99 ] Amount charged for the first billing cycle, including VAT. |
| renewalPrice | number [ 0 .. 99999999.99 ] Amount charged for every renewal billing cycle, including VAT. |
| validFrom | string <date> Calendar day this price takes effect. Only changeable while the price has not taken effect yet. |
{- "vatRateId": "01KZTHZMV0DQ2KE4K01XVX33WE",
- "initialPrice": 120,
- "renewalPrice": 100,
- "validFrom": "2026-01-01"
}{- "id": "string",
- "pricePlanId": "string",
- "vatRateId": "string",
- "initialPrice": 120,
- "renewalPrice": 100,
- "currencyCode": "EUR",
- "validFrom": "2026-01-01",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Records a new price effective from validFrom, which applies until the next price on the plan starts. No other price on the plan may start on the same day. The currency is taken from the organisation and cannot be supplied.
| pricePlanId required | string |
| vatRateId required | string Opaque external identifier of the VAT rate that applies to this price. |
| initialPrice required | number [ 0 .. 99999999.99 ] Amount charged for the first billing cycle, including VAT. |
| renewalPrice required | number [ 0 .. 99999999.99 ] Amount charged for every renewal billing cycle, including VAT. |
| validFrom required | string <date> Calendar day this price takes effect. It applies until the next price on the same plan starts. No other price on the plan may start on the same day. |
{- "vatRateId": "01KZTHZMV0DQ2KE4K01XVX33WE",
- "initialPrice": 120,
- "renewalPrice": 100,
- "validFrom": "2026-01-01"
}{- "id": "string",
- "pricePlanId": "string",
- "vatRateId": "string",
- "initialPrice": 120,
- "renewalPrice": 100,
- "currencyCode": "EUR",
- "validFrom": "2026-01-01",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists the price timeline of the given price plan, oldest first.
| pricePlanId required | string |
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
{- "data": [
- {
- "id": "string",
- "pricePlanId": "string",
- "vatRateId": "string",
- "initialPrice": 120,
- "renewalPrice": 100,
- "currencyCode": "EUR",
- "validFrom": "2026-01-01",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Creates a membership on the given membership type and price plan, with the given party as its owner.
| membershipTypeId required | string Opaque external identifier of the membership type this membership is for. |
| pricePlanId required | string Opaque external identifier of the price plan this membership is on. |
| startDate required | string <date> Calendar day the membership starts. |
| endDate | string <date> Calendar day the membership ends, if already known. |
| ownerPartyId required | string Opaque external identifier of the party who becomes this membership's owner. |
| ownerAsMember | boolean When true, the owner is also linked as a member, created atomically with the membership. |
Array of objects (MembershipConsentGrantSchema) Consent decisions captured at the till for the owner. Mandatory consents left ungranted block the sale. |
{- "membershipTypeId": "01KZTHZMV0DQ2KE4K01XVX33WE",
- "pricePlanId": "01KZTHZMV0DQ2KE4K01XVX33WE",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "ownerPartyId": "01KZTHZMV0DQ2KE4K01XVX33WE",
- "ownerAsMember": true,
- "consents": [
- {
- "definitionId": "string",
- "granted": true
}
]
}{- "id": "string",
- "membershipTypeId": "string",
- "membershipTypeName": {
- "property1": "string",
- "property2": "string"
}, - "pricePlanId": "string",
- "pricePlanName": {
- "property1": "string",
- "property2": "string"
}, - "owner": {
- "id": "string",
- "type": "NATURAL_PERSON",
- "name": "string"
}, - "status": "DRAFT",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "nextInvoiceDate": "2026-02-01",
- "billingStatus": "SETTLED",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists memberships belonging to the tenant resolved from the request, optionally filtered by status, membership type, price plan, owner and start-date period.
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
| statuses | Array of strings Items Enum: "DRAFT" "ACTIVE" "CANCELLED" "EXPIRED" Filter results by lifecycle status. Repeatable; results match any of the given statuses. |
| membershipTypeIds | Array of any Filter results by the opaque external identifier of the membership type. Repeatable; results match any of the given ids. |
| pricePlanIds | Array of any Filter results by the opaque external identifier of the price plan. Repeatable; results match any of the given ids. |
| ownerSearch | any Filter results by a case-insensitive match on the owner party's name or email. |
| searchTerm | any Filter results by a case-insensitive match on the name or email of the owner or of a linked member, or on the membership number. |
| ownerPartyId | any Filter results to memberships owned by the given party (opaque external identifier). |
| memberPartyId | any Filter results to memberships the given party is linked to as a member (opaque external identifier). |
| periodFrom | any Example: periodFrom=2026-01-01 Only include memberships whose start date is on or after this calendar day. |
| periodTo | any Example: periodTo=2026-12-31 Only include memberships whose start date is on or before this calendar day. |
{- "data": [
- {
- "id": "string",
- "membershipTypeId": "string",
- "membershipTypeName": {
- "property1": "string",
- "property2": "string"
}, - "pricePlanId": "string",
- "pricePlanName": {
- "property1": "string",
- "property2": "string"
}, - "owner": {
- "id": "string",
- "type": "NATURAL_PERSON",
- "name": "string"
}, - "status": "DRAFT",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "nextInvoiceDate": "2026-02-01",
- "billingStatus": "SETTLED",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Streams an .xlsx workbook of the tenant's memberships, honouring the same filters as the list. ids scopes the export to a selected subset; omit it to export every filtered membership.
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
| language | string Enum: "DE" "EN" "ES" "FR" "HE" "NL" Language for translated names; defaults to the organisation language. |
| ids | Array of any Membership ids to scope the export to; omit to export every filtered membership. |
| statuses | Array of strings Items Enum: "DRAFT" "ACTIVE" "CANCELLED" "EXPIRED" Filter results by lifecycle status. Repeatable; results match any of the given statuses. |
| membershipTypeIds | Array of any Filter results by the opaque external identifier of the membership type. Repeatable; results match any of the given ids. |
| pricePlanIds | Array of any Filter results by the opaque external identifier of the price plan. Repeatable; results match any of the given ids. |
| ownerSearch | any Filter results by a case-insensitive match on the owner party's name or email. |
| searchTerm | any Filter results by a case-insensitive match on the name or email of the owner or of a linked member, or on the membership number. |
| ownerPartyId | any Filter results to memberships owned by the given party (opaque external identifier). |
| memberPartyId | any Filter results to memberships the given party is linked to as a member (opaque external identifier). |
| periodFrom | any Example: periodFrom=2026-01-01 Only include memberships whose start date is on or after this calendar day. |
| periodTo | any Example: periodTo=2026-12-31 Only include memberships whose start date is on or before this calendar day. |
Fetches a single membership, scoped to the tenant resolved from the request.
| id required | string |
{- "id": "string",
- "membershipTypeId": "string",
- "membershipTypeName": {
- "property1": "string",
- "property2": "string"
}, - "pricePlanId": "string",
- "pricePlanName": {
- "property1": "string",
- "property2": "string"
}, - "owner": {
- "id": "string",
- "type": "NATURAL_PERSON",
- "name": "string"
}, - "status": "DRAFT",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "nextInvoiceDate": "2026-02-01",
- "billingStatus": "SETTLED",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Cancels the membership and records the given calendar day as its end date.
| id required | string |
| endDate required | string <date> Calendar day the membership is cancelled as of; recorded as its end date. |
{- "endDate": "2026-06-30"
}{- "id": "string",
- "membershipTypeId": "string",
- "membershipTypeName": {
- "property1": "string",
- "property2": "string"
}, - "pricePlanId": "string",
- "pricePlanName": {
- "property1": "string",
- "property2": "string"
}, - "owner": {
- "id": "string",
- "type": "NATURAL_PERSON",
- "name": "string"
}, - "status": "DRAFT",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "nextInvoiceDate": "2026-02-01",
- "billingStatus": "SETTLED",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Reactivates a cancelled membership immediately, clearing its end date; the billing cycle continues unchanged.
| id required | string |
{- "id": "string",
- "membershipTypeId": "string",
- "membershipTypeName": {
- "property1": "string",
- "property2": "string"
}, - "pricePlanId": "string",
- "pricePlanName": {
- "property1": "string",
- "property2": "string"
}, - "owner": {
- "id": "string",
- "type": "NATURAL_PERSON",
- "name": "string"
}, - "status": "DRAFT",
- "startDate": "2026-01-01",
- "endDate": "2090-01-01",
- "nextInvoiceDate": "2026-02-01",
- "billingStatus": "SETTLED",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists the memberships the given party is a member of.
| partyId required | string |
[- {
- "id": "string",
- "partyId": "string",
- "membershipId": "string",
- "publicId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]Links a party to the membership as a member. The owner lives on the membership itself (set when it is created), not through this endpoint.
| membershipId required | string |
| partyId required | string Opaque external identifier of the party to link to the membership as a member. |
{- "partyId": "01KZTHZMV0DQ2KE4K01XVX33WE"
}{- "id": "string",
- "partyId": "string",
- "membershipId": "string",
- "publicId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists every member linked to the membership; the owner lives on the membership itself.
| membershipId required | string |
[- {
- "id": "string",
- "membershipId": "string",
- "publicId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "party": {
- "id": "string",
- "type": "NATURAL_PERSON",
- "initials": "string",
- "givenName": "string",
- "familyName": "string",
- "legalName": "string",
- "gender": "MALE",
- "dateOfBirth": "2019-08-24",
- "email": "string",
- "phonePrimary": "string",
- "phoneSecondary": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "roles": [
- "OWNER"
]
}
}
]Regenerates the membership number for a linked party — used when a card is lost or on suspected fraud. The previous number stops working immediately.
| membershipId required | string |
| partyId required | string |
{- "id": "string",
- "partyId": "string",
- "membershipId": "string",
- "publicId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Fetches the party's most recently issued mandate, active or revoked, or null when it has none.
| partyId required | string |
{- "id": "string",
- "partyId": "string",
- "provider": "CM_COM_PS",
- "executionMethod": "CARD_TOKEN",
- "originMethod": "CARD",
- "revokedAt": "2019-08-24T14:15:22Z",
- "revokedReason": "apps.management.relations.detail.payments.mandate.revoked-reason.iban-rejected",
- "ibanLastDigits": "300",
- "subscriptionReference": "01M4DS178BCZ2Y1P24YV6FCBX1",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Records a mandate a tenant collected directly from the party (e.g. at the counter, by phone or by email) rather than through a PSP flow. Revokes any previously active mandate for the party before creating the new one.
| partyId required | string |
| iban required | string IBAN the tenant collected from the party. Validated with the MOD-97 checksum. |
{- "iban": "NL91ABNA0417164300"
}{- "id": "string",
- "partyId": "string",
- "provider": "CM_COM_PS",
- "executionMethod": "CARD_TOKEN",
- "originMethod": "CARD",
- "revokedAt": "2019-08-24T14:15:22Z",
- "revokedReason": "apps.management.relations.detail.payments.mandate.revoked-reason.iban-rejected",
- "ibanLastDigits": "300",
- "subscriptionReference": "01M4DS178BCZ2Y1P24YV6FCBX1",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Lists the invoices due on memberships the given party owns or is a member of, most recently due first by default.
| partyId required | string |
| order | string Default: "ASC" Enum: "ASC" "DESC" Sort order applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
{- "data": [
- {
- "id": "string",
- "membershipId": "string",
- "amount": 0,
- "amountExclVat": 0,
- "vatAmount": 0,
- "vatPercentage": 0,
- "currencyCode": "EUR",
- "dueDate": "2019-08-24",
- "status": "PENDING",
- "retryCount": 0,
- "nextRetryAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "membershipTypeName": "string",
- "pricePlanName": "string",
- "billingCycleLength": 0,
- "billingCycleUnit": "MONTH",
- "partyName": "string",
- "partyEmail": "string",
- "billingAttentionLine": "string",
- "billingStreet": "string",
- "billingHouseNumber": "string",
- "billingHouseNumberSuffix": "string",
- "billingPostalCode": "string",
- "billingCity": "string",
- "billingCountryCode": "string",
- "organisationName": "string"
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}The attempt history, mandate used, and dunning status for a single invoice.
| partyId required | string |
| invoiceId required | string |
{- "id": "string",
- "membershipId": "string",
- "amount": 0,
- "amountExclVat": 0,
- "vatAmount": 0,
- "vatPercentage": 0,
- "currencyCode": "EUR",
- "dueDate": "2019-08-24",
- "status": "PENDING",
- "retryCount": 0,
- "nextRetryAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "membershipTypeName": "string",
- "pricePlanName": "string",
- "billingCycleLength": 0,
- "billingCycleUnit": "MONTH",
- "partyName": "string",
- "partyEmail": "string",
- "billingAttentionLine": "string",
- "billingStreet": "string",
- "billingHouseNumber": "string",
- "billingHouseNumberSuffix": "string",
- "billingPostalCode": "string",
- "billingCity": "string",
- "billingCountryCode": "string",
- "organisationName": "string",
- "attempts": [
- {
- "id": "string",
- "attemptNumber": 0,
- "provider": "CM_COM_PS",
- "flowType": "BACKGROUND_RECURRING",
- "providerRef": "string",
- "pspOrderId": "string",
- "manualMethod": "CASH",
- "originMethod": "CARD",
- "status": "SUBMITTED",
- "initiatedAt": "2019-08-24T14:15:22Z",
- "completedAt": "2019-08-24T14:15:22Z",
- "failureReasonCode": "string",
- "failureReasonMessage": "string",
- "amount": 0,
- "partyMandate": {
- "id": "string",
- "provider": "CM_COM_PS",
- "executionMethod": "CARD_TOKEN",
- "originMethod": "CARD",
- "revokedAt": "2019-08-24T14:15:22Z"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "dunningCase": {
- "id": "string",
- "step": "NOTIFIED",
- "startedAt": "2019-08-24T14:15:22Z",
- "nextActionAt": "2019-08-24T14:15:22Z",
- "resolvedAt": "2019-08-24T14:15:22Z",
- "resolution": "AUTO_RETRY",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
}Registers a payment attempt that already happened outside the gateway pipeline (cash, bank transfer, correction), marking an existing invoice paid. Never creates a new invoice or changes its amount.
| partyId required | string |
| invoiceId required | string |
| paidAt required | string <date-time> When the payment was actually made. |
| method required | string Enum: "CASH" "BANK_TRANSFER" "OTHER" How the payment was made. |
| amount required | number Amount actually collected for this attempt, in major currency units. |
| reference | string Free-text reference for the payment ("kenmerk"), e.g. a bank transfer reference. |
{- "paidAt": "2019-08-24T14:15:22Z",
- "method": "CASH",
- "amount": 0,
- "reference": "string"
}{- "id": "string",
- "membershipId": "string",
- "amount": 0,
- "amountExclVat": 0,
- "vatAmount": 0,
- "vatPercentage": 0,
- "currencyCode": "EUR",
- "dueDate": "2019-08-24",
- "status": "PENDING",
- "retryCount": 0,
- "nextRetryAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "membershipTypeName": "string",
- "pricePlanName": "string",
- "billingCycleLength": 0,
- "billingCycleUnit": "MONTH",
- "partyName": "string",
- "partyEmail": "string",
- "billingAttentionLine": "string",
- "billingStreet": "string",
- "billingHouseNumber": "string",
- "billingHouseNumberSuffix": "string",
- "billingPostalCode": "string",
- "billingCity": "string",
- "billingCountryCode": "string",
- "organisationName": "string",
- "attempts": [
- {
- "id": "string",
- "attemptNumber": 0,
- "provider": "CM_COM_PS",
- "flowType": "BACKGROUND_RECURRING",
- "providerRef": "string",
- "pspOrderId": "string",
- "manualMethod": "CASH",
- "originMethod": "CARD",
- "status": "SUBMITTED",
- "initiatedAt": "2019-08-24T14:15:22Z",
- "completedAt": "2019-08-24T14:15:22Z",
- "failureReasonCode": "string",
- "failureReasonMessage": "string",
- "amount": 0,
- "partyMandate": {
- "id": "string",
- "provider": "CM_COM_PS",
- "executionMethod": "CARD_TOKEN",
- "originMethod": "CARD",
- "revokedAt": "2019-08-24T14:15:22Z"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "dunningCase": {
- "id": "string",
- "step": "NOTIFIED",
- "startedAt": "2019-08-24T14:15:22Z",
- "nextActionAt": "2019-08-24T14:15:22Z",
- "resolvedAt": "2019-08-24T14:15:22Z",
- "resolution": "AUTO_RETRY",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
}Lists the organisation's invoices, most recently due first by default.
| order | string Default: "DESC" Enum: "ASC" "DESC" Sort order on due date applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
| statuses | Array of strings Items Enum: "PENDING" "PROCESSING" "SUCCEEDED" "FAILED_RETRYABLE" "REQUIRES_CUSTOMER_ACTION" "PENDING_AT_PSP" "FAILED_FINAL" "REVERSED" Results match any of the given statuses. |
| membershipTypeIds | Array of strings <= 100 items Opaque external identifiers of membership types. Results match any of the given ids. |
| dueFrom | string <date> Example: dueFrom=2026-10-01 Earliest due date, inclusive. |
| dueTo | string <date> Example: dueTo=2026-10-31 Latest due date, inclusive. |
| paid | boolean True for paid invoices only, false for every other status. |
{- "data": [
- {
- "id": "string",
- "amount": 0,
- "currencyCode": "EUR",
- "dueDate": "2019-08-24",
- "status": "PENDING",
- "membershipTypeName": "string",
- "partyName": "string",
- "holder": {
- "id": "string",
- "type": "NATURAL_PERSON",
- "name": "string"
}
}
], - "meta": {
- "page": 0,
- "take": 0,
- "itemCount": 0,
- "pageCount": 0,
- "hasPreviousPage": true,
- "hasNextPage": true
}
}Streams an .xlsx workbook of the organisation's invoices, honouring the same filters as the list.
| order | string Default: "DESC" Enum: "ASC" "DESC" Sort order on due date applied to the list. |
| page | number [ 1 .. 90071992547409 ] Default: 1 1-indexed page number. |
| take | number [ 1 .. 100 ] Default: 25 Number of items per page. |
| statuses | Array of strings Items Enum: "PENDING" "PROCESSING" "SUCCEEDED" "FAILED_RETRYABLE" "REQUIRES_CUSTOMER_ACTION" "PENDING_AT_PSP" "FAILED_FINAL" "REVERSED" Results match any of the given statuses. |
| membershipTypeIds | Array of strings <= 100 items Opaque external identifiers of membership types. Results match any of the given ids. |
| dueFrom | string <date> Example: dueFrom=2026-10-01 Earliest due date, inclusive. |
| dueTo | string <date> Example: dueTo=2026-10-31 Latest due date, inclusive. |
| paid | boolean True for paid invoices only, false for every other status. |
Public organisation info needed to render the shop.
| organisationId required | string |
{- "name": "string",
- "currencyCode": "EUR",
- "languageCode": "EN",
- "enabled": true,
- "donationsEnabled": true,
- "giftsEnabled": true,
- "slug": "my-club",
- "styling": {
- "bodyBackgroundColor": "#f4f5f7",
- "bodyTextColor": "#1a1a1a",
- "cardBackgroundColor": "#ffffff",
- "cardTextColor": "#1a1a1a",
- "primaryButtonColor": "#0a5cff",
- "primaryButtonTextColor": "#ffffff",
- "secondaryButtonColor": "#6b7280",
- "secondaryButtonTextColor": "#ffffff",
- "boxStyle": "ROUNDED"
}, - "contact": {
- "phone": "+31 20 123 4567",
}
}Membership types (with their sellable price plans) a buyer can check out with, in the requested locale.
| organisationId required | string |
| locale required | string Enum: "nl-NL" "en-GB" Locale the texts are returned in. |
[- {
- "id": "string",
- "name": "string",
- "description": "string",
- "maxMembers": 0,
- "pricePlans": [
- {
- "id": "string",
- "name": "string",
- "billingMode": "RECURRING",
- "billingCycleLength": 0,
- "billingCycleUnit": "MONTH",
- "currencyCode": "EUR",
- "vatPercentage": "string",
- "initialPriceExclVat": "string",
- "initialPriceInclVat": "string",
- "renewalPriceExclVat": "string",
- "renewalPriceInclVat": "string"
}
], - "benefits": [
- {
- "name": "string",
- "description": "string",
- "type": "ACCESS"
}
]
}
]The consent definitions the buyer is asked to accept, in the requested locale.
| organisationId required | string |
| locale required | string Enum: "nl-NL" "en-GB" Locale the texts are returned in. |
[- {
- "id": "string",
- "label": "string",
- "legalText": "string",
- "mandatory": true
}
]Creates a checkout and starts a payment for it; the response carries where to send the buyer to pay.
| organisationId required | string |
| Idempotency-Key required | string Caller-generated key; a retried request with the same key returns the original checkout. |
| membershipTypeId required | string Opaque external identifier of the membership type being purchased. |
| pricePlanId required | string Opaque external identifier of the price plan being purchased. |
| startDate required | string <date> Calendar day the membership should start. |
| locale required | string Enum: "nl-NL" "en-GB" Locale the buyer is checking out in. |
required | object (ShopCheckoutBuyerSchema) |
required | Array of objects (ShopCheckoutMemberSchema) Extra members beyond the buyer, who becomes the owner. |
| acceptedConsents required | Array of strings Ids of the consent definitions the buyer accepted; must include every mandatory one. |
| donationAmount | number Donation in major currency units, added to the payment amount. Rejected above zero when the shop has donations disabled. |
| donationFrequency | string Enum: "ONE_TIME" "YEARLY" How often the buyer means to give. Only the first donation is charged; YEARLY is recorded for follow-up. Defaults to ONE_TIME. |
{- "membershipTypeId": "string",
- "pricePlanId": "string",
- "startDate": "2026-10-01",
- "locale": "nl-NL",
- "buyer": {
- "givenName": "Anna",
- "familyName": "de Vries",
- "phoneNumber": "+31612345678",
- "dateOfBirth": "1990-05-14",
- "address": {
- "street": "Stationsplein",
- "houseNumber": "9",
- "houseNumberSuffix": "K",
- "postalCode": "4811 BM",
- "city": "Breda",
- "countryCode": "NL"
}
}, - "members": [
- {
- "givenName": "Bram",
- "familyName": "de Vries",
- "dateOfBirth": "2015-03-02"
}
], - "acceptedConsents": [
- "string"
], - "donationAmount": 5,
- "donationFrequency": "ONE_TIME"
}{- "id": "string",
- "status": "PENDING_PAYMENT",
- "redirectUrl": "string",
- "membershipTypeName": "string",
- "pricePlanName": "string",
- "startDate": "2019-08-24",
- "membershipNumber": "string"
}Polls the status of a checkout (e.g. while the buyer completes payment).
| organisationId required | string |
| checkoutId required | string |
{- "id": "string",
- "status": "PENDING_PAYMENT",
- "redirectUrl": "string",
- "membershipTypeName": "string",
- "pricePlanName": "string",
- "startDate": "2019-08-24",
- "membershipNumber": "string"
}Gives up an unpaid checkout at the payment provider. A checkout that was paid in the meantime stays paid.
| organisationId required | string |
| checkoutId required | string |
{- "id": "string",
- "status": "PENDING_PAYMENT",
- "redirectUrl": "string",
- "membershipTypeName": "string",
- "pricePlanName": "string",
- "startDate": "2019-08-24",
- "membershipNumber": "string"
}