Hadrian is experimental alpha software. Do not use in production.
Hadrian

Dynamic providers

Dynamic providers allow runtime configuration of LLM backends without restarting the gateway. Useful for BYOK (bring-your-own-key) scenarios.

Create a dynamic provider

POST
/admin/v1/dynamic-providers
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Request Body

application/json

api_key_secret_ref?string|null

Reference to API key in secrets manager

base_url*string
models?|null

List of supported model names

name*string
owner*|||

Owner of a dynamic provider

provider_type*string

Provider type (e.g., "open_ai", "anthropic")

Response Body

application/json

application/json

curl -X POST "https://loading/admin/v1/dynamic-providers" \  -H "Content-Type: application/json" \  -d '{    "base_url": "string",    "name": "string",    "owner": {      "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",      "type": "organization"    },    "provider_type": "string"  }'
{
  "api_key_secret_ref": "string",
  "base_url": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "is_enabled": true,
  "models": [
    "string"
  ],
  "name": "string",
  "owner": {
    "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
    "type": "organization"
  },
  "provider_type": "string",
  "updated_at": "2019-08-24T14:15:22Z"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Get a dynamic provider by ID

GET
/admin/v1/dynamic-providers/{id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

id*string

Dynamic provider ID

Formatuuid

Response Body

application/json

application/json

curl -X GET "https://loading/admin/v1/dynamic-providers/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{
  "api_key_secret_ref": "string",
  "base_url": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "is_enabled": true,
  "models": [
    "string"
  ],
  "name": "string",
  "owner": {
    "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
    "type": "organization"
  },
  "provider_type": "string",
  "updated_at": "2019-08-24T14:15:22Z"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Update a dynamic provider

PATCH
/admin/v1/dynamic-providers/{id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

id*string

Dynamic provider ID

Formatuuid

Request Body

application/json

api_key_secret_ref?string|null

Reference to API key in secrets manager

base_url?string|null
is_enabled?boolean|null
models?|null

List of supported model names

Response Body

application/json

application/json

curl -X PATCH "https://loading/admin/v1/dynamic-providers/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "Content-Type: application/json" \  -d '{}'
{
  "api_key_secret_ref": "string",
  "base_url": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "is_enabled": true,
  "models": [
    "string"
  ],
  "name": "string",
  "owner": {
    "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
    "type": "organization"
  },
  "provider_type": "string",
  "updated_at": "2019-08-24T14:15:22Z"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Delete a dynamic provider

DELETE
/admin/v1/dynamic-providers/{id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

id*string

Dynamic provider ID

Formatuuid

Response Body

application/json

curl -X DELETE "https://loading/admin/v1/dynamic-providers/497f6eca-6276-4993-bfeb-53cbbbba6f08"
Empty
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

List dynamic providers by organization

GET
/admin/v1/organizations/{org_slug}/dynamic-providers
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

org_slug*string

Organization slug

Query Parameters

limit?integer|null

Maximum number of results to return

Formatint64
cursor?string|null

Cursor for keyset pagination. Encoded as base64 string.

direction?string|null

Pagination direction: "forward" (default) or "backward".

include_deleted?boolean|null

Include soft-deleted records in results

Response Body

application/json

application/json

application/json

curl -X GET "https://loading/admin/v1/organizations/string/dynamic-providers"
{
  "data": [
    {
      "api_key_secret_ref": "string",
      "base_url": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "is_enabled": true,
      "models": [
        "string"
      ],
      "name": "string",
      "owner": {
        "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
        "type": "organization"
      },
      "provider_type": "string",
      "updated_at": "2019-08-24T14:15:22Z"
    }
  ],
  "pagination": {
    "has_more": true,
    "limit": 100,
    "next_cursor": "MTczMzU4MDgwMDAwMDphYmMxMjM0NS02Nzg5LTAxMjMtNDU2Ny0wMTIzNDU2Nzg5YWI",
    "prev_cursor": "string"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

List dynamic providers by project

GET
/admin/v1/organizations/{org_slug}/projects/{project_slug}/dynamic-providers
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

org_slug*string

Organization slug

project_slug*string

Project slug

Query Parameters

limit?integer|null

Maximum number of results to return

Formatint64
cursor?string|null

Cursor for keyset pagination. Encoded as base64 string.

direction?string|null

Pagination direction: "forward" (default) or "backward".

include_deleted?boolean|null

Include soft-deleted records in results

Response Body

application/json

application/json

application/json

curl -X GET "https://loading/admin/v1/organizations/string/projects/string/dynamic-providers"
{
  "data": [
    {
      "api_key_secret_ref": "string",
      "base_url": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "is_enabled": true,
      "models": [
        "string"
      ],
      "name": "string",
      "owner": {
        "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
        "type": "organization"
      },
      "provider_type": "string",
      "updated_at": "2019-08-24T14:15:22Z"
    }
  ],
  "pagination": {
    "has_more": true,
    "limit": 100,
    "next_cursor": "MTczMzU4MDgwMDAwMDphYmMxMjM0NS02Nzg5LTAxMjMtNDU2Ny0wMTIzNDU2Nzg5YWI",
    "prev_cursor": "string"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

List dynamic providers by user

GET
/admin/v1/users/{user_id}/dynamic-providers
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

user_id*string

User ID

Formatuuid

Query Parameters

limit?integer|null

Maximum number of results to return

Formatint64
cursor?string|null

Cursor for keyset pagination. Encoded as base64 string.

direction?string|null

Pagination direction: "forward" (default) or "backward".

include_deleted?boolean|null

Include soft-deleted records in results

Response Body

application/json

application/json

curl -X GET "https://loading/admin/v1/users/497f6eca-6276-4993-bfeb-53cbbbba6f08/dynamic-providers"
{
  "data": [
    {
      "api_key_secret_ref": "string",
      "base_url": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "is_enabled": true,
      "models": [
        "string"
      ],
      "name": "string",
      "owner": {
        "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
        "type": "organization"
      },
      "provider_type": "string",
      "updated_at": "2019-08-24T14:15:22Z"
    }
  ],
  "pagination": {
    "has_more": true,
    "limit": 100,
    "next_cursor": "MTczMzU4MDgwMDAwMDphYmMxMjM0NS02Nzg5LTAxMjMtNDU2Ny0wMTIzNDU2Nzg5YWI",
    "prev_cursor": "string"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}