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

# Bring your own endpoint

> Put a checkpoint trained anywhere in front of the same holdout, judge, gate and certificate as a catalog model.

A model you trained on Prime Lab, Fireworks, or your own cluster can be an eval candidate. Register its OpenAI-compatible URL once; it becomes `endpoint/<name>`.

```bash theme={null}
curl -X POST https://gateway.errorbar.ai/v1/endpoints \
  -H "Authorization: Bearer $ERRORBAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "ckpt-step-600", "baseUrl": "https://serve.example.com/v1", "model": "my-7b-grpo", "apiKey": "..." }'
```

Then name it where you would name a catalog model:

```json theme={null}
{ "baselineModel": "Qwen/Qwen3-32B", "candidateModels": ["endpoint/ckpt-step-600"], "criterionId": "crit_..." }
```

What holds:

* **Validated by existence, not by our catalog.** The run is refused if the workspace has no endpoint of that name; nothing else about the model is checked or priced.
* **Metered at \$0.** Generation happens on your serving and your bill. Tokens and latency are still recorded on every sample, so the comparison stays honest about cost.
* **Never a judge.** An endpoint generates answers; the judge and the similarity lens stay calibrated catalog instruments. A run that names an endpoint as judge is refused.
* **Same everything else.** Same holdout, same corrected pass rate with its interval, same gate, same evidence bundle.

Keys are stored encrypted and never returned; `key_prefix` and `has_key` are what you see. Re-registering a name rotates URL, model and key. Owner or admin only. Remove with `DELETE /v1/endpoints/{id}`; past results keep their lineage.
