---
title: "Loyalty Plan Model"
description: "A loyalty plan defines how loyalty value is accumulated and redeemed, and can assign business-specific settings."
canonical: https://docs.ordering.co/api-reference/guides/loyalty-level-model/
---

# Loyalty Plan Model

A loyalty plan defines how loyalty value is accumulated and redeemed, and can assign business-specific settings.

## Core operations

| Action | Method   | Resource                           |
| ------ | -------- | ---------------------------------- |
| List   | `GET`    | `/loyalty_plans`                   |
| Find   | `GET`    | `/loyalty_plans/{loyalty_plan_id}` |
| Create | `POST`   | `/loyalty_plans`                   |
| Update | `POST`   | `/loyalty_plans/{loyalty_plan_id}` |
| Delete | `DELETE` | `/loyalty_plans/{loyalty_plan_id}` |

The detail read and all mutations require administrator authentication.

## Representative fields

Core plan fields include `id`, `name`, `type`, `redemption_rate`, `accumulation_rate`, `maximum_redemption_type`, `maximum_redemption_rate`, `maximum_accumulation`, `expire_after_minutes`, `created_at`, and `updated_at`.

Creation also accepts `businesses`, whose entries can apply business-specific `redeems`, `accumulates`, rates, maximums, and expiration settings. See [Business loyalty plans model](https://docs.ordering.co/api-reference/guides/business-loyalty-plans-model/).

The meanings of these numeric values are unconfirmed; check the loyalty configuration before using them.

## Schema properties

**Schema:** `LoyaltyPlan`

| Name                      | Type            | Description |
| ------------------------- | --------------- | ----------- |
| `accumulation_rate`       | number \| null  | —           |
| `created_at`              | string \| null  | —           |
| `expire_after_minutes`    | any             | —           |
| `id`                      | integer \| null | —           |
| `maximum_accumulation`    | number \| null  | —           |
| `maximum_redemption_rate` | number \| null  | —           |
| `maximum_redemption_type` | any             | —           |
| `name`                    | any             | —           |
| `redemption_rate`         | number \| null  | —           |
| `type`                    | any             | —           |
| `updated_at`              | string \| null  | —           |
