← All action domains

White label

33 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.

Your own integrations

oauth_apps.listreadadmin only

List the OAuth applications this agency has registered of its own, with the client ID, the callback domain, when the credentials were last checked and whether that check passed. Never returns a client secret. A provider missing from the list is one whose connections still run through Chirply's application, which means the agency's clients see Chirply's name when they connect. Reads only.

Parameters

No parameters — POST an empty body.

Example

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

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

Check your app credentials

oauth_apps.recheckwriteadmin only

Ask the provider whether this agency's stored client ID and secret still authenticate, without sending anyone to a consent screen, and record the result. Works for Google only: Microsoft's token endpoint rejects the probe before it resolves the application, so a made-up Microsoft client ID and secret are indistinguishable from a correct pair and no check is attempted — it returns credentialsChecked false rather than a meaningless pass. Even for Google, a pass confirms the credentials are real and nothing more: the provider's verification review, the enabled APIs and the registered redirect URI are not visible from here. Changes nothing except the recorded check result.

Parameters

FieldTypeRequiredDescription
provider"google" | "microsoft"requiredWhich provider's application this is: google covers Google Calendar, Gmail, Google Sheets, Google Insights, Business Profile, YouTube (Capture) and Google Cloud connections (Google Ads always uses the platform's app); microsoft covers Outlook and Microsoft 365 calendars.

Example

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

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

Stop using your own app

oauth_apps.removewriteconfirmadmin only

Delete this agency's own OAuth application for a provider and fall back to Chirply's. From that moment the agency's clients see Chirply's name on the consent screen again, and every calendar or mailbox connected through the agency's application has to be reconnected. The stored client secret is destroyed and cannot be recovered — it has to be copied from the provider again to undo this.

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

Parameters

FieldTypeRequiredDescription
provider"google" | "microsoft"requiredWhich provider's application this is: google covers Google Calendar, Gmail, Google Sheets, Google Insights, Business Profile, YouTube (Capture) and Google Cloud connections (Google Ads always uses the platform's app); microsoft covers Outlook and Microsoft 365 calendars.

Example

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

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

Save your own app credentials

oauth_apps.savewriteconfirmadmin only

Register or replace this agency's own OAuth application for a provider. From the moment it is saved, EVERY calendar or mailbox connection made in this agency's account and in all of its client accounts runs through this application — so the agency's clients read the agency's name on the consent screen, and the agency, not Chirply, owns the provider-side setup and verification. Google credentials are checked against Google before the response returns; Microsoft's cannot be checked without a real sign-in, so a Microsoft save reports credentialsChecked false and the first connection is the test. Two consequences worth approving deliberately: every calendar already connected through a DIFFERENT application has to be reconnected by the person who owns it, because a refresh token only works against the client that minted it; and a half-finished application on the provider's side produces a broken consent screen for this agency's clients rather than a working one. The client secret is encrypted at rest and is never shown again.

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

Parameters

FieldTypeRequiredDescription
provider"google" | "microsoft"requiredWhich provider's application this is: google covers Google Calendar, Gmail, Google Sheets, Google Insights, Business Profile, YouTube (Capture) and Google Cloud connections (Google Ads always uses the platform's app); microsoft covers Outlook and Microsoft 365 calendars.
client_idstringrequiredThe application's client ID. Google's ends in .apps.googleusercontent.com; Microsoft's is the Application (client) ID GUID.
client_secretstringoptionalThe application's client secret. Omit when updating to leave the stored secret untouched. For Microsoft this is the secret VALUE, not the Secret ID.
redirect_originstringrequiredWhich of this agency's own sign-in domains the callback runs on, as an https origin such as https://app.youragency.com. Must be one of the agency's active app domains — call oauth_apps.setup_guide to list them.
directorystringoptionalMicrosoft only: the authority segment — common, organizations, consumers, or a directory (tenant) ID. Defaults to common, which allows any work, school or personal Microsoft account.

Example

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

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

How to use your own Google or Microsoft app

oauth_apps.setup_guidereadadmin only

Explain, provider by provider, how a white-label agency registers its OWN Google or Microsoft OAuth application so its clients read the agency's name on the consent screen instead of Chirply's. Returns the ordered setup steps, the scopes the application must be allowed to request, the console to do it in, and — for each of the agency's own sign-in domains — the exact redirect URI to register. Reads only: it changes nothing and costs nothing. Note that the provider's own verification review, which can take days or weeks, is the agency's to complete; Chirply cannot do it for them.

Parameters

FieldTypeRequiredDescription
provider"google" | "microsoft"optionalLimit the guide to one provider. Omit for every provider.

Example

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

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

Take the app reseller offer

white_label.buy_reseller_appswriteconfirmowner only

Take the app-reselling offer for this agency. THIS SPENDS REAL MONEY: it immediately starts a recurring subscription on the card saved to the owner's Chirply billing account at $497 per month, or $250 per month if the agency is still inside its 7-day introductory window — whichever applies is decided by the server, never by the caller, and the price is then locked to this agency permanently so it does not rise when the window closes for everybody else. In return the agency may resell every app Chirply has published in the marketplace, unlimited, to as many client workspaces as it likes, and any app Chirply publishes later is included. If there is no saved card, nothing is charged or activated and the owner can add one in Billing and retry without Chirply staff. Owner only.

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

Parameters

FieldTypeRequiredDescription
accept_chargesbooleanoptionalRequired to be true, as an explicit acknowledgement of the recurring monthly price. The amount is NOT settable here — the server quotes it ($250/month inside the introductory window, $497/month outside it) and freezes it onto this agency. Read white_label.get_reseller_apps_offer first if you need to know which applies. Default: false

Example

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

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

Check DNS target now

white_label.check_dns_targetwriteadmin only

Re-read DNS for the agency's saved branded target right now and store the verdict — verified, or failed with the reason — and the time. A pass starts showing the hostname to every client account under the agency; a failure immediately puts them back on the platform's default target so nobody is handed a broken hostname. A lookup that could not be completed changes nothing. The same check also runs automatically every few hours. Makes one or two public DNS queries; sends nothing and costs nothing.

Parameters

No parameters — POST an empty body.

Example

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

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

Remove DNS target

white_label.clear_dns_targetwriteadmin only

Remove the agency's branded DNS target. Every client account under the agency is shown the platform's default CNAME target again from its next page load. Nothing is deleted from anyone's DNS: client domains that already point at the agency's hostname keep working only for as long as the agency keeps that hostname's own CNAME in place. Costs nothing and sends nothing; save a target again to undo.

Parameters

No parameters — POST an empty body.

Example

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

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

Include it

white_label.clear_reseller_app_pricewriteadmin only

Stop charging this agency's clients for one Chirply-published app, so it goes back to being included with their account at no cost — which is the reselling licence's default. Does not cancel a subscription a client is already on; it only stops the app being sold to new clients. Owners and admins only.

Parameters

FieldTypeRequiredDescription
app_slugstringrequiredThe marketplace slug of the app to stop charging for.

Example

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

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

Connect a custom domain

white_label.connect_domainwriteconfirmadmin only

Point a custom hostname at this account. Registers a Cloudflare custom hostname and issues an SSL certificate; the domain stays 'pending'/'verifying' until DNS is CNAMEd at the returned target. This changes where a real, public hostname resolves.

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

Parameters

FieldTypeRequiredDescription
domainstringrequiredThe hostname to serve the app from, e.g. app.acme.com.

Example

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

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

Pass on the app reseller offer

white_label.decline_reseller_appswriteadmin only

Record that this agency does not want the app-reselling offer for now. Costs nothing, charges nothing, and is not final — the offer stays available and can be taken later, though the introductory price is only held for the length of the agency's introductory window. Its purpose is to complete the optional 'decide about reselling our apps' step in the white-label setup, so an agency that does not want it stops being asked.

Parameters

No parameters — POST an empty body.

Example

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

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

White-label settings

white_label.getreadadmin only

Read the agency's white-label configuration: brand display name, logo URL, favicon URL, primary/accent colors, every connected custom domain with its SSL and verification state, and the verified default identity used for branded authentication email.

Parameters

No parameters — POST an empty body.

Example

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

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

Branded app

white_label.get_appreadadmin only

Read the agency's installable app: its name, home-screen label, icon, splash colors, and whether it is switched on. Clients install it from the agency's own custom domain — it carries the agency's branding and involves no app store, no developer account and no review. This configures the AGENCY's app, which is offered on their custom app domain. Chirply's own host installs separately as Chirply and is not affected by anything here.

Parameters

No parameters — POST an empty body.

Example

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

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

App Marketplace for your clients

white_label.get_app_marketplacereadadmin only

Read whether the client accounts under this agency are offered the App Marketplace. Returns the effective answer, whether it was set deliberately or is still the default, and the default itself. The agency's OWN account always has the marketplace and is not affected by this setting. Read-only; changes nothing.

Parameters

No parameters — POST an empty body.

Example

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

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

Branded DNS target

white_label.get_dns_targetreadadmin only

Read the agency's branded DNS target: the hostname on the agency's own domain (e.g. domains.youragency.com) that its client accounts are told to CNAME their custom domains to instead of the platform's hostname. Returns the saved hostname, whether it is verified, pending or failed (with the reason and when it was last checked), the hostname client accounts are actually being shown right now — the branded one only while verified, otherwise the platform's default — and the exact CNAME record the agency must keep in its own DNS. Reads only; changes nothing and costs nothing.

Also answers to branded CNAME target.

Parameters

No parameters — POST an empty body.

Example

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

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

Managed support status

white_label.get_managed_supportread

Report whether Chirply is answering this agency's clients' support tickets, and what that costs. By default a white-label agency answers its own clients' bug reports — they arrive in the agency's 'Client reports' inbox and never reach Chirply. This add-on hands the answering back to Chirply, who reply inside the client's account under the agency's brand. Returns the current status, the monthly price this agency pays (or would pay), whether the introductory rate still applies and when that window closes. Reads only: it changes nothing and charges nothing.

Parameters

No parameters — POST an empty body.

Example

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

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

White-label setup checklist

white_label.get_onboardingread

List every step a white-label agency has to complete before its clients see nothing of Chirply — their own sign-in domain, a verified sending address of their own, the plans they sell their clients, connecting their own Stripe, the Zapier decision, the App Marketplace decision, their brand, and the app-reselling offer — with each step's live done/outstanding state, the wording a person reads on the same screen, and where to go to finish it. Also reports which banner the app shell is showing in this account right now — the setup reminder, the app-reselling offer, or neither; it is never both. Reads only: it changes nothing, costs nothing, and marks nothing done.

Parameters

No parameters — POST an empty body.

Example

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

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

App reseller offer

white_label.get_reseller_apps_offerread

Read the offer that lets a white-label agency resell every app Chirply has published in the App Marketplace — unlimited, to as many client workspaces as they like, under their own brand. It costs $497 per month, or $250 per month for an agency that takes it inside its 7-day introductory window; an agency that took the introductory rate keeps it permanently. Returns the price THIS agency would pay, whether that is the introductory or the list price, how long their window has left, the live list of apps the licence covers today, and whether they have already answered. Reads only — nothing is bought and nothing is charged.

Parameters

No parameters — POST an empty body.

Example

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

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

What your clients call your services

white_label.get_service_labelsreadadmin only

Read the names this agency gives the third-party services it supplies and rebills — telephony, email, AI and lead data — as its client accounts see them, plus which of those services it hides from them entirely. Returns one entry per relabelable service with the supplier's real name, the agency's own name for it where one is set, and whether it is hidden. The agency's OWN account always shows the real supplier names and is not affected by any of this. Read-only; changes nothing.

Parameters

No parameters — POST an empty body.

Example

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

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

Give free to a client

white_label.give_app_to_clientwriteconfirmadmin only

Give one of this agency's own client accounts a Chirply-published app its reselling licence covers, free, and switch it on in that account right away — whatever price the agency's rate card sets for it. The price and every other client account are left exactly as they were. Nobody is billed and no Stripe account is touched. A built-in app is on immediately; an externally hosted app (one that needs its own access token) becomes owned and the client installs it free from its listing. A client already paying the agency for the app keeps that subscription and simply has the app switched back on. To charge for it instead, set a price (white_label.set_reseller_app_price) or use white_label.sell_app_to_client.

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

Parameters

FieldTypeRequiredDescription
client_workspace_idstring (uuid)requiredThe id of the client account (a client account of this agency) to install the app into.
app_slugstringrequiredThe marketplace slug of the app to install for them.

Example

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

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

List custom domains

white_label.list_domainsreadadmin only

List the custom hostnames this agency serves the app from, with Cloudflare provisioning status, SSL state, and the CNAME target their DNS must point at. DEPRECATED: domains.list returns all of the account's domains, including these.

Parameters

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

Example

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

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

Your prices

white_label.list_reseller_app_pricesread

List what this agency charges its own client accounts for each Chirply-published app its reselling licence covers. An app with no price is INCLUDED — the licence already paid for it, so the agency's clients install it free. Prices set here are collected on the agency's own Stripe account; Chirply takes no cut of them. Reads only — nothing is charged.

Parameters

No parameters — POST an empty body.

Example

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

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

Client app sales

white_label.list_reseller_app_salesreadadmin only

List this agency's app sales and gifts to its own client accounts, newest first: which client, which app, the price they pay the agency, how it came about (bought on the listing, invoiced, or given free), its payment state, whether the app is switched on, and any problem — a checkout that could not start, or a payment that landed but could not switch the app on. Reads only; the money itself is on the agency's own Stripe.

Parameters

No parameters — POST an empty body.

Example

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

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

Remove a custom domain

white_label.remove_domainwriteconfirmadmin only

Disconnect a custom hostname and delete its Cloudflare custom hostname. Anyone still visiting that domain stops reaching the app.

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

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe connected domain's id.

Example

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

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

Bill a client for an app

white_label.sell_app_to_clientwriteconfirmadmin only

Bill one of this agency's own client accounts for a Chirply-published app at the price on the agency's rate card. THIS SPENDS THE CLIENT'S MONEY: Stripe immediately emails them a real invoice from the AGENCY's own Stripe account, and a recurring price starts a real subscription that bills them every period until somebody cancels it. The money goes to the agency and Chirply takes no cut. The amount is read from the agency's rate card and can NOT be set here. The client owns the app once the invoice is paid, not before — the agency's Stripe webhook then switches it on in their account. Clients can also buy it themselves from the app's marketplace listing. To hand the app over free instead, use white_label.give_app_to_client.

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

Parameters

FieldTypeRequiredDescription
client_workspace_idstring (uuid)requiredThe id of the client account (a client account of this agency) to bill.
app_slugstringrequiredThe marketplace slug of the app to sell them.
contact_emailstring (email)requiredWhere Stripe sends the invoice. A real person at the client receives it and is asked to pay.
contact_namestringoptionalWho the invoice is addressed to. Defaults to the account name.

Example

curl -X POST https://app.chirply.io/api/v1/actions/white_label.sell_app_to_client \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "client_workspace_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "app_slug": "example",
    "contact_email": "ada@example.com"
  }'
Test with your API key

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

Let client accounts use the App Marketplace

white_label.set_app_marketplacewriteconfirmadmin only

Decide whether the client accounts under this agency can browse and install apps from the App Marketplace. It is OFF for them by default, because the marketplace is the PLATFORM's storefront rather than the agency's. Listings are shown under the agency's brand (app names, descriptions and the developer credit; first-party screenshots hidden), but a few things still carry the platform vendor's name: Browser Agent (a Chrome extension published under the vendor's name), Signage (screens open the vendor's display address) and Shopify Commerce (clients install the vendor's Shopify app) once used; apps other developers publish, which appear under their own names; and a paid app bought directly here rather than included in the agency's App Reseller Licence or sold at the agency's own price, which the vendor charges under its own name. The agency does not choose which apps are listed. TURNING IT ON CAN THEREFORE EXPOSE THE PLATFORM'S BRAND TO THE AGENCY'S OWN CLIENTS in those places — so treat it as a branding decision, not a feature flag. It changes every client account under this agency at once. The agency's own account always keeps the marketplace and is unaffected either way. Switching it OFF hides the storefront only: apps a client already installed keep running, keep their access tokens, and are never uninstalled or refunded.

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

Parameters

FieldTypeRequiredDescription
enabledbooleanrequiredTrue lets every client client account under this agency open the App Marketplace and install apps — accepting that the marketplace shows the platform vendor's brand. False hides the storefront from them; anything already installed keeps working.

Example

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

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

Save DNS target

white_label.set_dns_targetwriteconfirmadmin only

Save a hostname on the agency's own domain (e.g. domains.youragency.com) as the CNAME target that every client account under this agency — and the agency's own domain instructions — is told to point custom domains at, replacing any previously saved one, then check its DNS immediately over DNS-over-HTTPS. Client accounts switch from the platform's hostname to this one only once the check finds a DNS-only (not proxied) CNAME from it to the platform's target; until then, and whenever a later check fails, they keep being shown the platform's default. Changes no DNS records, sends nothing and costs nothing — the agency creates the CNAME itself (the record is returned).

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

Parameters

FieldTypeRequiredDescription
hostnamestringrequiredA subdomain on the agency's own domain, e.g. domains.youragency.com. A pasted URL is accepted and trimmed to its hostname. A bare root domain is refused because it cannot hold a CNAME, as are the platform's own hostnames.

Example

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

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

Save

white_label.set_reseller_app_pricewriteadmin only

Set what this agency's own client accounts pay for one Chirply-published app that its reselling licence covers. Clients then see this price on the app's marketplace listing and pay it on a checkout run by the AGENCY's own Stripe account — Chirply neither collects the money nor takes a cut of it. This does not charge anybody by itself: it changes the price the agency's clients see from that moment on, and a client already on a subscription keeps the price they were sold at. Until the agency connects a Stripe account, clients see the price but are told to contact the agency instead of a Buy button (`clients_can_buy: false`). Set 0 to list the app as free, or use white_label.clear_reseller_app_price to make it included again; white_label.give_app_to_client still gives it free to one client either way. Owners and admins only.

Parameters

FieldTypeRequiredDescription
app_slugstringrequiredThe marketplace slug of the app to price, e.g. 'business-cards'. Must be one the reselling licence covers — see white_label.list_reseller_app_prices.
price_usdnumberrequiredWhat the agency's clients pay the agency, in dollars (49 or 49.5). 0 lists the app as free.
billing_interval"one_time" | "monthly" | "yearly"optionalHow often the client pays the agency. Independent of the flat monthly licence the agency pays Chirply. Default: "monthly"

Example

curl -X POST https://app.chirply.io/api/v1/actions/white_label.set_reseller_app_price \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "app_slug": "example",
    "price_usd": 1
  }'
Test with your API key

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

Rename the services your clients see

white_label.set_service_labelswriteconfirmadmin only

Rename — or hide — the third-party services this agency supplies and rebills, as its client accounts see them. A client's Integrations screen otherwise names the agency's own suppliers (Twilio, Mailgun, OpenRouter and so on) right next to a bill from the agency, which invites a price comparison against the wholesale rate. THIS REPLACES THE WHOLE SET: any service left out of the list goes back to showing its supplier's real name, so send every service you want named, not just the one you are changing. It changes every client account under this agency at once and takes effect immediately. Renaming is cosmetic — no connection changes, no credential moves, and nothing stops sending. Hiding removes the service's tile from client accounts, so a client can no longer connect their own account for it; a client who ALREADY connected their own keeps seeing it under the agency's name rather than losing sight of a credential they own. The agency's own account always shows the real supplier names either way. Only the services the agency buys and rebills can be renamed — providers where the client connects their own account (Facebook & Instagram, Shopify, their own Stripe, PayPal, Klaviyo, Supabase) never can, because the client signs in to that company by name and pays it directly. Spends nothing and sends nothing.

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

Parameters

FieldTypeRequiredDescription
servicesobject[]requiredThe complete set of service names for this agency's clients. Services not listed here revert to showing the supplier's real name — this replaces what is stored rather than merging into it. Send an empty array to clear every name and show real supplier names everywhere.
services[].service"twilio" | "mailgun" | "resend" | "openrouter" | "elevenlabs" | "fal" | … 3 morerequiredWhich supplied service this entry names. One of the services the agency buys and rebills.
services[].namestringoptionalWhat client workspaces should call this service, up to 40 characters (e.g. "Phone & messaging"). Omit or leave blank to show the supplier's real name.
services[].hiddenbooleanoptionalTrue to remove this service from client accounts entirely, so they cannot connect their own account for it. Defaults to false. A client who already connected their own account still sees it.

Example

curl -X POST https://app.chirply.io/api/v1/actions/white_label.set_service_labels \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "services": [
      {
        "service": "twilio"
      }
    ]
  }'
Test with your API key

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

Have Chirply answer client support

white_label.start_managed_supportwriteconfirmowner only

Hand this agency's client support over to Chirply. THIS SPENDS REAL MONEY: it starts a recurring subscription charged to the card already on the agency's Chirply account, at $497 per month, or $250 per month inside the 7-day introductory window — the server decides which applies and then locks that price to this agency permanently, so it does not rise when the window closes for everyone else. From then on, bug reports filed by the agency's client accounts go to Chirply's support team instead of the agency's own inbox, and are answered inside the client's workspace under the agency's brand. Any of the agency's client tickets that are still open move across immediately; closed ones stay where they were answered. Owner only.

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

Parameters

FieldTypeRequiredDescription
accept_chargesbooleanoptionalRequired to be true, as an explicit acknowledgement of the recurring monthly price. The amount is NOT settable here — the server quotes it ($250/month inside the introductory window, $497/month outside it) and freezes it onto this agency. Call white_label.get_managed_support first if you need to know which applies. Default: false

Example

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

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

Stop Chirply-managed support

white_label.stop_managed_supportwriteconfirmowner only

Stop paying Chirply to answer this agency's clients, and take the support desk back. Cancels the recurring subscription immediately, so billing stops, and every still-open ticket filed by this agency's client accounts moves back into the agency's own 'Client reports' inbox for them to answer; tickets Chirply already closed stay closed where they are. This is not free to undo: restarting later is a new purchase at whatever the price is on that day, and the introductory rate is NOT held. Owner only.

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

Parameters

FieldTypeRequiredDescription
at_period_endbooleanoptionalTrue to keep Chirply answering until the month already paid for runs out, then stop. False (the default) stops immediately and hands every open client ticket back now. Either way there is no refund for the remainder of the current month. Default: false

Example

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

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

Save branded app

white_label.update_appwriteadmin only

Configure the installable app the agency's clients add to their home screen or dock from the agency's custom domain. Every field is optional and falls back to the agency's existing brand — the app is named after the white-label display name, and painted in the primary color, unless overridden here. Setting `enabled` to false withdraws the app: existing installs keep working but stop being offered. Fields left out are cleared and fall back to those defaults.

Parameters

FieldTypeRequiredDescription
enabledbooleanoptionalOffer the app for installation. False hides it without deleting the settings. Default: true
namestringoptionalThe installed app's full name. Blank uses the white-label display name.
short_namestringoptionalThe label under the home-screen icon. Both iOS and Android truncate past about 12 characters. Blank derives one from the name.
icon_urlstringoptionalAbsolute https:// URL of a SQUARE app icon — a PNG of at least 512×512, or an SVG. Blank falls back to the favicon, then to a generated mark showing the brand's initial on its primary color.
theme_colorstringoptionalHex color the operating system paints the app's title bar with, e.g. #0069d4. Blank uses the brand's primary color.
background_colorstringoptionalHex color of the splash screen shown while the app starts, e.g. #ffffff.

Example

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

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

Save brand

white_label.update_brandingwriteadmin only

Set the agency brand applied across the app for this account and every client account under it — display name, logo, favicon, and primary/accent colors. The logo and favicon are given here as hosted https:// URLs (in the app you can instead upload an image file and it becomes such a URL). Any field left out is cleared; on a custom domain the organization name and a neutral favicon are used instead of exposing the platform brand.

Parameters

FieldTypeRequiredDescription
display_namestringoptionalThe name shown in place of the default product name. Max 60 characters.
logo_urlstringoptionalAbsolute https:// URL of the logo shown as the wordmark in the app shell. Blank falls back to the default wordmark.
favicon_urlstringoptionalAbsolute https:// URL of the favicon shown in the browser tab. Blank falls back to the default icon.
primary_colorstringoptionalHex color for buttons and active nav, e.g. #0069d4.
accent_colorstringoptionalHex color for focus rings and the second chart series, e.g. #1aa179.
login_image_urlstringoptionalAbsolute https:// URL of the artwork filling the panel beside the sign-in form on the agency's custom domain. Should be a tall image (at least 1200x1600) since it is cropped to fill full height; the bottom third is darkened for caption legibility. Blank leaves that panel as a plain gradient in the brand's primary color.

Example

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

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

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