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

# Endpoint compatibility

> Current dashboard capture supports OpenAI Chat Completions and Anthropic Messages with the source URLs issued in Data.

Use the complete HTTPS URL issued for a source in **Data**. The source ID and
provider path are part of that URL; do not replace them with a guessed host or
a generic provider prefix.

| Client                                            | Source base URL ends in             | Model endpoint                              | Setup CLI provider   |
| ------------------------------------------------- | ----------------------------------- | ------------------------------------------- | -------------------- |
| OpenAI Python, `OpenAI` or `AsyncOpenAI`          | `/capture/SOURCE_ID/openai/v1`      | Chat Completions                            | `openai`             |
| Anthropic Python, `Anthropic` or `AsyncAnthropic` | `/capture/SOURCE_ID/anthropic`      | Messages                                    | `anthropic`          |
| Google `google-genai`                             | `/capture/SOURCE_ID/gemini`         | `generateContent`, `streamGenerateContent`  | set up in the client |
| AWS `boto3` (`bedrock-runtime`)                   | `/capture/SOURCE_ID/bedrock/REGION` | `InvokeModel`, `Converse`, `ConverseStream` | set up in the client |

The existing provider SDK makes the request. For OpenAI and Anthropic the generated
helper configures its base URL and headers — start with
[Set up with your coding agent](/agent-setup). Gemini and Bedrock are configured in
the client itself; see [Gemini and Bedrock](/client-integration#gemini-and-bedrock).

## Authentication and grouping

Use your normal provider authentication alongside `x-reasonblocks-key`, carrying
the dashboard-issued capture key. The generated helper labels every call with
`x-rb-run` (the task) and `x-rb-seq` (the call's number within it); reuse the same
`x-rb-run` across every call in one task. A process that handles more than one
task must name each task with `run_headers()` or an explicit `rbtrace.client.run()`
scope, or every task shares one `x-rb-run`. The dashboard does not read `x-rb-seq`.
A later full-agent training workflow also requires `x-rb-snapshot-id` naming a
real repeatable starting state. Ordinary capture does not require that snapshot.

See the [integration reference](/api-reference/reasonblocks) for helper and
header details.

## Whether a call was captured

A request the recorder cannot represent is still forwarded to your provider and still
answered normally — being unrepresentable never costs you the call. It does mean that
call produces no training row, so the response says which happened.

(Two limits are refused before forwarding rather than passed on: a request body over
2 MB, and a malformed `x-rb-snapshot-id`. Those return an error instead of a model
answer.)

| Response header                    | Meaning                                                                                |
| ---------------------------------- | -------------------------------------------------------------------------------------- |
| `x-reasonblocks-capture: accepted` | The request was representable, so it is eligible to become a row                       |
| `x-reasonblocks-capture: skipped`  | Forwarded and answered, but not recorded                                               |
| `x-reasonblocks-capture-reason`    | Present only when skipped: why, as a fixed label such as `unsupported_request_content` |

`accepted` describes the request only, and is set before the response streams: a response
can still fail to yield a usable reference — a stream that ends early, for instance — and
those appear in the pipeline's capture-gap report in **Data** rather than in a header. An
error the connection itself returns carries no capture header at all.

What gets skipped is ordinary, which is why it is worth checking. Neither list below is
exhaustive — the connection accepts a fixed set of request options and skips anything
else. On OpenAI: options outside the supported set (`presence_penalty`,
`frequency_penalty`, `n`, `logprobs` among them), and any non-text message content such as
an image. On Anthropic: `stop_sequences`, `top_k`, enabled extended thinking, and likewise
any message content that is not text, a tool use or a tool result. One such option set globally
means no rows at all, so check this header once when you connect rather than waiting to
find an empty dataset.

## Boundaries

The current dashboard connection and setup CLI do not provide OpenAI Responses,
Realtime, WebSockets, Fireworks or arbitrary OpenAI-compatible upstreams. Google Gemini and
Amazon Bedrock connect through the dashboard — see
[Gemini and Bedrock](/client-integration#gemini-and-bedrock).

**Bedrock with SigV4 access keys cannot use the dashboard connection.** A SigV4
signature covers the `Host` header, so it is rejected by AWS once a request reaches it
through anything else. Use a Bedrock API key instead. If your application must
authenticate with access keys, that case needs the self-hosted capture gateway, which
forwards the exact bytes a signature requires — ask ReasonBlocks for it. A Python wrapper does not make calls in a JavaScript or native child
process compatible; configure the process that actually sends the request.

For a trained full-agent release, use **non-streaming** requests with text and
ordinary function tools. Images, forced tool selection, strict tool schemas and
other request controls have separate admission rules. Capture support alone does
not establish trained-model serving support. Read the
[full-agent serving contract](/full-agent-training#5-enable-the-reviewed-release)
before enabling a release.

An older generated connection should follow
[the migration procedure](/agent-setup#migrate-an-older-generated-connection).

The dashboard connection groups a task's calls by `x-rb-run`. The sequence number
`x-rb-seq` is sent so a task's calls stay in order, and is not currently read.
