Skip to main content
Versionv1

Memberships API (1.0)

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.

Current user

Get the signed-in CM user

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.

Authorizations:
cm-jwtcm-sso-accountguid

Responses

Response samples

Content type
application/json
{
  • "displayName": "string",
  • "firstName": "string",
  • "email": "string"
}

Organisations

Get the current organisation

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid

Responses

Response samples

Content type
application/json
{
  • "organisationId": "c9b3f279-e3b5-4204-ad99-646257417f98",
  • "name": "string",
  • "origin": "CM_PLATFORM",
  • "currencyCode": "EUR",
  • "languageCode": "EN",
  • "shopUrl": "http://example.com",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Overview

Get management overview stats

Aggregate membership stats for the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid

Responses

Response samples

Content type
application/json
{
  • "activeMembers": 0,
  • "newMembersThisMonth": 0,
  • "membersPerType": [
    ]
}

Parties

Create a party

Creates a party scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
type
required
string
Enum: "NATURAL_PERSON" "ORGANISATION"
initials
string or null

Natural person only.

givenName
string

Natural person only. Required when type is NATURAL_PERSON.

familyName
string

Natural person only. Required when type is NATURAL_PERSON.

legalName
string

Organisation only. Required when type is ORGANISATION.

gender
string
Enum: "MALE" "FEMALE" "OTHER"

Natural person only.

dateOfBirth
string or null <date>

Natural person only.

email
string or null
phonePrimary
string or null
phoneSecondary
string or null

Responses

Request samples

Content type
application/json
Example
{
  • "type": "NATURAL_PERSON",
  • "givenName": "Anna",
  • "familyName": "de Vries",
  • "dateOfBirth": "1990-05-14",
  • "email": "[email protected]",
  • "phonePrimary": "+31612345678"
}

Response samples

Content type
application/json
{
  • "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": [
    ]
}

List parties

Lists parties scoped to the tenant resolved from the request, optionally filtered by type, role and a free-text search term.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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. OWNER always returns an empty result for now, since that role has no backing data yet.

type
string
Enum: "NATURAL_PERSON" "ORGANISATION"

Filter results by party type.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Search parties

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Export parties

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Get a party by id

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "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": [
    ]
}

Update a party

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
type
string
Enum: "NATURAL_PERSON" "ORGANISATION"
initials
string or null

Natural person only.

givenName
string

Natural person only. Required when type is NATURAL_PERSON.

familyName
string

Natural person only. Required when type is NATURAL_PERSON.

legalName
string

Organisation only. Required when type is ORGANISATION.

gender
string
Enum: "MALE" "FEMALE" "OTHER"

Natural person only.

dateOfBirth
string or null <date>

Natural person only.

email
string or null
phonePrimary
string or null
phoneSecondary
string or null

Responses

Request samples

Content type
application/json
Example
{}

Response samples

Content type
application/json
{
  • "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": [
    ]
}

Add the first address of a kind to a party

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
Example
{
  • "kind": "POSTAL",
  • "street": "Stationsplein",
  • "houseNumber": "9",
  • "houseNumberSuffix": "K",
  • "postalCode": "4811 BM",
  • "city": "Breda",
  • "countryCode": "NL"
}

Response samples

Content type
application/json
{
  • "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"
}

List a party's addresses

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Correct a party address

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
addressId
required
string
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "street": "Stationsplein",
  • "houseNumber": "9",
  • "houseNumberSuffix": "K",
  • "postalCode": "4811 BN",
  • "city": "Breda",
  • "countryCode": "NL"
}

Response samples

Content type
application/json
{
  • "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"
}

Cancel a pending address move

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).

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
addressId
required
string

Responses

Move a party to a new address

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).

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "street": "Prinsengracht",
  • "houseNumber": "263",
  • "postalCode": "1016 GV",
  • "city": "Amsterdam",
  • "countryCode": "NL",
  • "effectiveDate": "2026-09-01"
}

Response samples

Content type
application/json
{
  • "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"
}

Notes

Add a note to a party

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
text
required
string

Responses

Request samples

Content type
application/json
{
  • "text": "Called the customer, they confirmed the new address."
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "partyId": "string",
  • "text": "string",
  • "createdByAccountGuid": "string",
  • "author": "string",
  • "createdAt": "2019-08-24T14:15:22Z"
}

List notes for a party

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Membership Types

Create a membership type

Creates a membership type scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "status": "ACTIVE",
  • "productType": "MEMBERSHIP",
  • "visibility": "PUBLIC",
  • "description": {
    },
  • "maxMembers": 1,
  • "trialPeriodDays": 3650,
  • "gracePeriodDays": 3650,
  • "name": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": {
    },
  • "status": "ACTIVE",
  • "productType": "MEMBERSHIP",
  • "visibility": "PUBLIC",
  • "description": {
    },
  • "maxMembers": 0,
  • "trialPeriodDays": 0,
  • "gracePeriodDays": 0,
  • "pricePlanCount": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

List membership types

Lists all membership types belonging to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Get a membership type

Fetches a single membership type, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": {
    },
  • "status": "ACTIVE",
  • "productType": "MEMBERSHIP",
  • "visibility": "PUBLIC",
  • "description": {
    },
  • "maxMembers": 0,
  • "trialPeriodDays": 0,
  • "gracePeriodDays": 0,
  • "pricePlanCount": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update a membership type

Updates a single membership type, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "status": "ACTIVE",
  • "productType": "MEMBERSHIP",
  • "visibility": "PUBLIC",
  • "description": {
    },
  • "maxMembers": 1,
  • "trialPeriodDays": 3650,
  • "gracePeriodDays": 3650,
  • "name": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": {
    },
  • "status": "ACTIVE",
  • "productType": "MEMBERSHIP",
  • "visibility": "PUBLIC",
  • "description": {
    },
  • "maxMembers": 0,
  • "trialPeriodDays": 0,
  • "gracePeriodDays": 0,
  • "pricePlanCount": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete a membership type

Soft-deletes a single membership type, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

VAT Rates

List VAT rates

Lists the statutory VAT rates, optionally filtered to a single country.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
countryCode
string = 2 characters
Example: countryCode=NL

Filter by ISO 3166-1 alpha-2 country code. Case-insensitive. Omit to list every country.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Settings

Get settings

Returns the effective settings for the tenant; secrets report only whether they are set.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Upsert settings

Validates and stores the given settings items for the tenant; secrets are encrypted at rest.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
required
Array of objects (UpsertSettingItemSchema)

The settings items to upsert.

Array
key
required
string
Enum: "application.languages" "application.language" "application.currency" "application.timezone" "application.date-format" "application.time-format" "organisation.contact-email" "organisation.contact-phone" "organisation.website-url" "organisation.terms-url" "organisation.privacy-url" "branding.primary-color" "branding.secondary-color" "communication.mail-from-name" "communication.mail-from-address" "communication.send-confirmation-mail" "communication.send-reminder-mail" "identification.relation-start-sequence" "identification.membership-prefix" "cm.product-token" "cm.pay.ps.username" "cm.pay.ps.password" "cm.pay.ps.merchant-id" "shop.enabled" "shop.donations-enabled" "shop.gifts-enabled" "shop.slug" "shop.styling.theme" "shop.styling.box-style"

The settings key to set.

required
string or Array of strings or number or boolean

The value for this key; its type is defined by the catalog (string, string list, number or boolean).

Responses

Request samples

Content type
application/json
{
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Custom Field Definitions

Create a custom field definition

Creates a custom field definition scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "kind": "CUSTOM_FIELD",
  • "scope": "PARTY",
  • "key": "custom_field.shirt_size",
  • "label": {
    },
  • "type": "TEXT",
  • "required": true,
  • "visibility": "PUBLIC",
  • "defaultValue": "string",
  • "sortOrder": 0
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "kind": "CUSTOM_FIELD",
  • "scope": "PARTY",
  • "key": "string",
  • "label": {
    },
  • "type": "TEXT",
  • "required": true,
  • "visibility": "PUBLIC",
  • "defaultValue": "string",
  • "sortOrder": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

List custom field definitions

Lists custom field definitions for the tenant, optionally filtered by scope.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Get a custom field definition

Fetches a single custom field definition, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "kind": "CUSTOM_FIELD",
  • "scope": "PARTY",
  • "key": "string",
  • "label": {
    },
  • "type": "TEXT",
  • "required": true,
  • "visibility": "PUBLIC",
  • "defaultValue": "string",
  • "sortOrder": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update a custom field definition

Updates a custom field definition; kind, scope and key are immutable.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
required
object (TranslatedTextSchema)
type
required
string
Value: "TEXT"
required
required
boolean
visibility
required
string
Enum: "PUBLIC" "PRIVATE"
defaultValue
string or null
sortOrder
required
number

Responses

Request samples

Content type
application/json
{
  • "label": {
    },
  • "type": "TEXT",
  • "required": true,
  • "visibility": "PUBLIC",
  • "defaultValue": "string",
  • "sortOrder": 0
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "kind": "CUSTOM_FIELD",
  • "scope": "PARTY",
  • "key": "string",
  • "label": {
    },
  • "type": "TEXT",
  • "required": true,
  • "visibility": "PUBLIC",
  • "defaultValue": "string",
  • "sortOrder": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete a custom field definition

Soft-deletes a custom field definition, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Custom Field Values

Get custom field values for an entity

Returns every definition in the given scope paired with its stored value for the target entity (null when none is stored yet).

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Upsert custom field values for an entity

Stores the given custom field values for the target entity, scoped to the tenant.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Request Body schema: application/json
required
required
Array of objects (UpsertCustomFieldValueItemSchema)
Array
definitionId
required
string

Opaque ulid of the custom-field definition this value belongs to.

value
string or null

Responses

Request samples

Content type
application/json
{
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Message Templates

List message templates

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).

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid

Responses

Response samples

Content type
application/json
{
  • "senderName": "string",
  • "templates": [
    ]
}

Update a message template

Updates a single lifecycle message template, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
object

Email subject per language.

object

Email preheader per language.

object

Email body per language.

object

Call-to-action button label per language.

Responses

Request samples

Content type
application/json
{
  • "subject": {
    },
  • "preheader": {
    },
  • "body": {
    },
  • "buttonLabel": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "type": "WELCOME",
  • "subject": {
    },
  • "preheader": {
    },
  • "body": {
    },
  • "buttonLabel": {
    },
  • "isDefault": true
}

Preview a message template

Synchronously renders the current, possibly-unsaved form field values through mail-broker and returns the resulting HTML.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
preheader
required
string <= 200 characters
body
required
string <= 20000 characters
buttonLabel
required
string <= 60 characters

Responses

Request samples

Content type
application/json
{
  • "preheader": "string",
  • "body": "string",
  • "buttonLabel": "string"
}

Response samples

Content type
application/json
{
  • "html": "string"
}

Consent Definitions

Create a consent definition

Creates a consent definition scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "key": "consent.privacy_policy",
  • "label": {
    },
  • "mandatory": true,
  • "legalText": {
    },
  • "documentUrl": "string",
  • "sortOrder": 0
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "key": "string",
  • "label": {
    },
  • "mandatory": true,
  • "version": 0,
  • "legalText": {
    },
  • "documentUrl": "string",
  • "sortOrder": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

List consent definitions

Lists consent definitions for the tenant, in display order.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Get a consent definition

Fetches a single consent definition, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "key": "string",
  • "label": {
    },
  • "mandatory": true,
  • "version": 0,
  • "legalText": {
    },
  • "documentUrl": "string",
  • "sortOrder": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update a consent definition

Updates a consent definition; the key is immutable. Editing the legal text bumps the version.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
required
object (TranslatedTextSchema)
mandatory
required
boolean
object or null
documentUrl
string or null
sortOrder
required
number

Responses

Request samples

Content type
application/json
{
  • "label": {
    },
  • "mandatory": true,
  • "legalText": {
    },
  • "documentUrl": "string",
  • "sortOrder": 0
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "key": "string",
  • "label": {
    },
  • "mandatory": true,
  • "version": 0,
  • "legalText": {
    },
  • "documentUrl": "string",
  • "sortOrder": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete a consent definition

Soft-deletes a consent definition, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Benefits

Create a benefit

Creates a benefit in the tenant benefit library.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
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 type must match the benefit type. Required for PRODUCT_DISCOUNT; on update, omit it to keep the stored config.

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 usageLimitCount is null.

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.

Responses

Request samples

Content type
application/json
{
  • "description": {
    },
  • "status": "ACTIVE",
  • "visibility": "PUBLIC",
  • "config": {
    },
  • "validityRules": [
    ],
  • "usageLimitCount": 1,
  • "usageLimitWindow": "TOTAL",
  • "usageLimitScope": "MEMBER",
  • "visibleUntil": "2019-08-24",
  • "key": "benefit.summer_evening",
  • "name": {
    },
  • "type": "ACCESS",
  • "visibleFrom": "2019-08-24"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "key": "benefit.summer_evening",
  • "name": {
    },
  • "description": {
    },
  • "type": "ACCESS",
  • "status": "ACTIVE",
  • "visibility": "PUBLIC",
  • "config": {
    },
  • "validityRules": [
    ],
  • "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"
}

List benefits

Lists the tenant benefit library, active benefits first.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Get a benefit

Fetches a single benefit.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "key": "benefit.summer_evening",
  • "name": {
    },
  • "description": {
    },
  • "type": "ACCESS",
  • "status": "ACTIVE",
  • "visibility": "PUBLIC",
  • "config": {
    },
  • "validityRules": [
    ],
  • "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": [
    ]
}

Update a benefit

Updates a benefit; its type cannot change.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
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 type must match the benefit type. Required for PRODUCT_DISCOUNT; on update, omit it to keep the stored config.

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 usageLimitCount is null.

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.

Responses

Request samples

Content type
application/json
{
  • "description": {
    },
  • "status": "ACTIVE",
  • "visibility": "PUBLIC",
  • "config": {
    },
  • "validityRules": [
    ],
  • "usageLimitCount": 1,
  • "usageLimitWindow": "TOTAL",
  • "usageLimitScope": "MEMBER",
  • "visibleUntil": "2019-08-24",
  • "name": {
    },
  • "visibleFrom": "2019-08-24"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "key": "benefit.summer_evening",
  • "name": {
    },
  • "description": {
    },
  • "type": "ACCESS",
  • "status": "ACTIVE",
  • "visibility": "PUBLIC",
  • "config": {
    },
  • "validityRules": [
    ],
  • "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"
}

Delete a benefit

Soft-deletes a benefit.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

List linked benefits

Lists the benefits linked to the membership type.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
membershipTypeId
required
string

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Benefit usage

List benefit usage

Lists the benefit uses of one member or of a whole membership; a reversed use carries reversedAt.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Redeem a benefit

Checks and records a use atomically. Without benefitKey the best applicable benefit of the type is used.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
header Parameters
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.

Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "membershipNumber": "2662667052",
  • "type": "ACCESS",
  • "benefitKey": "string",
  • "quantity": 1,
  • "context": {
    }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "benefitKey": "benefit.free_entry",
  • "quantity": 0,
  • "remaining": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "reversedAt": "2019-08-24T14:15:22Z"
}

Check a member's benefits

Answers, for one benefit type, whether the member may use it right now and which benefits apply. Has no side effects.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "membershipNumber": "2662667052",
  • "type": "ACCESS",
  • "benefitKey": "benefit.free_entry",
  • "quantity": 1
}

Response samples

Content type
application/json
{
  • "type": "ACCESS",
  • "result": "ALLOWED",
  • "appliedBenefitKey": "string",
  • "member": {
    },
  • "benefits": [
    ]
}

Reverse a use

Gives the use back so it no longer counts toward the limit; reversing twice returns the same use.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
usageId
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "benefitKey": "benefit.free_entry",
  • "quantity": 0,
  • "remaining": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "reversedAt": "2019-08-24T14:15:22Z"
}

Consent Records

Get a party's consent state

Returns every consent definition paired with the party's current state (the latest ledger record), including whether a granted consent is outdated.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
partyId
required
string

Opaque ulid of the party (data subject) whose consent state is requested.

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Record consent decisions for a party

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
partyId
required
string

Opaque ulid of the party (data subject) the decisions are for.

required
Array of objects (ConsentGrantSchema)

Responses

Request samples

Content type
application/json
{
  • "partyId": "string",
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Price Plans

Get a price plan

Fetches a single price plan, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "membershipTypeId": "string",
  • "name": {
    },
  • "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"
}

Update a price plan

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "name": {
    },
  • "endDate": "2090-01-01",
  • "active": true
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "membershipTypeId": "string",
  • "name": {
    },
  • "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"
}

Create a price plan

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
membershipTypeId
required
string
Request Body schema: application/json
required
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. SINGLE plans must omit billingCycleLength/billingCycleUnit; RECURRING plans must supply both.

billingCycleLength
number [ 1 .. 60 ]

How many billingCycleUnits one billing cycle lasts. Required unless billingMode is SINGLE.

billingCycleUnit
string
Enum: "MONTH" "YEAR"

The unit billingCycleLength is expressed in. Required unless billingMode is SINGLE.

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.

Responses

Request samples

Content type
application/json
{
  • "name": {
    },
  • "billingMode": "RECURRING",
  • "billingCycleLength": 1,
  • "billingCycleUnit": "MONTH",
  • "startDate": "2026-01-01",
  • "endDate": "2090-01-01"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "membershipTypeId": "string",
  • "name": {
    },
  • "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"
}

List price plans

Lists the price plans belonging to the given membership type.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
membershipTypeId
required
string
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Prices

Change a price

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "vatRateId": "01KZTHZMV0DQ2KE4K01XVX33WE",
  • "initialPrice": 120,
  • "renewalPrice": 100,
  • "validFrom": "2026-01-01"
}

Response samples

Content type
application/json
{
  • "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"
}

Delete a price

Only a price that has not taken effect yet can be deleted. One that has is part of the timeline and is superseded by a later price instead, which returns 422.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Add a price to a price plan

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
pricePlanId
required
string
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "vatRateId": "01KZTHZMV0DQ2KE4K01XVX33WE",
  • "initialPrice": 120,
  • "renewalPrice": 100,
  • "validFrom": "2026-01-01"
}

Response samples

Content type
application/json
{
  • "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"
}

List the prices of a price plan

Lists the price timeline of the given price plan, oldest first.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
pricePlanId
required
string
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Integrations

Send a test email

Publishes a test email via the mail-broker Pub/Sub topic, addressed to the current user.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid

Responses

Memberships

Create a membership

Creates a membership on the given membership type and price plan, with the given party as its owner.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "membershipTypeId": "01KZTHZMV0DQ2KE4K01XVX33WE",
  • "pricePlanId": "01KZTHZMV0DQ2KE4K01XVX33WE",
  • "startDate": "2026-01-01",
  • "endDate": "2090-01-01",
  • "ownerPartyId": "01KZTHZMV0DQ2KE4K01XVX33WE",
  • "ownerAsMember": true,
  • "consents": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "membershipTypeId": "string",
  • "membershipTypeName": {
    },
  • "pricePlanId": "string",
  • "pricePlanName": {
    },
  • "owner": {
    },
  • "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"
}

List memberships

Lists memberships belonging to the tenant resolved from the request, optionally filtered by status, membership type, price plan, owner and start-date period.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Export memberships

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Get a membership

Fetches a single membership, scoped to the tenant resolved from the request.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "membershipTypeId": "string",
  • "membershipTypeName": {
    },
  • "pricePlanId": "string",
  • "pricePlanName": {
    },
  • "owner": {
    },
  • "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"
}

Cancel a membership

Cancels the membership and records the given calendar day as its end date.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string
Request Body schema: application/json
required
endDate
required
string <date>

Calendar day the membership is cancelled as of; recorded as its end date.

Responses

Request samples

Content type
application/json
{
  • "endDate": "2026-06-30"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "membershipTypeId": "string",
  • "membershipTypeName": {
    },
  • "pricePlanId": "string",
  • "pricePlanName": {
    },
  • "owner": {
    },
  • "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"
}

Reactivate a membership

Reactivates a cancelled membership immediately, clearing its end date; the billing cycle continues unchanged.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "membershipTypeId": "string",
  • "membershipTypeName": {
    },
  • "pricePlanId": "string",
  • "pricePlanName": {
    },
  • "owner": {
    },
  • "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"
}

Party Memberships

List a party's memberships

Lists the memberships the given party is a member of.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
partyId
required
string

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Add a member to a membership

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
membershipId
required
string
Request Body schema: application/json
required
partyId
required
string

Opaque external identifier of the party to link to the membership as a member.

Responses

Request samples

Content type
application/json
{
  • "partyId": "01KZTHZMV0DQ2KE4K01XVX33WE"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "partyId": "string",
  • "membershipId": "string",
  • "publicId": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

List a membership's members

Lists every member linked to the membership; the owner lives on the membership itself.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
membershipId
required
string

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Issue a new membership number

Regenerates the membership number for a linked party — used when a card is lost or on suspected fraud. The previous number stops working immediately.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
membershipId
required
string
partyId
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "partyId": "string",
  • "membershipId": "string",
  • "publicId": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Remove a member from a membership

Unlinks a member. The owner is not a link here and cannot be reached through this endpoint.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
membershipId
required
string
partyId
required
string

Responses

Party mandates

Get a party's mandate

Fetches the party's most recently issued mandate, active or revoked, or null when it has none.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
partyId
required
string

Responses

Response samples

Content type
application/json
{
  • "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"
}

Create or renew a party's manual SEPA Direct Debit mandate

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
partyId
required
string
Request Body schema: application/json
required
iban
required
string

IBAN the tenant collected from the party. Validated with the MOD-97 checksum.

Responses

Request samples

Content type
application/json
{
  • "iban": "NL91ABNA0417164300"
}

Response samples

Content type
application/json
{
  • "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"
}

Start a party's authorisation of a new mandate

Opens a two-cent order at the payment provider and returns the provider's hosted payment page, where the party authorises the new mandate. The order reuses the payment provider subscription of the party's latest mandate, active or revoked; a party without one is first set up at the payment provider, which requires an address and an email. The mandate is created once the payment provider reports the payment; any mandate the party has stays in place until then.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
partyId
required
string

Responses

Party Invoices

List a party's invoices

Lists the invoices due on memberships the given party owns or is a member of, most recently due first by default.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
partyId
required
string
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Get a party's invoice detail

The attempt history, mandate used, and dunning status for a single invoice.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
partyId
required
string
invoiceId
required
string

Responses

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "dunningCase": {
    }
}

Manually register a payment attempt

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.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
path Parameters
partyId
required
string
invoiceId
required
string
Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "paidAt": "2019-08-24T14:15:22Z",
  • "method": "CASH",
  • "amount": 0,
  • "reference": "string"
}

Response samples

Content type
application/json
{
  • "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": [
    ],
  • "dunningCase": {
    }
}

Invoices

List invoices

Lists the organisation's invoices, most recently due first by default.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Export invoices

Streams an .xlsx workbook of the organisation's invoices, honouring the same filters as the list.

Authorizations:
los-technical-link-idcm-jwtcm-sso-accountguid
query Parameters
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.

Responses

Shop

Get shop storefront info

Public organisation info needed to render the shop.

path Parameters
organisationId
required
string

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "currencyCode": "EUR",
  • "languageCode": "EN",
  • "enabled": true,
  • "donationsEnabled": true,
  • "giftsEnabled": true,
  • "slug": "my-club",
  • "styling": {
    },
  • "contact": {}
}

List sellable membership types

Membership types (with their sellable price plans) a buyer can check out with, in the requested locale.

path Parameters
organisationId
required
string
query Parameters
locale
required
string
Enum: "nl-NL" "en-GB"

Locale the texts are returned in.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

List consents

The consent definitions the buyer is asked to accept, in the requested locale.

path Parameters
organisationId
required
string
query Parameters
locale
required
string
Enum: "nl-NL" "en-GB"

Locale the texts are returned in.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Start a checkout

Creates a checkout and starts a payment for it; the response carries where to send the buyer to pay.

path Parameters
organisationId
required
string
header Parameters
Idempotency-Key
required
string

Caller-generated key; a retried request with the same key returns the original checkout.

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "membershipTypeId": "string",
  • "pricePlanId": "string",
  • "startDate": "2026-10-01",
  • "locale": "nl-NL",
  • "buyer": {
    },
  • "members": [
    ],
  • "acceptedConsents": [
    ],
  • "donationAmount": 5,
  • "donationFrequency": "ONE_TIME"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "status": "PENDING_PAYMENT",
  • "redirectUrl": "string",
  • "membershipTypeName": "string",
  • "pricePlanName": "string",
  • "startDate": "2019-08-24",
  • "membershipNumber": "string"
}

Get a checkout

Polls the status of a checkout (e.g. while the buyer completes payment).

path Parameters
organisationId
required
string
checkoutId
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "status": "PENDING_PAYMENT",
  • "redirectUrl": "string",
  • "membershipTypeName": "string",
  • "pricePlanName": "string",
  • "startDate": "2019-08-24",
  • "membershipNumber": "string"
}

Cancel a checkout

Gives up an unpaid checkout at the payment provider. A checkout that was paid in the meantime stays paid.

path Parameters
organisationId
required
string
checkoutId
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "status": "PENDING_PAYMENT",
  • "redirectUrl": "string",
  • "membershipTypeName": "string",
  • "pricePlanName": "string",
  • "startDate": "2019-08-24",
  • "membershipNumber": "string"
}