← All action domains

Bulk jobs

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

Stop a background job

bulk_jobs.cancelwriteconfirm

Permanently stop a bulk job. Whatever has already been sent or changed stays that way — this cannot recall sent messages or undo completed updates — but nothing further is processed and the job cannot be restarted.

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 job to stop.

Example

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

See a job's message and sender

bulk_jobs.detailsread

Fetch everything about one background job beyond its progress: the exact subject and body it is sending, whether that copy contains merge fields, which address or sending pool it goes out from (and whether those addresses can currently send), when it started, when the last message actually went out, when it is on course to finish at its current pace, who started it, and the full delivery picture so far — delivered, opened, clicked, bounced, reported as spam and unsubscribed, each as a count and as the percentage it is judged on. Read-only. Use this to answer "what exactly did this send, and who is it coming from?" — bulk_jobs.get answers only "how far along is it".

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe job's id.

Example

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

Edit a job's message

bulk_jobs.edit_messagewriteconfirm

Rewrite the subject or body of a bulk email or text job that has not finished. Only contacts who have NOT been reached yet get the new wording — messages already sent cannot be recalled or changed, and the count of what has already gone out with the old wording is returned so it can be checked. Applies to email and text jobs only; jobs that enrol contacts in a workflow or run an action sequence have no message of their own to edit. Merge fields such as {{first_name}} are stored raw and filled in per contact at the moment each one is sent.

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 job whose message should change.
subjectstringoptionalNew email subject line. Email jobs only — a text has no subject. Omit to leave it as it is.
bodystringoptionalNew message body, as plain text with merge fields left unresolved. Omit to leave it as it is. Cannot be empty: an empty body stops the whole job on its next wave.

Example

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

Check a background job

bulk_jobs.getread

Fetch one background job's progress: how many have been processed, succeeded, failed and skipped, how many are left, and how long the rest will take at the current pace. Polling this also nudges the job along, so it is the right way to wait for one to finish.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe job's id.

Example

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

Get progress popup preference

bulk_jobs.get_progress_cardsread

Read whether the calling person sees floating progress cards while background jobs run in this account. The preference is personal and follows them between devices; it never changes what a job does, how fast it runs, or who else sees anything. Read-only: changes nothing, sends nothing, and spends no money. Requires a calling user and cannot read another person's preference.

Parameters

No parameters — POST an empty body.

Example

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

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

List background jobs

bulk_jobs.listread

List this account's background bulk jobs — bulk emails, bulk texts, mass tagging, bulk deletes — newest first, with progress and the sending pace of each. Read-only; starting a job is done by the capability for that operation (for example contacts.send_email).

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
status"queued" | "running" | "paused" | "completed" | "failed" | "canceled"optionalOnly jobs in this status.
kindstringoptionalOnly jobs of this kind. Known kinds: affiliate_program.email, contacts.add_tags, contacts.add_to_list, contacts.assign_owner, contacts.delete, contacts.email, contacts.enroll_automation, contacts.lookup_line_type, contacts.remove_tags, contacts.run_actions, contacts.set_customer, contacts.set_lifecycle, contacts.sms.
active_onlybooleanoptionalOnly jobs that still have work left (queued, running or paused). Default: false
finished_onlybooleanoptionalOnly jobs that are over, however they ended (completed, stopped or canceled). The opposite of active_only — these are the two tabs on the Background jobs screen, and asking for both at once matches nothing. Default: false

Example

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

Pause a background job

bulk_jobs.pausewrite

Pause a running bulk job. Anything already sent stays sent; nothing further goes out until it is resumed. Use this to stop a bulk send mid-flight without abandoning it.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe job to pause.

Example

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

List a job's recipients

bulk_jobs.recipientsread

List who a background job is working through, in the order it sends them, one page at a time. Each row gives the contact, the address the job reaches them on, the position in the queue, and where they stand: already sent (with the address it went out from, the time, and whether it was delivered, opened, bounced or failed), skipped because they had no address, currently being sent, or still waiting. Read-only. This is how to answer "has this person been contacted yet?" and "who has not received it?" for a send that runs over hours or days. Pass `outcome` to get only the people behind one delivery number instead — the handful who reported it as spam, whose address bounced, who unsubscribed — which is otherwise unfindable in a 15,000-contact send, since nothing about someone's position in the queue says what happened to their copy.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe job's id.
limitintegeroptionalMax recipients to return (1-200). Default: 50
offsetintegeroptionalHow many recipients to skip. Unfiltered this is a position in the job's own send order, so offset 0 is the first contact it sends to and the job's processed count is where it has got to. With an outcome set it is a position within that outcome's own list, which is much shorter. Default: 0
outcome"delivered" | "opened" | "clicked" | "bounced" | "complained" | "unsubscribed" | … 1 moreoptionalReturn only the people behind one delivery outcome, rather than the whole send: 'delivered', 'opened', 'clicked', 'bounced' (the address rejected it), 'complained' (they reported it as spam), 'unsubscribed' (they opted out because of this send) or 'failed' (it could not be handed to the provider at all). The total comes back as the size of that set, and matches the corresponding count from bulk_jobs.details. Only email and text jobs have delivery outcomes; a tagging or deleting job returns an empty list for any of these.

Example

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

Change when a job starts

bulk_jobs.reschedulewriteconfirm

Move a bulk job's start time, or start it right now. Only works while the job has not begun sending — once the first messages are out, the rest can be paused or re-paced but not postponed. Passing null for start_at drops the wait and lets the job begin immediately, which for an outbound job means real emails, texts or calls start going out at once.

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 job to reschedule.
start_atstring (date-time) (or null)requiredThe new start time as an ISO 8601 timestamp with a timezone, or null to start the job immediately. A time in the past is treated as immediately.

Example

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

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

Resume a background job

bulk_jobs.resumewriteconfirm

Resume a bulk job that is paused, or one that stopped on an error with work still left. It picks up from its own cursor, so nobody already sent to is sent to again, and continues at its current pace — for an outbound job this means real emails or texts start going out again, billed to its own provider account. A completed or deliberately canceled job cannot be resumed.

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 job to resume — one that is paused, or stopped with work left.

Example

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

Change a job's sending pace

bulk_jobs.set_pacewrite

Change how fast a bulk job sends, while it is running. Applies only to what has not gone out yet. Set a per-minute, per-hour or per-day cap; pass null for a window to remove that cap, and clear all three to send as fast as possible. Slowing a send down is the usual reason to call this — provider rate limits and deliverability.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe job to re-pace.
per_minuteinteger (or null)optionalCap on items sent per minute. null removes the per-minute cap.
per_hourinteger (or null)optionalCap on items sent per hour. null removes the per-hour cap.
per_dayinteger (or null)optionalCap on items sent per day. null removes the per-day cap.

Example

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

Show progress cards

bulk_jobs.set_progress_cardswrite

Turn the floating background-job progress cards on or off for the calling person in this account, across their devices. Turning them off leaves every job running at exactly the same pace and still announces a job that fails; it only stops the on-screen cards and the finished-successfully notices. Changes no teammate's preference and no job. Sends nothing and spends no money. Requires a calling user and cannot change another person's preference.

Also answers to hide job popups, stop showing background job progress.

Parameters

FieldTypeRequiredDescription
visiblebooleanrequiredTrue shows the floating progress cards to the calling person while background jobs run. False hides them; jobs keep running and failures are still reported.

Example

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

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