27 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 a line item
invoices.add_line_itemwriteconfirmadmin only
Append a line item to an invoice and recompute its cached totals. `unit_amount` is integer cents. Set item_kind to 'recurring' with an interval to bill it as a subscription line; leave it 'one_time' for a single charge. THIS RE-PRICES A PAY PAGE: once the invoice is published its page is public, so the new line is what the very next buyer is charged, and a 'recurring' line signs them up to be charged again every interval until someone cancels. No confirmation reaches the buyer — the amount on the page is simply different from then on.
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
Field
Type
Required
Description
invoice_id
string (uuid)
required
The invoice to add the item to.
name
string
required
What the buyer is paying for. Shown on the pay page and the receipt.
unit_amount
integer
required
Price per unit in integer cents (e.g. 4999 = $49.99).
quantity
integer
optional
How many units. Multiplies the price. Default: 1
description
string (or null)
optional
Longer detail line shown under the item's name.
item_kind
"one_time" | "recurring"
optional
'one_time' charges once; 'recurring' bills it as a subscription line on the interval below. Default: "one_time"
taxable
boolean
optional
Whether the invoice's tax rate applies to this line. Default: true
min_unit_amount
integer (or null)
optional
trial_ascending only: the starting price in cents, climbing to unit_amount.
recurring_interval
"day" | "week" | "month" | "year"
optional
Recurring items only: how often it bills.
recurring_interval_count
integer
optional
Recurring items only: how many intervals between charges — 28 with a 'day' interval bills every 28 days. A cycle can't exceed a year, so the real ceiling is 365 for day, 52 for week, 12 for month, 1 for year; anything higher is rejected. Default: 1
stripe_price_id
string
optional
Existing recurring Stripe Price id returned by Search Stripe subscription prices. Omit to create one reusable Product + Price at first checkout.
stripe_product_id
string
optional
Matching Product for stripe_price_id, or an existing Product to reuse while creating a new recurring Price when stripe_price_id is omitted.
Over MCP the same operation is the tool invoices_add_line_item at https://app.chirply.io/api/mcp, same bearer token, same input.
Archive
invoices.archivewriteconfirmadmin only
Archive an invoice: it leaves every list, its pay page stops working, and it can no longer be opened. Orders and payments are kept so its financial history remains auditable. Use permanent deletion only for invoices with no financial 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.
Over MCP the same operation is the tool invoices_archive at https://app.chirply.io/api/mcp, same bearer token, same input.
Cancel an order
invoices.cancel_orderwriteconfirmadmin only
Cancel a buyer's order and every charge still scheduled against it, so their card is never charged again. Payments already taken are left untouched — this does NOT refund anything.
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.
Over MCP the same operation is the tool invoices_cancel_order at https://app.chirply.io/api/mcp, same bearer token, same input.
Charge a scheduled payment now
invoices.charge_saved_cardwriteconfirmadmin only
CHARGES REAL MONEY. Runs a scheduled charge immediately against the card the buyer already authorized, on the organization's own Stripe account — the same off-session charge the invoice scheduler makes when an installment, a group close or a capture date comes due. Use it to collect early or to retry a failed installment. The amount comes from the schedule row; it cannot be changed here.
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
Field
Type
Required
Description
schedule_id
string (uuid)
required
The scheduled charge to run now (see invoices.list_schedules).
Over MCP the same operation is the tool invoices_charge_saved_card at https://app.chirply.io/api/mcp, same bearer token, same input.
Stop accepting payments
invoices.closewriteadmin only
Close an invoice so its pay page stops taking new payments. Nothing is deleted and charges already scheduled against existing orders still run. Publishing it again reopens it.
Over MCP the same operation is the tool invoices_close at https://app.chirply.io/api/mcp, same bearer token, same input.
New invoice
invoices.createwriteadmin only
Create a draft invoice of the chosen kind. It starts empty with that kind's default pricing rules; add line items and then publish it to make its pay page live. Nothing is charged and nobody is emailed. For an ongoing subscription until canceled, use standard (one customer) or product (reusable checkout page) and add a recurring line item; plan is only a finite total split into a fixed number of installments. Other kinds: group (price drops as more join), ascending (price rises per buyer). For trial_ascending: A reusable signup link starts a separate free trial for every buyer, anchored to that buyer's enrollment time. Enrollment saves a card but charges nothing. During the initial discount window they can end the trial and pay the starting price immediately; after that, the price rises once per selected time unit in equal increments until it reaches full price at the trial deadline. Paying early cancels the deadline charge. If they do not pay early, their saved card is charged the full price when their own trial ends.
Over MCP the same operation is the tool invoices_create at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete invoice
invoices.deletewriteconfirmadmin only
Permanently deletes an invoice and its failed or canceled $0 checkout attempts. This destroys data and cannot be undone. Refuses to delete any invoice with a paid, refunded, active, pending, or otherwise in-flight order; archive those invoices instead.
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.
Over MCP the same operation is the tool invoices_delete at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete payment attempt
invoices.delete_payment_attemptwriteconfirmadmin only
Permanently deletes one failed or canceled $0 invoice checkout attempt from the Payments list. This destroys data and cannot be undone. Any attempt with a successful or refunded payment is preserved and cannot be deleted.
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.
Over MCP the same operation is the tool invoices_get at https://app.chirply.io/api/mcp, same bearer token, same input.
Open a payment
invoices.get_orderread
Fetch one buyer's order with everything the payment page shows: totals, charges taken so far, the remaining schedule, the timeline, and the buyer's private receipt link.
Over MCP the same operation is the tool invoices_get_public_link at https://app.chirply.io/api/mcp, same bearer token, same input.
All invoices
invoices.listread
List the organization's invoices and checkout pages, newest first. Filter by invoice kind (standard, product, group, ascending, plan, trial_ascending) or status, and search names. Archived invoices are hidden, exactly as in the app.
Over MCP the same operation is the tool invoices_list_payments at https://app.chirply.io/api/mcp, same bearer token, same input.
Scheduled charges
invoices.list_schedulesread
List the future charges queued against orders — payment-plan installments, a group offer's close, a standard invoice's capture date, and dunning retries. Filter by invoice, order, or status to find what's due or what has failed.
Over MCP the same operation is the tool invoices_list_schedules at https://app.chirply.io/api/mcp, same bearer token, same input.
Search Stripe subscription prices
invoices.list_stripe_pricesreadadmin only
List every active fixed recurring Price in the Stripe account and live/test environment selected by an invoice. Use a returned price_id with Add a line item or Edit a line item to reuse that Stripe Product and Price instead of creating a new catalogue entry. This only reads Stripe and does not charge anyone.
Parameters
Field
Type
Required
Description
invoice_id
string (uuid)
required
Invoice whose selected Stripe account and payment mode should be searched.
Over MCP the same operation is the tool invoices_list_stripe_prices at https://app.chirply.io/api/mcp, same bearer token, same input.
Mark paid outside Stripe
invoices.mark_paidwriteconfirmadmin only
Record that an order's outstanding balance arrived OUTSIDE Stripe — cash, a bank transfer, a legacy invoice. Writes a real payment row for the full outstanding amount, marks the order paid, and cancels anything still scheduled against it. No card is charged; this changes the revenue record, so only use it when the money genuinely arrived.
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
Field
Type
Required
Description
order_id
string (uuid)
required
The order that was paid.
note
string
optional
How it was paid, e.g. 'paid by bank transfer'. Shown on the payment record.
Over MCP the same operation is the tool invoices_mark_paid at https://app.chirply.io/api/mcp, same bearer token, same input.
Publish
invoices.publishwriteconfirmadmin only
Publish a draft invoice so its public pay page goes LIVE and starts taking real payments on the organization's own Stripe account. Anyone with the link can then buy. Requires at least one line item.
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.
Over MCP the same operation is the tool invoices_publish at https://app.chirply.io/api/mcp, same bearer token, same input.
Price this invoice now
invoices.quoteread
Run the invoice through the pricing engine and return what a buyer would pay right now: priced lines, discount, scarcity increase, tax, total, what's due at checkout, and every future scheduled charge. This is the same calculation the public pay page and the scheduler use — never compute invoice totals yourself.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The invoice to price.
quantity
integer
optional
Units the buyer wants — product invoices that allow quantity only. Default: 1
curve
boolean
optional
Also return the price curve shown in the builder's chart. Default: false
Over MCP the same operation is the tool invoices_quote at https://app.chirply.io/api/mcp, same bearer token, same input.
Remove a line item
invoices.remove_line_itemwriteconfirmadmin only
Delete one line item from an invoice and recompute its totals. Orders already placed keep the price they were quoted.
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.
Over MCP the same operation is the tool invoices_remove_line_item at https://app.chirply.io/api/mcp, same bearer token, same input.
Send the invoice
invoices.sendwriteconfirmadmin only
SENDS A REAL EMAIL to a customer with a link to a published invoice's pay page, from the organization's own email provider. The invoice must be published. Give either a contact_id (uses that contact's email and renders merge fields like {{first_name}}) or an explicit `to` address.
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
Field
Type
Required
Description
invoice_id
string (uuid)
required
The published invoice to send.
contact_id
string (uuid)
optional
Contact to send to; their email is used and merge fields resolve from them.
to
string (email)
optional
Explicit recipient email. Overrides the contact's own address.
subject
string
optional
Email subject. Defaults to the invoice name.
message
string
optional
Body text above the pay button. Supports merge fields.
Over MCP the same operation is the tool invoices_send at https://app.chirply.io/api/mcp, same bearer token, same input.
Invoicing overview
invoices.summaryread
The money view from the Invoices dashboard: total invoiced, collected, outstanding and failed, plus collections per day for the last N days. Reads real orders and cleared payments, not cached counters.
Parameters
Field
Type
Required
Description
days
integer
optional
How many days of daily collections to include. Default: 30
Over MCP the same operation is the tool invoices_summary at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit invoice details
invoices.updatewriteconfirmadmin only
Update an invoice's name, memo, currency, tax rate, billed contact, connected pay-page domain, pricing rules or pay-page settings. Omitted fields are left alone; `pricing` and `settings` are merged over what's stored, then normalized for the invoice's kind. Money values are integer cents. TWO THINGS HERE REACH THE PUBLIC IMMEDIATELY. (1) `pricing` and `tax_rate` re-price a LIVE pay page — if the invoice is published, the next buyer is charged the new amount with no notice. (2) `settings.headerScript` and `settings.footerScript` inject ARBITRARY JAVASCRIPT into the page where buyers type their card details, and `settings.redirectUrl` sends them anywhere after paying; nothing reviews either. Line items are edited with the invoices.add_line_item / update_line_item / remove_line_item capabilities.
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
Field
Type
Required
Description
id
string (uuid)
required
The invoice to edit.
name
string
optional
Internal name for the invoice.
memo
string (or null)
optional
Note shown to the buyer.
currency
string
optional
ISO 4217 code, lowercase.
tax_rate
number
optional
Tax percentage applied to taxable lines, 0–100 (e.g. 8.25).
contact_id
string (uuid) (or null)
optional
Contact this invoice is billed to. Standard invoices only; ignored otherwise.
domain_id
string (uuid) (or null)
optional
Active connected serving domain for the public pay page, or null for the platform's own address.
stripe_account_id
string (uuid) (or null)
optional
Connected Stripe account that collects new payments for this invoice.
payment_mode
"live" | "test"
optional
live moves real money; test uses the selected account's Stripe test credentials.
pricing
object
optional
Pricing rules for this invoice's kind. Only the supplied keys change.
pricing.captureAt
string (date-time) (or null)
optional
standard: charge the held card on this date instead of now.
pricing.nonPayable
boolean
optional
standard: record-only invoice that can never be paid.
pricing.limitType
"people" | "time" | "quantity" (or null)
optional
product: what caps availability, or null for no cap.
pricing.limitTo
integer (or null)
optional
product: max number of buyers when limitType is 'people'.
pricing.limitUntil
string (date-time) (or null)
optional
product: closes at this time when limitType is 'time'.
pricing.limitQuantity
integer (or null)
optional
product: max units when limitType is 'quantity'.
pricing.allowQuantity
boolean
optional
product: let the buyer choose how many units to buy.
pricing.discountType
"amount" | "percent"
optional
group: whether tier discounts are cents or percentage points.
pricing.tiers
object[]
optional
group: the discount ladder. Replaces the whole ladder.
pricing.tiers[].people
integer
required
Headcount that unlocks this tier.
pricing.tiers[].discount
integer
required
Discount: integer cents, or percentage points when discountType is 'percent'.
pricing.closesAt
string (date-time) (or null)
optional
group: when the offer closes and every held card is charged.
pricing.inflationType
"amount" | "percent"
optional
ascending: whether the increment is cents or percentage points.
pricing.increment
integer
optional
ascending: how much the price goes up at each rise — integer cents, or percentage points when inflationType is 'percent'.
pricing.buyersPerStep
integer
optional
ascending: how many buyers share a price before it rises. 1 (the default) raises the price on every purchase; 10 holds it for buyers 1-10, raises it for buyer 11, again for buyer 21, and so on.
pricing.endsAt
string (date-time) (or null)
optional
ascending: hard stop, after which the invoice closes.
pricing.maxAmount
integer (or null)
optional
ascending: price ceiling in integer cents, or null for none.
pricing.segment
"each" | "all"
optional
group/ascending: apply the adjustment per line item or to the order total.
pricing.installments
integer
optional
plan: how many payments, including the first.
pricing.interval
"day" | "week" | "month"
optional
plan: the gap between installments.
pricing.intervalCount
integer
optional
plan: how many intervals between installments. A cycle can't exceed a year, so the ceiling depends on interval — 365 for day, 52 for week, 12 for month. Anything higher is rejected.
pricing.surgeAmount
integer
optional
plan: financing fee in integer cents, spread across installments.
pricing.lateFee
integer
optional
plan: integer cents added to an installment that has to be retried.
pricing.firstCharge
"now" | "on_schedule"
optional
plan: charge the first installment at checkout, or wait for startsAt.
pricing.startsAt
string (date-time) (or null)
optional
plan: when the schedule starts if firstCharge is 'on_schedule'.
pricing.trialDuration
integer
optional
trial_ascending: how long each enrolled buyer can lock the minimum price.
pricing.totalDuration
integer
optional
trial_ascending: each buyer's free-trial length; their saved card is charged the full price at the end unless they lock a lower price first.
pricing.unit
"hours" | "days"
optional
trial_ascending: the unit both durations are measured in.
settings
object
optional
Pay-page copy and behavior. Only the supplied keys change.
settings.template
"ledger" | "studio" | "essential"
optional
Invoice document design: classic Ledger, branded Studio, or compact Essential.
settings.logoMode
"business" | "custom" | "none"
optional
Use the account business-profile logo, a custom invoice logoUrl, or no logo.
settings.logoUrl
string (uri) (or null)
optional
Hosted HTTPS logo override used when logoMode is custom.
Over MCP the same operation is the tool invoices_update at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit a line item
invoices.update_line_itemwriteconfirmadmin only
Update one line item's name, price, quantity, taxability, ordering or recurrence, and recompute the invoice's cached totals. Omitted fields are left alone. THIS RE-PRICES A LIVE PUBLIC PAY PAGE: if the invoice is published, the new amount is what the very next buyer is charged, immediately and with no notice to anyone. Changing item_kind to 'recurring' turns a one-off purchase into a subscription that keeps charging. People who already paid are not affected — the change only reaches buyers from now on.
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
Field
Type
Required
Description
id
string (uuid)
required
The line item to edit.
name
string
optional
What the buyer is paying for. Shown on the pay page and the receipt.
unit_amount
integer
optional
New price per unit in integer cents. Charged to the next buyer.
quantity
integer
optional
How many units. Multiplies the price.
description
string (or null)
optional
Longer detail line shown under the item's name.
item_kind
"one_time" | "recurring"
optional
'one_time' charges once; 'recurring' bills it as a subscription line on the interval below.
taxable
boolean
optional
Whether the invoice's tax rate applies to this line.
min_unit_amount
integer (or null)
optional
trial_ascending only: starting price in cents.
recurring_interval
"day" | "week" | "month" | "year" (or null)
optional
Recurring items only: how often it bills.
recurring_interval_count
integer
optional
Recurring items only: how many intervals between charges. Must fit what the interval allows — 365 day / 52 week / 12 month / 1 year.
sort_order
integer
optional
Position in the item list.
stripe_price_id
string (or null)
optional
Existing recurring Stripe Price id returned by Search Stripe subscription prices, or null to create and reuse a new Product + Price at first checkout.
stripe_product_id
string (or null)
optional
Optional Product id matching stripe_price_id, or null when clearing the existing Stripe selection.