
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
@kapso/cli
Advanced tools
Kapso CLI for operating Kapso WhatsApp projects, numbers, webhooks, conversations, messages, and templates
CLI for operating Kapso WhatsApp projects, numbers, conversations, messages, and templates.
$ npm install -g @kapso/cli
$ kapso COMMAND
running command...
$ kapso (--version)
@kapso/cli/0.9.0 linux-x64 node-v24.12.0
$ kapso --help [COMMAND]
USAGE
$ kapso COMMAND
...
Common flow:
kapso setup
kapso status
kapso whatsapp numbers list
kapso whatsapp conversations list
kapso whatsapp messages send --phone-number-id <phone-number-id> --to <wa-id> --text "Hello"
CI / non-interactive flow:
export KAPSO_API_KEY=your_project_api_key
kapso status
kapso customers list
kapso whatsapp numbers list
kapso setup --customer <customer-id>
When KAPSO_API_KEY is set, project-scoped commands use it directly and ignore stored login context. Account commands such as kapso login and kapso projects list still use the normal browser login flow.
kapso customers get CUSTOMERIDkapso customers listkapso customers newkapso help [COMMAND]kapso loginkapso logoutkapso projects currentkapso projects listkapso projects use PROJECTIDkapso setupkapso statuskapso whatsapp conversations get CONVERSATIONIDkapso whatsapp conversations listkapso whatsapp messages get MESSAGEIDkapso whatsapp messages listkapso whatsapp messages sendkapso whatsapp numbers get [NUMBERREF]kapso whatsapp numbers health [NUMBERREF]kapso whatsapp numbers listkapso whatsapp numbers newkapso whatsapp numbers resolve [NUMBERREF]kapso whatsapp templates get TEMPLATEIDkapso whatsapp templates listkapso whatsapp templates newkapso whatsapp webhooks delete WEBHOOKIDkapso whatsapp webhooks get WEBHOOKIDkapso whatsapp webhooks listkapso whatsapp webhooks newkapso whatsapp webhooks update WEBHOOKIDkapso customers get CUSTOMERIDGet a customer by ID
USAGE
$ kapso customers get CUSTOMERID [--output json|human] [--project <value>]
ARGUMENTS
CUSTOMERID Customer ID
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--project=<value> Project ID override
DESCRIPTION
Get a customer by ID
See code: src/commands/customers/get.ts
kapso customers listList customers in the current project
USAGE
$ kapso customers list [--output json|human] [--project <value>]
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--project=<value> Project ID override
DESCRIPTION
List customers in the current project
See code: src/commands/customers/list.ts
kapso customers newCreate a customer in the current project
USAGE
$ kapso customers new --external-id <value> --name <value> [--output json|human] [--project <value>]
FLAGS
--external-id=<value> (required) External customer identifier
--name=<value> (required) Customer name
--output=<option> [default: json] Output format
<options: json|human>
--project=<value> Project ID override
DESCRIPTION
Create a customer in the current project
See code: src/commands/customers/new.ts
kapso help [COMMAND]Display help for kapso.
USAGE
$ kapso help [COMMAND...] [-n]
ARGUMENTS
[COMMAND...] Command to show help for.
FLAGS
-n, --nested-commands Include all nested commands in the output.
DESCRIPTION
Display help for kapso.
See code: @oclif/plugin-help
kapso loginLog in to Kapso
USAGE
$ kapso login
DESCRIPTION
Log in to Kapso
EXAMPLES
$ kapso login
See code: src/commands/login.ts
kapso logoutLog out from Kapso
USAGE
$ kapso logout
DESCRIPTION
Log out from Kapso
EXAMPLES
$ kapso logout
See code: src/commands/logout.ts
kapso projects currentShow the current project context
USAGE
$ kapso projects current [--output json|human]
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
DESCRIPTION
Show the current project context
See code: src/commands/projects/current.ts
kapso projects listList projects available to the current account
USAGE
$ kapso projects list [--output json|human]
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
DESCRIPTION
List projects available to the current account
See code: src/commands/projects/list.ts
kapso projects use PROJECTIDUse a project as the default for project-scoped commands
USAGE
$ kapso projects use PROJECTID
ARGUMENTS
PROJECTID Project ID to persist as the current project
DESCRIPTION
Use a project as the default for project-scoped commands
See code: src/commands/projects/use.ts
kapso setupGuided first-time setup for Kapso and a WhatsApp number
USAGE
$ kapso setup [--area-code <value>] [--connection-type coexistence|dedicated...] [--country <value>...]
[--customer <value>] [--failure-url <value>] [--language <value>] [--no-provision-phone-number] [--output
json|human] [--project <value>] [--success-url <value>]
FLAGS
--area-code=<value> Preferred phone number area code
--connection-type=<option>... Allowed connection type (defaults to dedicated)
<options: coexistence|dedicated>
--country=<value>... Preferred phone number country ISO
--customer=<value> Customer ID override
--failure-url=<value> Failure redirect URL
--language=<value> Setup link language
--no-provision-phone-number Do not auto-provision a phone number during setup
--output=<option> [default: human] Output format
<options: json|human>
--project=<value> Project ID override
--success-url=<value> Success redirect URL
DESCRIPTION
Guided first-time setup for Kapso and a WhatsApp number
See code: src/commands/setup.ts
kapso statusShow Kapso setup and project status
USAGE
$ kapso status [--output json|human]
FLAGS
--output=<option> [default: human] Output format
<options: json|human>
DESCRIPTION
Show Kapso setup and project status
See code: src/commands/status.ts
kapso whatsapp conversations get CONVERSATIONIDGet a WhatsApp conversation by ID
USAGE
$ kapso whatsapp conversations get CONVERSATIONID [--output json|human] [--project <value>]
ARGUMENTS
CONVERSATIONID Conversation ID
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--project=<value> Project ID override
DESCRIPTION
Get a WhatsApp conversation by ID
See code: src/commands/whatsapp/conversations/get.ts
kapso whatsapp conversations listList WhatsApp conversations in the current project, sorted by most recent activity
USAGE
$ kapso whatsapp conversations list [--assigned-user <value>] [--output json|human] [--page <value>] [--per-page <value>]
[--phone <value>] [--phone-number <value>] [--phone-number-id <value>] [--project <value>] [--status active|ended]
[--unassigned]
FLAGS
--assigned-user=<value> Filter by assigned user ID
--output=<option> [default: json] Output format
<options: json|human>
--page=<value> Page number
--per-page=<value> Results per page
--phone=<value> Filter by contact phone number
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
--status=<option> Filter by conversation status
<options: active|ended>
--unassigned Only include unassigned conversations
DESCRIPTION
List WhatsApp conversations in the current project, sorted by most recent activity
See code: src/commands/whatsapp/conversations/list.ts
kapso whatsapp messages get MESSAGEIDGet a WhatsApp message by ID
USAGE
$ kapso whatsapp messages get MESSAGEID [--output json|human] [--phone-number <value>] [--phone-number-id <value>]
[--project <value>]
ARGUMENTS
MESSAGEID Message ID
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
DESCRIPTION
Get a WhatsApp message by ID
See code: src/commands/whatsapp/messages/get.ts
kapso whatsapp messages listList WhatsApp messages in the current project (cursor pagination)
USAGE
$ kapso whatsapp messages list [--after <value>] [--before <value>] [--conversation <value>] [--direction
inbound|outbound] [--limit <value>] [--output json|human] [--per-page <value>] [--phone-number <value>]
[--phone-number-id <value>] [--project <value>] [--since <value>] [--status pending|sent|delivered|read|failed]
[--until <value>]
FLAGS
--after=<value> Cursor for the next page
--before=<value> Cursor for the previous page
--conversation=<value> Filter by conversation ID. If no WhatsApp number is provided, it is resolved from the
conversation.
--direction=<option> Filter by direction
<options: inbound|outbound>
--limit=<value> Maximum number of messages to return
--output=<option> [default: json] Output format
<options: json|human>
--per-page=<value> Alias for --limit on cursor-paginated responses
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
--since=<value> Filter by messages created at/after this timestamp
--status=<option> Filter by message status
<options: pending|sent|delivered|read|failed>
--until=<value> Filter by messages created at/before this timestamp
DESCRIPTION
List WhatsApp messages in the current project (cursor pagination)
See code: src/commands/whatsapp/messages/list.ts
kapso whatsapp messages sendSend a WhatsApp message
USAGE
$ kapso whatsapp messages send [--input <value>] [--output json|human] [--phone-number <value>] [--phone-number-id
<value>] [--project <value>] [--stdin] [--text <value>] [--to <value>]
FLAGS
--input=<value> Path to a JSON payload file
--output=<option> [default: json] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
--stdin Read the JSON payload from stdin
--text=<value> Text body shortcut
--to=<value> Recipient phone number
DESCRIPTION
Send a WhatsApp message
See code: src/commands/whatsapp/messages/send.ts
kapso whatsapp numbers get [NUMBERREF]Get a WhatsApp number by Meta ID or display phone number
USAGE
$ kapso whatsapp numbers get [NUMBERREF] [--output json|human] [--phone-number <value>] [--phone-number-id <value>]
[--project <value>]
ARGUMENTS
[NUMBERREF] WhatsApp phone number ID or display phone number
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
DESCRIPTION
Get a WhatsApp number by Meta ID or display phone number
See code: src/commands/whatsapp/numbers/get.ts
kapso whatsapp numbers health [NUMBERREF]Run a health check for a WhatsApp number
USAGE
$ kapso whatsapp numbers health [NUMBERREF] [--output json|human] [--phone-number <value>] [--phone-number-id <value>]
[--project <value>]
ARGUMENTS
[NUMBERREF] WhatsApp phone number ID or display phone number
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
DESCRIPTION
Run a health check for a WhatsApp number
See code: src/commands/whatsapp/numbers/health.ts
kapso whatsapp numbers listList WhatsApp numbers in the current project
USAGE
$ kapso whatsapp numbers list [--customer <value>] [--output json|human] [--page <value>] [--per-page <value>] [--project
<value>]
FLAGS
--customer=<value> Filter by customer ID
--output=<option> [default: json] Output format
<options: json|human>
--page=<value> Page number
--per-page=<value> Results per page
--project=<value> Project ID override
DESCRIPTION
List WhatsApp numbers in the current project
See code: src/commands/whatsapp/numbers/list.ts
kapso whatsapp numbers newStart WhatsApp number setup in the current project
USAGE
$ kapso whatsapp numbers new [--area-code <value>] [--connection-type coexistence|dedicated...] [--country <value>...]
[--customer <value>] [--failure-url <value>] [--language <value>] [--no-provision-phone-number] [--output
json|human] [--project <value>] [--success-url <value>]
FLAGS
--area-code=<value> Preferred phone number area code
--connection-type=<option>... Allowed connection type (defaults to dedicated)
<options: coexistence|dedicated>
--country=<value>... Preferred phone number country ISO
--customer=<value> Customer ID override
--failure-url=<value> Failure redirect URL
--language=<value> Setup link language
--no-provision-phone-number Do not auto-provision a phone number during setup
--output=<option> [default: human] Output format
<options: json|human>
--project=<value> Project ID override
--success-url=<value> Success redirect URL
DESCRIPTION
Start WhatsApp number setup in the current project
See code: src/commands/whatsapp/numbers/new.ts
kapso whatsapp numbers resolve [NUMBERREF]Resolve a WhatsApp number reference to a canonical phone number ID
USAGE
$ kapso whatsapp numbers resolve [NUMBERREF] [--output json|human] [--phone-number <value>] [--phone-number-id <value>]
[--project <value>]
ARGUMENTS
[NUMBERREF] WhatsApp phone number ID or display phone number
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
DESCRIPTION
Resolve a WhatsApp number reference to a canonical phone number ID
See code: src/commands/whatsapp/numbers/resolve.ts
kapso whatsapp templates get TEMPLATEIDGet a WhatsApp template by ID
USAGE
$ kapso whatsapp templates get TEMPLATEID [--output json|human] [--phone-number <value>] [--phone-number-id <value>]
[--project <value>]
ARGUMENTS
TEMPLATEID Template ID
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
DESCRIPTION
Get a WhatsApp template by ID
See code: src/commands/whatsapp/templates/get.ts
kapso whatsapp templates listList WhatsApp templates for a number (cursor pagination)
USAGE
$ kapso whatsapp templates list [--after <value>] [--before <value>] [--category MARKETING|UTILITY|AUTHENTICATION]
[--language <value>] [--limit <value>] [--name <value>] [--output json|human] [--per-page <value>] [--phone-number
<value>] [--phone-number-id <value>] [--project <value>] [--status
APPROVED|PENDING|REJECTED|PAUSED|IN_APPEAL|DISABLED]
FLAGS
--after=<value> Cursor for the next page
--before=<value> Cursor for the previous page
--category=<option> Filter by template category
<options: MARKETING|UTILITY|AUTHENTICATION>
--language=<value> Filter by language code
--limit=<value> Maximum number of templates to return
--name=<value> Filter by template name
--output=<option> [default: json] Output format
<options: json|human>
--per-page=<value> Alias for --limit on cursor-paginated responses
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
--status=<option> Filter by template status
<options: APPROVED|PENDING|REJECTED|PAUSED|IN_APPEAL|DISABLED>
DESCRIPTION
List WhatsApp templates for a number (cursor pagination)
See code: src/commands/whatsapp/templates/list.ts
kapso whatsapp templates newCreate a WhatsApp template for a number
USAGE
$ kapso whatsapp templates new [--input <value>] [--output json|human] [--phone-number <value>] [--phone-number-id
<value>] [--project <value>] [--stdin]
FLAGS
--input=<value> Path to a JSON payload file
--output=<option> [default: json] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
--stdin Read the JSON payload from stdin
DESCRIPTION
Create a WhatsApp template for a number
See code: src/commands/whatsapp/templates/new.ts
kapso whatsapp webhooks delete WEBHOOKIDDelete a WhatsApp webhook for a number
USAGE
$ kapso whatsapp webhooks delete WEBHOOKID [--output json|human] [--phone-number <value>] [--phone-number-id <value>]
[--project <value>]
ARGUMENTS
WEBHOOKID Webhook ID
FLAGS
--output=<option> [default: human] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
DESCRIPTION
Delete a WhatsApp webhook for a number
See code: src/commands/whatsapp/webhooks/delete.ts
kapso whatsapp webhooks get WEBHOOKIDGet a WhatsApp webhook by ID
USAGE
$ kapso whatsapp webhooks get WEBHOOKID [--output json|human] [--phone-number <value>] [--phone-number-id <value>]
[--project <value>]
ARGUMENTS
WEBHOOKID Webhook ID
FLAGS
--output=<option> [default: json] Output format
<options: json|human>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
DESCRIPTION
Get a WhatsApp webhook by ID
See code: src/commands/whatsapp/webhooks/get.ts
kapso whatsapp webhooks listList WhatsApp webhooks for a number
USAGE
$ kapso whatsapp webhooks list [--active] [--inactive] [--kind kapso|meta] [--output json|human] [--page <value>]
[--per-page <value>] [--phone-number <value>] [--phone-number-id <value>] [--project <value>] [--url-contains
<value>]
FLAGS
--active Only include active webhooks
--inactive Only include inactive webhooks
--kind=<option> Filter by webhook kind
<options: kapso|meta>
--output=<option> [default: json] Output format
<options: json|human>
--page=<value> Page number
--per-page=<value> Results per page
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
--url-contains=<value> Filter by URL substring
DESCRIPTION
List WhatsApp webhooks for a number
See code: src/commands/whatsapp/webhooks/list.ts
kapso whatsapp webhooks newCreate a WhatsApp webhook for a number
USAGE
$ kapso whatsapp webhooks new --url <value> [--active] [--buffer-enabled] [--buffer-window-seconds <value>] [--event
whatsapp.message.received|whatsapp.message.sent|whatsapp.message.delivered|whatsapp.message.read|whatsapp.message.fa
iled|whatsapp.conversation.created|whatsapp.conversation.ended|whatsapp.conversation.inactive...] [--header
<value>...] [--inactive] [--inactivity-minutes <value>] [--kind kapso|meta] [--max-buffer-size <value>] [--output
json|human] [--payload-version v1|v2] [--phone-number <value>] [--phone-number-id <value>] [--project <value>]
[--secret-key <value>]
FLAGS
--active Create the webhook as active
--[no-]buffer-enabled Enable buffering for whatsapp.message.received
--buffer-window-seconds=<value> Buffer window in seconds (requires --buffer-enabled)
--event=<option>... Webhook event to subscribe to
<options: whatsapp.message.received|whatsapp.message.sent|whatsapp.message.delivered|
whatsapp.message.read|whatsapp.message.failed|whatsapp.conversation.created|whatsapp.
conversation.ended|whatsapp.conversation.inactive>
--header=<value>... Custom header in Name=value format
--inactive Create the webhook as inactive
--inactivity-minutes=<value> Minutes before sending whatsapp.conversation.inactive
--kind=<option> Webhook kind
<options: kapso|meta>
--max-buffer-size=<value> Maximum buffered events before flush (requires --buffer-enabled)
--output=<option> [default: human] Output format
<options: json|human>
--payload-version=<option> Webhook payload version
<options: v1|v2>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
--secret-key=<value> Webhook secret key override
--url=<value> (required) Webhook destination URL
DESCRIPTION
Create a WhatsApp webhook for a number
See code: src/commands/whatsapp/webhooks/new.ts
kapso whatsapp webhooks update WEBHOOKIDUpdate a WhatsApp webhook for a number
USAGE
$ kapso whatsapp webhooks update WEBHOOKID [--active] [--buffer-enabled] [--buffer-window-seconds <value>] [--clear-headers]
[--event whatsapp.message.received|whatsapp.message.sent|whatsapp.message.delivered|whatsapp.message.read|whatsapp.m
essage.failed|whatsapp.conversation.created|whatsapp.conversation.ended|whatsapp.conversation.inactive...] [--header
<value>...] [--inactive] [--inactivity-minutes <value>] [--kind kapso|meta] [--max-buffer-size <value>] [--output
json|human] [--payload-version v1|v2] [--phone-number <value>] [--phone-number-id <value>] [--project <value>]
[--secret-key <value>] [--url <value>]
ARGUMENTS
WEBHOOKID Webhook ID
FLAGS
--active Set the webhook to active
--[no-]buffer-enabled Enable buffering for whatsapp.message.received
--buffer-window-seconds=<value> Buffer window in seconds (requires --buffer-enabled)
--clear-headers Replace custom headers with an empty object
--event=<option>... Webhook event to subscribe to
<options: whatsapp.message.received|whatsapp.message.sent|whatsapp.message.delivered|
whatsapp.message.read|whatsapp.message.failed|whatsapp.conversation.created|whatsapp.
conversation.ended|whatsapp.conversation.inactive>
--header=<value>... Custom header in Name=value format
--inactive Set the webhook to inactive
--inactivity-minutes=<value> Minutes before sending whatsapp.conversation.inactive
--kind=<option> Webhook kind
<options: kapso|meta>
--max-buffer-size=<value> Maximum buffered events before flush (requires --buffer-enabled)
--output=<option> [default: human] Output format
<options: json|human>
--payload-version=<option> Webhook payload version
<options: v1|v2>
--phone-number=<value> WhatsApp display phone number (resolved to a phone number ID)
--phone-number-id=<value> WhatsApp phone number ID (Meta internal ID). If you have the real number instead, use
"--phone-number".
--project=<value> Project ID override
--secret-key=<value> Webhook secret key override
--url=<value> Webhook destination URL
DESCRIPTION
Update a WhatsApp webhook for a number
See code: src/commands/whatsapp/webhooks/update.ts
FAQs
Kapso CLI for operating Kapso WhatsApp projects, numbers, webhooks, conversations, messages, and templates
We found that @kapso/cli demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.