← All action domains

Affiliate program

39 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 an affiliate

affiliate_program.add_affiliatewriteadmin only

Recruit an affiliate by hand (they normally join through the program's public signup link). Mints their referral code, portal link, and default tracked link. The result includes their portal URL — a private bearer link to send to that person, and only that person.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredThe program to add them to.
namestringrequiredThe affiliate's name — also seeds their referral code.
emailstring (email)optionalTheir email. One signup per email per program.
contact_idstring (uuid)optionalLink them to an existing CRM contact.
parent_affiliate_idstring (uuid)optionalThe affiliate who recruited them (their tier-2 upline), by id.
parent_codestringoptionalThe recruiting affiliate's referral code — an alternative to parent_affiliate_id.
status"pending" | "active" | "paused" | "banned"optionalOverride the program's auto-approval: e.g. 'active' to approve immediately or 'pending' to hold.
override_reward_percentnumberoptionalA personal rate replacing the program percent for this affiliate's future referrals.
paypal_emailstring (email)optionalWhere their payouts go by default.
notesstringoptionalPrivate notes about this affiliate (never shown to them).

Example

curl -X POST https://app.chirply.io/api/v1/actions/affiliate_program.add_affiliate \
  -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 affiliate_program_add_affiliate at https://app.chirply.io/api/mcp, same bearer token, same input.

Add a referral

affiliate_program.add_referralwriteadmin only

Manually credit a person to an affiliate — for deals that arrived outside the tracked links (a phone call, a conference). Snapshots the program's current reward terms onto the referral; when this person later pays, those terms decide the commission. First touch wins: if the person is already a referral, the existing attribution is returned unchanged.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredThe program the referral belongs to.
affiliate_idstring (uuid)optionalThe affiliate to credit, by id.
affiliate_codestringoptionalThe affiliate to credit, by referral code — an alternative to affiliate_id.
emailstring (email)optionalThe referred person's email — how later payments find them.
namestringoptionalThe referred person's name.
contact_idstring (uuid)optionalLink to an existing CRM contact.
stripe_customer_idstringoptionalTheir Stripe customer id, so Stripe payments attribute automatically.
stripe_subscription_idstringoptionalTheir Stripe subscription id, for renewal attribution.
external_idstringoptionalYour own reference for this referral.

Example

curl -X POST https://app.chirply.io/api/v1/actions/affiliate_program.add_referral \
  -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 affiliate_program_add_referral at https://app.chirply.io/api/mcp, same bearer token, same input.

Approve affiliate

affiliate_program.approve_affiliatewriteadmin only

Approve a pending affiliate (or reactivate a paused one): their referral links start earning attribution and their portal shows them as active.

Parameters

FieldTypeRequiredDescription
affiliate_idstring (uuid)requiredThe affiliate to approve.

Example

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

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

Approve commission

affiliate_program.approve_commissionwriteadmin only

Approve one pending commission, clearing it for payout — this confirms the account owes the money and lets 'Pay an affiliate' claim it.

Parameters

FieldTypeRequiredDescription
commission_idstring (uuid)requiredThe commission to approve.

Example

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

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

Archive program

affiliate_program.archive_programwriteconfirmadmin only

Archive a program: its signup page and referral links stop working and no new clicks, referrals, or commissions are tracked. Existing referrals keep their snapshots and commission already earned STAYS OWED — archiving stops future tracking, it does not void money. There is no unarchive in the UI, so treat this as final.

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)requiredThe program to archive.

Example

curl -X POST https://app.chirply.io/api/v1/actions/affiliate_program.archive_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 affiliate_program_archive_program at https://app.chirply.io/api/mcp, same bearer token, same input.

Ban affiliate

affiliate_program.ban_affiliatewriteconfirmadmin only

Ban an affiliate — an outward-facing action against a real person: their portal login stops working immediately, their links stop earning, and they can't be paid out while banned. Use for fraud or terms violations; use 'Pause affiliate' for anything temporary.

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
affiliate_idstring (uuid)requiredThe affiliate to ban.

Example

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

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

Cancel contest

affiliate_program.cancel_contestwriteconfirmadmin only

Call off a draft or active contest as if it never happened: no winners are computed, no prizes are owed, and it disappears from every affiliate's portal. Affiliates who were competing lose the contest they were told about — an outward-facing disappointment — and there is no undo.

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
contest_idstring (uuid)requiredThe contest to cancel.

Example

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

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

Cancel payout

affiliate_program.cancel_payoutwriteadmin only

Call off a payout that hasn't been sent yet: the commissions it claimed return to 'approved' and the affiliate's payable balance is restored. A payout already marked paid can't be canceled.

Parameters

FieldTypeRequiredDescription
payout_idstring (uuid)requiredThe payout to cancel.

Example

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

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

New contest

affiliate_program.create_contestwriteadmin only

Create an affiliate contest as a DRAFT — a time-boxed competition with a metric, a window, and prizes by rank. Drafts are invisible to affiliates and cost nothing until you start them (affiliate_program.start_contest); the prizes are your own commitment to deliver, outside Chirply. Ties share a rank and every affiliate tied at a prized rank wins that prize.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalThe program the contest runs inside. Optional when the account runs exactly one program.
namestringrequiredThe contest's name, e.g. 'March Madness'.
descriptionstringoptionalPlain-English pitch shown to affiliates on their leaderboard page.
metric"customers" | "referrals" | "clicks" | "commission_cents"requiredWhat the contest counts: customers = referrals who paid, referrals = sign-ups, clicks = unique visitors sent, commission_cents = commission earned (in cents).
starts_atstring (date-time)requiredWhen the counting window opens (ISO 8601).
ends_atstring (date-time)requiredWhen the counting window closes (ISO 8601). Must be after starts_at.
prizesobject[]optionalPrizes by rank. Free text — a prize can be anything you're willing to deliver.
prizes[].rankintegerrequiredThe finishing place this prize is for (1 = first).
prizes[].prizestringrequiredWhat that place wins, in plain words — '$500 cash', 'A trip to Vegas'.

Example

curl -X POST https://app.chirply.io/api/v1/actions/affiliate_program.create_contest \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example",
    "metric": "customers",
    "starts_at": "2026-09-17T15:00:00Z",
    "ends_at": "2026-09-17T15:00:00Z"
  }'
Test with your API key

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

Pay an affiliate

affiliate_program.create_payoutwriteconfirmadmin only

Create a payout for an affiliate's approved commission — a COMMITMENT TO PAY REAL MONEY to a real person. Claims their approved commissions (oldest first, whole rows only, up to the optional cap) and marks them paid. The money itself moves outside Chirply (PayPal, bank transfer); mark the payout paid once it's sent, or cancel it to release the balance.

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
affiliate_idstring (uuid)requiredWho to pay.
amount_centsintegeroptionalCap in cents. Omit to pay their full approved balance. A payout always covers whole commissions, so the actual amount may be lower.
method"paypal" | "stripe" | "bank" | "manual" | "other"requiredHow the money will be sent: paypal, stripe, bank, manual, or other. paypal and stripe can then be sent automatically with affiliate_program.send_payout; the rest you send yourself and mark paid.
destinationstringoptionalPayPal email or bank reference. Defaults to the affiliate's saved PayPal email.
program_idstring (uuid)optionalOnly pay commissions from this program.
notestringoptionalA note stored on the payout.

Example

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

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

Create program

affiliate_program.create_programwriteconfirmadmin only

Create an affiliate program (a campaign) for this account's own products: the offer (percent or flat per sale, one-time or recurring, optionally a multi-level ladder up to 10 levels deep), cookie window, approval and payout settings. THIS COMMITS REAL MONEY: the account owes the stated commission on every referred sale from the moment it exists, its signup URL is publicly live immediately, and commission rates are never backdated — so an over-generous rate cannot be corrected on referrals already captured under it.

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
namestringrequiredThe program's name, e.g. 'Acme Partner Program'.
termsstringoptionalPlain-English terms shown verbatim to affiliates on the join page.
reward_kind"percent" | "flat"optionalHow the reward is computed: a percent of each sale, or a flat amount per sale. Default: "percent"
reward_percentnumberoptionalPercent of each referred payment the affiliate earns (percent programs). Default 20.
reward_flat_centsintegeroptionalFlat reward per sale, in cents (flat programs).
tiersobject[]optionalThe full commission ladder, level 1 first (up to 10 levels). Level 1 pays the affiliate who referred the customer; level 2 pays the affiliate who recruited THEM; level N pays the person N-1 recruitment steps up the chain. When given, this ladder IS the deal — the single-rate and tier-2 fields are ignored.
tiers[].percentnumberoptionalThis level's share of each referred payment, as a percent (0–100). Give percent OR flat_cents, not both.
tiers[].flat_centsintegeroptionalThis level's fixed reward per sale, in cents (5000 = $50.00). When both are somehow set, flat_cents wins.
currencystringoptionalISO currency code for flat rewards and payouts, e.g. 'usd'. Default usd.
recurringbooleanoptionalTrue (default) pays on renewals too; false pays on the first sale only.
duration_monthsinteger (or null)optionalHow many months recurring commission runs from the first sale. Null (default) = for life.
tier2_enabledbooleanoptionalAlso pay a second-tier reward to the affiliate who recruited the referring affiliate. Default off.
tier2_percentnumber (or null)optionalTier-2 percent of each referred payment (percent programs with tier 2 on).
tier2_flat_centsinteger (or null)optionalTier-2 flat reward per sale, in cents (flat programs with tier 2 on).
cookie_daysintegeroptionalHow many days a click keeps crediting the affiliate. Default 90.
auto_approve_affiliatesbooleanoptionalTrue (default) activates new signups instantly; false holds them pending your approval.
auto_approve_commissionsbooleanoptionalTrue approves commissions automatically once their hold clears; false (default) waits for you to approve each one.
hold_daysintegeroptionalDays a new commission waits (refund window) before it can be approved. Default 30.
min_payout_centsintegeroptionalSmallest approved balance worth paying out, in cents. Default 5000 ($50).
destination_urlstring (uri) (or null)optionalWhere referral links send visitors by default, e.g. your sales page.

Example

curl -X POST https://app.chirply.io/api/v1/actions/affiliate_program.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 affiliate_program_create_program at https://app.chirply.io/api/mcp, same bearer token, same input.

Email affiliates

affiliate_program.email_affiliateswriteconfirmadmin only

Queues a personalized email to every affiliate matching the chosen campaigns and statuses. This is REAL email to real people, sent from this account's own verified sending address and billed to its own Mailgun/Resend account. Subject and body support {{merge_fields}} and are rendered per affiliate, so each person gets their own referral link, code and balance. Affiliates who unsubscribed are skipped and the account's unsubscribe footer is added; affiliates with no email address are skipped too. The send runs as a background job so it can be paced, watched, paused or resumed, and start_at schedules it for later instead of sending now. Call affiliate_program.preview_email_audience first to see how many people that is.

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
subjectstringrequiredThe subject line. Supports merge fields, e.g. {{campaign}}.
bodystringrequiredThe message, as plain text. Blank lines become paragraphs and bare URLs become links. Supports merge fields such as {{first_name}} and {{referral_link}} - affiliate_program.preview_email_audience lists them all.
program_idsarray of (string (uuid))optionalOnly affiliates on these campaigns. Omit for every campaign.
statusesarray of ("pending" | "active" | "paused" | "banned")optionalWhich affiliate statuses to email. Defaults to active only, the people actually promoting. Default: ["active"]
email_identity_idstring (uuid)optionalSend from this account's sending address with this id. Omit to use the account default.
email_pool_idstring (uuid)optionalSend through an email pool instead of one address, rotating least-used-first. Wins over email_identity_id. The pool's warmup allowance caps how much goes out per day.
start_atstring (date-time) (or null)optionalWhen this should START, as an ISO 8601 timestamp with a timezone (e.g. 2026-08-20T14:00:00Z). Omit or null to start immediately. A time in the past starts immediately. The job waits in the account's Jobs list until then and can be rescheduled or canceled before it starts.
per_minuteinteger (or null)optionalCap on items sent per minute. null removes the per-minute cap.
per_hourinteger (or null)optionalCap on items sent per hour. null removes the per-hour cap.
per_dayinteger (or null)optionalCap on items sent per day. null removes the per-day cap.

Example

curl -X POST https://app.chirply.io/api/v1/actions/affiliate_program.email_affiliates \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Example",
    "body": "example"
  }'
Test with your API key

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

End contest & announce winners

affiliate_program.end_contestwriteconfirmadmin only

End an active contest NOW and FREEZE the final standings as its winners, with prizes attached by rank — affiliates see the result on their portals immediately. This is permanent: an announced result never changes, even if more sales land later, and the prizes you promised are now owed to real people. Ending before the scheduled close counts only what happened up to this moment.

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
contest_idstring (uuid)requiredThe active contest to end.

Example

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

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

Open an affiliate

affiliate_program.get_affiliateread

Fetch one affiliate with everything a manager sees: profile and status, their shareable referral link(s), their private portal URL (a bearer link — anyone holding it sees their dashboard, so share it only with the affiliate themself), and their commission balance.

Parameters

FieldTypeRequiredDescription
affiliate_idstring (uuid)requiredThe affiliate's id.

Example

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

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

Open a contest

affiliate_program.get_contestread

Fetch one contest with its full setup (metric, window, prizes) and its standings: LIVE standings computed over the contest window while it's a draft or active, or the FROZEN winners once it has ended. Names here are the affiliates' real names — this is a manager surface; the affiliates' own portals show peers masked.

Parameters

FieldTypeRequiredDescription
contest_idstring (uuid)requiredThe contest's id.

Example

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

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

Leaderboard

affiliate_program.get_leaderboardread

The always-on affiliate leaderboard for a program — top active affiliates ranked by a metric over the last 30 days or all time, ties sharing a rank. Names here are real (this is a manager surface); on the affiliates' own portals every peer appears masked as first name + last initial. Affiliates who chose 'Hide me from the leaderboard' are left off this board too — it's a display surface, unlike contest standings which always count everyone.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalWhich program's board. Optional when the account runs exactly one program.
metric"customers" | "referrals" | "clicks" | "commission_cents"optionalWhat the contest counts: customers = referrals who paid, referrals = sign-ups, clicks = unique visitors sent, commission_cents = commission earned (in cents). Default: "customers"
window"30d" | "alltime"optionalThe counting window: the last 30 days, or all time. Default: "30d"
limitintegeroptionalMax rows (1–100). Default: 10

Example

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

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

Payout rails

affiliate_program.get_payout_railsread

Check whether this account can pay affiliates automatically, and (optionally) where one affiliate stands: is PayPal connected, is Stripe connected, and for a given affiliate their saved payout method, PayPal email, and Stripe Connect onboarding status (none / onboarding / active / restricted — payouts only flow once it's active). The readiness card on the payouts page walks through the same prerequisites, including the one thing this can't verify from here: Stripe Connect must also be enabled on your own Stripe dashboard.

Parameters

FieldTypeRequiredDescription
affiliate_idstring (uuid)optionalAlso report this affiliate's saved method and per-rail readiness.

Example

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

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

Open a program

affiliate_program.get_programread

Fetch one affiliate program with all of its settings — reward terms, tier-2 terms, cookie window, approval switches, hold days, minimum payout — plus its public signup URL.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)requiredThe program's id.

Example

curl -X POST https://app.chirply.io/api/v1/actions/affiliate_program.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 affiliate_program_get_program at https://app.chirply.io/api/mcp, same bearer token, same input.

List affiliates

affiliate_program.list_affiliatesread

List the affiliates recruited into this account's program(s) — name, email, referral code, status, and custom rate — filterable by program and status, searchable by name, email, or code. Portal tokens are never included in lists; open one affiliate to get their portal link.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalOnly affiliates in this program.
status"pending" | "active" | "paused" | "banned"optionalOnly affiliates in this status (pending = awaiting approval, banned = removed).
querystringoptionalText to match against name, email, or referral code.
limitintegeroptionalMax rows to return (1–500), newest first. Default: 50

Example

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

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

List commissions

affiliate_program.list_commissionsread

List the commission ledger — one row per tier per referred payment, with amount, status, and when it clears its hold. Pending + approved rows are real money the account owes its affiliates. Filterable by program, affiliate, and status.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalOnly commissions in this program.
affiliate_idstring (uuid)optionalOnly commissions earned by this affiliate.
status"pending" | "approved" | "paid" | "reversed" | "rejected"optionalOnly commissions in this status (pending = in the hold window, approved = cleared for payout, paid = inside a payout, reversed = clawed back on refund, rejected = refused).
limitintegeroptionalMax rows to return (1–500), newest first. Default: 50

Example

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

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

List contests

affiliate_program.list_contestsread

List this account's affiliate contests — time-boxed competitions ('most new customers this month wins $500') with live standings on every affiliate's portal. Each row includes its status (draft = not visible yet, active = live and counting, ended = winners frozen, canceled = never happened), metric, window, and prizes.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalOnly contests in this program.
status"draft" | "active" | "ended" | "canceled"optionalOnly contests in this status (draft = not visible to affiliates yet, active = running, ended = winners announced, canceled = called off).
limitintegeroptionalMax contests to return (1–200), newest first. Default: 50

Example

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

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

List payouts

affiliate_program.list_payoutsread

List payouts to affiliates — amount, method, destination, and status. A pending payout has claimed its commissions but the money hasn't been sent yet. Filterable by affiliate, program, and status.

Parameters

FieldTypeRequiredDescription
affiliate_idstring (uuid)optionalOnly payouts to this affiliate.
program_idstring (uuid)optionalOnly payouts for this program.
status"pending" | "processing" | "paid" | "failed" | "canceled"optionalOnly payouts in this status (pending = created but not sent, paid = money left, canceled = called off and balance released).
limitintegeroptionalMax rows to return (1–500), newest first. Default: 50

Example

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

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

List programs

affiliate_program.list_programsread

List this account's affiliate programs — the offers it runs (reward terms, cookie window, approval and payout settings) — each with its public signup URL.

Parameters

FieldTypeRequiredDescription
include_archivedbooleanoptionalAlso include archived programs, which no longer track new activity. Default: false

Example

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

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

List referrals

affiliate_program.list_referralsread

List the people affiliates have referred — leads and customers — with the reward terms snapshot each referral locked in at capture time. Filterable by program, affiliate, and status.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalOnly referrals in this program.
affiliate_idstring (uuid)optionalOnly referrals credited to this affiliate.
status"lead" | "customer" | "churned" | "rejected"optionalOnly referrals in this status (lead = hasn't paid yet, customer = has paid, churned = cancelled, rejected = disowned).
limitintegeroptionalMax rows to return (1–500), newest first. Default: 50

Example

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

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

Mark payout paid

affiliate_program.mark_payout_paidwriteconfirmadmin only

Confirm the money actually left — the PayPal send or bank transfer happened. Stamps who processed it and when, and settles the affiliate's balance so those commissions are never queued for payment again. It does not move money itself, which is exactly the risk: marking a payout paid that was never sent quietly writes off what the account still owes a real person, and there is no un-mark.

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
payout_idstring (uuid)requiredThe payout that was sent.
notestringoptionalA transfer reference or note.

Example

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

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

Affiliate program overview

affiliate_program.overviewread

Headline numbers for this account's own affiliate program (the program it runs for its products, not Chirply's): affiliate counts by status, clicks, referrals, referred customers, commission totals by status, and the top-earning affiliates. Optionally narrowed to one program or a start date.

Parameters

FieldTypeRequiredDescription
program_idstring (uuid)optionalOnly this program's numbers. Omit for all programs combined.
sincestring (date-time)optionalOnly count activity on or after this ISO 8601 timestamp.

Example

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

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

Pause affiliate

affiliate_program.pause_affiliatewriteadmin only

Pause an affiliate: new clicks on their links stop earning attribution until they're approved again. Their existing referrals and earned commission are untouched.

Parameters

FieldTypeRequiredDescription
affiliate_idstring (uuid)requiredThe affiliate to pause.

Example

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

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

Preview who an affiliate email would reach

affiliate_program.preview_email_audienceread

Counts the affiliates a broadcast would go to, without sending anything: how many match the chosen campaigns and statuses, and how many of those actually have an email address on file. The second number is the real send size, because affiliates with no address are skipped. Also lists the merge fields an affiliate email can fill. Run this before affiliate_program.email_affiliates to see exactly what that call would do.

Parameters

FieldTypeRequiredDescription
program_idsarray of (string (uuid))optionalOnly affiliates on these campaigns. Omit for every campaign.
statusesarray of ("pending" | "active" | "paused" | "banned")optionalWhich affiliate statuses to include. Defaults to active only, the people actually promoting. Default: ["active"]

Example

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

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

Record a sale

affiliate_program.record_salewriteconfirmadmin only

Record a referred payment by hand and write the commission it earns — REAL MONEY the account then owes its affiliate(s), one ledger row per tier, at the terms snapshot on the referral. Use for sales that happened outside connected Stripe. Supply external_ref to make retries safe: the same reference is never recorded 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
amount_centsintegerrequiredWhat the customer paid, in cents — commission is computed from this.
currencystringoptionalISO currency code. Defaults to the program's.
referral_idstring (uuid)optionalThe referral this payment belongs to, when known.
stripe_customer_idstringoptionalFind the referral by Stripe customer instead.
stripe_subscription_idstringoptionalFind the referral by Stripe subscription instead.
emailstring (email)optionalFind the referral by the customer's email instead.
program_idstring (uuid)optionalNarrows an email match when the account runs several programs.
kind"sale" | "renewal" | "bonus" | "adjustment"optionalWhat kind of payment this is. Omit to infer: first payment = sale, later = renewal.
external_refstringoptionalYour idempotency key — an invoice or order id. Strongly recommended; the same reference is only ever recorded once.
notestringoptionalA note stored on the commission rows.

Example

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

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

Reject commission

affiliate_program.reject_commissionwriteconfirmadmin only

Refuse a pending or approved commission (fraud, dispute, self-referral) — the affiliate permanently loses this money from their balance. Already-paid commissions can't be rejected.

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
commission_idstring (uuid)requiredThe commission to reject.
notestringoptionalWhy it was rejected — stored on the ledger row.

Example

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

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

Send payout

affiliate_program.send_payoutwriteconfirmadmin only

Send a pending payout down its rail RIGHT NOW — this moves real money from your own PayPal or Stripe account to the affiliate immediately. The rail is the affiliate's saved payout method unless you override it: 'paypal' sends a PayPal payout from your connected PayPal (settles within minutes), 'stripe' transfers out of your own Stripe balance into the affiliate's Stripe account instantly, and 'manual' just records that you already sent the money yourself. If the provider refuses, the payout is marked failed and the claimed commissions are released back to the affiliate's balance so nothing is silently swallowed.

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
payout_idstring (uuid)requiredThe pending payout to send (create one with affiliate_program.create_payout).
method"paypal" | "stripe" | "manual"optionalOverride the affiliate's saved payout method for this send only — e.g. pay by Stripe once while their bouncing PayPal address gets fixed. Omit to use their saved method.
notestringoptionalA note for the transfer / payout email.

Example

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

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

Special deal

affiliate_program.set_affiliate_dealwriteconfirmadmin only

Give one affiliate a personal deal that replaces the campaign's standard terms — their own multi-level commission ladder, and/or their own recurring window. THIS CHANGES WHAT A REAL PERSON EARNS on referrals they capture FROM NOW ON, and never touches the past: every referral already captured keeps the terms it locked in, so a deal set by mistake cannot be reversed for anything captured while it stood. Pass null for a field to clear it back to the campaign's terms (an affiliate with no overrides simply follows the campaign, so raising the campaign later raises them too).

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
affiliate_idstring (uuid)requiredThe affiliate whose personal deal to set.
override_tiersobject[] (or null)optionalA personal commission ladder replacing the campaign's ENTIRE ladder for this person's future referrals (level 1 first, up to 10 levels). Null clears it — they go back to the campaign's ladder.
override_tiers[].percentnumberoptionalThis level's share of each referred payment, as a percent (0–100). Give percent OR flat_cents, not both.
override_tiers[].flat_centsintegeroptionalThis level's fixed reward per sale, in cents (5000 = $50.00). When both are somehow set, flat_cents wins.
override_recurringboolean (or null)optionalPersonally pay them on renewals too (true) or on the first sale only (false), regardless of the campaign setting. Null clears back to the campaign's setting.
override_duration_monthsinteger (or null)optionalPersonally how many months their recurring commission runs from each referral's first sale (1–120). Null clears back to the campaign's window.

Example

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

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

Set custom rate

affiliate_program.set_affiliate_ratewriteconfirmadmin only

Give one affiliate a personal commission percent that replaces the program's percent, or clear it back to the program rate. THIS CHANGES WHAT A REAL PERSON IS PAID. It applies to referrals they capture FROM NOW ON — existing referrals keep the terms they locked in, because rates are never backdated, so neither a raise nor a cut can be undone for anything captured while it stood.

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
affiliate_idstring (uuid)requiredThe affiliate whose rate to set.
percentnumber (or null)requiredTheir personal percent per referred payment. Null clears the override back to the program rate.

Example

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

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

Set payout method

affiliate_program.set_payout_methodwriteconfirmadmin only

Save how an affiliate gets paid from now on: 'paypal' (automatic PayPal payout to their saved email), 'stripe' (automatic transfer to the Stripe account they set up from their portal), or 'manual' (a human sends the money and marks it paid). THIS DECIDES WHERE REAL MONEY GOES — affiliate_program.send_payout follows whatever is stored here — and it overwrites the previous setting with no record of it. Changes future sends only; payouts already on their way are untouched.

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
affiliate_idstring (uuid)requiredThe affiliate whose payout method to set.
method"paypal" | "stripe" | "manual"requiredHow their payouts go out: paypal (needs their PayPal email on file), stripe (needs their Stripe onboarding finished), or manual.

Example

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

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

Start contest

affiliate_program.start_contestwriteconfirmadmin only

Take a draft contest live: it appears on every affiliate's portal leaderboard page and the standings start counting over its window. This is OUTWARD-FACING and it PROMISES A PRIZE — every ACTIVE affiliate is entered automatically, including ones who hide themselves from the always-on leaderboard, and they will see the contest and its stated reward. Starting one by accident commits the account to it in front of everybody.

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
contest_idstring (uuid)requiredThe draft contest to start.

Example

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

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

Edit affiliate details

affiliate_program.update_affiliatewriteconfirmadmin only

Update one affiliate's payout email, private notes, or personal commission rate — mirroring the 'Payout details & notes' editor on their detail page. paypal_email is where affiliate_program.create_payout defaults their payout to when no destination is given, so a wrong address bounces the payment or pays a stranger; confirm it with the affiliate before saving. notes are private and never shown to the affiliate. override_reward_percent does the same job as affiliate_program.set_affiliate_rate (kept working for compatibility) — it applies to referrals they capture FROM NOW ON, never to ones already snapshot. Omitted fields are left alone; pass null to clear paypal_email, notes, or override_reward_percent back to unset.

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
affiliate_idstring (uuid)requiredThe affiliate to edit.
paypal_emailstring (email) (or null)optionalWhere their payouts default to. Null clears it — confirm the address with the affiliate before setting it.
notesstring (or null)optionalPrivate notes about this affiliate, never shown to them. Null clears them.
override_reward_percentnumber (or null)optionalTheir personal commission percent, replacing the program's percent for FUTURE referrals only. Null clears it back to the program rate. Same field affiliate_program.set_affiliate_rate writes — use either.

Example

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

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

Edit contest

affiliate_program.update_contestwriteadmin only

Update a draft or active contest's setup — name, description, metric, window, or prizes. Omitted fields are left alone. An ended or canceled contest can't be edited: a result that has been announced is history.

Parameters

FieldTypeRequiredDescription
contest_idstring (uuid)requiredThe contest to edit.
namestringoptionalNew name.
descriptionstring (or null)optionalNew pitch shown to affiliates. Null clears it.
metric"customers" | "referrals" | "clicks" | "commission_cents"optionalWhat the contest counts: customers = referrals who paid, referrals = sign-ups, clicks = unique visitors sent, commission_cents = commission earned (in cents).
starts_atstring (date-time)optionalNew window open (ISO 8601).
ends_atstring (date-time)optionalNew window close (ISO 8601).
prizesobject[]optionalReplaces the whole prize list when given.
prizes[].rankintegerrequiredThe finishing place this prize is for (1 = first).
prizes[].prizestringrequiredWhat that place wins, in plain words.

Example

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

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

Edit program

affiliate_program.update_programwriteconfirmadmin only

Update a program's settings — name, terms, reward (including the multi-level ladder), cookie window, approval switches, hold days, minimum payout, destination URL, or pause/resume it. Omitted fields are left alone. THIS CHANGES WHAT THE WORKSPACE OWES on every sale from now on, and the public signup and terms pages change with it. Rate changes apply to NEW referrals only — every existing referral keeps the terms it was captured under, so a rate raised by mistake cannot be walked back on referrals captured in the meantime.

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)requiredThe program to edit.
namestringoptionalNew name.
status"active" | "paused"optionalSet 'paused' to stop new clicks and signups without archiving; 'active' to resume.
termsstring (or null)optionalPlain-English terms shown to affiliates.
reward_kind"percent" | "flat"optionalPercent of sale, or flat per sale.
reward_percentnumberoptionalPercent of each referred payment.
reward_flat_centsintegeroptionalFlat reward per sale, in cents.
tiersobject[]optionalThe full commission ladder, level 1 first (up to 10 levels). Level 1 pays the affiliate who referred the customer; level 2 pays the affiliate who recruited THEM; level N pays the person N-1 recruitment steps up the chain. When given, this ladder IS the deal — the single-rate and tier-2 fields are ignored.
tiers[].percentnumberoptionalThis level's share of each referred payment, as a percent (0–100). Give percent OR flat_cents, not both.
tiers[].flat_centsintegeroptionalThis level's fixed reward per sale, in cents (5000 = $50.00). When both are somehow set, flat_cents wins.
currencystringoptionalISO currency code, e.g. 'usd'.
recurringbooleanoptionalPay on renewals too, or first sale only.
duration_monthsinteger (or null)optionalMonths the recurring window runs. Null = for life.
tier2_enabledbooleanoptionalPay a second tier to the recruiting affiliate.
tier2_percentnumber (or null)optionalTier-2 percent.
tier2_flat_centsinteger (or null)optionalTier-2 flat cents.
cookie_daysintegeroptionalDays a click keeps crediting the affiliate.
auto_approve_affiliatesbooleanoptionalActivate new signups instantly.
auto_approve_commissionsbooleanoptionalApprove commissions automatically once their hold clears.
hold_daysintegeroptionalDays a new commission waits before approval.
min_payout_centsintegeroptionalSmallest balance worth paying, cents.
destination_urlstring (uri) (or null)optionalDefault destination for referral links.

Example

curl -X POST https://app.chirply.io/api/v1/actions/affiliate_program.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 affiliate_program_update_program 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=affiliate_program — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.