> For the complete documentation index, see [llms.txt](https://tools.docs.sendbird.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tools.docs.sendbird.com/readme/troubleshooting.md).

# Troubleshooting

When a Sendbird CLI command fails, check:

* Which CLI you're running
* Which app it targets
* Whose permissions it uses

## Check the CLI and the target

Run these commands to check which CLI runs, which commands it has, and which account and app it targets. Replace `<WORDS>` with words from the command that failed, such as `group channel`, and keep the single quotes:

{% tabs %}
{% tab title="Bash or zsh" %}

```bash
command -v sendbird
sendbird --version
sendbird --json commands --compact --search '<WORDS>'
sendbird --profile prod auth status --summary
sendbird --profile prod app get
sendbird --profile prod doctor
```

{% endtab %}

{% tab title="PowerShell" %}

```powershell
Get-Command sendbird
sendbird --version
sendbird --json commands --compact --search '<WORDS>'
sendbird --profile prod auth status --summary
sendbird --profile prod app get
sendbird --profile prod doctor
```

{% endtab %}
{% endtabs %}

In the output, check that:

* The path from the first command is the CLI you installed. If you installed more than one build, an old `sendbird` can run instead of the new one.
* The search returns the command you ran. Check the available commands, not only the version.
* `auth status` shows the account you expect.
* `app get` shows the app you expect.
* `doctor` reports no problems with your login or app access.

## Find your symptom

<table><thead><tr><th width="348.04296875">Symptom</th><th>What to do</th></tr></thead><tbody><tr><td><code>npm install -g @sendbird/cli</code> fails with <code>No matching version found for @sendbird/cli@*</code>.</td><td>Your Node.js version isn't supported. Run <code>node --version</code>, then install Node.js 22.23.4 or a later 22.x release, or 24.22.1 or a later 24.x release, and install the CLI again.</td></tr><tr><td>npm shows an <code>EBADENGINE</code> warning when you install the CLI.</td><td>Your Node.js version isn't supported. npm installs the CLI anyway, but the CLI isn't supported on that version. Install Node.js 22.23.4 or a later 22.x release, or 24.22.1 or a later 24.x release, then run <code>npm install -g @sendbird/cli</code> again.</td></tr><tr><td><code>sendbird</code> isn't found after you install it.</td><td>Open a new terminal and run <code>sendbird --version</code> again. If it's still not found, check that npm's global install folder is on your <code>PATH</code>. Run <code>npm prefix -g</code> to see that folder.</td></tr><tr><td>Browser login doesn't open or doesn't finish.</td><td>Run the command on your own computer, with a browser on the same computer. Cloud-hosted agent environments can't complete login. On Linux, check that a Secret Service provider, such as GNOME Keyring, is available.</td></tr><tr><td>Unknown command or unexpected output.</td><td>Check the path, version, and command list above. If the command is missing from your build, <a href="/readme/quickstart.md#update-the-cli">update the CLI</a>.</td></tr><tr><td>401 or <code>invalid_grant</code>. Your login is missing or expired.</td><td>Run <code>sendbird --profile prod auth status --summary</code>. If you aren't logged in, run <code>sendbird --profile prod auth login</code> and approve in the browser again. Logging in clears your organization and app selections, so <a href="/readme/quickstart.md#step-3-select-your-app">select your app</a> again. Logging out of Sendbird Dashboard in the browser can also end the CLI login.</td></tr><tr><td>403. Your account isn't allowed to do this.</td><td>Commands without <code>--as-user</code> use your Sendbird account's permissions. Check your role and app access on Sendbird Dashboard. If your role doesn't allow it, ask your organization's administrator for access, or log in with an account that has it.</td></tr><tr><td>A command with <code>--as-user</code> fails with <code>E_SDK_PERMISSION</code> and <code>SDK operation denied</code>. With <code>--json</code>, <code>details.sdk_code</code> shows a code such as <code>400108</code>.</td><td>The Chat user isn't allowed to do this in the channel. For example, the user isn't a member or operator of the channel, or the app feature isn't turned on. Check the members with <code>chat channel members list</code>. If the user was invited, accept the invitation as the user first. If the channel is public, join it first. The CLI can't tell whether a message was sent, so list the channel's messages before you send the message again.</td></tr><tr><td>SDK connection failure.</td><td>Run <code>sendbird --profile prod app get</code>, then <code>sendbird --profile prod --json chat sdk status --as-user &#x3C;USER_ID></code>, replacing <code>&#x3C;USER_ID></code> with the Chat user's ID, without the angle brackets. The connection works when <code>result.connected</code> is <code>true</code>. If the user was created with a token, the CLI uses it. If the user has no token and your app's token policy is <code>0</code>, which allows reading and writing without a token, add <code>--allow-guest</code>. Use <code>--allow-guest</code> only for a user who has never been issued a token, because it can create a user. Otherwise, issue a token with <code>sendbird --profile prod chat user token issue</code>.</td></tr><tr><td>Invitation acceptance failure.</td><td>Accept only when the user's state is <code>invited</code>. If it's <code>joined</code>, the user is already a member.</td></tr><tr><td>A reaction operation isn't supported.</td><td>Check that the app supports the feature in its plan and region.</td></tr><tr><td>A timeout or a failed follow-up read leaves the result unclear.</td><td>Read the target resource to see whether the change was applied before you retry. Check <code>mutation_state</code>, <code>outcome_unknown</code>, <code>recovery</code>, <code>next</code>, and <code>safe_to_retry</code> in the response when present. Don't retry while <code>safe_to_retry</code> is <code>false</code>.</td></tr><tr><td>Only part of a list appears.</td><td>The command returned one page. Use its cursor, offset, or page options to get the rest.</td></tr><tr><td>Skill registration leaves a path unchanged.</td><td>The CLI doesn't overwrite a modified or unmanaged registration or a symlink. Check the reported state with <code>sendbird skills status</code>.</td></tr><tr><td>Skill registration can't write to the directory.</td><td>Your agent's sandbox may block the write. Run the command in your terminal instead.</td></tr><tr><td>A registered Skill isn't available in Claude Code or Codex.</td><td>Run <code>sendbird skills status</code>. Reload Claude Code or Codex, or start a new session. Then check again.</td></tr><tr><td>Email verification is incomplete.</td><td>Run <code>sendbird --profile prod auth status</code>. If needed, run <code>sendbird --profile prod auth verify-email</code> and enter the link at its prompt.</td></tr></tbody></table>

## Contact support

If you can't fix a Chat problem, submit a technical support case from the CLI. To see the case's required inputs, describe the command first:

```bash
sendbird --json describe support ticket submit
sendbird --profile prod support ticket submit --subject '<SUBJECT>' --description '<DESCRIPTION>'
```

Replace `<SUBJECT>` and `<DESCRIPTION>` with a short title and a description of the problem, and keep the single quotes. Include the inputs that `describe` lists as required.
