Arkloop Developers

LLM Providers

Manage provider accounts and the model list under each provider. All endpoints require Bearer Token authentication.

A provider is an account-level resource. Models are nested under the provider and are used to build model selectors such as provider_name^model_name.

List Providers

GET /v1/llm-providers

Response 200 OK

[
  {
    "id": "...",
    "org_id": "...",
    "provider": "anthropic",
    "name": "anthropic-main",
    "key_prefix": "sk-ant-a",
    "base_url": null,
    "openai_api_mode": null,
    "advanced_json": null,
    "created_at": "2024-01-01T00:00:00Z",
    "models": [
      {
        "id": "...",
        "provider_id": "...",
        "model": "claude-sonnet-4-20250514",
        "priority": 0,
        "is_default": true,
        "tags": [],
        "when": {},
        "advanced_json": {},
        "multiplier": 1.0,
        "cost_per_1k_input": 0.003,
        "cost_per_1k_output": 0.015,
        "cost_per_1k_cache_write": null,
        "cost_per_1k_cache_read": null
      }
    ]
  }
]

Create Provider

POST /v1/llm-providers

Request Body

FieldTypeRequiredDescription
namestringYesProvider display name, also the selector prefix; must not contain ^
providerstringYesopenai or anthropic
api_keystringYesAPI key (stored encrypted)
base_urlstringNoCustom endpoint
openai_api_modestringNoauto / responses / chat_completions
advanced_jsonobjectNoExtra provider configuration

Update Provider

PATCH /v1/llm-providers/{provider_id}

Request Body

FieldTypeDescription
namestringUpdate provider name
providerstringUpdate provider kind
api_keystringOverwrite stored key
base_urlstring | nullUpdate custom endpoint
openai_api_modestring | nullUpdate OpenAI compatibility mode
advanced_jsonobject | nullUpdate advanced configuration

Delete Provider

DELETE /v1/llm-providers/{provider_id}

Deleting a provider also removes its nested model list.


Create Provider Model

POST /v1/llm-providers/{provider_id}/models

Request Body

FieldTypeRequiredDescription
modelstringYesUpstream model name
priorityintNoHigher wins first
is_defaultboolNoWhether this is the default model under the provider
tagsstring[]NoExtra tags
whenobjectNoConditional routing rules
advanced_jsonobjectNoModel-level advanced config; merged over provider-level keys
multiplierfloat64NoCost multiplier
cost_per_1k_inputfloat64NoCost per 1k input tokens
cost_per_1k_outputfloat64NoCost per 1k output tokens
cost_per_1k_cache_writefloat64NoCache write cost
cost_per_1k_cache_readfloat64NoCache read cost

A Persona can later reference the model with a selector like anthropic-main^claude-sonnet-4-20250514.


Update Provider Model

PATCH /v1/llm-providers/{provider_id}/models/{model_id}

Updates the same fields as Create Provider Model.

When both provider-level and model-level advanced_json are set, Arkloop merges them by key and the model-level value wins on conflicts.


Delete Provider Model

DELETE /v1/llm-providers/{provider_id}/models/{model_id}

List Available Models

GET /v1/llm-providers/{provider_id}/available-models

Returns the upstream-discovered model list for the selected provider:

{
  "models": [
    {
      "id": "claude-sonnet-4-20250514",
      "name": "claude-sonnet-4-20250514",
      "configured": true
    }
  ]
}

On this page