73 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.
List client report schedules
client_reports.list_schedulesreadadmin only
List every scheduled client report this agency has configured: which client, weekly or monthly, the recipient emails, whether it's enabled, when it last sent, and any delivery error. Read-only.
Over MCP the same operation is the tool client_reports_list_schedules at https://app.chirply.io/api/mcp, same bearer token, same input.
Preview a client report
client_reports.previewread
Build a branded client report for the latest completed UTC week or month, returning subject, numbers, fetch time, and HTML without sending email. Unavailable source sections are null and visibly labeled; incomplete reports cannot be sent.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
required
The client account (client account) the report is about. Must belong to this agency — ids come from reseller.list_clients.
cadence
"weekly" | "monthly"
optional
How often the report goes out and what it covers: 'weekly' emails the previous Monday–Sunday week, 'monthly' emails the previous calendar month. Periods are UTC. Default: "monthly"
Over MCP the same operation is the tool client_reports_preview at https://app.chirply.io/api/mcp, same bearer token, same input.
Client performance rollup
client_reports.rollupread
Read each active client's new contacts, calls, connect rate, messages, appointments, reviews, and collected net revenue for a UTC period. Failed sources return null metrics and unavailable section names, never zero. Revenue totals disclose client coverage. Read-only; sends no messages.
Over MCP the same operation is the tool client_reports_rollup at https://app.chirply.io/api/mcp, same bearer token, same input.
Send a client report now
client_reports.send_nowwriteconfirmadmin only
Assemble and email a client's branded performance report for the latest completed UTC week or month — a REAL email through the agency's connected Mailgun/Resend account, billed to the agency. Delivery is held if any source section is unavailable. Use preview to inspect without sending.
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
client_id
string (uuid)
required
The client account (client account) the report is about. Must belong to this agency — ids come from reseller.list_clients.
cadence
"weekly" | "monthly"
optional
How often the report goes out and what it covers: 'weekly' emails the previous Monday–Sunday week, 'monthly' emails the previous calendar month. Periods are UTC. Default: "monthly"
recipients
string[]
optional
Where to send it. Omit to use the recipients saved on the client's schedule.
Over MCP the same operation is the tool client_reports_send_now at https://app.chirply.io/api/mcp, same bearer token, same input.
Set a client's report schedule
client_reports.set_schedulewriteadmin only
Create or update the standing report for one client account: weekly or monthly cadence, the client emails it goes to, and whether it's on. Enabling it means a real branded report email is sent to those addresses automatically after each period ends, through this agency's own connected email account. No email is sent by this call itself.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
required
The client account (client account) the report is about. Must belong to this agency — ids come from reseller.list_clients.
cadence
"weekly" | "monthly"
optional
How often the report goes out and what it covers: 'weekly' emails the previous Monday–Sunday week, 'monthly' emails the previous calendar month. Periods are UTC. Default: "monthly"
recipients
string[]
required
The client's email addresses the report is delivered to (up to 20). Invalid or duplicate addresses are dropped.
enabled
boolean
optional
true starts sending on schedule (needs at least one valid recipient); false pauses without losing the configuration. Default: true
Over MCP the same operation is the tool client_reports_set_schedule at https://app.chirply.io/api/mcp, same bearer token, same input.
Adjust credits
reseller.adjust_client_creditswriteconfirmadmin only
Manually add or remove credits from a client's balance (a comp, a correction). A positive amount grants credits; a negative amount deducts them. Adding credits lifts a paused client back into service. This changes a real balance the reseller is liable for, so it's confirm-gated.
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
client_id
string (uuid)
required
The client account.
amount_dollars
number
required
Signed dollars to apply. Positive grants credits, negative deducts. e.g. 25 or -10.
Over MCP the same operation is the tool reseller_adjust_client_credits at https://app.chirply.io/api/mcp, same bearer token, same input.
Apply a feature preset to this client
reseller.apply_client_feature_presetwriteconfirmadmin only
Set a client account to one of the ready-made shapes — the full platform, CRM only, marketing suite, phone and voice, or inbox only. This REPLACES the client's whole switchboard: every section the preset does not keep is hidden, including features added to Chirply after the preset was written. Use reseller.get_client_features to see what each preset keeps before applying one. Reversible — apply 'everything' to restore the full platform. Does not change their plan or their bill.
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 reseller_apply_client_feature_preset at https://app.chirply.io/api/mcp, same bearer token, same input.
Retire plan
reseller.archive_planwriteconfirmadmin only
Retire a plan so it can no longer be assigned or sold. Clients already on it keep it and keep working — nothing is deleted and nobody's billing changes — but the plan disappears from the pickers. There is no un-retire; recreate it if needed.
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 reseller_archive_plan at https://app.chirply.io/api/mcp, same bearer token, same input.
Assign account domain
reseller.assign_client_domainwriteconfirmadmin only
Assign an agency-owned domain to this client account. Once active, visitors sign in to the assigned account with the agency's branding. Changes live application routing, costs nothing, and preserves domain ownership. Requires White-Label; a domain assigned to another client must be unassigned first.
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
client_id
string (uuid)
required
Client account ID beneath this agency.
domain_id
string (uuid)
required
Agency-owned domain ID from reseller.list_client_domains.
Over MCP the same operation is the tool reseller_assign_client_domain at https://app.chirply.io/api/mcp, same bearer token, same input.
Assign plan
reseller.assign_planwriteconfirmadmin only
Put a client account on one of the agency's plans, or clear it. This changes what a paying third-party business can actually do straight away, because the plan pins their underlying platform tier and limits — moving them down a tier removes features and can push them over a limit they are currently using. It does NOT charge them or change an existing subscription — billing is started separately with reseller.start_client_billing — so the money and the entitlements can end up out of step until someone reconciles them.
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
client_id
string (uuid)
required
The client account.
plan_id
string (uuid) (or null)
required
One of this agency's plans, or null to clear it — a client with no plan inherits whatever plan the agency itself is on.
Over MCP the same operation is the tool reseller_assign_plan at https://app.chirply.io/api/mcp, same bearer token, same input.
Stop billing a client
reseller.cancel_client_billingwriteconfirmadmin only
Cancel a client's subscription on the agency's Stripe. By default it ends when the period they've already paid for runs out; `immediately` cuts it off now, which forfeits the rest of a period they have already been charged for and is not reversible. Does not suspend or delete their account.
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
client_id
string (uuid)
required
The client account to stop charging.
immediately
boolean
optional
End the subscription right now instead of at the end of the paid period. Forfeits time they've already paid for. Default: false
Over MCP the same operation is the tool reseller_cancel_client_billing at https://app.chirply.io/api/mcp, same bearer token, same input.
Switch plan
reseller.change_client_planwriteconfirmadmin only
Move the current CLIENT account to another of its agency's plans. Changes the customer's subscription on the AGENCY's connected Stripe account (never the platform's) and switches the account's features to the new plan immediately. During a free trial nothing is charged: the trial keeps its end date and the new plan's price is charged when it ends. Outside a trial the new price applies at once — Stripe credits the unused part of the current plan and adds the difference to the next invoice, or, when the billing interval changes (monthly to yearly or back), starts a new billing period and charges the card on file today. A declined charge leaves the plan unchanged. Only for client accounts that signed up through the agency's store; a plan the agency bills or sets directly is changed by the agency (reseller.assign_plan). Check reseller.client_plan first for the plans on offer.
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
plan_id
string (uuid)
required
Id of the agency plan to switch to — one of the `options` returned by reseller.client_plan.
Over MCP the same operation is the tool reseller_change_client_plan at https://app.chirply.io/api/mcp, same bearer token, same input.
View checkout terms
reseller.checkout_termsreadadmin only
Read this agency's store checkout requirements: whether buyers must tick a confirmation box (and its exact text and current version), whether the order form collects a company name and VAT ID, the legal links shown on every store page, whether Stripe Tax is on (and the latest reason Stripe refused tax, if any). Also returns the store's checkout address and the exact form field names, with which are required, for an agency's own website that posts orders directly. Changes nothing.
Over MCP the same operation is the tool reseller_checkout_terms at https://app.chirply.io/api/mcp, same bearer token, same input.
Your plan
reseller.client_planreadadmin only
Read the current CLIENT account's plan the way its agency sells it: the plan's name, price and billing interval, the subscription status, trial end and renewal date, the agency's other plans this account can switch to, and whether switching is self-serve here (only for accounts that signed up through the agency's store). Only works inside a client account — one created under an agency. Read-only; nothing is charged.
Over MCP the same operation is the tool reseller_client_plan at https://app.chirply.io/api/mcp, same bearer token, same input.
View your provider subscription
reseller.client_subscriptionreadadmin only
Read the subscription status and period end for the current client account's reseller subscription. Requires an account owner or admin. Does not change billing or access.
Over MCP the same operation is the tool reseller_client_subscription at https://app.chirply.io/api/mcp, same bearer token, same input.
Finish card setup
reseller.complete_client_card_setupwriteadmin only
Verify a confirmed SetupIntent with the reseller's Stripe and record the resulting payment method as the client's saved card for credit top-ups and auto-recharge. Refuses unless Stripe itself reports the setup succeeded for this client's customer. Moves no money.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
required
The client account the card belongs to.
setup_intent_id
string
required
The SetupIntent id (seti_…) returned by reseller.start_client_card_setup, after the client confirmed it.
Over MCP the same operation is the tool reseller_complete_client_card_setup at https://app.chirply.io/api/mcp, same bearer token, same input.
Connect account domain
reseller.connect_client_domainwriteconfirmadmin only
Connect a hostname the agency already owns and assign it to this client account. Requests a public HTTPS certificate, consumes an agency domain slot, and changes where the app opens once DNS is verified. Does not buy a domain or edit DNS; the owner adds the returned CNAME at their provider. Requires White-Label. Existing published content and assignments to other clients are protected.
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
client_id
string (uuid)
required
Client account ID beneath this agency.
domain
string
required
Hostname the agency controls, such as app.client.com; a full URL is accepted.
Over MCP the same operation is the tool reseller_connect_client_domain at https://app.chirply.io/api/mcp, same bearer token, same input.
New client account
reseller.create_clientwriteadmin only
Create a new client account under this agency, optionally putting it straight onto one of the agency's plans. Counts against the agency's paid client account allowance and fails once that's used up. The account starts empty with nobody in it — invite the client with reseller.invite_client_user. Assigning a plan here pins their tier and limits immediately but charges nobody; billing is started separately.
Parameters
Field
Type
Required
Description
name
string
required
The client's name — what the account is called.
plan_id
string (uuid)
optional
Optional. One of this agency's plans to put the new client on right away. Omit to leave them with no plan, inheriting whatever plan the agency itself is on.
Over MCP the same operation is the tool reseller_create_client at https://app.chirply.io/api/mcp, same bearer token, same input.
Create plan
reseller.create_planwriteadmin only
Create a plan this agency sells to its clients: a name the client sees on their invoice, the price the agency charges, which underlying platform tier it unlocks, optional per-limit tweaks on top of that tier, and optionally its own free-trial length on the agency's launch store (trial_days; default: the store's trial). Creating a plan costs nothing and charges nobody — it only defines a package. Clients are put on it separately with reseller.assign_plan.
Parameters
Field
Type
Required
Description
name
string
required
What the client sees, e.g. 'Starter'. Must be unique here.
price_cents
integer
required
What the AGENCY charges its client, in cents (9700 = $97). Unrelated to what the agency pays the platform — the difference is their margin. 0 makes a free plan that can't be billed.
interval
"month" | "year"
optional
How often the client is charged your price. Default: "month"
plan_code
"spark" | "build" | "launch" | "grow" | "scale"
optional
Which underlying platform tier a client on this plan runs on — this is what actually decides their limits (numbers, AI agents, funnels, automations). 'spark' is the entry rung and 'scale' the top; note that 'spark' and 'build' include NO calls, texts or marketing email, so a client who needs to phone or text anybody has to be on 'launch' or above. Default: "launch"
limit_overrides
map of string → object
optional
Optional per-limit tweaks layered on top of the base tier, keyed by limit id — e.g. {"phoneNumbers": 20, "aiAgents": "unlimited", "powerDialer": true, "funnels": 50}. A number is a hard cap; true/false switch a feature on or off; "unlimited" removes a cap. Only send keys that differ from the tier's own value; omit this field entirely to leave the plan as its plain tier. Anything set higher than YOUR OWN plan allows is capped to it on save, and 'subAccounts' / 'whiteLabel' can never be granted to a client (those would make your client a reseller). Sending {} on an edit clears every tweak. Valid keys are the limit ids from the platform's plan comparison: seats, pipelines, customFields, phoneNumbers, transcription, powerDialer, salesBridges, ivrFlows, rvm, voiceBroadcast, aiAgents, aiRelay, aiOutbound, aiCampaigns, aiAssist, autoresponders, templates, workflows, voiceSteps, widgets, funnels, aiPageGen, customDomains, leadGen, restApi, apiKeys, mcpServer, webhooks, snapshots, and similar.
description
string
optional
Optional blurb shown alongside the plan, on the client's plan picker.
currency
string
optional
ISO currency the agency bills in, e.g. 'usd'. Default: "usd"
connect_fee_percent
number
optional
The agency's default Stripe Connect application fee for clients on this plan, as a percent (2.5 = 2.5%) of every payment run through the client's connected Stripe account. 0 (the default) takes no cut. A per-client override, set separately, wins over this plan default. Unrelated to price_cents — this only applies to Stripe Connect payment volume, not the plan subscription itself. Default: 0
trial_days
integer (or null)
optional
This plan's own free trial on the agency's launch store (reseller website and signup funnels), in days. null (the default) uses the store's trial length set under Launch your business; 0 sells this plan with no free trial at all — its card on the trial signup page says Buy now and its checkout charges at once, even while 'Every signup starts with the free trial' is on; 1-30 gives this plan its own trial length. Applies to new checkouts only; existing subscriptions keep their terms.
Over MCP the same operation is the tool reseller_create_plan at https://app.chirply.io/api/mcp, same bearer token, same input.
Create signup checkout
reseller.create_signup_checkoutwriteconfirmadmin only
Create a hosted Stripe checkout link for one published reseller plan on this agency's connected Stripe account. Completing checkout charges the chosen price or starts its configured trial, creates a client account, and enables approved customer emails. This call creates the link only and does not submit a payment or enroll the recipient into marketing nurture. A link created here goes straight to payment, so the store's confirmation checkbox is not shown and no confirmation is recorded for it. While the store's 'Every signup starts with the free trial' setting is on, the link always includes the trial. The trial length is the plan's own when it sets one (reseller.update_plan trial_days), otherwise the store's; a plan set to 0 days is always charged at checkout, trial or not.
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
plan_id
string (uuid)
required
Active plan owned by this agency.
trial
boolean
optional
Use the free trial when one applies (the plan's own trial length, otherwise the store's); false starts a paid subscription at checkout. Ignored while 'Every signup starts with the free trial' (trial_only) is on: the checkout then always includes the trial — except for a plan set to 0 trial days, which is always charged at checkout. Default: true
Over MCP the same operation is the tool reseller_create_signup_checkout at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete client
reseller.delete_clientwriteconfirmadmin only
Delete a client account. This is a soft delete: the account is closed and everyone in it is locked out immediately, but nothing is destroyed — it can be restored later with reseller.restore_client. It stops counting against your paid client account allowance, so deleting a client frees a slot to create another. It does NOT cancel any billing you have running for them on your Stripe — stop that separately with reseller.cancel_client_billing.
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 reseller_delete_client at https://app.chirply.io/api/mcp, same bearer token, same input.
Stop pooling a credential
reseller.disable_pooled_credentialwriteconfirmadmin only
Turn off a pooled provider for a client. By default this is a reversible soft off — the client goes back to using its own connection and the isolation artifacts are kept, so re-enabling is instant. Set teardown to also SUSPEND the Twilio subaccount (reversible, keeps the client's numbers) or DELETE the Mailgun subdomain.
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.
Which provider to pool. 'twilio' provisions an isolated Twilio subaccount under your master account (billed to you); 'mailgun' provisions an isolated sending subdomain; 'elevenlabs', 'openrouter', 'outscraper', and 'firecrawl' use your own API key directly. Stripe is handled separately via Stripe Connect, not here.
teardown
boolean
optional
Also dismantle the isolation: suspend the Twilio subaccount or delete the Mailgun subdomain. Off just stops using the pooled credential. Default: false
Over MCP the same operation is the tool reseller_disable_pooled_credential at https://app.chirply.io/api/mcp, same bearer token, same input.
Stop a client taking payments through you
reseller.disable_stripe_connectwriteconfirmadmin only
Turn off Stripe Connect for a client. Reversible: the client goes back to selling on its own Stripe, and the connected account is kept so you can switch it back on instantly. Does not move or refund any money already collected.
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 reseller_disable_stripe_connect at https://app.chirply.io/api/mcp, same bearer token, same input.
Pool a credential to a client
reseller.enable_pooled_credentialwriteconfirmadmin only
Let a client account use YOUR provider account instead of connecting its own. For Twilio this creates an isolated Twilio subaccount under your master account — the client's calls and texts run on it and Twilio bills YOU for them. For Mailgun it provisions an isolated sending subdomain (which needs its DNS verified before it goes live). For ElevenLabs / OpenRouter / Outscraper / Firecrawl it uses your API key directly, effective immediately. The client's usage becomes your real cost — meter and rebill it with the credit system. Reversible at any time.
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.
Which provider to pool. 'twilio' provisions an isolated Twilio subaccount under your master account (billed to you); 'mailgun' provisions an isolated sending subdomain; 'elevenlabs', 'openrouter', 'outscraper', and 'firecrawl' use your own API key directly. Stripe is handled separately via Stripe Connect, not here.
Over MCP the same operation is the tool reseller_enable_pooled_credential at https://app.chirply.io/api/mcp, same bearer token, same input.
Let a client take payments through you
reseller.enable_stripe_connectwriteconfirmadmin only
Turn on Stripe Connect for a client: create (or reuse) an Express connected account under YOUR Stripe platform so the client can accept card payments through you. Money settles to the client and they stay merchant of record; you take an application fee on each transaction (set separately). This does NOT finish setup — the client must still complete Stripe's identity + bank verification (a link, from get_stripe_connect_link) before they can accept a payment. Requires your own Stripe to be connected and have Connect enabled. Reversible.
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
client_id
string (uuid)
required
The client account to enable payments-through-you for.
Over MCP the same operation is the tool reseller_get_client at https://app.chirply.io/api/mcp, same bearer token, same input.
Client credits
reseller.get_client_creditsread
A client's prepaid credit standing on the reseller's pooled providers: balance (cycle allowance + purchased), whether it's paused for being out of credits, its effective per-unit prices, and its recent credit ledger. Read-only.
Over MCP the same operation is the tool reseller_get_client_credits at https://app.chirply.io/api/mcp, same bearer token, same input.
What this client can see
reseller.get_client_featuresread
For one client account, list every feature you can switch on or off for them and which ones are currently hidden. Returns the full catalog — sections (Sites, Phone, AI…) and the individual rows inside each — plus the one-click presets. Hidden features are gone from that client's navigation, their pages don't open, and their API keys and integrations can't reach them, with no upgrade prompt shown anywhere. This is separate from the client's plan and does not change it. Read-only.
Over MCP the same operation is the tool reseller_get_client_features at https://app.chirply.io/api/mcp, same bearer token, same input.
Rate card
reseller.get_rate_cardread
Read the per-item prices a reseller charges. With a client_id, returns that client's effective prices (override → plan default → agency default) plus its own overrides. Otherwise returns the default prices for a plan (or the agency-wide default when no plan_id is given). Each price also reports `markup_percent`: the percentage on cost it was written as, or null when it is a fixed dollar amount. Read-only, costs the caller nothing.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
optional
A client account — returns its effective prices + overrides.
plan_id
string (uuid) (or null)
optional
A reseller plan whose default prices to read. Omit/null for the agency-wide default.
Over MCP the same operation is the tool reseller_get_rate_card at https://app.chirply.io/api/mcp, same bearer token, same input.
Client payment setup (Stripe Connect)
reseller.get_stripe_connectread
For one client account, show whether it accepts payments through YOUR Stripe (a connected account under your platform) or its own. Reports the status (own Stripe / onboarding / restricted / live), whether charges and payouts are enabled, and the application fee you take on its transactions (the per-client override or the plan default). Read-only.
Over MCP the same operation is the tool reseller_get_stripe_connect at https://app.chirply.io/api/mcp, same bearer token, same input.
Get a client's payment-setup link
reseller.get_stripe_connect_linkwriteadmin only
Mint a fresh Stripe onboarding link for a client's connected account — the URL the client opens to complete identity + bank verification. The link is single-use and expires within minutes, so generate it when you're about to send it. Connect must already be enabled for the client.
Over MCP the same operation is the tool reseller_get_stripe_connect_link at https://app.chirply.io/api/mcp, same bearer token, same input.
What it costs you
reseller.get_unit_costsreadadmin only
Read what each metered unit costs the RESELLER at their own provider — the base every percentage mark-up price is worked out from. Units the reseller has not given a figure for report Chirply's published list price for that provider, flagged with is_custom false. This is the agency's margin data and is never visible to a client. Read-only.
Over MCP the same operation is the tool reseller_get_unit_costs at https://app.chirply.io/api/mcp, same bearer token, same input.
Invite to client account
reseller.invite_client_userwriteconfirmadmin only
Invite someone into a client's account — normally the client themselves, so they can log in and use the platform. Creates a pending invitation they accept to join; it grants them access to that one account only, never to the agency. Sends a real invitation to a real email 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
client_id
string (uuid)
required
The client account to put them in.
email
string (email)
required
The person's email address.
role
"owner" | "admin" | "member"
optional
Their role inside the client's own account. 'owner' is normal for the client themselves — it does NOT give them anything in your agency. Default: "owner"
Over MCP the same operation is the tool reseller_invite_client_user at https://app.chirply.io/api/mcp, same bearer token, same input.
View reseller launch
reseller.launch_overviewreadadmin only
Read the current reseller website, offer terms (including trialOnly: whether every signup starts with the free trial and the paid signup page opens the trial signup; planTrials: each live plan's free trial as the store sells it — its own trialDays when set, null when it follows the store, and sellsWithTrialDays; trialOnlyExceptions: plans sold without a trial while trial-only is on), marketingOptIn (whether a ticked 'Email me setup tips' box is confirmed by double opt-in before setup tips start — state confirming, off, not_started or channel_off — how many buyers are waiting to confirm, and the Email preferences link that changes it), connection readiness, public funnel links, and recent signup failures for this agency. Does not publish or send messages.
Over MCP the same operation is the tool reseller_launch_overview at https://app.chirply.io/api/mcp, same bearer token, same input.
Account domain
reseller.list_client_domainsread
List agency-owned domains, their DNS and HTTPS status, and assigned client account IDs. Read-only; changes no routing and costs nothing. An app_org_id matching the client is its dedicated account address; null means unassigned.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
required
Client account ID beneath this agency, from reseller.list_clients.
Over MCP the same operation is the tool reseller_list_client_users at https://app.chirply.io/api/mcp, same bearer token, same input.
Clients
reseller.list_clientsread
List every client account (client account) under this agency, with the included client-account allowance, used and remaining capacity, the plan each one is on, how many people are in it, and whether the agency is billing them. Includes soft-deleted clients — those have status 'canceled' and can be brought back with reseller.restore_client. Read-only.
Over MCP the same operation is the tool reseller_list_clients at https://app.chirply.io/api/mcp, same bearer token, same input.
List your Mailgun sending domains
reseller.list_mailgun_domainsreadadmin only
The sending domains on YOUR OWN connected Mailgun account, with whether each one is verified. Use it to choose which domain a pooled client should send from. Sandbox domains are left out on purpose: Mailgun only lets those reach addresses you have individually authorised, so a client placed on one would appear to be sending while reaching almost nobody. Reads only.
Over MCP the same operation is the tool reseller_list_mailgun_domains at https://app.chirply.io/api/mcp, same bearer token, same input.
Your plans
reseller.list_plansread
List the plans this agency sells to its clients — the reseller's own packages, with the price the reseller charges, which underlying platform tier each one unlocks, and each plan's own free trial on the launch store (trial_days: null = the store's trial, 0 = no trial). These are NOT the platform's own retail plans; they're what this agency resells under its own brand.
Parameters
Field
Type
Required
Description
include_archived
boolean
optional
Include retired plans that clients may still be sitting on. Default: false
Over MCP the same operation is the tool reseller_list_plans at https://app.chirply.io/api/mcp, same bearer token, same input.
Pooled credentials
reseller.list_pooled_credentialsread
For one client account, show which providers it's using YOUR pooled credentials for versus its own. Each row reports the provider, whether pooling is on, its status (off / provisioning / active / error), and any isolation detail (the Twilio subaccount SID, the Mailgun subdomain and its DNS state). Read-only.
Over MCP the same operation is the tool reseller_list_pooled_credentials at https://app.chirply.io/api/mcp, same bearer token, same input.
Manage subscription
reseller.open_subscription_portalwriteconfirmadmin only
Create a secure Stripe portal link for the current client account's own reseller subscription. The customer can update payment details, view invoices, and cancel at period end there. Opening this link does not itself charge or cancel the subscription.
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 reseller_open_subscription_portal at https://app.chirply.io/api/mcp, same bearer token, same input.
Pause new signups & emails
reseller.pause_launchwriteconfirmadmin only
Close the public reseller offer and pause queued customer lifecycle emails. Existing Stripe subscriptions keep billing and automatic account access checks continue. Does not cancel customer subscriptions or delete data.
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 reseller_pause_launch at https://app.chirply.io/api/mcp, same bearer token, same input.
Prepare my launch package
reseller.prepare_launchwriteadmin only
Prepare a draft reseller website, trial and paid signup funnels, and customer lifecycle email templates. Seeds suggested plans only when the agency has not seeded them previously. Does not publish, charge, or email customers.
Parameters
Field
Type
Required
Description
actor_id
string (uuid)
optional
Agency manager who owns automatic provisioning. Required for API-key callers without a signed-in user; must already manage this agency.
Over MCP the same operation is the tool reseller_prepare_launch at https://app.chirply.io/api/mcp, same bearer token, same input.
Launch website & automations
reseller.publish_launchwriteconfirmadmin only
Publish the reseller website and both signup funnels after connection and test checks pass. Enables real customer invitation, onboarding, trial, payment recovery and cancellation emails through the agency sending provider. Future signups create client accounts and subscriptions billed to the agency connected Stripe account; email and processing fees may apply.
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 reseller_publish_launch at https://app.chirply.io/api/mcp, same bearer token, same input.
Refresh a client's payment status
reseller.refresh_stripe_connectwriteadmin only
Re-check a client's connected account with Stripe and update whether it can accept charges and receive payouts. Use after the client finishes onboarding to confirm they're live. Charges nothing.
Over MCP the same operation is the tool reseller_refresh_stripe_connect at https://app.chirply.io/api/mcp, same bearer token, same input.
Remove assignment
reseller.remove_client_domainwriteconfirmadmin only
Remove this client's dedicated account assignment from one agency-owned domain. Immediately restores shared agency sign-in at that hostname. Keeps the domain connection, HTTPS certificate and agency ownership; costs nothing. Requires White-Label.
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
client_id
string (uuid)
required
Client account ID beneath this agency.
domain_id
string (uuid)
required
Agency-owned domain ID from reseller.list_client_domains.
Over MCP the same operation is the tool reseller_rename_client at https://app.chirply.io/api/mcp, same bearer token, same input.
Reorder plans
reseller.reorder_planswriteadmin only
Set the order this agency's live plans appear in on its public store — the pricing page, the trial and paid signup funnels — and in every plan picker. List plan ids first to last; any live plan left out keeps its current relative place after the ones named. After this call the agency's own order is kept exactly, and a plan created later joins the end of it. Changes display order only: no price, plan contents, client assignment or billing changes, and nothing is sent to anyone. Use reseller.sort_plans_by_price to return to the automatic lowest-price-first order.
Parameters
Field
Type
Required
Description
plan_ids
array of (string (uuid))
required
Live plan ids in the order they should appear, first to last. Each id at most once. Get them from reseller.list_plans.
Over MCP the same operation is the tool reseller_reorder_plans at https://app.chirply.io/api/mcp, same bearer token, same input.
Restore client
reseller.restore_clientwriteadmin only
Bring a deleted (cancelled) client account back to active, with all its data intact. Fails if you're already at your paid client account allowance — free a slot or upgrade first, since a restored client counts again.
Over MCP the same operation is the tool reseller_revoke_client_invite at https://app.chirply.io/api/mcp, same bearer token, same input.
Save checkout terms
reseller.save_checkout_termswriteconfirmadmin only
Change the public store's checkout requirements for new orders: require a confirmation checkbox with the given text (links as [text](https://url)), collect a company name and VAT ID (off, optional or required), set the legal links shown on every store page, and turn Stripe Tax on or off. With Stripe Tax on, new checkouts add or include tax calculated by the agency's own Stripe account, and turning it on is refused unless Stripe Tax is active there. Takes effect immediately on the live store and on orders the agency's own website posts to the store checkout; while the checkbox is required, the checkout refuses any order that does not send terms_accepted. Omitted fields keep their saved values. Does not charge, email or change existing subscriptions.
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
terms_required
boolean
optional
When true, buyers must tick a confirmation box before the order button works, and the store checkout refuses any order (including a direct POST from your own website) that does not send terms_accepted. Requires terms_text.
terms_text
string (or null)
optional
The confirmation text shown beside the checkbox and recorded with every order. Plain text; add links as [link text](https://example.com/terms). HTML is not rendered. Null or empty clears it.
company_field
"off" | "optional" | "required"
optional
Company name field on the order form: off, optional or required. A given company name becomes the Stripe customer name and the new client account's name.
vat_field
"off" | "optional" | "required"
optional
VAT ID field on the order form: off, optional or required. A given EU or UK VAT ID is saved to the buyer's Stripe customer as a tax ID; Stripe rejects invalid numbers before checkout.
legal_links
object[]
optional
Legal links shown in the footer of every store page and beside the order buttons, in this order. Replaces the saved list; an empty list removes them.
legal_links[].label
string
required
Link text, for example Imprint, Terms of Service, Privacy Policy or Cancellation & refund policy.
legal_links[].url
string
required
Full https:// address of the page.
stripe_tax
"off" | "exclusive" | "inclusive"
optional
Stripe Tax on new store checkouts: off; exclusive (store prices are shown before tax and Stripe adds tax at checkout); or inclusive (store prices already include tax). When on, Stripe Tax on the agency's own connected Stripe account calculates tax from the buyer's billing address — VAT for a domestic buyer, reverse charge for an EU business with a VAT ID — and taxes renewals too. Requires Stripe Tax to be active on that account; it is checked when saved. Existing subscriptions are unchanged.
Over MCP the same operation is the tool reseller_save_checkout_terms at https://app.chirply.io/api/mcp, same bearer token, same input.
Save launch settings
reseller.save_launchwriteconfirmadmin only
Set the connected Stripe account, website domain, trial duration, payment grace period, and whether every signup starts with the free trial (trial_only: the paid signup page then opens the trial signup and every new checkout includes the trial) for future reseller signups. Changes an already published offer for new customers; existing subscriptions retain their terms. Does not charge or email anyone.
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
stripe_account_id
string (uuid)
required
Connected Stripe account that receives new customer subscriptions.
domain_id
string (uuid) (or null)
required
Unused connected website domain, or null to use the hosted website link.
trial_days
integer
required
The store's free trial length in days, used by every plan that does not set its own (reseller.update_plan trial_days). Zero enables paid signup only for those plans. Applies to new subscriptions.
grace_days
integer
required
Days to retain access after a failed renewal, before a billing suspension. Applies to new subscriptions.
trial_only
boolean
optional
Every signup starts with the free trial. When true, the paid signup page (/join) opens the trial signup page (/trial) with its query string kept, and every checkout the store opens includes the trial: store order forms, orders your own website posts to the store checkout, and checkout links your team creates — except plans set to 0 trial days (reseller.update_plan trial_days), which always sell without one. Requires trial_days above 0: true with trial_days 0 is refused, and saving trial_days 0 turns it off. Omit to keep the saved value. Default false.
Over MCP the same operation is the tool reseller_save_launch at https://app.chirply.io/api/mcp, same bearer token, same input.
Save store alerts
reseller.save_store_alertswriteconfirmadmin only
Turn this agency's store alerts on or off and choose where they go. When on, the agency is emailed — from its own verified sending address, the same one its store uses — each time a customer starts a trial, places a paid order, converts from trial, switches plans (with the old plan, the new plan and when it takes effect), fails a renewal payment, pays a failed renewal or ends a subscription, and its owners' and admins' browsers get a notification. A blank email sends alerts to the agency's owners and admins (up to five, owners first). Every alert carries the buyer's name, email and company, so the chosen address receives that customer data from now on — confirm it belongs to the agency. Sends nothing by itself and costs nothing beyond the agency's normal email sending.
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
enabled
boolean
required
true to email the agency about store signups and billing changes; false to stop.
email
string (or null)
optional
One address to receive every store alert instead of the owners and admins, e.g. sales@agency.com. Omit or send null/empty to use the owners and admins.
Over MCP the same operation is the tool reseller_save_store_alerts at https://app.chirply.io/api/mcp, same bearer token, same input.
Send test alert
reseller.send_test_store_alertwriteconfirmadmin only
Email one sample store alert right now — a made-up 'new trial' for the store's first plan — to whoever currently receives this agency's store alerts, from the agency's own sending address. Lets the agency confirm the alert arrives and where. Sends one real email per recipient (up to five); creates no signup, client account or charge.
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 reseller_send_test_store_alert at https://app.chirply.io/api/mcp, same bearer token, same input.
Auto-recharge
reseller.set_client_auto_rechargewriteconfirmadmin only
Turn a client's credit auto-recharge on or off and set its rules. While on, whenever a pooled-usage debit drops the client's balance under the threshold, their SAVED card is automatically charged the recharge amount on the RESELLER'S OWN Stripe — unattended, real-money charges, at most one attempt per 15 minutes. Confirm-gated because saving these settings arms future charges nobody clicks 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
client_id
string (uuid)
required
The client account.
enabled
boolean
required
true arms auto-recharge; false disarms it (rules are cleared).
threshold_dollars
number
optional
Recharge when the spendable balance dips under this many dollars. Required when enabling.
amount_dollars
number
optional
Dollars to charge each time, $5–$2,000. Required when enabling.
Over MCP the same operation is the tool reseller_set_client_auto_recharge at https://app.chirply.io/api/mcp, same bearer token, same input.
Set what this client can see
reseller.set_client_featureswriteconfirmadmin only
Replace the whole list of features hidden from one client account. Pass every feature id you want HIDDEN; anything you leave out becomes visible, so sending an empty list restores the full platform. A hidden feature disappears from that client's navigation, its pages stop opening, and the client's own API keys, MCP sessions and Copilot can no longer reach it — no upgrade prompt is shown, because there is nothing for them to buy. Nothing is deleted: their existing data stays and comes back untouched if you switch the feature on again. Does not change their plan or their bill.
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
client_id
string (uuid)
required
The client account to curate.
hidden
string[]
required
Every feature id to hide, as a complete list. Ids not in the catalog are ignored. An empty array switches everything back on.
Over MCP the same operation is the tool reseller_set_client_features at https://app.chirply.io/api/mcp, same bearer token, same input.
Suspend or reactivate client
reseller.set_client_statuswriteconfirmadmin only
Suspend a client account so nobody in it can sign in — how an agency handles a client who has stopped paying — or reactivate a suspended one. Nothing is deleted and it is fully reversible, but suspending locks real people out of their account immediately.
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
client_id
string (uuid)
required
The client account.
status
"active" | "suspended"
required
'suspended' locks their team out; 'active' restores access.
Over MCP the same operation is the tool reseller_set_client_status at https://app.chirply.io/api/mcp, same bearer token, same input.
Choose a client's sending domain
reseller.set_pooled_mailgun_domainwriteconfirmadmin only
Set which Mailgun domain a pooled client sends from, instead of the automatic `<client>.<your root domain>` subdomain. Give a domain already verified on your Mailgun account and the switch takes effect immediately with no DNS to publish. Give a new one and it is created, and the client KEEPS SENDING ON THEIR OWN CONNECTION until its DNS is published and verified — their mail does not stop, but it is not on your account either. THIS CHANGES THE FROM-DOMAIN ON MAIL THEIR CUSTOMERS RECEIVE, which affects how that mail is recognised and filtered, so it is not a cosmetic setting.
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
client_id
string (uuid)
required
The client account whose sending domain changes.
domain
string
required
The sending domain, e.g. mail.theirbusiness.com. Must be a domain name, not a URL or an email address.
Over MCP the same operation is the tool reseller_set_pooled_mailgun_domain at https://app.chirply.io/api/mcp, same bearer token, same input.
Set prices
reseller.set_rate_cardwriteadmin only
Set what a reseller charges per metered unit, as a fixed price or as a percentage mark-up on what the unit costs them. With a client_id, sets that client's overrides; with a plan_id, the plan's defaults; with neither, the agency-wide defaults. A mark-up price is recomputed from the cost basis (see reseller.get_unit_costs) every time it is charged, so correcting a cost re-prices every unit priced that way. Setting a price changes what the client is billed for future usage on your pooled credentials — it moves no money by itself and bills nobody retroactively. Unknown units are ignored with a warning.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
optional
Set this client's per-unit overrides.
plan_id
string (uuid) (or null)
optional
Set this plan's default prices. Omit/null for the agency-wide default.
prices
map of string → number
optional
Per-unit prices to set, in dollars, keyed by unit. e.g. {"sms": 0.03, "call": 0.02, "email": 0.001}. Units: sms, mms, rcs, call, email, rvm, ai, lead, lookup, crawl (Firecrawl credits), tts (ElevenLabs characters). A price of 0 means free; to remove a price entirely (so that unit isn't rebilled) use `clear` instead.
markups
map of string → number
optional
Per-unit prices to set as a PERCENTAGE mark-up on what the unit costs you, keyed by unit. e.g. {"sms": 30} charges your SMS cost plus 30%. Overwrites any fixed price on that unit, and re-prices itself whenever the cost basis changes. Use `prices` instead to set a fixed dollar amount.
markup_all
number
optional
Price EVERY metered unit as this percentage on top of its cost, in one step — the equivalent of "mark everything up 30%". e.g. 30 charges cost + 30%. Applied before `prices` and `markups`, so those still win for the units they name.
Narrow `markup_all` and `clear_all` to the units that run on ONE pooled provider, leaving every other price alone. twilio covers sms, mms, rcs, call, rvm and lookup; mailgun covers email; openrouter covers ai; outscraper covers lead; firecrawl covers crawl; elevenlabs covers tts. Omit to mean every unit.
clear_all
boolean
optional
Remove the price from every unit in scope, which is how you say "this one is on me". The usage is still metered and still appears in usage reporting; it simply never debits the client's credits, so nothing is charged for it. Narrow it with `provider` to unprice one provider. This clears a per-client OVERRIDE, so the unit falls back to your plan or agency default if one is set.
Over MCP the same operation is the tool reseller_set_rate_card at https://app.chirply.io/api/mcp, same bearer token, same input.
Set a client's payment fee
reseller.set_stripe_connect_feewriteconfirmadmin only
Set the application fee you take on this client's transactions, in basis points (100 = 1%, max 10000 = 100%). This is money taken off the top of another business's card revenue, and at 10000 it takes all of it — so confirm the number with a human before saving. It is a per-client override; pass null to clear it and inherit the client's plan default instead. Applies to future charges once Connect charge routing is live.
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
client_id
string (uuid)
required
The client account.
fee_bps
integer (or null)
required
The fee in basis points (100 = 1%). Null clears the per-client override and inherits the plan's connect fee.
Over MCP the same operation is the tool reseller_set_stripe_connect_fee at https://app.chirply.io/api/mcp, same bearer token, same input.
Set your provider costs
reseller.set_unit_costswriteconfirmadmin only
Record what metered units actually cost the reseller at their provider, in dollars per unit (e.g. {"sms": 0.0079}). This is agency-wide and is the base for every price written as a percentage mark-up, so changing a cost immediately changes what EVERY client on a mark-up for that unit is charged for future usage — it moves no money by itself and never re-bills past usage. Units listed in `reset` fall back to Chirply's published list price. Unknown units are ignored with a warning.
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
costs
map of string → number
optional
Per-unit costs to record, in dollars, keyed by unit. e.g. {"sms": 0.0079, "call": 0.014, "email": 0.0008}. Units: sms, mms, rcs, call, email, rvm, ai, lead, lookup. Note `ai` is metered per TOKEN, not per request.
Over MCP the same operation is the tool reseller_set_unit_costs at https://app.chirply.io/api/mcp, same bearer token, same input.
View signup confirmations
reseller.signup_terms_recordreadadmin only
Read what buyers confirmed when they ordered from this agency's store: the time, the exact confirmation text and its version, the host that sent the order (the store page or the agency's own website), the buyer's network address and browser, and the company name and VAT ID they gave. Signups started from a link the agency created itself are marked created_by: team, with the note: Created by your team — no buyer confirmation recorded. Narrow to one client account or one signup. Returns personal data about the agency's buyers; changes nothing.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
optional
Only the signup that created this client account.
enrollment_id
string (uuid)
optional
Only this signup (the enrollment id shown on the launch screen and returned by the launch overview).
limit
integer
optional
Most recent signups to return, newest first. Default: 25
Over MCP the same operation is the tool reseller_signup_terms_record at https://app.chirply.io/api/mcp, same bearer token, same input.
Sort by price
reseller.sort_plans_by_pricewriteadmin only
Return this agency's plans to the automatic order on its store, signup funnels and plan pickers: monthly plans first, then yearly, each from the lowest price to the highest. Clears any order the agency arranged by hand. Changes display order only — no price, plan contents, client assignment or billing changes, and nothing is sent to anyone.
Over MCP the same operation is the tool reseller_sort_plans_by_price at https://app.chirply.io/api/mcp, same bearer token, same input.
Start billing a client
reseller.start_client_billingwriteconfirmadmin only
SPENDS THE CLIENT'S MONEY. Subscribes a client to one of the agency's plans on the AGENCY'S OWN Stripe account and has Stripe email them an invoice immediately, due in 7 days, recurring at the plan's price and interval. The money goes to the agency; the platform neither holds it nor takes a cut. Requires the agency to have connected Stripe. Fails if the client already has a live subscription.
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
client_id
string (uuid)
required
The client account to start charging.
plan_id
string (uuid)
required
Which of the agency's plans to bill them at. Must have a price above 0.
contact_email
string (email)
required
Where Stripe sends the invoice — the client's billing address.
Over MCP the same operation is the tool reseller_start_client_billing at https://app.chirply.io/api/mcp, same bearer token, same input.
Start card setup
reseller.start_client_card_setupwriteadmin only
Begin saving a payment card for a client's credit top-ups. Creates (or reuses) a customer on the RESELLER'S OWN Stripe account and returns a SetupIntent client_secret plus the reseller's publishable key, for a Stripe Payment Element the CLIENT completes in a browser. No money moves and no card data passes through this call — the card is entered directly into Stripe's form. Finish with reseller.complete_client_card_setup.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
required
The client account the card will pay credits for.
email
string (email)
optional
Billing email for the Stripe customer created on the reseller's account.
name
string
optional
Billing name for the Stripe customer (defaults to the account name).
Over MCP the same operation is the tool reseller_start_client_card_setup at https://app.chirply.io/api/mcp, same bearer token, same input.
Store alerts
reseller.store_alertsreadadmin only
Read whether this agency is emailed about its own reseller store — when a customer starts a trial, places a paid order, converts from trial, switches plans, fails a renewal payment, pays a failed renewal, or ends a subscription — who those emails go to right now (the chosen alert address, or else the agency's owners and admins), and the most recent alerts with their delivery status. Changes nothing.
Parameters
Field
Type
Required
Description
recent
integer
optional
How many of the most recent alerts to return, newest first. Default: 10
Over MCP the same operation is the tool reseller_store_alerts at https://app.chirply.io/api/mcp, same bearer token, same input.
Refresh billing from Stripe
reseller.sync_client_billingwriteadmin only
Re-read a client's subscription from the agency's Stripe account and update the status shown here. This platform receives no webhooks from a tenant's own Stripe, so a payment that failed over there is only noticed when this runs. Read-only as far as Stripe is concerned — it charges nothing.
Over MCP the same operation is the tool reseller_sync_client_billing at https://app.chirply.io/api/mcp, same bearer token, same input.
Run test signup
reseller.test_launchwriteadmin only
Create a Stripe test-mode checkout link for an agency plan using its saved trial terms (the plan's own trial length when it sets one, otherwise the store's). Requires test credentials. No real money is charged and no live client or customer email is created. Complete checkout with a Stripe test payment method to verify it.
Over MCP the same operation is the tool reseller_test_launch at https://app.chirply.io/api/mcp, same bearer token, same input.
Charge card
reseller.top_up_client_creditswriteconfirmadmin only
Immediately charges the client's SAVED card on the RESELLER'S OWN Stripe account for a credit top-up — real money, billed to the client by the reseller — and adds the amount to the client's credit balance once Stripe confirms the charge settled (which also resumes paused pooled sends). Between $5 and $2,000. Refuses when no card is saved (see reseller.start_client_card_setup).
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
client_id
string (uuid)
required
The client account whose saved card is charged.
amount_dollars
number
required
Dollars to charge and credit, e.g. 50. Whole cents only.
Over MCP the same operation is the tool reseller_top_up_client_credits at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit plan
reseller.update_planwriteconfirmadmin only
Change a plan's name, price, billing interval, which underlying platform tier it unlocks, its per-limit tweaks, its default Stripe Connect application fee, or its own free trial on the agency's launch store (trial_days: 0 sells it with no trial and charges at checkout, even while the store is trial-only; null follows the store's trial). This edits a package the agency SELLS: every client already on the plan immediately follows its new tier and limits, so lowering a tier or a limit can take a working feature away from a paying customer, and the new price is what the next client to sign up pays. Their existing Stripe subscription is NOT re-priced — changing what a live customer pays has to be done deliberately by cancelling and re-starting their billing. Raising connect_fee_percent raises the cut taken on every client on this plan's live Stripe Connect payment volume immediately, unless that client carries their own fee override.
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
plan_id
string (uuid)
required
The plan to edit.
name
string
optional
What the client sees, e.g. 'Starter'. Must be unique here.
price_cents
integer
optional
What the AGENCY charges its client, in cents (9700 = $97). Unrelated to what the agency pays the platform — the difference is their margin. 0 makes a free plan that can't be billed.
interval
"month" | "year"
optional
How often the client is charged your price.
plan_code
"spark" | "build" | "launch" | "grow" | "scale"
optional
Which underlying platform tier a client on this plan runs on — this is what actually decides their limits (numbers, AI agents, funnels, automations). 'spark' is the entry rung and 'scale' the top; note that 'spark' and 'build' include NO calls, texts or marketing email, so a client who needs to phone or text anybody has to be on 'launch' or above.
limit_overrides
map of string → object
optional
Replace the plan's per-limit tweaks. Omit to leave them unchanged; send {} to clear them all. Same rules and keys as on create — capped to your own plan, client accounts/white-label excluded.
description
string (or null)
optional
Optional blurb shown alongside the plan, on the client's plan picker.
connect_fee_percent
number
optional
The agency's default Stripe Connect application fee for clients on this plan, as a percent (2.5 = 2.5%) of every payment run through the client's connected Stripe account. 0 (the default) takes no cut. A per-client override, set separately, wins over this plan default. Unrelated to price_cents — this only applies to Stripe Connect payment volume, not the plan subscription itself.
trial_days
integer (or null)
optional
Set this plan's own free trial on the launch store: a number of days (0 = no free trial, even while the store is trial-only), or null to follow the store's trial again. Omit to leave it unchanged. Applies to new checkouts only; existing subscriptions keep their terms.
Over MCP the same operation is the tool reseller_update_plan at https://app.chirply.io/api/mcp, same bearer token, same input.
Check account domain
reseller.verify_client_domainwriteadmin only
Re-check DNS and HTTPS certificate status for a domain assigned to this client account and save its connection status. Changes only the stored verification state, edits no DNS and costs nothing. Requires White-Label.
Parameters
Field
Type
Required
Description
client_id
string (uuid)
required
Client account ID beneath this agency.
domain_id
string (uuid)
required
Agency-owned domain ID from reseller.list_client_domains.
Over MCP the same operation is the tool reseller_verify_client_domain at https://app.chirply.io/api/mcp, same bearer token, same input.
Verify pooled Mailgun DNS
reseller.verify_pooled_credentialwriteadmin only
Re-check a pooled Mailgun subdomain's DNS with Mailgun and flip it live once the records verify. Only applies to Mailgun; the other providers need no verification. Charges nothing.
Which provider to pool. 'twilio' provisions an isolated Twilio subaccount under your master account (billed to you); 'mailgun' provisions an isolated sending subdomain; 'elevenlabs', 'openrouter', 'outscraper', and 'firecrawl' use your own API key directly. Stripe is handled separately via Stripe Connect, not here.