← All action domains

Email policy

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

View email preferences

email_policy.getread

Read the account's unsubscribe-link and double-opt-in preferences (whether it is on, when it started sending — `activeSince`, null means switched on but not sending yet — which channels require confirmation, and the confirmation email copy), its org-wide daily email sending limit, and the automatic reputation slow-down thresholds. Changes nothing and sends no email.

Parameters

No parameters — POST an empty body.

Example

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

Latest confirmations

email_policy.list_confirmationsread

List this account's double opt-in confirmations: how many addresses are held off marketing email awaiting a click, how many are queued, how many could not be sent (with the reason), how many have confirmed, and the most recent requests with their status. Read only; sends nothing.

Parameters

FieldTypeRequiredDescription
status"all" | "failed" | "queued" | "sent"optionalWhich open requests to list: 'failed' (could not be sent), 'queued' (waiting to go out), 'sent' (waiting for the click) or 'all' (default).
limitintegeroptionalHow many recent requests to return, newest first (default 25, max 100).

Example

curl -X POST https://app.chirply.io/api/v1/actions/email_policy.list_confirmations \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "all",
    "limit": 1
  }'
Test with your API key

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

Resend confirmation

email_policy.resend_confirmationwriteconfirmadmin only

Immediately send one address a NEW double opt-in confirmation email (a real email from the account's own sending address, with a fresh link; the old link stops working). Follows the rule of the channel the address arrived through: always refused for an address that bounced or reported spam, already confirmed, is no longer held, or was sent one in the last two minutes; refused for any other opt-out recorded after the person's request (or, for API/import/teammate channels, any opt-out at all). Use after fixing a sending problem.

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
emailstringoptionalThe held email address to send the confirmation to. Give this or contact_id.
contact_idstring (uuid)optionalA contact whose email address is held awaiting confirmation. Used when email is not given.

Example

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

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

Retry all that failed

email_policy.retry_failed_confirmationswriteconfirmadmin only

Queue every double opt-in confirmation that could not be sent (for example because the account had no working sending address) to go out again. The minute dispatcher then sends them as real emails from the account's own sending address, about 20 a minute; each address is re-checked first, and any no longer held awaiting confirmation (unsubscribed, bounced, complained or allowed by a teammate meanwhile) is skipped.

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

No parameters — POST an empty body.

Example

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

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

Save settings

email_policy.updatewriteconfirmadmin only

Update whether account opt-out links are appended to email, double opt-in (whether it is on, which channels require confirmation, and the confirmation email copy), the org-wide daily email sending limit, and the automatic slow-down thresholds for senders whose bounce/complaint rates spike. Sends nothing at the moment of saving, BUT switching double opt-in on (or saving it on) STARTS it: from then on every address arriving through a selected channel is held off marketing email and sent a real confirmation email from the account's own sending address — for imports and API/hand-added contacts that is every new contact with an email. Switching it off stops new holds and cancels unsent queued confirmations; addresses already held stay held until they confirm or a teammate allows email on the contact. A daily limit changes when bulk campaigns pause, and throttle thresholds change how fast struggling senders may send.

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
include_unsubscribe_linkbooleanrequiredAppend the account opt-out link to one-off, automated, API, and transactional email. Broadcasts always retain their signed compliance link.
double_opt_in_enabledbooleanrequiredWhether addresses arriving through the selected channels must confirm by email before they get marketing email. true starts sending confirmations immediately for new arrivals.
apibooleanrequiredAPI, MCP and Copilot: every NEW contact created with an email through them is held and sent a confirmation, unless the address has any opt-out on file.
trackingbooleanrequiredAuto-captured from websites: ONLY a captured website form whose visitor ticked an email opt-in checkbox (marked data-email-optin or named newsletter/subscribe/email_opt_in/marketing_consent, not pre-ticked), or whose site code reports emailOptIn, is held and sent a confirmation — including past an earlier opt-out, which the hold replaces (never past a bounce or spam complaint). Ordinary captured enquiries never are.
importsbooleanrequiredCSV and file imports: every NEW contact with an email in the file is held and queued a confirmation, unless the address has any opt-out on file. Matched existing contacts are untouched.
manualbooleanrequiredAdded by teammates: every NEW contact a teammate adds with an email is held and sent a confirmation, unless the address has any opt-out on file.
formsbooleanoptionalForm consent questions: ticking a consent question set to allow emails holds the address and sends a confirmation instead of granting immediately — including past an earlier opt-out, which the hold replaces (never past a bounce or spam complaint). An unticked box still records a no. Omit to keep the current value.
launch_storebooleanoptionalReseller website signups (agency accounts with a launch store): a buyer who ticks "Email me setup tips and reminders about this offer." on the agency's reseller website or trial/paid signup funnel is held off marketing email and sent a confirmation from the agency's own sending address; the store's setup-tip emails start only after they click it. Their checkout, account invitation and billing emails are unaffected. An unticked box sends nothing. Omit to keep the current value.
webhooksbooleanoptionalAutomation webhooks: a webhook request that its owner set up to carry email consent (automations.update_webhook_settings consent_mode) and that says the person ticked the opt-in holds the address and sends a confirmation instead of granting immediately — including past an earlier opt-out, which the hold replaces (never past a bounce or spam complaint). Other webhook requests send nothing. Omit to keep the current value.
subjectstringrequiredSubject line of the confirmation email.
messagestringrequiredMessage displayed above the confirmation button.
daily_send_limitinteger (or null)optionalMost emails the account may send per UTC day, across every sending address. Null removes the limit; omit to keep the current value. Bulk campaigns pause at the limit and resume the next day — one-to-one and transactional email is never blocked, but still counts toward the total.
auto_throttle_enabledbooleanoptionalAutomatically cap a sending address at a small daily volume when its trailing bounce or complaint rate spikes. Slows bulk campaign sending only; one-to-one email always goes out. Omit to keep the current value.
throttle_bounce_rate_pctnumberoptionalSlow a sender down when its trailing bounce rate exceeds this percentage (default 5). Omit to keep the current value.
throttle_complaint_rate_pctnumberoptionalSlow a sender down when its trailing spam-complaint rate exceeds this percentage (default 0.3). Omit to keep the current value.
throttle_min_sendsintegeroptionalNever judge a sender before it has sent at least this many emails in the window (default 50). Omit to keep the current value.
throttle_lookback_daysintegeroptionalHow many trailing UTC days of sends/bounces/complaints to judge on (default 3). Omit to keep the current value.
throttled_daily_capintegeroptionalBulk emails per day a slowed-down sender is capped at until its rates recover (default 50). Omit to keep the current value.

Example

curl -X POST https://app.chirply.io/api/v1/actions/email_policy.update \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "include_unsubscribe_link": true,
    "double_opt_in_enabled": true,
    "api": true,
    "tracking": true,
    "imports": true,
    "manual": true,
    "subject": "Example",
    "message": "example"
  }'
Test with your API key

Over MCP the same operation is the tool email_policy_update 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=email_policy — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.