← All action domains

Loyalty

44 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.

Add stamp

loyalty.add_stampwriteconfirm

Award stamps or points, automatically issuing every crossed recurring reward and once-per-card milestone. A configured chance bonus may be issued. Changes the customer's real balance and wallet; may start configured loyalty workflows. Retried operation keys do not award twice.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
card_idstring (uuid)requiredLoyalty card ID in the active account.
amountintegeroptionalPositive stamps or integer points to award. Default 1; at most 1,000 rewards may be issued in one action. Default: 1
location_idstring (uuid)optionalOptional active location in this card's program, used for attribution.
reasonstringoptionalStaff note recorded permanently on the card's history.
idempotency_keystringrequiredUnique caller-generated operation key. Reuse the same key when retrying the same action; use a new key for a different transaction.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.add_stamp \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "idempotency_key": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_add_stamp at https://app.chirply.io/api/mcp, same bearer token, same input.

Adjust balance

loyalty.adjust_balancewriteconfirmadmin only

Make an audited correction to a customer's stamp or point balance. A reason is required. Positive adjustments can issue goals and milestones; chance bonuses are excluded. Negative adjustments cannot make the balance negative or revoke an already issued reward. Customer wallets update.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
card_idstring (uuid)requiredLoyalty card ID in the active account.
amountintegerrequiredSigned nonzero balance correction.
reasonstringrequiredRequired explanation, retained permanently in the card history.
location_idstring (uuid)optionalOptional active location in this card's program, used for attribution.
idempotency_keystringrequiredUnique caller-generated operation key. Reuse the same key when retrying the same action; use a new key for a different transaction.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.adjust_balance \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "amount": 1,
    "reason": "example",
    "idempotency_key": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_adjust_balance at https://app.chirply.io/api/mcp, same bearer token, same input.

View loyalty analytics

loyalty.analyticsread

Read complete server-aggregated enrollment, earning, redemption, location, staff and daily analytics for the selected period. Counts are calculated in the database and are not truncated to a sample of members.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalLoyalty program ID in the active account.
daysintegeroptionalDays of earning, redemption and daily activity to summarize. Card and available-reward totals are current. Default: 30

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.analytics \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "days": 30
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_analytics at https://app.chirply.io/api/mcp, same bearer token, same input.

Verify Poster receipt

loyalty.award_poster_receiptwriteconfirm

Fetch one receipt directly from this program's connected Poster merchant, verify paid/closed state, allowed location and age, then award the configured credit once. A receipt cannot earn on another card or program in the same account. Changes customer balance and wallet and may trigger configured workflows; staff must verify the receipt belongs to this customer.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
integration_idstring (uuid)requiredSaved loyalty integration ID in the active account.
card_idstring (uuid)requiredCustomer card in the connection's program.
receipt_idstringrequiredPoster transaction ID printed or looked up by authorized checkout staff. This is not a fiscal QR URL.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.award_poster_receipt \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "integration_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "receipt_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_award_poster_receipt at https://app.chirply.io/api/mcp, same bearer token, same input.

View delivery report

loyalty.campaign_deliveryreadadmin only

Read per-card wallet delivery receipts and provider errors. Queued is distinct from provider-acknowledged delivery; skipped explains missing wallet installation, consent withdrawal or cancellation.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
campaign_idstring (uuid)requiredWallet campaign ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.campaign_delivery \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_campaign_delivery at https://app.chirply.io/api/mcp, same bearer token, same input.

Cancel campaign

loyalty.cancel_campaignwriteconfirmadmin only

Cancel a draft, schedule or sending wallet campaign. Unsent jobs are skipped after the worker rechecks cancellation; a provider request already in flight may still deliver and cannot be recalled.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
campaign_idstring (uuid)requiredWallet campaign ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.cancel_campaign \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_cancel_campaign at https://app.chirply.io/api/mcp, same bearer token, same input.

Configure Poster webhook

loyalty.configure_poster_webhookwriteconfirmadmin only

Enable automatic receipt earning from a signed Poster developer-app webhook. After saving, register the returned URL for transaction events in Poster and install that app in the connected merchant account. A verified Poster customer-to-card mapping is also required. Future paid receipts can change real balances and customer wallets.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
integration_idstring (uuid)requiredSaved loyalty integration ID in the active account.
app_secretstring (or null)requiredPoster developer application's secret, encrypted at rest. null disables automatic webhook earning without disconnecting staff receipt verification.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.configure_poster_webhook \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "integration_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "app_secret": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_configure_poster_webhook at https://app.chirply.io/api/mcp, same bearer token, same input.

Connect Poster

loyalty.connect_posterwriteconfirmadmin only

Verify and save encrypted Poster credentials plus eligible locations and earning rules. Staff can then award once per server-verified paid receipt. This changes future earning configuration and sends no messages.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.
tokenstringrequiredPoster merchant API access token. Encrypted at rest and never returned by reads.
spot_idsstring[]requiredExplicit allowed Poster spot IDs. At least one required; all must exist in this merchant account.
award_amountintegeroptionalStamps or points awarded per qualifying receipt, independent of its total. Default 1. Default: 1
max_age_daysintegeroptionalMaximum age of a paid receipt in days. Default 7, maximum 30. Default: 7

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.connect_poster \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "token": "example",
    "spot_ids": [
      "example"
    ]
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_connect_poster at https://app.chirply.io/api/mcp, same bearer token, same input.

Connect Telegram bot

loyalty.connect_telegramwriteconfirmadmin only

Verify a BotFather token and register Chirply's authenticated webhook for this program. The bot replies to customers who initiate private /start, /card or /stop commands. It sends no campaign or test messages during setup. Replacing an existing webhook moves that bot's incoming updates to Chirply.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.
bot_tokenstringrequiredBot token issued by Telegram BotFather. Encrypted and never returned.
replace_existing_webhookbooleanoptionalExplicitly replace another service's webhook for this bot. Default false; connecting otherwise refuses an occupied webhook. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.connect_telegram \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "bot_token": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_connect_telegram at https://app.chirply.io/api/mcp, same bearer token, same input.

Create redeem codes

loyalty.create_codeswriteconfirmadmin only

Generate one-use receipt codes that award the configured amount when a customer applies one to a card in this program. Possession authorizes the award. Raw codes are returned once; save them securely for printing. Each code expires and can be consumed only once.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.
countintegerrequiredNumber of one-use codes, from 1 to 200.
amountintegerrequiredStamps or points each code grants.
expires_atstring (date-time)requiredExpiry as an ISO 8601 timestamp with timezone. Must be in the future.
location_idstring (uuid)optionalOptional active location in this card's program, used for attribution.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.create_codes \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "count": 1,
    "amount": 1,
    "expires_at": "2026-09-17T15:00:00Z"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_create_codes at https://app.chirply.io/api/mcp, same bearer token, same input.

Create email draft

loyalty.create_email_draftwriteadmin only

Create an email broadcast DRAFT for a snapshot of loyalty members linked to verified CRM contacts with email addresses. Anonymous card emails are excluded. Requires Campaigns access as well as Loyalty. Wallet marketing consent is separate from email permissions; the existing broadcast composer applies email suppression and consent checks before a later authorized send. No email is sent or scheduled, and an empty audience creates no draft.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.
namestringrequiredName of the draft to open in the standard email broadcast composer.
segmentobjectoptionalSnapshot selection for a draft email broadcast. Only staff-linked CRM identities are included.
segment.kind"all" | "reward_ready" | "lapsed" | "birthday" | "frequent"optionalLoyalty audience among linked CRM contacts with email addresses. Wallet promotional consent is separate; email eligibility is checked by the broadcast composer. Default: "all"
segment.inactive_daysintegeroptionalFor lapsed audience, days since the customer's last earning activity. Default: 30
segment.minimum_earnedintegeroptionalFor frequent audience, minimum lifetime stamps or points earned. Default: 10

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.create_email_draft \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "name": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_create_email_draft at https://app.chirply.io/api/mcp, same bearer token, same input.

Create checkout QR

loyalty.create_kioskwriteconfirmadmin only

Create a temporary, one-use checkout QR that authorizes a single stamps or points award to one card. Display it only after a qualifying purchase; generate a fresh QR for the next customer. Returns its secret token, URL and expiry.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.
location_idstring (uuid)optionalOptional active location in this card's program, used for attribution.
amountintegeroptionalAmount awarded by this checkout QR. Default 1. Default: 1
valid_minutesintegeroptionalMinutes until the checkout QR expires. Default 5, maximum 60. Default: 5

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.create_kiosk \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_create_kiosk at https://app.chirply.io/api/mcp, same bearer token, same input.

Create loyalty program

loyalty.create_programwriteadmin only

Create a draft branded stamp or points program. Enrollment stays closed until the program is made active. No customer messages are sent.

Parameters

FieldTypeRequiredDescription
namestringrequiredCustomer-visible loyalty program name.
descriptionstringoptionalShort explanation shown on the enrollment page. Default: ""
kind"stamps" | "points"optionalWhether the card counts visits as stamps or collects integer points. Default: "stamps"
rulesobjectoptionalEarning and reward rules. Cards retain their enrollment version; changes apply to new cards. Default: {"goal":7,"reward_title":"Free reward","reward_valid_days":90,"card_valid_days":null,"earn_amount":1,"redemption_mode":"staff","milestones":[],"bonus_probability":0,"bonus_title":"Bonus reward","birthday_reward":"","winback_days":30}
rules.goalintegeroptionalStamps or points needed for each recurring reward. Default 7. Default: 7
rules.reward_titlestringoptionalWhat the customer receives each time the goal is reached. Default: "Free reward"
rules.reward_valid_daysintegeroptionalDays after earning a reward before it expires. Default 90. Default: 90
rules.card_valid_daysinteger (or null)optionalDays after enrollment before the card expires; null means no expiry. Default: null
rules.earn_amountintegeroptionalDefault stamps or points awarded for one visit or transaction. Default: 1
rules.redemption_mode"staff" | "customer"optionalstaff requires a signed-in team member to redeem; customer also allows the card holder to confirm redemption. Default: "staff"
rules.milestonesobject[]optionalOptional additional lifetime milestones, up to 20. Default: []
rules.milestones[].thresholdintegerrequiredLifetime earned stamps or points required, once per card.
rules.milestones[].titlestringrequiredMilestone reward title.
rules.bonus_probabilitynumberoptionalChance of an extra reward per earn transaction: 0 disables it, 0.1 means 10%. Staff adjustments cannot trigger it. Default: 0
rules.bonus_titlestringoptionalTitle of the chance-based bonus reward. Default: "Bonus reward"
rules.birthday_rewardstringoptionalReward granted once a year on a provided birthday; empty disables birthday rewards. Default: ""
rules.winback_daysintegeroptionalDays since activity to consider a customer lapsed. Default 30. Default: 30
brandobjectoptionalPublic card appearance. Default: {"background":"#0f172a","foreground":"#ffffff","logo_url":"","stamp_icon":"star","hero_url":"","stamp_shape":"circle","layout":"classic"}
brand.backgroundstringoptionalCard background color. Default #0f172a. Default: "#0f172a"
brand.foregroundstringoptionalCard text color. Default #ffffff. Default: "#ffffff"
brand.logo_urlstring (uri) | ""optionalPublic HTTPS logo image URL, or empty for the gift icon. Upload PNG with assets.upload; the designer prepares a 150×150 PNG for both wallets. Default: ""
brand.stamp_icon"star" | "coffee" | "heart" | "gift" | "check"optionalSymbol used for earned stamps. Default: "star"
brand.accentstringoptionalEarned stamp and points progress color on the web card. Omit to use the text color.
brand.hero_urlstring (uri) | ""optionalPublic HTTPS banner artwork URL, or empty. Use assets.upload for a PNG up to 2 MiB; the designer crops to 1125×369. Appears on web, Apple strip and Google hero. Default: ""
brand.stamp_shape"circle" | "rounded"optionalWeb stamp tile shape; circle by default. Wallet providers display a numeric balance. Default: "circle"
brand.layout"classic" | "centered"optionalWeb card header alignment; classic is left aligned, centered stacks the logo above the title. Wallet layouts are controlled by the provider. Default: "classic"
termsstringoptionalCustomer-facing reward eligibility and redemption terms. Default: ""
timezonestringoptionalIANA timezone used for birthday rewards and reporting; default America/Chicago. Default: "America/Chicago"

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.create_program \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_create_program at https://app.chirply.io/api/mcp, same bearer token, same input.

Disconnect loyalty integration

loyalty.disconnect_integrationwriteconfirmadmin only

Disable this account's saved connection. Telegram also removes the bot webhook and stored chat links. Existing earned credit and receipt replay protection remain recorded. No customer messages are sent.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
integration_idstring (uuid)requiredSaved loyalty integration ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.disconnect_integration \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "integration_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_disconnect_integration at https://app.chirply.io/api/mcp, same bearer token, same input.

Issue card

loyalty.enroll_cardwriteconfirm

Issue a new loyalty card with optional contact details and separately recorded wallet marketing consent. A supplied CRM contact must belong to this account. Existing contact/program cards are returned with token:null; new cards return their secret link once. This sends no email or SMS.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.
contact_idstring (uuid)optionalOptional existing CRM contact. Omit for anonymous enrollment; supplied contact details never prove identity.
display_namestringoptionalOptional name displayed on the card. Default: ""
emailstring (email) (or null)optionalOptional email. This alone does not grant marketing consent or prove identity.
phonestring (or null)optionalOptional phone number, including country code where available.
birthdaystring (or null)optionalOptional birth date as YYYY-MM-DD, used for birthday reward eligibility.
marketing_consentbooleanoptionalSeparate affirmative consent to wallet marketing messages. Default false; enrollment works without this consent. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.enroll_card \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_enroll_card at https://app.chirply.io/api/mcp, same bearer token, same input.

Export members

loyalty.export_cardsreadadmin only

Export this account's loyalty members and optional contact details as formula-safe CSV. Returns up to 10,000 records with total and truncated flags; use list_cards pagination for larger exports. Export contains personal data and no card bearer tokens.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalLoyalty program ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.export_cards \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_export_cards at https://app.chirply.io/api/mcp, same bearer token, same input.

View loyalty card

loyalty.get_cardread

Read a loyalty card, its enrollment rules, latest 200 rewards and latest 100 permanent history entries. Use list_rewards or list_history for older entries. Returns no bearer credential.

Parameters

FieldTypeRequiredDescription
card_idstring (uuid)requiredLoyalty card ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.get_card \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_get_card at https://app.chirply.io/api/mcp, same bearer token, same input.

View loyalty connections

loyalty.get_integrationsread

Read redacted Poster and Telegram connection settings for one loyalty program, including active state and setup errors. Returns no private tokens.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.get_integrations \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_get_integrations at https://app.chirply.io/api/mcp, same bearer token, same input.

View loyalty program

loyalty.get_programread

Read one program's branding, versioned reward rules, terms and first 100 locations. Does not change a card or send messages.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.get_program \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_get_program at https://app.chirply.io/api/mcp, same bearer token, same input.

Grant voucher

loyalty.grant_rewardwriteconfirmadmin only

Issue a manual reward voucher with its own redemption permission and optional secure code. This creates a real customer entitlement and updates their wallet; it does not send email or SMS. A protected voucher returns redeem_code on this issuance receipt only; save it securely. Defaults to the card's configured reward lifetime.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
card_idstring (uuid)requiredLoyalty card ID in the active account.
titlestringrequiredCustomer-visible voucher entitlement, such as Free dessert.
expires_atstring (date-time)optionalExpiry as an ISO 8601 timestamp with timezone. Must be in the future.
redemption_mode"staff" | "customer"optionalOptional override for this voucher: staff requires a team member; customer also permits holder redemption. Omit to inherit the card's rules.
require_codebooleanoptionalRequire a secure code for redemption, including staff redemption. The generated code is returned on issuance, never on the public card. Default false. Default: false
reasonstringoptionalStaff note recorded permanently on the card's history.
idempotency_keystringrequiredUnique caller-generated operation key. Reuse the same key when retrying the same action; use a new key for a different transaction.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.grant_reward \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "title": "Example",
    "idempotency_key": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_grant_reward at https://app.chirply.io/api/mcp, same bearer token, same input.

Check Poster account

loyalty.inspect_posterreadadmin only

Read the authenticated Poster merchant name, currency and available spot IDs. Uses the supplied token for read-only provider API requests and saves nothing.

Parameters

FieldTypeRequiredDescription
tokenstringrequiredPoster merchant API access token. Encrypted at rest and never returned by reads.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.inspect_poster \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_inspect_poster at https://app.chirply.io/api/mcp, same bearer token, same input.

List wallet campaigns

loyalty.list_campaignsreadadmin only

List saved drafts, schedules and delivery totals for this account's wallet campaigns. queued_count is audience size; delivered_count counts provider acknowledgment, not a guarantee the customer saw a notification.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
program_idstring (uuid)optionalLoyalty program ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_campaigns \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_campaigns at https://app.chirply.io/api/mcp, same bearer token, same input.

List loyalty members

loyalty.list_cardsread

List loyalty cards in this account, including optional contact details, consent, balances and activity dates. Filter by program or contact and search name, email or phone. No messages are sent.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
program_idstring (uuid)optionalLoyalty program ID in the active account.
contact_idstring (uuid)optionalOnly cards linked to this existing CRM contact.
searchstringoptionalSearch customer name, email address or phone number.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_cards \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_cards at https://app.chirply.io/api/mcp, same bearer token, same input.

List redeem codes

loyalty.list_codesreadadmin only

Read previously issued receipt-code metadata and whether each was consumed, expired or revoked. Secret codes are shown only when created and cannot be recovered from this list.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
program_idstring (uuid)optionalLoyalty program ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_codes \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_codes at https://app.chirply.io/api/mcp, same bearer token, same input.

View card history

loyalty.list_historyread

Read the card's immutable earning, adjustments, redemption and consent history with pagination. Includes actor and location attribution. No customer messages are sent.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
card_idstring (uuid)requiredLoyalty card ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_history \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_history at https://app.chirply.io/api/mcp, same bearer token, same input.

List checkout QRs

loyalty.list_kiosksreadadmin only

Read issued checkout QR metadata, expiry, consumption and revocation. Secret tokens are returned only when created. A checkout QR authorizes one transaction only.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
program_idstring (uuid)optionalLoyalty program ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_kiosks \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_kiosks at https://app.chirply.io/api/mcp, same bearer token, same input.

List locations

loyalty.list_locationsread

Read the program's locations, coordinates and active status. Coordinates can make installed wallet passes relevant near a business; display is controlled by the wallet provider.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
program_idstring (uuid)requiredLoyalty program ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_locations \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_locations at https://app.chirply.io/api/mcp, same bearer token, same input.

View Poster customer links

loyalty.list_poster_customersread

Read explicitly verified Poster customer-to-card mappings in this account, including verification notes and staff attribution. This never searches or merges identities by email.

Parameters

FieldTypeRequiredDescription
integration_idstring (uuid)requiredSaved loyalty integration ID in the active account.
card_idstring (uuid)optionalOptional card filter.
limitintegeroptionalMaximum mappings to return. Default 50. Default: 50
offsetintegeroptionalPagination offset. Default 0. Default: 0

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_poster_customers \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "integration_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_poster_customers at https://app.chirply.io/api/mcp, same bearer token, same input.

List loyalty programs

loyalty.list_programsread

List this account's stamp and points programs, including draft, active, paused and archived states. This reads configuration and sends no messages.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_programs \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_programs at https://app.chirply.io/api/mcp, same bearer token, same input.

List rewards

loyalty.list_rewardsread

Read all reward vouchers on a card with pagination, including redeemed and expired records. Expiry is evaluated from expires_at; the stored status records whether it was redeemed. Secret redemption codes are never returned by this read.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
card_idstring (uuid)requiredLoyalty card ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.list_rewards \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_list_rewards at https://app.chirply.io/api/mcp, same bearer token, same input.

Find card

loyalty.lookup_cardread

Look up a scanned loyalty card QR value, card web URL or card UUID in the current account. The authenticated caller's account boundary applies even when a valid token belongs elsewhere.

Parameters

FieldTypeRequiredDescription
codestringrequiredScanned card UUID, opaque card token or complete /l/card/... URL.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.lookup_card \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_lookup_card at https://app.chirply.io/api/mcp, same bearer token, same input.

View Poster webhook history

loyalty.poster_webhook_eventsreadadmin only

Read the latest 100 authenticated Poster webhook results, including awarded, skipped and retryable failure details. Retained for 90 days; permanent credit history remains on the loyalty card.

Parameters

FieldTypeRequiredDescription
integration_idstring (uuid)requiredSaved loyalty integration ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.poster_webhook_events \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "integration_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_poster_webhook_events at https://app.chirply.io/api/mcp, same bearer token, same input.

Redeem reward

loyalty.redeem_rewardwriteconfirm

Permanently mark an available, unexpired reward redeemed. Staff should provide the promised goods or service only after this succeeds. Concurrent attempts cannot redeem it twice. Updates the customer wallet and can start configured workflows.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
card_idstring (uuid)requiredLoyalty card ID in the active account.
reward_idstring (uuid)requiredAvailable reward belonging to this card.
redemption_codestringoptionalSecure voucher code, required only when this reward has requires_code=true.
location_idstring (uuid)optionalOptional active location in this card's program, used for attribution.
idempotency_keystringrequiredUnique caller-generated operation key. Reuse the same key when retrying the same action; use a new key for a different transaction.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.redeem_reward \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "reward_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "idempotency_key": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_redeem_reward at https://app.chirply.io/api/mcp, same bearer token, same input.

Revoke redeem code

loyalty.revoke_codewriteconfirmadmin only

Revoke an unused receipt code so possession no longer authorizes a new award. Existing completed earning transactions remain in history.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
code_idstring (uuid)requiredCode metadata ID returned by list_codes, not the secret code itself.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.revoke_code \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "code_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_revoke_code at https://app.chirply.io/api/mcp, same bearer token, same input.

Revoke checkout QR

loyalty.revoke_kioskwriteconfirmadmin only

Revoke a checkout QR before consumption. This does not reverse stamps that have already been granted.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
kiosk_idstring (uuid)requiredCheckout QR record ID returned at creation or by list_kiosks.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.revoke_kiosk \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "kiosk_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_revoke_kiosk at https://app.chirply.io/api/mcp, same bearer token, same input.

Save campaign draft

loyalty.save_campaignwriteadmin only

Create or update a draft wallet campaign with audience rules and an optional future schedule. Saving never enables or sends the campaign; use Send campaign to authorize delivery. Only customers who gave wallet marketing consent are eligible.

Parameters

FieldTypeRequiredDescription
campaign_idstring (uuid)optionalWallet campaign ID in the active account.
program_idstring (uuid)requiredLoyalty program ID in the active account.
titlestringrequiredCampaign name and notification title.
messagestringrequiredCustomer-visible wallet message, up to 500 characters.
segmentobjectoptionalCampaign audience rules evaluated when the scheduled send begins.
segment.kind"all" | "reward_ready" | "lapsed" | "birthday" | "frequent"optionalEligible audience among customers who gave marketing consent. Default: "all"
segment.inactive_daysintegeroptionalFor lapsed audience, days since the customer's last earning activity. Default: 30
segment.minimum_earnedintegeroptionalFor frequent audience, minimum lifetime stamps or points earned. Default: 10
scheduled_atstring (date-time) (or null)optionalOptional future send timestamp. The campaign remains a draft until explicitly enabled.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.save_campaign \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "title": "Example",
    "message": "example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_save_campaign at https://app.chirply.io/api/mcp, same bearer token, same input.

Save loyalty location

loyalty.save_locationwriteadmin only

Create or update a program location used for staff attribution and wallet relevance. An inactive location cannot receive new stamps. This changes customer-visible location metadata and sends no campaign.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredLoyalty program ID in the active account.
location_idstring (uuid)optionalExisting location ID; omit to add a location.
namestringrequiredLocation name shown to staff and customers.
addressstringoptionalStreet address, optional. Default: ""
latitudenumber (or null)optionalLatitude in decimal degrees, or null to clear.
longitudenumber (or null)optionalLongitude in decimal degrees, or null to clear.
activebooleanoptionalWhether staff can attribute new transactions to this location. Default true. Default: true

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.save_location \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "name": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_save_location at https://app.chirply.io/api/mcp, same bearer token, same input.

Send campaign

loyalty.send_campaignwriteconfirmadmin only

Enable a saved draft for real wallet message delivery, immediately or at its saved schedule. The audience is evaluated at send time among consented, active, unexpired cards. Provider limits, installed wallets and notification preferences apply; this sends no email or SMS.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
campaign_idstring (uuid)requiredWallet campaign ID in the active account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.send_campaign \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_send_campaign at https://app.chirply.io/api/mcp, same bearer token, same input.

Change card status

loyalty.set_card_statuswriteconfirmadmin only

Block or reactivate a card. A blocked card cannot earn or redeem and is excluded from new wallet campaigns. History and previously earned rewards remain recorded. Customer wallets update.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
card_idstring (uuid)requiredLoyalty card ID in the active account.
status"active" | "blocked"requiredactive allows normal use; blocked suspends earning, redemption and campaign eligibility.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.set_card_status \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "card_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "status": "active"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_set_card_status at https://app.chirply.io/api/mcp, same bearer token, same input.

Save program

loyalty.update_programwriteconfirmadmin only

Update branding, terms and reward rules or activate, pause or archive a program. Active opens public enrollment and earning. Rule changes create a version for NEW cards; existing cards retain enrolled rules. Branding updates become visible to customers.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
namestringoptionalCustomer-visible loyalty program name.
descriptionstringoptionalShort explanation shown on the enrollment page.
kind"stamps" | "points"optionalWhether the card counts visits as stamps or collects integer points.
rulesobjectoptionalEarning and reward rules. Cards retain their enrollment version; changes apply to new cards.
rules.goalintegeroptionalStamps or points needed for each recurring reward. Default 7. Default: 7
rules.reward_titlestringoptionalWhat the customer receives each time the goal is reached. Default: "Free reward"
rules.reward_valid_daysintegeroptionalDays after earning a reward before it expires. Default 90. Default: 90
rules.card_valid_daysinteger (or null)optionalDays after enrollment before the card expires; null means no expiry. Default: null
rules.earn_amountintegeroptionalDefault stamps or points awarded for one visit or transaction. Default: 1
rules.redemption_mode"staff" | "customer"optionalstaff requires a signed-in team member to redeem; customer also allows the card holder to confirm redemption. Default: "staff"
rules.milestonesobject[]optionalOptional additional lifetime milestones, up to 20. Default: []
rules.milestones[].thresholdintegerrequiredLifetime earned stamps or points required, once per card.
rules.milestones[].titlestringrequiredMilestone reward title.
rules.bonus_probabilitynumberoptionalChance of an extra reward per earn transaction: 0 disables it, 0.1 means 10%. Staff adjustments cannot trigger it. Default: 0
rules.bonus_titlestringoptionalTitle of the chance-based bonus reward. Default: "Bonus reward"
rules.birthday_rewardstringoptionalReward granted once a year on a provided birthday; empty disables birthday rewards. Default: ""
rules.winback_daysintegeroptionalDays since activity to consider a customer lapsed. Default 30. Default: 30
brandobjectoptionalPublic card appearance.
brand.backgroundstringoptionalCard background color. Default #0f172a. Default: "#0f172a"
brand.foregroundstringoptionalCard text color. Default #ffffff. Default: "#ffffff"
brand.logo_urlstring (uri) | ""optionalPublic HTTPS logo image URL, or empty for the gift icon. Upload PNG with assets.upload; the designer prepares a 150×150 PNG for both wallets. Default: ""
brand.stamp_icon"star" | "coffee" | "heart" | "gift" | "check"optionalSymbol used for earned stamps. Default: "star"
brand.accentstringoptionalEarned stamp and points progress color on the web card. Omit to use the text color.
brand.hero_urlstring (uri) | ""optionalPublic HTTPS banner artwork URL, or empty. Use assets.upload for a PNG up to 2 MiB; the designer crops to 1125×369. Appears on web, Apple strip and Google hero. Default: ""
brand.stamp_shape"circle" | "rounded"optionalWeb stamp tile shape; circle by default. Wallet providers display a numeric balance. Default: "circle"
brand.layout"classic" | "centered"optionalWeb card header alignment; classic is left aligned, centered stacks the logo above the title. Wallet layouts are controlled by the provider. Default: "classic"
termsstringoptionalCustomer-facing reward eligibility and redemption terms.
timezonestringoptionalIANA timezone used for birthday rewards and reporting; default America/Chicago.
program_idstring (uuid)requiredProgram to update in the active account.
status"draft" | "active" | "paused" | "archived"optionalactive opens enrollment and earning; paused or archived closes those actions, preserving redemption history.
expected_versionintegeroptionalOptional optimistic concurrency version returned by get_program; refuses an overwritten edit.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.update_program \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "program_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool loyalty_update_program at https://app.chirply.io/api/mcp, same bearer token, same input.

View wallet setup

loyalty.wallet_readinessread

Read Apple Wallet and Google Wallet configuration readiness, required setup and provider limitations. Returns no private credentials and does not claim publishing approval or install a pass.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/loyalty.wallet_readiness \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool loyalty_wallet_readiness at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=loyalty — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.