> ## Documentation Index
> Fetch the complete documentation index at: https://docs.testdino.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting Playwright Errors in TestDino

> Fix the most common TestDino errors: streaming, tokens, CI checks, sign-in, API tokens, rate limits, integrations, and plan limits.

Find the symptom in the Quick Reference table, then expand the matching section for the fix.

## Quick Reference

| Symptom | Area | Fix |
| :- | :- | :- |
| `Token is required but not provided` | Streaming | [Token errors](#token-errors) |
| `Invalid API key or unauthorized access` | Streaming | [Token errors](#token-errors) |
| Run never appears in the dashboard | Streaming | [Runs not appearing](#runs-not-appearing) |
| `error: unknown option '--tags'` | CLI | [error: unknown option '--tags'](#streaming-and-result-errors) |
| Sharded run shows partial results | CI | [Sharded runs not grouping](#ci-and-pull-request-errors) |
| No check or comment on the pull request | CI | [GitHub checks and comments](#github-checks-and-comments) |
| CI check fails with a high pass rate | CI | [GitHub checks and comments](#github-checks-and-comments) |
| Run has no environment label | CI | [Environment label missing](#environment-label-missing) |
| Cannot sign in with SSO | Access | [SSO sign-in failures](#sso-sign-in-failures) |
| Password login refused | Access | [SSO sign-in failures](#sso-sign-in-failures) |
| Cannot invite, or change a role | Access | [Permission errors](#permission-errors) |
| `401 UNAUTHORIZED` | API | [API token and scope errors](#api-token-and-scope-errors) |
| `429 RATE_LIMIT_EXCEEDED` | API | [API rate limits](#api-rate-limits) |
| Slack alerts not arriving | Integrations | [Slack alerts missing](#slack-alerts-missing) |
| MCP server or tool errors | Integrations | [MCP errors](#mcp-errors) |
| `Execution limit reached` | Plan | [Plan and seat limits](#plan-and-seat-limits) |

## Streaming and result errors

`@testdino/playwright` streams results as your tests run. Most failures to see a run are a token or a config problem.

<AccordionGroup>
  <Accordion title="Token errors" icon="key">
    TestDino authenticates with the `TESTDINO_TOKEN` environment variable. The streaming API key comes from **Project Settings → API Keys**.

    Confirm the token is set, then run with debug output:

    ```bash theme={null}
    echo $TESTDINO_TOKEN
    npx tdpw test -t "$TESTDINO_TOKEN" --debug
    ```

    `Token is required but not provided` means the variable is unset or empty. Export it, or pass `-t` directly.

    `Invalid API key or unauthorized access` means the token is wrong, expired, revoked, or scoped to a different project.

    To fix this:

    * Generate a fresh key and confirm it belongs to the project you are streaming to.
    * In CI, store tokens as secrets, never hardcode them.
    * Secret names are case-sensitive: a secret saved as `TestDino_Token` will not resolve as `TESTDINO_TOKEN`.
    * See [API Keys](/guides/generate-api-keys) for creating and scoping keys.
  </Accordion>

  <Accordion title="Runs not appearing" icon="ghost">
    Tests run but no run shows in the dashboard. Work through these in order:

    1. **Reporter not added.** Confirm `@testdino/playwright` is in the `reporter` array in your Playwright config.
    2. **Token not set.** Confirm `TESTDINO_TOKEN` is set in the environment that runs the tests.
    3. **Wrong project.** A token without access to this project streams the run elsewhere. Confirm the token matches the project you are viewing.
    4. **Debug check.** Re-run with `npx tdpw test --debug` to see the exact stream target and any errors.

    ```bash theme={null}
    npx tdpw test -t "$TESTDINO_TOKEN" --debug
    ```

    The FAQ walks through this case in more detail under [Why are my streamed runs not appearing?](/faqs#why-are-my-streamed-runs-not-appearing).
  </Accordion>

  <Accordion title="error: unknown option '--tags'" icon="tags">
    You passed a TestDino flag to `npx playwright test`. Playwright does not define `--tags`, `--token`, `--ci-run-id`, `--split`, `--split-id`, `--coverage`, or `--no-artifacts`, so it exits before the test run starts. `--tags` is a `tdpw` flag.

    Use the TestDino wrapper:

    ```bash theme={null}
    npx tdpw test -t "$TESTDINO_TOKEN" --tags "regression,smoke"
    ```

    To keep `npx playwright test`, set the matching environment variable or config field. `--split` has no alternative: it is `tdpw` only. `--tags` labels the test run. It does not filter which test cases run. Use Playwright `--grep` to filter. Learn every option in [CLI flags](/cli/testdino-playwright-nodejs#cli-flags).
  </Accordion>
</AccordionGroup>

## CI and pull request errors

These appear once tests run inside a pipeline: shards do not group into one run, or the result never links to a pull request.

<AccordionGroup>
  <Accordion title="Sharded runs not grouping" icon="object-group">
    Each shard streams its own run, so the dashboard shows several partial runs instead of one. Pass the same `--ci-run-id` to every shard so TestDino groups them into a single run:

    ```bash theme={null}
    npx tdpw test -t "$TESTDINO_TOKEN" --ci-run-id "$CI_RUN_ID" --shard=1/3
    ```

    Key requirements:

    * Every shard must use the same `--ci-run-id` value for the run.
    * Derive the ID from a stable per-run CI value (for example, the workflow run ID), not a per-shard value.
    * The exact variable to use is provider-specific, so follow the sharding section in your [CI provider guide](/guides/ci-setup-overview).
  </Accordion>

  <Accordion title="GitHub checks and comments" icon="code-pull-request">
    A pull request shows no TestDino check or comment even though the run streamed. Both depend on TestDino linking the run to a commit and the connected repository.

    Common causes:

    * **GitHub Checks is off.** Enable it in the CI Checks tab. See [GitHub status checks](/guides/github-status-checks#troubleshooting).
    * **Comments toggle is off.** Enable comments in **Settings → Integrations → GitHub**.
    * **No commit SHA.** Run tests inside CI so git context is captured automatically.
    * **Repository mismatch.** The TestDino project must be connected to the same repo the PR lives in.
    * **App not installed.** The GitHub App must be installed with access to the repository.

    A check can also fail while the pass rate looks high when a **mandatory tag** test fails: that overrides the pass rate. The FAQ covers this under [Why might a TestDino CI Check fail even if my pass rate looks high?](/faqs#why-might-a-testdino-ci-check-fail-even-if-my-pass-rate-looks-high). For repo connection and comment settings, see the [GitHub integration](/integrations/ci-cd/github#troubleshooting) guide.
  </Accordion>

  <Accordion title="Environment label missing" icon="tag">
    A run appears without an environment label and drops out of environment-filtered views. The branch matched no mapping pattern. The usual cause is a regex mistake:

    * **Unanchored**: `dev` matches any branch that contains "dev". Anchor it: `^dev/`.
    * **Too broad**: `.*` or `.+` matches every branch and overrides your specific rules.
    * **Invalid regex**: an unclosed bracket or a bad escape never matches.

    Test patterns on [regex101.com](https://regex101.com/) before saving, and add a catch-all rule for branches outside your naming convention. See [Environment mapping](/guides/environment-mapping) for the full pattern reference.
  </Accordion>
</AccordionGroup>

## Sign-in and access errors

These errors block users from signing in or performing actions within the organization. Most stem from SSO configuration issues or insufficient role permissions.

<AccordionGroup>
  <Accordion title="SSO sign-in failures" icon="right-to-bracket">
    SSO errors trace to a mismatch between your identity provider and the values saved in TestDino. The most common ones:

    | Error | Cause | Fix |
    | :- | :- | :- |
    | `redirect_uri must be a Login redirect URI` | Callback URL does not match the organization key | Set the IdP redirect URI to exactly `…/api/v1/auth/sso/<your-org-key>/callback` on `user.testdino.com`, not `app`, with no trailing slash |
    | `Policy evaluation failed` | No access policy, or the user is not assigned | Add an access policy and rule on the default auth server, then assign the user |
    | Password login refused | SSO enforcement is on for that email domain | Sign in with SSO, or remove the domain from enforcement |
    | No Single Sign-On tab | Not an admin, or the org is not SSO-entitled | Get admin access, or contact support to enable SSO |

    For the full setup and OIDC troubleshooting, see [Single Sign-On](/platform/organizations/single-sign-on#troubleshooting).
  </Accordion>

  <Accordion title="Permission errors" icon="user-lock">
    Permissions are organization-level, so a blocked action usually means your role is too low, not a bug. Common cases:

    * **Cannot invite a member.** Only Owners and Administrators can invite. The org may also be at its member limit for the plan.
    * **Cannot change a role.** You can only assign roles at or below your own. Administrators cannot grant the Owner role or change their own role.
    * **Cannot delete a run or test case.** Members cannot delete; Viewers are read-only.
    * **Cannot manage an integration.** Project-level integrations (GitHub, GitLab, Slack, monday, Azure DevOps) need Owner or Administrator.
    * **Cannot manage billing.** Only Owners and Billing Managers can change a subscription.

    See the permission matrix and each case in [Users, Roles & Permissions](/platform/organizations/users-roles#troubleshooting).
  </Accordion>
</AccordionGroup>

## API errors

These come from the Public API and the MCP server, which both use the `td_pat_` Personal Access Token. Authentication, scope, and rate limits are the usual causes.

<AccordionGroup>
  <Accordion title="API token and scope errors" icon="lock">
    | Status | Code | Cause | Fix |
    | :- | :- | :- | :- |
    | 401 | `UNAUTHORIZED` | Header missing, wrong prefix, or token not recognized | Send `Authorization: Bearer td_pat_...` with one space. Re-issue the token if it was rotated |
    | 401 | `TOKEN_REVOKED` | The token was revoked | Generate a new PAT in **User Settings → Personal Access Tokens** |
    | 401 | `TOKEN_EXPIRED` | The token passed its expiry date | Generate a new PAT and update your stored secret |
    | 404 | `NOT_FOUND` | Resource missing, or not visible to the token | Verify the ID and that the token covers that project. Confirm a run ID exists with `list_testruns` |

    The full error table is in [API conventions](/api-reference/conventions#errors), and the auth setup is in the [API quickstart](/api-reference/quickstart#troubleshooting).
  </Accordion>

  <Accordion title="API rate limits" icon="gauge-high">
    A `429 RATE_LIMIT_EXCEEDED` means you crossed a per-token window:

    ```json theme={null}
    { "success": false, "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Too many requests" } }
    ```

    | Scope | Limit |
    | :- | :- |
    | Per token | 100 requests / minute |
    | Per IP before auth | 200 requests / minute |
    | PDF generation, per token | 1 request / minute |

    Read `RateLimit-Reset` from the response headers and wait that many seconds, or back off exponentially. See [Rate limits](/api-reference/conventions#rate-limits) for the full header reference.
  </Accordion>
</AccordionGroup>

## Integration errors

Slack and MCP each have their own connection and configuration failures. These accordions cover the top symptoms and link to the full guides.

<AccordionGroup>
  <Accordion title="Slack alerts missing" icon="slack">
    No TestDino messages arrive in Slack. Check the connection and the project's notifications:

    * **App not connected, or no notification saved.** Verify the connection in **Project → Integrations → Slack App**, then confirm at least one notification exists with a destination under **Where it goes**. Use **Send test** to post a real message.
    * **Private channel not listed.** Add the TestDino app to the channel first (channel name → Integrations → Add an App), then click **Refresh** in Slack settings.
    * **Messages in the wrong channel.** A notification posts only to the channels and users listed under **Where it goes**, with no fallback channel. Check the destinations on each notification in the list.
    * **Nothing sent for a matching run.** Open the notification and read the preview. When a setting would stop it from sending, the preview names that condition. Check **When it sends**, **Only these branches**, and **Only these environments**.
    * **Annotation notification silent.** The **Annotation key** on the notification must equal the annotation type or description in your test code.

    Each case is detailed in [Slack alerts](/integrations/slack-playwright-test-alerts#troubleshooting).
  </Accordion>

  <Accordion title="MCP errors" icon="plug">
    The MCP server has its own setup, authentication, and network failures, with a dedicated page. The categories:

    * **Installation**: `npm ERR! 404 Not Found`, `command not found: testdino-mcp`.
    * **Editor integration**: the server does not appear in Claude Code, Cursor, or Claude Desktop.
    * **Authentication**: `health` returns "Invalid token" or "No projects found".
    * **Network**: `ECONNREFUSED`, timeouts, or a 429 from the server.

    Each category and its fix is in [MCP troubleshooting](/mcp/troubleshooting).
  </Accordion>
</AccordionGroup>

## Plan and seat limits

When the organization reaches a plan limit, tests still run locally but TestDino stops accepting new data. 2 limits apply.

`Execution limit reached` is the monthly test-run quota, shared across all projects in your organization. New results pause until you upgrade the plan or the quota resets on your billing date.

To manage this:

* Open **Billing & Usage** to see how much of your monthly quota is used.
* Upgrade your plan if you consistently hit the limit, or wait for the reset date. See [Billing & Usage](/platform/billing-and-usage/overview).

`User limit reached` is the seat cap for new members. A new SSO sign-in is blocked when you're at the limit. However, existing members signing in again are never blocked.

**Fix:** Free a seat by removing an inactive member, or upgrade your plan. See [Billing & Usage](/platform/billing-and-usage/overview) to review your plan and usage.

## Other setup gaps

* **Commit, branch, or author blank.** TestDino reads git metadata from the repository, so run tests inside an initialized git repo.
* **Run tags missing from a run.** `--tags` works on `npx tdpw test` only. `npx playwright test --tags` exits with `error: unknown option '--tags'` and never streams a run. For `npx playwright test`, set `tags` in the reporter options; `TESTDINO_TAGS` and `testdino.config.ts` are read by `tdpw` only, from version 2.7.6. When tags do arrive, TestDino keeps the first 50, trims each to 100 characters, strips control characters, and drops duplicates and empty values. Learn how to set run labels in [Run-level tags](/cli/testdino-playwright-nodejs#run-level-tags).
* **Errors on an old runtime.** `@testdino/playwright` needs Node.js 18+ and `@playwright/test` 1.52+.

## Get help

Still stuck? Collect this before contacting support, so the team can reproduce it without a back-and-forth:

* The **Run ID** or dashboard URL of the affected run.
* The **package version**: `@testdino/playwright` version from your lockfile.
* The **framework and runtime**: Playwright version, Node.js version.
* The **full error and stack trace**.
* The **CI logs** with tokens and credentials redacted.
* The **`--debug` output** from `npx tdpw test --debug`.

Reach the team at [support@testdino.com](mailto:support@testdino.com) or on [Discord](https://discord.gg/hGY9kqSm58). See [Support](/support) for hours and response times.

## Related

<CardGroup cols={2}>
  <Card title="Node.js Reporter" icon="node-js" href="/cli/testdino-playwright-nodejs">
    Upload flags, reporter config, and CLI commands for the Node.js CLI.
  </Card>

  <Card title="Generate API Keys" icon="key" href="/guides/generate-api-keys">
    Create and scope the token the CLI and API use.
  </Card>

  <Card title="CI Setup Overview" icon="infinity" href="/guides/ci-setup-overview">
    Per-provider pipeline guides with sharding and artifact handling.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.