@thenavidm/kit-mcp-cli
v3.0.0
Published
Kit MCP server and CLI for Claude Code and AI agents. Subscribers, tags, broadcasts, sequences, email stats, forms, snippets, purchases, webhooks, bulk operations and API v4.
Maintainers
Keywords
Readme
Kit MCP Server & CLI
Kit MCP server and CLI for Claude Code, Codex and AI agents. 85 tools: 38 reads and 47 writes for account data, newsletters, subscribers, tags, forms, sequences, snippets, statistics, bulk work and webhooks.
One package gives you two ways in: kit-mcp connects the tools to your AI app, and kit-cli makes the same tools shell commands. Claude Desktop also has a bundled .mcpb extension. The 40 audience, delivery, deletion and signing-secret operations require explicit confirmation.
Built and maintained by Navid Moazzez. Built on Slipway, which turns one definition of each tool into the MCP server and the CLI. The installation guide is in INSTALL.md; the full matching navid.me guide is saved as a CMS draft and awaits publication.
The terminal illustrates shipped tool names and the requested draft workflow. It is a presentation preview, not a live account transcript.
You need a Kit v4 API key or an authorized OAuth session. Some endpoints require OAuth; account permissions and plan eligibility still apply. The wrapper is free software under AGPL-3.0-or-later. Kit service charges remain separate. This is a community integration, not a Kit-endorsed product.
Kit already has an official account MCP with v4 reads and writes. This package adds a task CLI, private named accounts, bounded cursor aggregation, private token refresh and a desktop bundle. It does not claim more API coverage or measured token savings over the official server.
Validation: build, typecheck, 40 behavior/CLI checks, public npm installation and desktop protocol discovery are checked. Live account writes and actual desktop GUI installation remain unverified; section 7 has the measured token costs.
Two ways to use it
Command line
npm install -g @thenavidm/kit-mcp-cli@latest
kit-cli
kit-cli list-broadcasts --help
kit-cli schema create-broadcast
kit-cli get-account --agent
kit-cli list-broadcasts --per-page 5 --agent
kit-cli create-broadcast --subject "This week's creator notes" --content '<p>Your newsletter content.</p>' --confirm --agentConfigure credentials privately first. Draft creation defaults private and unscheduled. --confirm authorizes the requested operation; --agent and --yes never bypass that guard.
MCP server, for your AI app
claude mcp add --scope user kit -- npx -y @thenavidm/kit-mcp-cli@latestThen ask: "Draft my next newsletter privately. Show me the draft and leave it unscheduled." Confirm only the requested account action.
All client configurations and operating-system steps are in INSTALL.md.
Which one
| Where you work | What to use | | --- | --- | | Claude Code, Codex, Cursor or another agent with a terminal | MCP, CLI or both | | Claude Desktop chat | The local MCP server or desktop extension | | Scripts, cron or CI | CLI commands, or MCP through an MCP client | | A web client that accepts only a remote MCP URL | Kit's official hosted MCP; this package exposes local stdio |
Features
| Capability | CLI command | MCP tool |
| --- | --- | --- |
| Account and growth | kit-cli get-account / get-growth-stats | get_account / get_growth_stats |
| Recent newsletters | kit-cli list-broadcasts | list_broadcasts |
| Draft and schedule | kit-cli create-broadcast / update-broadcast | create_broadcast / update_broadcast |
| Newsletter statistics | kit-cli get-broadcast-stats / get-broadcast-clicks | get_broadcast_stats / get_broadcast_clicks |
| Subscriber lookup | kit-cli search-subscribers | search_subscribers |
| Subscribers and tags | kit-cli list-subscribers / list-tags / tag-subscriber | list_subscribers / list_tags / tag_subscriber |
| Sequences | kit-cli list-sequences | list_sequences |
| Templates | kit-cli list-email-templates | list_email_templates |
| Signed webhook endpoints | kit-cli create-webhook-endpoint | create_webhook_endpoint |
| Private named accounts | kit-cli list-accounts | list_accounts |
| Diagnose setup | kit-cli doctor | CLI utility |
Contents
| Number | Section | What it covers | | --- | --- | --- | | 1 | What you can ask it | Practical prompts, coverage and validation | | 2 | Quick install | Install, discover and authenticate | | 3 | Set up Kit access | API keys, OAuth and revocation | | 4 | Connect your client | Every client and desktop route | | 5 | Check it works | Doctor and the first account read | | 6 | Output, flags and exit codes | Scripts, JSON and nested bodies | | 7 | MCP or CLI and token cost | Surface choices and measurement | | 8 | Every tool and argument | All 85 tools and their arguments | | 9 | Newsletter and subscriber workflows | Draft, review, schedule and manage audiences | | 10 | Pagination, bulk work and webhooks | Cursors, asynchronous jobs and private secrets | | 11 | Several private accounts | Account selection and isolation | | 12 | Writing safely | Confirmation, read-only and retries | | 13 | How it works | Shared handlers, schemas and development | | 14 | Your data | Credentials, local files and privacy | | 15 | Environment variables | Credentials, safety and tuning | | 16 | Updates and removal | npm, desktop, disconnecting and migration | | 17 | Troubleshooting | Symptoms and fixes | | 18 | API coverage and comparisons | Official and community alternatives | | 19 | Versions | Component versions, releases and history | | 20 | FAQ | Common questions |
1. What you can ask it
- Show my latest five newsletters and their statistics.
- Draft my next newsletter privately and leave it unscheduled.
- Find this subscriber by exact email and show their tags.
- Read the current audience before applying the tag I requested.
- List available sequences and templates.
- Create the requested signed webhook and save its signing secret privately.
The pinned official API v4 snapshot contains 83 operations. This server exposes each one, plus list_accounts and the search_subscribers compatibility alias. The snapshot source, date, hash and reviewed corrections are in api-source.json.
| Area | Examples | | --- | --- | | Account | Identity, creator profile, growth statistics, email statistics and colors | | Broadcasts | Draft, read, update, delete, statistics and click breakdowns | | Subscribers | Create, update, unsubscribe, filter, location, statistics and tags | | Tags, forms, sequences | Read resources, subscribe to a form or sequence, tag and untag | | Sequence emails | Read, create, edit and delete individual emails | | Snippets and templates | Reusable content CRUD supported by the API; list email templates | | Posts and segments | Read published posts and segment metadata | | Purchases and bulk | OAuth-only purchase endpoints and asynchronous bulk jobs | | Webhook endpoints | Signed endpoints, secret rotation and previous-secret revocation | | Legacy webhooks | Older webhook API preserved separately |
The API does not provide all Kit UI actions. This package does not promise visual automation editing, automatic duplication of a designed broadcast, a block editor, a webhook receiver, a hosted scheduler or a browser session. A successful bulk submission is not proof that its asynchronous job has completed.
What was actually checked
| Check | Status for 3.0.0 | | --- | --- | | Official API snapshot | 83 operations, pinned on 2026-10-02 | | Real local MCP discovery | 85 tools, or 38 with read-only enabled | | Behavior and shared CLI | 38 checks passed against controlled HTTP fixtures | | TypeScript | Build and typecheck passed | | Production dependency audit | Zero findings at review time | | Live account reads and writes | Pending a configured v4 key or authorized OAuth session | | Actual Claude Desktop installation | Pending a GUI check; archive and protocol checked separately | | Matched MCP versus CLI model-token task | Measured against 2.0.3 in README section 7 |
Fixture tests check request construction and guards. They do not establish that a particular Kit account or email template accepts a live write. Release artifact checks are reported in the release notes when completed.
2. Quick install
Install Node.js 22 or newer, then:
npm install -g @thenavidm/kit-mcp-cli@latest
kit-cli --version
kit-cli
kit-cli list-broadcasts --help
kit-cli schema create-broadcast
kit-cli loginDiscovery, help and schemas work before authentication. login prints setup instructions. It does not open a browser, exchange an OAuth code or save credentials. Configure a v4 API key privately as KIT_API_KEY, then:
kit-cli doctor
kit-cli doctor --network
kit-cli get-account --agent
kit-cli list-broadcasts --per-page 10 --agent --select broadcasts.id,broadcasts.subject,paginationThe local doctor checks configuration. The network doctor reads the default account and reports authentication success without returning account details. It never sends a newsletter or changes subscribers.
For a single invocation without a global install:
npx -y --package @thenavidm/kit-mcp-cli@latest kit-cli toolsINSTALL.md covers Node/PATH on macOS, Windows and Linux, private account setup, every client, updates and removal. No .env file is loaded automatically.
3. Set up Kit access
Personal v4 API key
Open Kit's Developer settings, click Add a new key, name it and save the value privately when shown. Kit does not let you view that value again afterwards. Set KIT_API_KEY in your local shell or client settings. The server sends it in X-Kit-Api-Key, never a URL query string. Old v3 API secrets are not interchangeable.
Kit documents 120 requests over a rolling 60 seconds per API key and 600 for OAuth API access. The official hosted MCP separately documents 120/minute per token. This wrapper spaces calls per account by 550 ms for keys and 110 ms for OAuth. Other processes using the same credential also count against Kit's limits.
OAuth for full endpoint eligibility
Bulk and purchase endpoints in the tool table are marked OAuth-only. Create your own Kit app and enable API access, then implement the official OAuth authorization flow or Kit's Node example. Keep the app's secret on a private confidential backend. Use the callback URI exactly as registered, a cryptographically random state verified on callback, and HTTPS for a hosted callback.
The current authorization and token endpoints are https://api.kit.com/v4/oauth/authorize and https://api.kit.com/v4/oauth/token. There is no built-in OAuth consent service in this package. The old source's app.kit.com/oauth/token examples are obsolete. Follow Kit's current registered-app instructions; do not invent unsupported fine-grained OAuth scopes from operation-schema security labels.
A private token file can contain:
{
"access_token": "YOUR_OAUTH_ACCESS_TOKEN",
"refresh_token": "YOUR_OAUTH_REFRESH_TOKEN",
"client_id": "YOUR_OWN_KIT_APP_CLIENT_ID",
"client_secret": "YOUR_OWN_KIT_APP_CLIENT_SECRET",
"created_at": 1790899200,
"expires_in": 7200
}These are placeholders; use actual issued expiry metadata. Point KIT_TOKENS_FILE at an absolute private path outside the checkout. It must be a regular JSON file, at most 64 KB; symlinks are refused. Restrict access to your OS user. If expiry metadata is available, refresh happens one minute before expiry. Concurrent refreshes within the same process are deduplicated. Updated tokens are written atomically with mode 0600. On Windows, protect the enclosing folder using user-only ACLs; POSIX mode bits are not a complete Windows access policy.
Alternatively set KIT_ACCESS_TOKEN, KIT_REFRESH_TOKEN, KIT_CLIENT_ID and KIT_CLIENT_SECRET privately. Without a token file, refresh state lasts only in that process. Without refresh credentials, renew an expired access token yourself. An OAuth access token takes precedence over an API key for the selected account.
4. Connect your client
The full commands and private configurations are in INSTALL.md. Common registrations, after privately configuring account credentials:
claude mcp add --scope user kit -- npx -y @thenavidm/kit-mcp-cli@latest
claude mcp list
codex mcp add kit -- npx -y @thenavidm/kit-mcp-cli@latest
codex mcp listClaude Desktop can install the .mcpb release or use manual JSON. Cursor, Windsurf and Gemini CLI use their user MCP settings; VS Code supports secure prompted inputs; Zed uses context_servers. Local Cline/Roo-style clients accept the same stdio command through their MCP setup UI. A local stdio process is not a public HTTP connector for ChatGPT on the web. Kit's official hosted MCP is the appropriate remote option there.
Desktop settings accept a sensitive API key or a private OAuth token-file path. API-key authentication cannot use OAuth-only bulk and purchase endpoints. Custom extension availability depends on your installed host and organization policy.
Let an agent guide setup
Help me install Kit MCP Server & CLI using INSTALL.md. Check Node and the binary, let me configure my account credentials privately, then run discovery and doctor --network. Do not send email or change subscribers during setup.
For shell agents, make SKILL.md available through the client's supported skills location. npm installation does not register the skill automatically.
5. Check it works
kit-cli --version
kit-cli doctor
kit-cli doctor --network
kit-cli get-account --agent
kit-cli list-broadcasts --per-page 1 --agentLocal discovery works without credentials. The local doctor checks configuration; the network doctor reads account identity without returning private account details. It never sends email or changes subscribers. A successful read does not establish every endpoint's eligibility or template compatibility.
6. Output, flags and exit codes
Tool names become dashed commands: get_broadcast becomes kit-cli get-broadcast. Both exact underscore tool names and dashed forms are accepted. Argument names have dashed aliases: broadcast_id is --broadcast-id. Use help and schema to discover each operation's current input.
kit-cli tools
kit-cli get-broadcast --help
kit-cli schema get-broadcast
kit-cli get-broadcast --broadcast-id 123 --agent| Flag | Behavior |
| --- | --- |
| --help | Current schema-derived arguments and defaults |
| --json | Structured JSON output |
| --compact | Compact JSON on one line |
| --agent | Compact JSON and no prompts; never confirms a write |
| --select a,b.c | Keep selected fields; dotted paths descend through objects and arrays |
| --no-color | No terminal colors |
| --no-input | No interactive prompts |
| --yes | Accepted for scripts written for other tools; never substitutes for --confirm |
| --confirm | Explicit confirmation for the requested guarded operation |
| --account NAME | Select a configured local account on API tools |
| --payload JSON | Complete request body as one JSON object |
| --payload-file PATH | Complete request body from a local regular JSON file, at most 5 MB |
Body flags and payload/payload_file are mutually exclusive. Path and query flags remain separate. Objects take JSON; array flags repeat once per array item. Do not pass an array to a flag that expects a single item:
kit-cli list-subscribers --include tags --include stats --per-page 10 --agent
kit-cli create-broadcast --payload-file /absolute/private/path/newsletter.json --confirm --agentNull is meaningful
A shell flag such as --send-at null is the string null, not JSON null. Use the complete body form to return a scheduled broadcast to draft:
kit-cli update-broadcast --broadcast-id 123 --payload '{"send_at":null}' --confirm --agentThe same applies to nullable text, thumbnail and other nullable fields. In an MCP call, send an actual JSON null. Avoid mixing the nullable complete body with individual body flags.
Exit codes
| Code | Meaning | A script's next step | | --- | --- | --- | | 0 | Success | Use the returned data | | 1 | Unexpected error | Report it with the command that caused it | | 2 | Usage, validation or safety refusal, an unknown command or a hidden write | Correct inputs or obtain the requested authorization | | 3 | Not found | Verify the resource ID | | 4 | Authentication or permission failure | Check key, OAuth state or endpoint eligibility | | 5 | Other API or transport failure | Inspect account state before repeating a write | | 7 | Rate limit | Wait; mutating requests are not automatically retried | | 10 | Missing or invalid local configuration | Repair private configuration |
Errors are JSON on stderr. On success, field selection shapes output only; it does not limit Kit's original response or its API processing.
7. MCP or CLI and token cost
| Surface | How it runs | Suitable for |
| --- | --- | --- |
| kit-mcp | Local stdio server launched by an MCP client | Natural language account work in a compatible AI app |
| kit-cli | Schema-derived commands with machine-readable output | Scripts, CI and agents with shell access |
| kit-3.0.0.mcpb | Local MCP server with bundled production dependencies | Claude Desktop custom extensions |
| Official Kit MCP | Hosted https://app.kit.com/mcp with Kit OAuth | Remote connections and browser-only AI clients |
Slipway builds the MCP server, over stdio or --http, and the CLI from each tool's one definition, with the same schemas, validation, handlers and safety guards. Separate handwritten CLI request logic cannot drift from the MCP path.
An MCP client may send tool schemas or deferred tool names into model context. A shell agent instead needs the skill, help, commands and results. Both consume tokens; neither surface guarantees lower total cost for every task.
kit-cli with no arguments lists commands. kit-mcp with no arguments starts stdio and does not print a banner. Avoid launching an interactive banner on an MCP server's stdout.
Measuring the context and task cost
Measured on 2026-10-05 against 2.0.3, with Claude Code 2.1.286 on Claude Opus 5.5 (one short prompt with and without the server connected, the difference read from the API's own usage figures) and Codex 0.159.3 on gpt-6.1-sol:
| Cost | 2.0.3 | 3.0.0 |
| --- | --- | --- |
| Claude Code, every tool loaded, every message | 55,242 | 46,158 |
| Claude Code's default, tool search, every message | 1,516 | 1,518 |
| SKILL.md, read once | 1,430 | 1,566 |
| Codex over the CLI, one task, median of five | 84,497 | 83,147 |
| Codex over MCP, the same task, median of five | 77,336 | 77,462 |
The task was "find the command that tags a subscriber, and the flags it requires". Every tool loaded costs less because parts that several tools repeated are written once. Over the CLI, every 3.0.0 run asked which, a 568-character answer, where every 2.0.3 run read the 6,245-character command list. Over MCP, Codex prints only part of a tool list this long and 3.0.0's part takes a few more tokens to say, so the median rose by 126, while two 3.0.0 runs answered from a shorter printout, against one 2.0.3 run, and the average fell from 70,923 to 64,738. SKILL.md costs 136 more because it says how approval works over MCP and how which finds a command, and lists every exit code.
Tool-list bytes or characters divided by four are not API usage, and no other offering was measured.
8. Every tool and argument
The following catalog is generated from the actual tools/list result. Body-required fields are enforced within payload or individual body arguments at execution; path/query requirements appear in each input schema. schema <command> is the exact machine-readable reference. OAuth-only labels come from the pinned operation security definitions.
| Tool | API | Mode | OAuth only |
| --- | --- | --- | --- |
| get_account | GET /v4/account | Read | No |
| list_colors | GET /v4/account/colors | Read | No |
| update_colors | PUT /v4/account/colors | Write | No |
| get_creator_profile | GET /v4/account/creator_profile | Read | No |
| get_email_stats | GET /v4/account/email_stats | Read | No |
| get_growth_stats | GET /v4/account/growth_stats | Read | No |
| list_broadcasts | GET /v4/broadcasts | Read | No |
| create_broadcast | POST /v4/broadcasts | Write, confirms | No |
| list_broadcast_stats | GET /v4/broadcasts/stats | Read | No |
| get_broadcast_clicks | GET /v4/broadcasts/{broadcast_id}/clicks | Read | No |
| get_broadcast_stats | GET /v4/broadcasts/{broadcast_id}/stats | Read | No |
| delete_broadcast | DELETE /v4/broadcasts/{id} | Write, confirms | No |
| get_broadcast | GET /v4/broadcasts/{id} | Read | No |
| update_broadcast | PUT /v4/broadcasts/{id} | Write, confirms | No |
| bulk_create_custom_fields | POST /v4/bulk/custom_fields | Write | Yes |
| bulk_update_subscriber_custom_field_values | POST /v4/bulk/custom_fields/subscribers | Write, confirms | Yes |
| list_custom_fields | GET /v4/custom_fields | Read | No |
| create_custom_field | POST /v4/custom_fields | Write | No |
| delete_custom_field | DELETE /v4/custom_fields/{id} | Write, confirms | No |
| update_custom_field | PUT /v4/custom_fields/{id} | Write | No |
| list_email_templates | GET /v4/email_templates | Read | No |
| bulk_add_subscribers_to_forms | POST /v4/bulk/forms/subscribers | Write, confirms | Yes |
| list_forms | GET /v4/forms | Read | No |
| list_subscribers_for_form | GET /v4/forms/{form_id}/subscribers | Read | No |
| add_subscriber_to_form | POST /v4/forms/{form_id}/subscribers | Write, confirms | No |
| add_subscriber_to_form_by_id | POST /v4/forms/{form_id}/subscribers/{id} | Write, confirms | No |
| list_posts | GET /v4/posts | Read | No |
| get_post | GET /v4/posts/{id} | Read | No |
| list_purchases | GET /v4/purchases | Read | Yes |
| create_purchase | POST /v4/purchases | Write, confirms | Yes |
| get_purchase | GET /v4/purchases/{id} | Read | Yes |
| list_segments | GET /v4/segments | Read | No |
| list_sequence_emails | GET /v4/sequences/{sequence_id}/emails | Read | No |
| create_sequence_email | POST /v4/sequences/{sequence_id}/emails | Write, confirms | No |
| delete_sequence_email | DELETE /v4/sequences/{sequence_id}/emails/{id} | Write, confirms | No |
| get_sequence_email | GET /v4/sequences/{sequence_id}/emails/{id} | Read | No |
| update_sequence_email | PUT /v4/sequences/{sequence_id}/emails/{id} | Write, confirms | No |
| list_sequences | GET /v4/sequences | Read | No |
| create_sequence | POST /v4/sequences | Write, confirms | No |
| delete_sequence | DELETE /v4/sequences/{id} | Write, confirms | No |
| get_sequence | GET /v4/sequences/{id} | Read | No |
| update_sequence | PUT /v4/sequences/{id} | Write, confirms | No |
| list_subscribers_for_sequence | GET /v4/sequences/{sequence_id}/subscribers | Read | No |
| add_subscriber_to_sequence | POST /v4/sequences/{sequence_id}/subscribers | Write, confirms | No |
| add_subscriber_to_sequence_by_id | POST /v4/sequences/{sequence_id}/subscribers/{id} | Write, confirms | No |
| list_snippets | GET /v4/snippets | Read | No |
| create_snippet | POST /v4/snippets | Write, confirms | No |
| get_snippet | GET /v4/snippets/{id} | Read | No |
| update_snippet | PUT /v4/snippets/{id} | Write, confirms | No |
| bulk_create_subscribers | POST /v4/bulk/subscribers | Write, confirms | Yes |
| list_subscribers | GET /v4/subscribers | Read | No |
| create_subscriber | POST /v4/subscribers | Write, confirms | No |
| filter_subscribers | POST /v4/subscribers/filter | Read | No |
| get_subscriber | GET /v4/subscribers/{id} | Read | No |
| update_subscriber | PUT /v4/subscribers/{id} | Write, confirms | No |
| unsubscribe | POST /v4/subscribers/{id}/unsubscribe | Write, confirms | No |
| delete_subscriber_location | DELETE /v4/subscribers/{subscriber_id}/location | Write, confirms | No |
| update_subscriber_location | PATCH /v4/subscribers/{subscriber_id}/location | Write, confirms | No |
| pin_subscriber_location | POST /v4/subscribers/{subscriber_id}/location | Write, confirms | No |
| get_subscriber_stats | GET /v4/subscribers/{subscriber_id}/stats | Read | No |
| list_subscriber_tags | GET /v4/subscribers/{subscriber_id}/tags | Read | No |
| bulk_delete_tags | DELETE /v4/bulk/tags | Write, confirms | Yes |
| bulk_create_tags | POST /v4/bulk/tags | Write | Yes |
| bulk_remove_tags_from_subscribers | DELETE /v4/bulk/tags/subscribers | Write, confirms | Yes |
| bulk_tag_subscribers | POST /v4/bulk/tags/subscribers | Write, confirms | Yes |
| list_tags | GET /v4/tags | Read | No |
| create_tag | POST /v4/tags | Write | No |
| update_tag_name | PUT /v4/tags/{id} | Write | No |
| untag_subscriber_by_email | DELETE /v4/tags/{tag_id}/subscribers | Write, confirms | No |
| list_subscribers_for_tag | GET /v4/tags/{tag_id}/subscribers | Read | No |
| tag_subscriber | POST /v4/tags/{tag_id}/subscribers | Write, confirms | No |
| untag_subscriber | DELETE /v4/tags/{tag_id}/subscribers/{id} | Write, confirms | No |
| tag_subscriber_by_id | POST /v4/tags/{tag_id}/subscribers/{id} | Write, confirms | No |
| list_webhook_endpoints | GET /v4/webhook_endpoints | Read | No |
| create_webhook_endpoint | POST /v4/webhook_endpoints | Write, confirms | No |
| delete_webhook_endpoint | DELETE /v4/webhook_endpoints/{id} | Write, confirms | No |
| get_webhook_endpoint | GET /v4/webhook_endpoints/{id} | Read | No |
| update_webhook_endpoint | PATCH /v4/webhook_endpoints/{id} | Write, confirms | No |
| revoke_previous_webhook_secret | POST /v4/webhook_endpoints/{id}/revoke_previous_secret | Write, confirms | No |
| rotate_webhook_secret | POST /v4/webhook_endpoints/{id}/rotate_secret | Write, confirms | No |
| list_webhooks | GET /v4/webhooks | Read | No |
| create_webhook | POST /v4/webhooks | Write, confirms | No |
| delete_webhook | DELETE /v4/webhooks/{id} | Write, confirms | No |
| search_subscribers | Alias for GET /v4/subscribers with exact email | Read | No |
| list_accounts | Local labels only | Read | No |
Shared input rules
Every API tool accepts optional account. Writes accept confirm; the 40 guarded operations require it to be true. Pagination controls are included only on tools whose schema supports cursor pagination. Body tools accept either their individual body fields or payload/payload_file. list_accounts accepts no arguments.
Complete arguments
get_account
Get current account. Read-only.
kit-cli get-account --help| Argument | Type | Required | Meaning | | --- | --- | --- | --- |
list_colors
List colors. Read-only.
kit-cli list-colors --help| Argument | Type | Required | Meaning | | --- | --- | --- | --- |
update_colors
Update colors. Reversible configuration write.
kit-cli update-colors --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| colors | array | Body | An array of up to 10 color hex codes |
get_creator_profile
Get Creator Profile. Read-only.
kit-cli get-creator-profile --help| Argument | Type | Required | Meaning | | --- | --- | --- | --- |
get_email_stats
Get email stats. Read-only.
kit-cli get-email-stats --help| Argument | Type | Required | Meaning | | --- | --- | --- | --- |
get_growth_stats
Get growth stats. Read-only.
kit-cli get-growth-stats --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| ending | string | No | See the exact input schema. |
| starting | string | No | See the exact input schema. |
list_broadcasts
List broadcasts. Read-only.
kit-cli list-broadcasts --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| sent_after | schema | No | See the exact input schema. |
| sent_before | schema | No | See the exact input schema. |
| slim | boolean | No | See the exact input schema. |
| status | string | No | Values: draft, scheduled, sending, completed, aborted. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
create_broadcast
Create a broadcast. Requires confirmation.
kit-cli create-broadcast --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| email_template_id | integer | No | Id of the email template to use. Uses the account's default template if not provided. 'Starting point' template is not supported. |
| email_address | string/null | No | The sending email address to use. Uses the account's sending email address if not provided. |
| content | string | No | The HTML content of the email. On a Classic template this is the body, and the template adds the design around it when the broadcast is sent. On a Starting point template the design lives in the body, so this is the complete email: keep the wrappers, images, inline styles and Liquid tags, including {{ unsubscribe_url }} and {{ address }}. Without an unsubscribe link the broadcast can't be sent. A read returns the string that was written, so GET, PUT, GET round-trips, apart from Kit's own "Built with Kit" badge, which a Starting point write takes out of the body and re-applies when the email renders. A broadcast built in Kit's editor reads back as Kit's rendered HTML instead, and writing that back replaces its individually-editable blocks with one HTML block. Sending content in the same request as a Starting point email_template_id also needs allow_starting_point: true. Omit content and name a Starting point template in email_template_id to create the broadcast with that template's own design. |
| description | string | No | See the exact input schema. |
| public | boolean | No | true to publish this broadcast to the web. The broadcast will appear in a newsletter feed on your Creator Profile and Landing Pages. |
| published_at | string | No | The published timestamp to display in ISO8601 format. If no timezone is provided, UTC is assumed. |
| send_at | string/null | No | The scheduled send time for this broadcast in ISO8601 format. If no timezone is provided, UTC is assumed. |
| thumbnail_alt | string/null | No | See the exact input schema. |
| thumbnail_url | string/null | No | See the exact input schema. |
| preview_text | string | No | See the exact input schema. |
| subject | string | Body | See the exact input schema. |
| subscriber_filter | array | No | Filters your subscribers. At this time, we only support using only one filter group type via the API (e.g. all, any, or none but no combinations). If nothing is provided, will default to all of your subscribers. |
| allow_starting_point | boolean | No | Explicitly allow replacing a Starting point template body, as described in Kit’s current content-field documentation. Review the complete rendered HTML first. |
Body alternatives: content; email_template_id.
list_broadcast_stats
Get stats for a list of broadcasts. Read-only.
kit-cli list-broadcast-stats --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| sent_after | schema | No | See the exact input schema. |
| sent_before | schema | No | See the exact input schema. |
| status | string | No | Values: draft, scheduled, sending, completed, aborted. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
get_broadcast_clicks
Get link clicks for a broadcast. Read-only.
kit-cli get-broadcast-clicks --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| broadcast_id | schema | Yes | Positive broadcast id. |
get_broadcast_stats
Get stats for a broadcast. Read-only.
kit-cli get-broadcast-stats --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| broadcast_id | schema | Yes | Positive broadcast id. |
delete_broadcast
Delete a broadcast. Requires confirmation.
kit-cli delete-broadcast --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| broadcast_id | schema | Yes | Positive broadcast id. |
get_broadcast
Get a broadcast. Read-only.
kit-cli get-broadcast --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| broadcast_id | schema | Yes | Positive broadcast id. |
update_broadcast
Update a broadcast. Requires confirmation.
kit-cli update-broadcast --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| broadcast_id | schema | Yes | Positive broadcast id. |
| email_template_id | integer | No | Id of the email template to use. Uses the account's default template if not provided. 'Starting point' template is not supported. |
| email_address | string/null | No | The sending email address to use. Uses the account's sending email address if not provided. |
| content | string | No | The HTML content of the email. On a Classic template this is the body, and the template adds the design around it when the broadcast is sent. On a Starting point template the design lives in the body, so this is the complete email: keep the wrappers, images, inline styles and Liquid tags, including {{ unsubscribe_url }} and {{ address }}. Without an unsubscribe link the broadcast can't be sent. A read returns the string that was written, so GET, PUT, GET round-trips, apart from Kit's own "Built with Kit" badge, which a Starting point write takes out of the body and re-applies when the email renders. A broadcast built in Kit's editor reads back as Kit's rendered HTML instead, and writing that back replaces its individually-editable blocks with one HTML block. Sending content in the same request as a Starting point email_template_id also needs allow_starting_point: true. |
| description | string | No | See the exact input schema. |
| public | boolean | No | true to publish this broadcast to the web. The broadcast will appear in a newsletter feed on your Creator Profile and Landing Pages. |
| published_at | string | No | The published timestamp to display in ISO8601 format. If no timezone is provided, UTC is assumed. |
| send_at | string/null | No | The scheduled send time for this broadcast in ISO8601 format. If no timezone is provided, UTC is assumed. |
| thumbnail_alt | string/null | No | See the exact input schema. |
| thumbnail_url | string/null | No | See the exact input schema. |
| preview_text | string | No | See the exact input schema. |
| subject | string | No | See the exact input schema. |
| subscriber_filter | array | No | Filters your subscribers. At this time, we only support using only one filter group type via the API (e.g. all, any, or none but no combinations). If nothing is provided, will default to all of your subscribers. |
| allow_starting_point | boolean | No | Explicitly allow replacing a Starting point template body, as described in Kit’s current content-field documentation. Review the complete rendered HTML first. |
bulk_create_custom_fields
Bulk create custom fields. OAuth-only. Reversible configuration write.
kit-cli bulk-create-custom-fields --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| custom_fields | array | Body | See the exact input schema. |
| callback_url | string/null | No | See the exact input schema. |
bulk_update_subscriber_custom_field_values
Bulk update subscriber custom field values. OAuth-only. Requires confirmation.
kit-cli bulk-update-subscriber-custom-field-values --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| custom_field_values | array | Body | See the exact input schema. |
| callback_url | schema | Body | See the exact input schema. |
list_custom_fields
List custom fields. Read-only.
kit-cli list-custom-fields --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
create_custom_field
Create a custom field. Reversible configuration write.
kit-cli create-custom-field --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| label | string | Body | See the exact input schema. |
delete_custom_field
Delete custom field. Requires confirmation.
kit-cli delete-custom-field --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| custom_field_id | schema | Yes | Positive custom field id. |
update_custom_field
Update a custom field. Reversible configuration write.
kit-cli update-custom-field --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| custom_field_id | schema | Yes | Positive custom field id. |
| label | string | Body | See the exact input schema. |
list_email_templates
List email templates. Read-only.
kit-cli list-email-templates --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
bulk_add_subscribers_to_forms
Bulk add subscribers to forms. OAuth-only. Requires confirmation.
kit-cli bulk-add-subscribers-to-forms --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| additions | array | Body | See the exact input schema. |
| callback_url | string/null | No | See the exact input schema. |
list_forms
List forms. Read-only.
kit-cli list-forms --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| status | string/null | No | Values: active, archived, trashed, all. |
| type | schema | No | See the exact input schema. |
| include | string | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
list_subscribers_for_form
List subscribers for a form. Read-only.
kit-cli list-subscribers-for-form --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| added_after | string/null | No | See the exact input schema. |
| added_before | string/null | No | See the exact input schema. |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| created_after | string/null | No | See the exact input schema. |
| created_before | string/null | No | See the exact input schema. |
| form_id | schema | Yes | Positive form id. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| slim | boolean | No | See the exact input schema. |
| status | string | No | Values: active, inactive, bounced, complained, cancelled, all. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
add_subscriber_to_form
Add subscriber to form by email address. Requires confirmation.
kit-cli add-subscriber-to-form --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| form_id | schema | Yes | Positive form id. |
| email_address | string | Body | See the exact input schema. |
| referrer | string/null | No | See the exact input schema. |
add_subscriber_to_form_by_id
Add subscriber to form. Requires confirmation.
kit-cli add-subscriber-to-form-by-id --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| form_id | schema | Yes | Positive form id. |
| subscriber_id | schema | Yes | Positive subscriber id. |
| referrer | string | Body | See the exact input schema. |
list_posts
List posts. Read-only.
kit-cli list-posts --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_content | boolean | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
get_post
Get a post. Read-only.
kit-cli get-post --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| post_id | schema | Yes | Positive post id. |
list_purchases
List purchases. OAuth-only. Read-only.
kit-cli list-purchases --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
create_purchase
Create a purchase. OAuth-only. Requires confirmation.
kit-cli create-purchase --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| purchase | object | Body | See the exact input schema. |
get_purchase
Get a purchase. OAuth-only. Read-only.
kit-cli get-purchase --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| purchase_id | schema | Yes | Positive purchase id. |
list_segments
List segments. Read-only.
kit-cli list-segments --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
list_sequence_emails
List sequence emails. Read-only.
kit-cli list-sequence-emails --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_content | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| sequence_id | schema | Yes | Positive sequence id. |
| include | string | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
create_sequence_email
Create a sequence email. Requires confirmation.
kit-cli create-sequence-email --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| sequence_id | schema | Yes | Positive sequence id. |
| subject | string | Body | Subject line of the email |
| preview_text | string/null | No | Preview text shown in email clients before the email is opened |
| content | string/null | No | HTML body content of the email |
| delay_value | integer | Body | Number of days or hours to wait before sending this email after the previous one |
| delay_unit | string | Body | Unit for the send delay. Use days for schedule-aware delivery, hours for a fixed hourly delay Values: days, hours. |
| email_template_id | integer/null | No | ID of the email template to use for layout and styling |
| published | boolean | No | Whether the email is active and will be sent to subscribers. Defaults to false (draft) |
| send_days | array/null | No | Days of the week this email may be sent. Defaults to all 7 days (inherits the sequence schedule). Pass a subset to restrict delivery, or null to reset to all days |
| position | integer/null | No | Zero-based position of the email in the sequence. Assigned automatically after the last email if omitted |
delete_sequence_email
Delete a sequence email. Requires confirmation.
kit-cli delete-sequence-email --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| email_id | schema | Yes | Positive email id. |
| sequence_id | schema | Yes | Positive sequence id. |
get_sequence_email
Get a sequence email. Read-only.
kit-cli get-sequence-email --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| email_id | schema | Yes | Positive email id. |
| sequence_id | schema | Yes | Positive sequence id. |
| include | string | No | See the exact input schema. |
update_sequence_email
Update a sequence email. Requires confirmation.
kit-cli update-sequence-email --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| email_id | schema | Yes | Positive email id. |
| sequence_id | schema | Yes | Positive sequence id. |
| subject | string | No | New subject line for the email |
| preview_text | string/null | No | New preview text shown in email clients before the email is opened |
| content | string/null | No | New HTML body content of the email |
| delay_value | integer | No | New delay value |
| delay_unit | string | No | New delay unit. Use days for schedule-aware delivery, hours for a fixed hourly delay Values: days, hours. |
| email_template_id | integer/null | No | New email template ID for layout and styling. Pass null to clear |
| published | boolean | No | Pass true to publish a draft email or false to unpublish it |
| send_days | array/null | No | Days of the week this email may be sent. Pass a subset to restrict delivery, or null to reset to all days (inherits the sequence schedule) |
| position | integer/null | No | New zero-based position of the email in the sequence |
list_sequences
List sequences. Read-only.
kit-cli list-sequences --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| include | string | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
create_sequence
Create a sequence. Requires confirmation.
kit-cli create-sequence --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| name | string | No | The name of the sequence. |
| email_address | string | No | The sending email address to use. Uses the account's sending email address if not provided. |
| email_template_id | integer | No | Id of the email template to use. |
| send_days | array | No | The days of the week to send the sequence on. Must be one of: monday, tuesday, wednesday, thursday, friday, saturday, sunday. |
| send_hour | integer | No | The hour of the day to send the sequence at. Must be an integer between 0 and 23. |
| time_zone | string | No | The timezone to use for the sequence. Must be a valid IANA timezone string. |
| active | boolean | No | true to activate the sequence, false to deactivate it. |
| repeat | boolean | No | When true, subscribers can restart the sequence multiple times. |
| hold | boolean | No | When true, subscribers added via Visual Automations stay in the sequence after receiving the last email. |
| exclude_subscriber_sources | array | No | The subscriber sources to exclude from the sequence. |
delete_sequence
Delete a sequence. Requires confirmation.
kit-cli delete-sequence --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| sequence_id | schema | Yes | Positive sequence id. |
get_sequence
Get a sequence. Read-only.
kit-cli get-sequence --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| sequence_id | schema | Yes | Positive sequence id. |
| include | string | No | See the exact input schema. |
update_sequence
Update a sequence. Requires confirmation.
kit-cli update-sequence --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| sequence_id | schema | Yes | Positive sequence id. |
| name | string | No | The name of the sequence. |
| email_address | string | No | The sending email address to use. Uses the account's sending email address if not provided. |
| email_template_id | integer | No | Id of the email template to use. |
| send_days | array | No | The days of the week to send the sequence on. Must be one of: monday, tuesday, wednesday, thursday, friday, saturday, sunday. |
| send_hour | integer | No | The hour of the day to send the sequence at. Must be an integer between 0 and 23. |
| time_zone | string | No | The timezone to use for the sequence. Must be a valid IANA timezone string. |
| active | boolean | No | true to activate the sequence, false to deactivate it. |
| repeat | boolean | No | When true, subscribers can restart the sequence multiple times. |
| hold | boolean | No | When true, subscribers added via Visual Automations stay in the sequence after receiving the last email. |
| exclude_subscriber_sources | array | No | The subscriber sources to exclude from the sequence. |
list_subscribers_for_sequence
List subscribers for a sequence. Read-only.
kit-cli list-subscribers-for-sequence --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| added_after | string/null | No | See the exact input schema. |
| added_before | string/null | No | See the exact input schema. |
| after | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| created_after | string/null | No | See the exact input schema. |
| created_before | string/null | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| sequence_id | schema | Yes | Positive sequence id. |
| status | string | No | Values: active, inactive, bounced, complained, cancelled, all. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
add_subscriber_to_sequence
Add subscriber to sequence by email address. Requires confirmation.
kit-cli add-subscriber-to-sequence --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| sequence_id | schema | Yes | Positive sequence id. |
| email_address | string | Body | See the exact input schema. |
add_subscriber_to_sequence_by_id
Add subscriber to sequence. Requires confirmation.
kit-cli add-subscriber-to-sequence-by-id --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| subscriber_id | schema | Yes | Positive subscriber id. |
| sequence_id | schema | Yes | Positive sequence id. |
list_snippets
List snippets. Read-only.
kit-cli list-snippets --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | schema | No | See the exact input schema. |
| archived | schema | No | See the exact input schema. |
| before | schema | No | See the exact input schema. |
| include_content | boolean | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | schema | No | See the exact input schema. |
| snippet_type | schema | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
create_snippet
Create a snippet. Requires confirmation.
kit-cli create-snippet --help| Argument | Type | Required | Meaning | | --- | --- | --- | --- |
get_snippet
Get a snippet. Read-only.
kit-cli get-snippet --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| snippet_id | schema | Yes | Positive snippet id. |
update_snippet
Update a snippet. Requires confirmation.
kit-cli update-snippet --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| snippet_id | schema | Yes | Positive snippet id. |
bulk_create_subscribers
Bulk create subscribers. OAuth-only. Requires confirmation.
kit-cli bulk-create-subscribers --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| subscribers | array | Body | See the exact input schema. |
| callback_url | string/null | No | See the exact input schema. |
list_subscribers
List subscribers. Read-only.
kit-cli list-subscribers --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| after | string/null | No | See the exact input schema. |
| before | string/null | No | See the exact input schema. |
| created_after | string | No | See the exact input schema. |
| created_before | string | No | See the exact input schema. |
| email_address | string | No | See the exact input schema. |
| include | string | No | See the exact input schema. |
| include_total_count | boolean | No | See the exact input schema. |
| per_page | number/null | No | See the exact input schema. |
| slim | boolean | No | See the exact input schema. |
| sort_field | string | No | Values: id, created_at, updated_at, cancelled_at, canceled_at, engagement__sent, engagement__opens, engagement__clicks, engagement__open_rate, engagement__click_rate. |
| sort_order | string | No | Values: asc, desc. |
| status | string | No | Values: active, inactive, bounced, complained, cancelled, all. |
| updated_after | string | No | See the exact input schema. |
| updated_before | string | No | See the exact input schema. |
| all_pages | boolean | No | Read successive cursor pages, bounded by max_items (default 1000). Default false returns one API page. |
| max_items | integer | No | Maximum records when all_pages=true. A capped result reports truncation and its continuation cursor. |
create_subscriber
Create a subscriber. Requires confirmation.
kit-cli create-subscriber --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| first_name | string/null | No | See the exact input schema. |
| email_address | string | Body | See the exact input schema. |
| state | string/null | No | Create subscriber in this state (active, bounced, cancelled, complained or inactive). Defaults to active. Values: active, cancelled, bounced, complained, inactive. |
| fields | object | No | Custom field values keyed by the custom field's key (e.g. last_name, not Last Name). Unknown keys are ignored and reported in the response warnings array. |
filter_subscribers
Filter subscribers by engagement, sign-up date, state, and tags. Read-only.
kit-cli filter-subscribers --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| counting_mode | string | No | Controls how engagement-filter count thresholds are tallied. raw (default) counts every event : five opens of the same email = five. unique_email counts distinct emails on which the action occurred : five opens of the same email = one. Applies to every engagement filter (opens, clicks, sent, delivered) in the request; ignored for other filter types. Values: raw, unique_email. |
| all | array | Body | Array of filter conditions where ALL must be met (AND logic) |
| include | array | No | Optional. Array of { type, ...config } objects naming additional fields to embed on each subscriber row. Valid types: attribution, tags, location, canceled_at, stats, custom_fields. The stats type accepts an optional range: { start, end } (YYYY-MM-DD dates, defaulting to the last 90 days). The custom_fields type adds a fields object with all account custom field values (null for fields the subscriber has not set). |
| sort_field | string | No | Field to order results by. Base columns (id, first_name, email_address, created_at) order by that subscriber attribute. engagement__ orders by an engagement stat over the trailing 90 days: counts (sent, opens, clicks) and rates (open_rate, click_rate); subscribers with no sends order as 0. location__distance orders by great-circle distance and requires a location filter in the same request : its latitude/longitude supply the origin, and subscribers without a primary location are excluded. Distance defaults to nearest-first (sort_order defaults to asc for this field); pass sort_order=desc for farthest-first. Values: id, first_name, email_address, created_at, engagement__sent, engagement__opens, engagement__clicks, engagement__open_rate, engagement__click_rate, location__distance. Default: "created_at". |
| sort_order | string | No | Sort direction (default: desc). Values: asc, desc. |
get_subscriber
Get a subscriber. Read-only.
kit-cli get-subscriber --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| subscriber_id | schema | Yes | Positive subscriber id. |
update_subscriber
Update a subscriber. Requires confirmation.
kit-cli update-subscriber --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| subscriber_id | schema | Yes | Positive subscriber id. |
| first_name | string/null | No | See the exact input schema. |
| email_address | string | Body | See the exact input schema. |
| fields | object | No | Custom field values keyed by the custom field's key (e.g. last_name, not Last Name). Unknown keys are ignored and reported in the response warnings array. |
unsubscribe
Unsubscribe subscriber. Requires confirmation.
kit-cli unsubscribe --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| subscriber_id | schema | Yes | Positive subscriber id. |
delete_subscriber_location
Delete a subscriber's location. Requires confirmation.
kit-cli delete-subscriber-location --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| subscriber_id | schema | Yes | Positive subscriber id. |
update_subscriber_location
Update a subscriber's pinned location. Requires confirmation.
kit-cli update-subscriber-location --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| subscriber_id | schema | Yes | Positive subscriber id. |
| location | object | Body | See the exact input schema. |
pin_subscriber_location
Pin a subscriber's location. Requires confirmation.
kit-cli pin-subscriber-location --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| subscriber_id | schema | Yes | Positive subscriber id. |
| location | object | Body | See the exact input schema. |
get_subscriber_stats
List stats for a subscriber. Read-only.
kit-cli get-subscriber-stats --help| Argument | Type | Required | Meaning |
| --- | --- | --- | --- |
| email_sent_after | string | No | See the exact input schema. |
| email_sent_before | string | No | See the exact input schema. |
| subscriber_id | schema | Yes | Positive subscriber id. |
list_subscriber_tags
List tags for a subscriber. Read-only.
kit-cli list-