Skip to content

Providers

CompozyOS Providers HTTP endpoints.

For people running agent work32 pages in this section
GET
/api/model-catalog/models

Query Parameters

provider_id?string

Filter by CompozyOS provider id

view?string

Catalog view; defaults to curated

Value in"curated""all"
source_id?string

Filter by catalog source id

refresh?boolean

Refresh sources before listing models

include_stale?boolean

Include stale source rows in the merged projection

Response Body

OK

application/json
  1. response
models*array<>
curl -X GET "https://example.com/api/model-catalog/models"
{  "models": [    {      "availability_state": "string",      "available": true,      "config_options": [        {          "category": "string",          "current_bool": true,          "current_value_id": "string",          "description": "string",          "id": "string",          "kind": "string",          "label": "string",          "values": [            {              "description": "string",              "group_id": "string",              "group_label": "string",              "label": "string",              "value": "string"            }          ]        }      ],      "configurations": [        {          "fast": true,          "reasoning_effort": "string",          "thinking": true        }      ],      "context_window": 0,      "cost": {        "cache_read_per_million": 0,        "cache_write_per_million": 0,        "input_per_million": 0,        "output_per_million": 0,        "reasoning_per_million": 0      },      "curated": true,      "default_reasoning_effort": "string",      "deprecated": true,      "display_name": "string",      "featured": true,      "hidden": true,      "last_error": "string",      "max_input_tokens": 0,      "max_output_tokens": 0,      "model_id": "string",      "provider_id": "string",      "reasoning_apply": "string",      "reasoning_efforts": [        "string"      ],      "reasoning_known": true,      "reasoning_source": "acp",      "refreshed_at": "string",      "release_date": "string",      "sources": [        {          "last_error": "string",          "priority": 0,          "refreshed_at": "string",          "source_id": "string",          "source_kind": "string",          "stale": true        }      ],      "stale": true,      "supports_reasoning": true,      "supports_tools": true    }  ]}
POST
/api/model-catalog/models/refresh

Request Body

JSON request body

application/json
  1. body
force?boolean
request_id?string
source_id?string

Response Body

OK

application/json
  1. response
error?string
sources*array<>
curl -X POST "https://example.com/api/model-catalog/models/refresh" \  -H "Content-Type: application/json" \  -d '{}'
{  "error": "string",  "sources": [    {      "failure_reason": "string",      "last_error": "string",      "last_refresh": "string",      "last_success": "string",      "next_refresh": "string",      "priority": 0,      "provider_id": "string",      "refresh_state": "string",      "row_count": 0,      "source_id": "string",      "source_kind": "string",      "stale": true    }  ]}
GET
/api/model-catalog/providers/{provider_id}/models

Path Parameters

provider_id*string

CompozyOS provider id

Query Parameters

view?string

Catalog view; defaults to curated

Value in"curated""all"
source_id?string

Filter by catalog source id

refresh?boolean

Refresh sources before listing models

include_stale?boolean

Include stale source rows in the merged projection

Response Body

OK

application/json
  1. response
models*array<>
curl -X GET "https://example.com/api/model-catalog/providers/string/models"
{  "models": [    {      "availability_state": "string",      "available": true,      "config_options": [        {          "category": "string",          "current_bool": true,          "current_value_id": "string",          "description": "string",          "id": "string",          "kind": "string",          "label": "string",          "values": [            {              "description": "string",              "group_id": "string",              "group_label": "string",              "label": "string",              "value": "string"            }          ]        }      ],      "configurations": [        {          "fast": true,          "reasoning_effort": "string",          "thinking": true        }      ],      "context_window": 0,      "cost": {        "cache_read_per_million": 0,        "cache_write_per_million": 0,        "input_per_million": 0,        "output_per_million": 0,        "reasoning_per_million": 0      },      "curated": true,      "default_reasoning_effort": "string",      "deprecated": true,      "display_name": "string",      "featured": true,      "hidden": true,      "last_error": "string",      "max_input_tokens": 0,      "max_output_tokens": 0,      "model_id": "string",      "provider_id": "string",      "reasoning_apply": "string",      "reasoning_efforts": [        "string"      ],      "reasoning_known": true,      "reasoning_source": "acp",      "refreshed_at": "string",      "release_date": "string",      "sources": [        {          "last_error": "string",          "priority": 0,          "refreshed_at": "string",          "source_id": "string",          "source_kind": "string",          "stale": true        }      ],      "stale": true,      "supports_reasoning": true,      "supports_tools": true    }  ]}
POST
/api/model-catalog/providers/{provider_id}/models/curate

Path Parameters

provider_id*string

CompozyOS provider id

Request Body

JSON request body

application/json
  1. body
default_effort?string|null
default_speed?|
Value in"normal""fast"
deprecated?boolean|null
featured?boolean|null
hidden?boolean|null
model_id*string

Response Body

OK

application/json
  1. response
apply*
default_speed?string
Value in"normal""fast"
model*
curl -X POST "https://example.com/api/model-catalog/providers/string/models/curate" \  -H "Content-Type: application/json" \  -d '{    "model_id": "string"  }'
{  "apply": {    "active_config_hash": "string",    "active_generation": 0,    "agent_name": "string",    "applied": true,    "apply_record_id": "string",    "lifecycle": "live",    "next_action": "none",    "partial_failures": [      {        "diagnostic": {          "category": "string",          "code": "string",          "data_freshness": "string",          "doc_url": "string",          "evidence": {            "property1": null,            "property2": null          },          "id": "string",          "message": "string",          "severity": "string",          "suggested_command": "string",          "title": "string"        },        "subsystem": "string"      }    ],    "profile": "string",    "restart_required": true,    "restart_scope": "string",    "scope": "user",    "section": "general",    "skipped": true,    "skipped_reason": "string",    "warnings": [      "string"    ],    "workspace_id": "string",    "write_target": "global-config"  },  "default_speed": "normal",  "model": {    "availability_state": "string",    "available": true,    "config_options": [      {        "category": "string",        "current_bool": true,        "current_value_id": "string",        "description": "string",        "id": "string",        "kind": "string",        "label": "string",        "values": [          {            "description": "string",            "group_id": "string",            "group_label": "string",            "label": "string",            "value": "string"          }        ]      }    ],    "configurations": [      {        "fast": true,        "reasoning_effort": "string",        "thinking": true      }    ],    "context_window": 0,    "cost": {      "cache_read_per_million": 0,      "cache_write_per_million": 0,      "input_per_million": 0,      "output_per_million": 0,      "reasoning_per_million": 0    },    "curated": true,    "default_reasoning_effort": "string",    "deprecated": true,    "display_name": "string",    "featured": true,    "hidden": true,    "last_error": "string",    "max_input_tokens": 0,    "max_output_tokens": 0,    "model_id": "string",    "provider_id": "string",    "reasoning_apply": "string",    "reasoning_efforts": [      "string"    ],    "reasoning_known": true,    "reasoning_source": "acp",    "refreshed_at": "string",    "release_date": "string",    "sources": [      {        "last_error": "string",        "priority": 0,        "refreshed_at": "string",        "source_id": "string",        "source_kind": "string",        "stale": true      }    ],    "stale": true,    "supports_reasoning": true,    "supports_tools": true  }}
POST
/api/model-catalog/providers/{provider_id}/models/refresh

Path Parameters

provider_id*string

CompozyOS provider id

Request Body

JSON request body

application/json
  1. body
force?boolean
request_id?string
source_id?string

Response Body

OK

application/json
  1. response
error?string
sources*array<>
curl -X POST "https://example.com/api/model-catalog/providers/string/models/refresh" \  -H "Content-Type: application/json" \  -d '{}'
{  "error": "string",  "sources": [    {      "failure_reason": "string",      "last_error": "string",      "last_refresh": "string",      "last_success": "string",      "next_refresh": "string",      "priority": 0,      "provider_id": "string",      "refresh_state": "string",      "row_count": 0,      "source_id": "string",      "source_kind": "string",      "stale": true    }  ]}
GET
/api/model-catalog/providers/{provider_id}/models/status

Path Parameters

provider_id*string

CompozyOS provider id

Response Body

OK

application/json
  1. response
sources*array<>
curl -X GET "https://example.com/api/model-catalog/providers/string/models/status"
{  "sources": [    {      "failure_reason": "string",      "last_error": "string",      "last_refresh": "string",      "last_success": "string",      "next_refresh": "string",      "priority": 0,      "provider_id": "string",      "refresh_state": "string",      "row_count": 0,      "source_id": "string",      "source_kind": "string",      "stale": true    }  ]}
GET
/api/model-catalog/sources/status

Response Body

OK

application/json
  1. response
sources*array<>
curl -X GET "https://example.com/api/model-catalog/sources/status"
{  "sources": [    {      "failure_reason": "string",      "last_error": "string",      "last_refresh": "string",      "last_success": "string",      "next_refresh": "string",      "priority": 0,      "provider_id": "string",      "refresh_state": "string",      "row_count": 0,      "source_id": "string",      "source_kind": "string",      "stale": true    }  ]}
GET
/api/provider-usage

Query Parameters

profile?string

Profile name; defaults to the caller session profile or default

Response Body

Profile-scoped usage envelope

application/json
  1. response
enabled*boolean
generated_at*string
Formatdate-time
keychain_supported*boolean
profile_id*string
revision*integer
Formatuint64
Range0 <= value
targets*array<>
tray*|
curl -X GET "https://example.com/api/provider-usage"
{  "enabled": true,  "generated_at": "2019-08-24T14:15:22Z",  "keychain_supported": true,  "profile_id": "string",  "revision": 0,  "targets": [    {      "account": {        "label": "string",        "plan": "string"      },      "balances": [        {          "expires_at": "2019-08-24T14:15:22Z",          "id": "string",          "label": "string",          "remaining": {            "unit": "string",            "value": "string"          }        }      ],      "checked_at": "2019-08-24T14:15:22Z",      "confidence": "string",      "error": {        "action": "string",        "code": "string",        "message": "string",        "retry_after": "2019-08-24T14:15:22Z"      },      "measured_at": "2019-08-24T14:15:22Z",      "next_refresh_at": "2019-08-24T14:15:22Z",      "provider_id": "string",      "provider_name": "string",      "refreshing": true,      "source": {        "kind": "string",        "label": "string"      },      "spend_caps": [        {          "enabled": true,          "id": "string",          "label": "string",          "limit": {            "unit": "string",            "value": "string"          },          "resets_at": "2019-08-24T14:15:22Z",          "used": {            "unit": "string",            "value": "string"          },          "used_percent": 0        }      ],      "status": "string",      "windows": [        {          "duration_seconds": 0,          "id": "string",          "kind": "string",          "label": "string",          "limit": {            "unit": "string",            "value": "string"          },          "reset_text": "string",          "resets_at": "2019-08-24T14:15:22Z",          "used": {            "unit": "string",            "value": "string"          },          "used_percent": 0        }      ]    }  ],  "tray": {    "label": "string",    "provider_id": "string",    "resets_at": "2019-08-24T14:15:22Z",    "severity": "string",    "stale": true,    "used_percent": 0.1,    "window_id": "string"  }}
GET
/api/provider-usage/providers/{provider_id}

Path Parameters

provider_id*string

Canonical provider ID

Query Parameters

profile?string

Profile name; defaults to the caller session profile or default

Response Body

Profile-scoped usage envelope

application/json
  1. response
enabled*boolean
generated_at*string
Formatdate-time
keychain_supported*boolean
profile_id*string
revision*integer
Formatuint64
Range0 <= value
targets*array<>
tray*|
curl -X GET "https://example.com/api/provider-usage/providers/string"
{  "enabled": true,  "generated_at": "2019-08-24T14:15:22Z",  "keychain_supported": true,  "profile_id": "string",  "revision": 0,  "targets": [    {      "account": {        "label": "string",        "plan": "string"      },      "balances": [        {          "expires_at": "2019-08-24T14:15:22Z",          "id": "string",          "label": "string",          "remaining": {            "unit": "string",            "value": "string"          }        }      ],      "checked_at": "2019-08-24T14:15:22Z",      "confidence": "string",      "error": {        "action": "string",        "code": "string",        "message": "string",        "retry_after": "2019-08-24T14:15:22Z"      },      "measured_at": "2019-08-24T14:15:22Z",      "next_refresh_at": "2019-08-24T14:15:22Z",      "provider_id": "string",      "provider_name": "string",      "refreshing": true,      "source": {        "kind": "string",        "label": "string"      },      "spend_caps": [        {          "enabled": true,          "id": "string",          "label": "string",          "limit": {            "unit": "string",            "value": "string"          },          "resets_at": "2019-08-24T14:15:22Z",          "used": {            "unit": "string",            "value": "string"          },          "used_percent": 0        }      ],      "status": "string",      "windows": [        {          "duration_seconds": 0,          "id": "string",          "kind": "string",          "label": "string",          "limit": {            "unit": "string",            "value": "string"          },          "reset_text": "string",          "resets_at": "2019-08-24T14:15:22Z",          "used": {            "unit": "string",            "value": "string"          },          "used_percent": 0        }      ]    }  ],  "tray": {    "label": "string",    "provider_id": "string",    "resets_at": "2019-08-24T14:15:22Z",    "severity": "string",    "stale": true,    "used_percent": 0.1,    "window_id": "string"  }}
POST
/api/provider-usage/refresh

Request Body

JSON request body

application/json
  1. body
intent?string
max_age_seconds?integer
Formatint64
profile?string
provider_ids?array<string>
wait_ms?|
Formatint64

Response Body

Profile-scoped usage envelope

application/json
  1. response
enabled*boolean
generated_at*string
Formatdate-time
keychain_supported*boolean
profile_id*string
revision*integer
Formatuint64
Range0 <= value
targets*array<>
tray*|
curl -X POST "https://example.com/api/provider-usage/refresh" \  -H "Content-Type: application/json" \  -d '{}'
{  "enabled": true,  "generated_at": "2019-08-24T14:15:22Z",  "keychain_supported": true,  "profile_id": "string",  "revision": 0,  "targets": [    {      "account": {        "label": "string",        "plan": "string"      },      "balances": [        {          "expires_at": "2019-08-24T14:15:22Z",          "id": "string",          "label": "string",          "remaining": {            "unit": "string",            "value": "string"          }        }      ],      "checked_at": "2019-08-24T14:15:22Z",      "confidence": "string",      "error": {        "action": "string",        "code": "string",        "message": "string",        "retry_after": "2019-08-24T14:15:22Z"      },      "measured_at": "2019-08-24T14:15:22Z",      "next_refresh_at": "2019-08-24T14:15:22Z",      "provider_id": "string",      "provider_name": "string",      "refreshing": true,      "source": {        "kind": "string",        "label": "string"      },      "spend_caps": [        {          "enabled": true,          "id": "string",          "label": "string",          "limit": {            "unit": "string",            "value": "string"          },          "resets_at": "2019-08-24T14:15:22Z",          "used": {            "unit": "string",            "value": "string"          },          "used_percent": 0        }      ],      "status": "string",      "windows": [        {          "duration_seconds": 0,          "id": "string",          "kind": "string",          "label": "string",          "limit": {            "unit": "string",            "value": "string"          },          "reset_text": "string",          "resets_at": "2019-08-24T14:15:22Z",          "used": {            "unit": "string",            "value": "string"          },          "used_percent": 0        }      ]    }  ],  "tray": {    "label": "string",    "provider_id": "string",    "resets_at": "2019-08-24T14:15:22Z",    "severity": "string",    "stale": true,    "used_percent": 0.1,    "window_id": "string"  }}
GET
/api/provider-usage/stream

Query Parameters

profile?string

Profile name; defaults to the caller session profile or default

Response Body

ready and provider_usage_changed revision events

text/event-stream
  1. response
boot_id*string
revision*integer
Formatuint64
Range0 <= value
curl -X GET "https://example.com/api/provider-usage/stream"
{  "boot_id": "string",  "revision": 0}
GET
/api/providers

Response Body

OK

application/json
  1. response
providers*array<>
curl -X GET "https://example.com/api/providers"
{  "providers": [    {      "auth_status": {        "code": "string",        "env_policy": "string",        "home_policy": "string",        "last_probe_at": "2019-08-24T14:15:22Z",        "login": {          "configured": true,          "executable": "string",          "presence": "present",          "recommended_action": "install_cli",          "source": "auth_login_command"        },        "message": "string",        "mode": "string",        "state": "string",        "status_command": "string"      },      "default": true,      "display_name": "string",      "name": "string",      "runtime_strategy": "session_config",      "session_env_status": [        {          "kind": "string",          "name": "string",          "present": true,          "required": true,          "secret_ref": "string",          "source": "string",          "target_env": "string"        }      ]    }  ]}
GET
/api/providers/{provider_id}

Path Parameters

provider_id*string

CompozyOS provider id

Response Body

OK

application/json
  1. response
auth_status*
default*boolean
display_name?string
name*string
runtime_strategy?string
Value in"session_config""launch_arg""provider_managed"
session_env_status?array<>
curl -X GET "https://example.com/api/providers/string"
{  "auth_status": {    "code": "string",    "env_policy": "string",    "home_policy": "string",    "last_probe_at": "2019-08-24T14:15:22Z",    "login": {      "configured": true,      "executable": "string",      "presence": "present",      "recommended_action": "install_cli",      "source": "auth_login_command"    },    "message": "string",    "mode": "string",    "state": "string",    "status_command": "string"  },  "default": true,  "display_name": "string",  "name": "string",  "runtime_strategy": "session_config",  "session_env_status": [    {      "kind": "string",      "name": "string",      "present": true,      "required": true,      "secret_ref": "string",      "source": "string",      "target_env": "string"    }  ]}
POST
/api/providers/{provider_id}/auth/probe

Path Parameters

provider_id*string

CompozyOS provider id

Response Body

OK

application/json
  1. response
auth_status*
probe?|
provider*string
curl -X POST "https://example.com/api/providers/string/auth/probe"
{  "auth_status": {    "code": "string",    "env_policy": "string",    "home_policy": "string",    "last_probe_at": "2019-08-24T14:15:22Z",    "login": {      "configured": true,      "executable": "string",      "presence": "present",      "recommended_action": "install_cli",      "source": "auth_login_command"    },    "message": "string",    "mode": "string",    "state": "string",    "status_command": "string"  },  "probe": {    "duration_ms": 0,    "exit_code": 0,    "stderr": "string",    "stdout": "string"  },  "provider": "string"}