ultrarouter docs
API reference

Custom providers

Workspace-owned OpenAI-compatible providers.

Workspace-owned OpenAI-compatible providers.

This page is GENERATED from the OpenAPI spec (openapi.yaml) — it can never drift from the served API. Set UR_BASE_URL (required: your gateway’s URL) and UR_API_KEY (an ur_sk_* key); secrets are always the $UR_API_KEY placeholder.

List custom providers

GET /v1/workspaces/{id}/providers

Auth: Session cookie + workspace RBAC.

curl -sS -X GET "$UR_BASE_URL/v1/workspaces/req_0000000000000000/providers" \
  -H "Cookie: better-auth.session_token=$UR_SESSION"

Register a custom provider

POST /v1/workspaces/{id}/providers

The base URL is SSRF-validated on save.

Auth: Session cookie + workspace RBAC.

curl -sS -X POST "$UR_BASE_URL/v1/workspaces/req_0000000000000000/providers" \
  -H "Cookie: better-auth.session_token=$UR_SESSION" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "base_url": "string"
  }'

Get a custom provider

GET /v1/workspaces/{id}/providers/{providerId}

Auth: Session cookie + workspace RBAC.

curl -sS -X GET "$UR_BASE_URL/v1/workspaces/req_0000000000000000/providers/prov_0000000000000000" \
  -H "Cookie: better-auth.session_token=$UR_SESSION"

Update a custom provider

PATCH /v1/workspaces/{id}/providers/{providerId}

A changed base URL is re-validated through the SSRF guard.

Auth: Session cookie + workspace RBAC.

curl -sS -X PATCH "$UR_BASE_URL/v1/workspaces/req_0000000000000000/providers/prov_0000000000000000" \
  -H "Cookie: better-auth.session_token=$UR_SESSION" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "string",
    "base_url": "string"
  }'

Delete a custom provider

DELETE /v1/workspaces/{id}/providers/{providerId}

Auth: Session cookie + workspace RBAC.

curl -sS -X DELETE "$UR_BASE_URL/v1/workspaces/req_0000000000000000/providers/prov_0000000000000000" \
  -H "Cookie: better-auth.session_token=$UR_SESSION"