updateCredential.md
Update a credential
Patches a credential. Only fields you send are changed. If you include
api_key or credentials the upstream secret is rotated.
OpenAPI
api-reference/llm-gateway-openapi.yml
put /admin/connections/{id}
openapi: 3.1.0
info:
title: Barndoor LLM Gateway API
version: 1.0.0
description: >
REST API for the Barndoor LLM Gateway: configure providers, model routes,
pricing, governance, and operate a multi-provider LLM platform
programmatically.
All endpoints in this document are scoped to your organization. They are the
same APIs powering the Barndoor portal under **LLM Configuration**,
**LLM Controls**, and **Settings - My Models**, exposed for teams that
prefer scripting over the UI.
## Base URL
All requests are issued against your Barndoor instance:
```
https://app.barndoor.ai/api/llm-gateway
```
Replace `app.barndoor.ai` with your tenant host if you run on Enterprise.
## Authentication
Endpoints accept a JWT Bearer token issued by your Barndoor identity
provider. Tokens can be obtained interactively via the Barndoor SDK:
```ts
const sdk = await loginInteractive();
```
The token must be sent in the `Authorization` header on every request:
```
Authorization: Bearer eyJhbGciOi...
```
Note: the `bd-...` API keys you create through these endpoints are for
runtime LLM traffic (`/v1/chat/completions`, `/v1/messages`, etc.), not for
administrative calls. Administrative endpoints require a user/admin JWT.
## Permissions
Most endpoints require an `admin` (or higher) role on the calling user.
Read-only endpoints are typically accessible by all authenticated users.
Read-only listings under `/user/...` are scoped to the authenticated user.
## Errors
Errors are returned as JSON with a stable shape:
```json
{ "error": "BadRequest", "message": "request_timeout_secs must be between 1
and 3600" }
```
contact:
name: Barndoor Support
url: https://barndoor.ai
servers:
- url: https://{host}/api/llm-gateway
description: >-
Production / Trial (Barndoor SaaS). The gateway lives on your Barndoor
control-plane host. For Enterprise or self-hosted deployments, replace the
host with your portal hostname — the authoritative value is shown on
Settings → My Models in the portal.
variables:
host:
description: Your Barndoor control-plane (portal) hostname
default: app.barndoor.ai
- url: https://app.barndooruat.com/api/llm-gateway
description: UAT
- url: https://app.barndoordev.com/api/llm-gateway
description: Dev
security:
- BearerAuth: []
tags:
- name: Credentials
description: >-
Reusable upstream credentials (API keys, AWS roles, Vertex service
accounts)
- name: Providers
description: Named upstream providers backed by credentials and a model family
- name: Provider Catalog
description: Read-only catalog of supported upstream provider templates
- name: Model Routes
description: Map client-facing aliases to one or more upstream provider/model pairs
- name: Model Pricing
description: Per-million-token input/output costs for usage and budget reporting
- name: Rate Limits
description: Requests-per-minute and tokens-per-minute caps
- name: Token Budgets
description: Daily, weekly, or monthly token and cost ceilings
- name: Model Access
description: Allowlist or denylist policies for models, providers, or aliases
- name: Smart Models
description: Routing policies that pick a target model based on the request
- name: Governance Configuration
description: Org-wide behavior toggles for the LLM Gateway
- name: Route Health
description: Operational view of upstream route ejection and recovery
- name: API Keys
description: Org-managed gateway API keys (the `bd-...` keys callers send on `/v1/...`)
- name: User
description: Self-service endpoints for the authenticated user
paths:
/admin/connections/{id}:
parameters:
- $ref: '#/components/parameters/CredentialId'
put:
tags:
- Credentials
summary: Update a credential
description: |
Patches a credential. Only fields you send are changed. If you include
`api_key` or `credentials` the upstream secret is rotated.
operationId: updateCredential
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCredentialRequest'
responses:
'200':
description: The updated credential
content:
application/json:
schema:
$ref: '#/components/schemas/Credential'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
components:
parameters:
CredentialId:
name: id
in: path
required: true
description: Credential UUID
schema:
type: string
format: uuid
schemas:
UpdateCredentialRequest:
type: object
description: |
All fields are optional. Omit a field to leave the existing value
unchanged. Sending `api_key` or `credentials` rotates the stored
secret in the encrypted secret store.
properties:
name:
type: string
base_url:
type: string
format: uri
auth_type:
$ref: '#/components/schemas/AuthType'
api_key:
type: string
format: password
credentials:
type: object
additionalProperties: true
settings:
type: object
additionalProperties: true
Credential:
type: object
description: |
A reusable upstream credential, called *Credentials* in the portal UI.
One credential can back multiple providers (e.g. a single OpenAI key
used by several routes).
required:
- id
- org_id
- name
- model_provider
- auth_type
- base_url
- settings
- created_at
- updated_at
properties:
id:
type: string
format: uuid
example: 4f8b2a3c-12ee-4d92-9c7b-e7d2f8b0a111
org_id:
type: string
format: uuid
description: The organization that owns this credential
name:
type: string
example: OpenAI Production
model_provider:
$ref: '#/components/schemas/ModelProviderSlug'
auth_type:
$ref: '#/components/schemas/AuthType'
base_url:
type: string
format: uri
description: |
Upstream base URL the credential points at. Defaults to the public
provider URL but can be overridden for self-hosted or proxy setups.
example: https://api.openai.com/v1
settings:
type: object
description: |
Provider-specific settings that aren't sensitive (e.g. AWS region,
Vertex project id, Azure API version). Sensitive credentials live
in the encrypted secret store and are never returned by the API.
additionalProperties: true
example:
region: us-east-1
model_api_family: anthropic_messages
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
AuthType:
type: string
description: >
The authentication scheme this credential or provider uses to talk to
the upstream model provider. Valid values depend on `model_provider`:
for OpenAI/Anthropic-style vendors this is typically `api_key`; for AWS
Bedrock it is one of `aws_role`, `aws_keys`, or `bedrock_api_key`; for
Google Vertex it is `google_adc`, `google_service_account`, or
`google_impersonation`; Anthropic OAuth passthrough uses
`oauth_passthrough`.
example: api_key
ModelProviderSlug:
type: string
description: Slug of the upstream model provider this resource speaks to
enum:
- openai
- anthropic
- azure_openai
- google_ai
- bedrock
- vertex
- groq
- together
- mistral
- cohere
- xai
- fireworks
- perplexity
- openrouter
- deepseek
- custom
example: openai
Error:
type: object
required:
- error
- message
properties:
error:
type: string
description: A short machine-readable error code
example: BadRequest
message:
type: string
description: A human-readable description of what went wrong
example: request_timeout_secs must be between 1 and 3600
responses:
BadRequest:
description: The request body or query parameters were invalid
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The resource does not exist or is not accessible by this organization
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: |
JWT obtained through Barndoor's authentication flow. Pass the token
verbatim in `Authorization: Bearer <token>`. Use the Barndoor SDK's
`loginInteractive()` helper to obtain a token in scripts and notebooks.