@kapso/cli
=================

CLI for operating Kapso projects from the terminal, including source-controlled functions, workflows, WhatsApp numbers, conversations, messages, and templates.


[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io)
[![Version](https://img.shields.io/npm/v/%40kapso%2Fcli.svg)](https://npmjs.org/package/@kapso/cli)
[![Downloads/week](https://img.shields.io/npm/dw/%40kapso%2Fcli.svg)](https://npmjs.org/package/@kapso/cli)


<!-- toc -->
* [Usage](#usage)
* [Source-controlled projects](#source-controlled-projects)
* [Commands](#commands)
<!-- tocstop -->
# Usage
<!-- usage -->
```sh-session
$ npm install -g @kapso/cli
$ kapso COMMAND
running command...
$ kapso (--version)
@kapso/cli/0.16.0 darwin-arm64 node-v24.15.0
$ kapso --help [COMMAND]
USAGE
  $ kapso COMMAND
...
```
<!-- usagestop -->

Common flow:

```sh
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:

```sh
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 collects minimal authenticated CLI usage telemetry through the Kapso app to understand command reliability and usage. Telemetry includes the command name, CLI version, duration, exit status, and current project ID when already known locally. It never sends raw arguments, flags, message bodies, phone numbers, file paths, working directory, environment variables, tokens, raw errors, stacks, or response bodies. Set `KAPSO_TELEMETRY_DISABLED=1` or `DO_NOT_TRACK=1` to opt out.

# Source-controlled projects

Use `kapso link`, `kapso pull`, and `kapso push` when you want a Kapso project represented by local files that can live in git. The first source sync scope is functions and workflows.

```sh
kapso login
kapso link --project <project-id>
kapso pull
```

This creates a small repo binding and writes project source files:

```text
kapso.yaml
.kapso/project.json
.kapso/remote-map.json
functions/<function-slug>/function.yaml
functions/<function-slug>/index.js
workflows/<workflow-slug>/workflow.yaml
workflows/<workflow-slug>/definition.json
```

`kapso.yaml` and the `functions/` and `workflows/` directories are intended to be committed. `.kapso/project.json` stores the local project binding, and `.kapso/remote-map.json` stores the last pulled remote state used for dirty-file and stale-remote checks.

## Workflows as code

Workflows can be edited as JSON/YAML only, or authored with `@kapso/workflows`.

```sh
npm install @kapso/workflows
```

`kapso pull` writes a generated `workflow.js` file beside pulled workflow JSON when no workflow source file exists yet. Edit that file when you want code to become the source of truth, or keep editing `workflow.yaml` and `definition.json` directly. After `workflow.js` or `workflow.ts` has been edited, `kapso pull` preserves it and only updates the remote-owned `workflow.yaml` and `definition.json` files.

If `workflows/<slug>/workflow.ts` or `workflows/<slug>/workflow.js` exists, `kapso build` compiles it into `workflow.yaml` and `definition.json`.

```ts
import { START, Workflow } from "@kapso/workflows";

const workflow = new Workflow("inbound-support", {
  name: "Inbound Support",
});

workflow.addTrigger({
  type: "inbound_message",
  phoneNumberId: "<phone-number-id>",
});
workflow.addNode(START, {
  position: { x: 100, y: 100 },
});
workflow.addNode("reply", {
  type: "send_text",
  message: "Thanks for reaching out.",
});
workflow.addEdge(START, "reply");

export default workflow;
```

If no workflow code file exists, the CLI uses the existing `workflow.yaml` and `definition.json` files directly. This keeps the CLI compatible with projects that prefer editing pulled JSON instead of using the TypeScript library.

When a workflow source file exists, `kapso push` compiles it only after that source file changes. This lets `kapso pull` refresh JSON from the remote app without replacing hand-authored workflow code with generated raw code.

When workflow code is the source of truth, committing the generated `workflow.yaml` and `definition.json` files is a repo decision. Keeping them in git makes diffs visible without running a build. Ignoring them keeps the repo focused on authored code.

```gitignore
/workflows/*/definition.json
/workflows/*/workflow.yaml
```

## Pull, build, and push

```sh
kapso pull
kapso build
kapso push --dry-run
kapso push
```

Target one object when you do not want to pull or push every source file:

```sh
kapso pull workflow <workflow-slug>
kapso pull function <function-slug>
kapso pull workflow <workflow-slug> --diff
kapso push workflow <workflow-slug>
kapso push function <function-slug>
```

`kapso pull` refuses to overwrite locally edited remote-owned files and prints a compact incoming diff when it is blocked. Authored workflow source files are preserved instead of blocked. Use `kapso pull --diff` to inspect all blocked diffs without writing files, or `kapso pull --overwrite` when the remote copy should replace local edits in remote-owned files. Targeted pull uses the same dirty-file protection, but only for the selected function or workflow. `kapso push` refuses to update a remote function or workflow that changed since your last pull. Remote-only objects are reported, but not deleted.

`kapso push` does not activate draft workflows. After a real workflow push, the CLI prints a link to open the workflow in Kapso so you can review and activate it from the web app.

# Commands
<!-- commands -->
* [`kapso build`](#kapso-build)
* [`kapso customers get CUSTOMERID`](#kapso-customers-get-customerid)
* [`kapso customers list`](#kapso-customers-list)
* [`kapso customers new`](#kapso-customers-new)
* [`kapso help [COMMAND]`](#kapso-help-command)
* [`kapso link`](#kapso-link)
* [`kapso login`](#kapso-login)
* [`kapso logout`](#kapso-logout)
* [`kapso projects current`](#kapso-projects-current)
* [`kapso projects list`](#kapso-projects-list)
* [`kapso projects use PROJECTID`](#kapso-projects-use-projectid)
* [`kapso pull [KIND] [SLUG]`](#kapso-pull-kind-slug)
* [`kapso push [KIND] [SLUG]`](#kapso-push-kind-slug)
* [`kapso setup`](#kapso-setup)
* [`kapso status`](#kapso-status)
* [`kapso whatsapp conversations get CONVERSATIONID`](#kapso-whatsapp-conversations-get-conversationid)
* [`kapso whatsapp conversations list`](#kapso-whatsapp-conversations-list)
* [`kapso whatsapp messages get MESSAGEID`](#kapso-whatsapp-messages-get-messageid)
* [`kapso whatsapp messages list`](#kapso-whatsapp-messages-list)
* [`kapso whatsapp messages send`](#kapso-whatsapp-messages-send)
* [`kapso whatsapp numbers get [NUMBERREF]`](#kapso-whatsapp-numbers-get-numberref)
* [`kapso whatsapp numbers health [NUMBERREF]`](#kapso-whatsapp-numbers-health-numberref)
* [`kapso whatsapp numbers list`](#kapso-whatsapp-numbers-list)
* [`kapso whatsapp numbers new`](#kapso-whatsapp-numbers-new)
* [`kapso whatsapp numbers resolve [NUMBERREF]`](#kapso-whatsapp-numbers-resolve-numberref)
* [`kapso whatsapp templates get TEMPLATEID`](#kapso-whatsapp-templates-get-templateid)
* [`kapso whatsapp templates list`](#kapso-whatsapp-templates-list)
* [`kapso whatsapp templates new`](#kapso-whatsapp-templates-new)
* [`kapso whatsapp webhooks delete WEBHOOKID`](#kapso-whatsapp-webhooks-delete-webhookid)
* [`kapso whatsapp webhooks get WEBHOOKID`](#kapso-whatsapp-webhooks-get-webhookid)
* [`kapso whatsapp webhooks list`](#kapso-whatsapp-webhooks-list)
* [`kapso whatsapp webhooks new`](#kapso-whatsapp-webhooks-new)
* [`kapso whatsapp webhooks update WEBHOOKID`](#kapso-whatsapp-webhooks-update-webhookid)

## `kapso build`

Compile Kapso workflow.ts or workflow.js files into source JSON

```
USAGE
  $ kapso build

DESCRIPTION
  Compile Kapso workflow.ts or workflow.js files into source JSON
```

_See code: [src/commands/build.ts](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/build.ts)_

## `kapso customers get CUSTOMERID`

Get 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/customers/get.ts)_

## `kapso customers list`

List 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/customers/list.ts)_

## `kapso customers new`

Create 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/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](https://github.com/oclif/plugin-help/blob/v6.2.37/src/commands/help.ts)_

## `kapso link`

Bind this directory to a Kapso project for pull and push

```
USAGE
  $ kapso link [--project <value>] [--verify]

FLAGS
  --project=<value>  Project ID override
  --[no-]verify      Verify Platform API access before writing the binding

DESCRIPTION
  Bind this directory to a Kapso project for pull and push
```

_See code: [src/commands/link.ts](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/link.ts)_

## `kapso login`

Log in to Kapso

```
USAGE
  $ kapso login

DESCRIPTION
  Log in to Kapso

EXAMPLES
  $ kapso login
```

_See code: [src/commands/login.ts](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/login.ts)_

## `kapso logout`

Log out from Kapso

```
USAGE
  $ kapso logout

DESCRIPTION
  Log out from Kapso

EXAMPLES
  $ kapso logout
```

_See code: [src/commands/logout.ts](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/logout.ts)_

## `kapso projects current`

Show 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/projects/current.ts)_

## `kapso projects list`

List 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/projects/list.ts)_

## `kapso projects use PROJECTID`

Use 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/projects/use.ts)_

## `kapso pull [KIND] [SLUG]`

Pull Kapso functions and workflows into this repo

```
USAGE
  $ kapso pull [KIND] [SLUG] [--diff] [--overwrite] [--project <value>]

ARGUMENTS
  [KIND]  (function|workflow) Optional source kind to pull
  [SLUG]  Function or workflow slug to pull

FLAGS
  --diff             Show incoming diffs for blocked local edits without writing files
  --overwrite        Overwrite local files that changed since the last pull
  --project=<value>  Project ID override

DESCRIPTION
  Pull Kapso functions and workflows into this repo
```

_See code: [src/commands/pull.ts](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/pull.ts)_

## `kapso push [KIND] [SLUG]`

Push local Kapso functions and workflows

```
USAGE
  $ kapso push [KIND] [SLUG] [--dry-run] [--project <value>]

ARGUMENTS
  [KIND]  (function|workflow) Optional source kind to push
  [SLUG]  Function or workflow slug to push

FLAGS
  --dry-run          Show the push plan without changing remote resources
  --project=<value>  Project ID override

DESCRIPTION
  Push local Kapso functions and workflows
```

_See code: [src/commands/push.ts](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/push.ts)_

## `kapso setup`

Guided 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/setup.ts)_

## `kapso status`

Show 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/status.ts)_

## `kapso whatsapp conversations get CONVERSATIONID`

Get 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/conversations/get.ts)_

## `kapso whatsapp conversations list`

List 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/conversations/list.ts)_

## `kapso whatsapp messages get MESSAGEID`

Get 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/messages/get.ts)_

## `kapso whatsapp messages list`

List 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/messages/list.ts)_

## `kapso whatsapp messages send`

Send 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/numbers/health.ts)_

## `kapso whatsapp numbers list`

List 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/numbers/list.ts)_

## `kapso whatsapp numbers new`

Start 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/numbers/resolve.ts)_

## `kapso whatsapp templates get TEMPLATEID`

Get 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/templates/get.ts)_

## `kapso whatsapp templates list`

List 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/templates/list.ts)_

## `kapso whatsapp templates new`

Create 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/templates/new.ts)_

## `kapso whatsapp webhooks delete WEBHOOKID`

Delete 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/webhooks/delete.ts)_

## `kapso whatsapp webhooks get WEBHOOKID`

Get 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/webhooks/get.ts)_

## `kapso whatsapp webhooks list`

List 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/webhooks/list.ts)_

## `kapso whatsapp webhooks new`

Create 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/webhooks/new.ts)_

## `kapso whatsapp webhooks update WEBHOOKID`

Update 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](https://github.com/gokapso/kapso-cli/blob/v0.16.0/src/commands/whatsapp/webhooks/update.ts)_
<!-- commandsstop -->
