Loyalty tiers

GET /loyalty-tiers

List the tiers defined across the organization's loyalty programs, alphabetically by default. Archived tiers are included.

Requires the loyalty:read permission.

Query parameters

limitnumber

The number of records to return.

cursorstring

A pagination cursor. Fetch the next page by passing the nextCursor value from the previous response.

sortname | -name | thresholdAmount | -thresholdAmount | createdAt | -createdAt | archivedAt | -archivedAt

The sort order. Prefix a field with - to sort descending. Defaults to name.

filterstring

A JSON-encoded filter document, for example {"createdAt":{"$gte":"2025-01-01T00:00:00Z"}}. Filterable fields: id, name, loyaltyProgramId, archivedAt, createdAt. See Filtering for the syntax.

Request
curl \
  "https://your-store.meisei.app/api/loyalty-tiers" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "data": [
    {
      "id": "A4Ws1igz",
      "name": "string",
      "loyaltyProgramId": "A4Ws1igz",
      "threshold": {
        "type": "...",
        "amount": "...",
        "window": "..."
      },
      "pointsMultiplier": 0,
      "color": "string",
      "metadata": "...",
      "archivedAt": "2025-01-15T09:30:00Z",
      "createdAt": "2025-01-15T09:30:00Z",
      "updatedAt": "2025-01-15T09:30:00Z"
    }
  ],
  "nextCursor": "string"
}

POST /loyalty-tiers

Create a loyalty tier inside a program. Triggers the loyaltyTier.created webhook.

Requires the loyalty:write permission.

Body parameters

namestringrequired

The tier's display name.

loyaltyProgramIdstringrequired

The loyalty program to add the tier to.

thresholdobject | null

What a member has to earn to attain the tier, or null for a tier that is only assigned by hand. The loyalty tier placement automation, installed with the first tier that has a threshold, moves members up as soon as they qualify and moves a member down from a rolling-window tier once they have held it for a year and stopped qualifying.

pointsMultipliernumber

Multiplies points issued by rules for members of this tier, for example 2 for double points. It never applies to manual adjustments, imports, or non-points rewards.

colorstring | null

A CSS color used to badge the tier, or null for the default look.

metadataobject

Key/value pairs for your own data. Keys you define with /metadata-definitions are typed and validated; any other key is free-form. Individual keys are filterable with a dot path, for example metadata.category.

Request
curl \
  -X POST \
  "https://your-store.meisei.app/api/loyalty-tiers" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "loyaltyProgramId": "string",
  "threshold": {
    "type": "earnedPoints",
    "amount": 0,
    "window": "lifetime"
  },
  "pointsMultiplier": 0,
  "color": "string",
  "metadata": "..."
}'
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "loyaltyProgramId": "A4Ws1igz",
  "threshold": {
    "type": "earnedPoints",
    "amount": 0,
    "window": "lifetime"
  },
  "pointsMultiplier": 0,
  "color": "string",
  "metadata": "...",
  "archivedAt": "2025-01-15T09:30:00Z",
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

GET /loyalty-tiers/{id}

Get a single loyalty tier by ID.

Requires the loyalty:read permission.

Path parameters

idstringrequired

The ID of the loyalty tier.

Request
curl \
  "https://your-store.meisei.app/api/loyalty-tiers/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "loyaltyProgramId": "A4Ws1igz",
  "threshold": {
    "type": "earnedPoints",
    "amount": 0,
    "window": "lifetime"
  },
  "pointsMultiplier": 0,
  "color": "string",
  "metadata": "...",
  "archivedAt": "2025-01-15T09:30:00Z",
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

PUT /loyalty-tiers/{id}

Rename a loyalty tier, change its metadata, or archive it so it takes no new members. Triggers the loyaltyTier.updated webhook.

Requires the loyalty:write permission.

Path parameters

idstringrequired

The ID of the loyalty tier to update.

Body parameters

namestring

The tier's display name.

thresholdobject | null

What a member has to earn to attain the tier, or null for a tier that is only assigned by hand. The loyalty tier placement automation, installed with the first tier that has a threshold, moves members up as soon as they qualify and moves a member down from a rolling-window tier once they have held it for a year and stopped qualifying. Omit to leave the threshold alone.

pointsMultipliernumber

Multiplies points issued by rules for members of this tier, for example 2 for double points. It never applies to manual adjustments, imports, or non-points rewards.

colorstring | null

A CSS color used to badge the tier, or null for the default look.

metadataobject

Replaces the tier's metadata wholesale. Omit to leave it alone.

archivedboolean

Set true to archive the tier so it takes no new members, or false to bring it back. Existing members stay put either way.

Request
curl \
  -X PUT \
  "https://your-store.meisei.app/api/loyalty-tiers/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "threshold": {
    "type": "earnedPoints",
    "amount": 0,
    "window": "lifetime"
  },
  "pointsMultiplier": 0,
  "color": "string",
  "metadata": "...",
  "archived": true
}'
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "loyaltyProgramId": "A4Ws1igz",
  "threshold": {
    "type": "earnedPoints",
    "amount": 0,
    "window": "lifetime"
  },
  "pointsMultiplier": 0,
  "color": "string",
  "metadata": "...",
  "archivedAt": "2025-01-15T09:30:00Z",
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

DELETE /loyalty-tiers/{id}

Delete a loyalty tier. Archive it instead if members are still assigned to it. Triggers the loyaltyTier.deleted webhook.

Requires the loyalty:write permission.

Path parameters

idstringrequired

The ID of the loyalty tier to delete.

Request
curl \
  -X DELETE \
  "https://your-store.meisei.app/api/loyalty-tiers/A4Ws1igz" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "id": "A4Ws1igz",
  "name": "string",
  "loyaltyProgramId": "A4Ws1igz",
  "threshold": {
    "type": "earnedPoints",
    "amount": 0,
    "window": "lifetime"
  },
  "pointsMultiplier": 0,
  "color": "string",
  "metadata": "...",
  "archivedAt": "2025-01-15T09:30:00Z",
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}