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

# REST API

Everything you can do in the app — list projects, manage features, dispatch and watch runs, read results, manage groups, drive generation, and more — is also available over the TestVibe REST API (the `/api/v1/ops/*` surface). The same API powers the `testvibe` CLI, the MCP server for AI tools, and the in-app Assistant's own tool calls, so all three stay in sync with what the API can do.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>API reference</strong></td><td>Full endpoint documentation, request/response shapes, and examples.</td><td><a href="https://docs.testvibe.com/testvibe-api/welcome/readme">https://docs.testvibe.com/testvibe-api/welcome/readme</a></td></tr><tr><td><strong>Authentication</strong></td><td>Create a <code>tvb_…</code> key in Settings → CLI &#x26; API keys.</td><td><a href="/pages/Iqf5ztJtbtrhi3tsZZTe">/pages/Iqf5ztJtbtrhi3tsZZTe</a></td></tr></tbody></table>

## Authentication

Every request carries a bearer key created in **Settings → CLI & API keys**:

```
Authorization: Bearer tvb_...
```

A key is scoped to the account it was created in and inherits that account's project access. Revoke a key from the same panel if a machine is retired or a key may have leaked — see [CLI & API keys](/account-settings/api-keys.md).

## Rate Limits

Requests to the ops API (and therefore the CLI and MCP server, which are HTTP clients of it) are token-bucket limited:

| Bucket      | Default limit        | Notes                                                                                              |
| ----------- | -------------------- | -------------------------------------------------------------------------------------------------- |
| Per account | 5,000 requests/hour  | Keyed on the account, not the individual key — creating more keys doesn't raise the ceiling.       |
| Per IP      | 10,000 requests/hour | Applied before key validation, so an invalid-key flood can't be used to probe or overload the API. |

Exceeding a limit returns **`429 Too Many Requests`** with a `Retry-After` header. Self-hosted instances can disable rate limiting entirely via configuration if it isn't needed on a private network.

## The `testvibe` CLI And MCP Server

The `testvibe` CLI and its MCP stdio server (for Claude Desktop/Code, Codex, and similar AI tools) wrap the same authenticated API — install once, then use the CLI directly or point an AI tool at the MCP server.

Install it from the npm registry:

```bash
npm install -g testvibe
```

No npm? **Settings → CLI & API keys** also shows npm-free commands that download and set up the CLI directly from your TestVibe server.

## Related Help

* [CLI & API keys](/account-settings/api-keys.md)
* [REST API reference](https://docs.testvibe.com/testvibe-api/welcome/readme)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.testvibe.com/rest-api.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
