Update a model provider
Changes a BYOK provider in place. An omitted field is left as it stands, including api_key: send one only to rotate the credential. The key is write-only – it is sealed on arrival and no response carries it – and rotating it keeps the provider’s id, so agent versions already published against it go on resolving.
PATCH
/v1/model-providers/{model_provider_id}Authorization
AuthorizationBearer token · headerrequiredPath parameters
model_provider_idstring<uuid>requiredModel provider id
Request body
requiredapplication/jsonapi_keystring | nullA new upstream credential, sealed and put in place of the stored one.
Write-only: no route answers with a key, so there is nothing to read
back and nothing to compare against. The provider keeps its id, so
every agent version already naming it goes on resolving.
min length 1 · max length 16384
base_urlstring | nullmax length 2048
descriptionstring | nullmax length 1024
display_namestring | nullmax length 200
Responses
200The updated provider; the API key is never returned.
One of:
object
created_atstring<date-time>requireddescriptionstringrequireddisplay_namestringrequiredformatModelProviderFormatBodyrequiredThe wire format a provider speaks, which decides the shape of the model
settings an agent config may carry for it.
Allowed:
anthropicopenai_responsesidstring<uuid>requiredupdated_atstring<date-time>requiredWhen the provider last changed: a rename, a new endpoint, or a new key.
modelsPlatformModelBody[]requiredModels available through this platform provider.
Show propertiesHide properties
Array of
PlatformModelBodydescriptionstringrequireddisplay_namestringrequiredmodelstringrequiredpriceany | ModelPriceBodyrequiredShow propertiesHide properties
One of:
any
anyModelPriceBody
One of:
object
formatstringrequiredAllowed:
anthropicper_tokenAnthropicPriceBodyrequiredShow propertiesHide properties
cache_readinteger<int64>requiredcache_writeinteger<int64>requiredinputinteger<int64>requiredoutputinteger<int64>requiredobject
formatstringrequiredAllowed:
openai_responsesper_tokenOpenaiResponsesPriceBodyrequired`input` prices the input neither read from nor written to the cache,
`cached_input` the part read and `cache_write` the part written; `output`
prices every output token, reasoning included.
Show propertiesHide properties
cache_writeinteger<int64>requiredcached_inputinteger<int64>requiredinputinteger<int64>requiredoutputinteger<int64>requiredtypestringrequiredAllowed:
platformobject
created_atstring<date-time>requireddescriptionstringrequireddisplay_namestringrequiredformatModelProviderFormatBodyrequiredThe wire format a provider speaks, which decides the shape of the model
settings an agent config may carry for it.
Allowed:
anthropicopenai_responsesidstring<uuid>requiredupdated_atstring<date-time>requiredWhen the provider last changed: a rename, a new endpoint, or a new key.
base_urlstringrequiredWhere the proxy sends this provider's calls, as the workspace set
it. Its API key never comes back.
workspace_idstring<uuid>requiredtypestringrequiredAllowed:
byok400Malformed body, path parameter, a field outside its bound, or a base URL the network policy refuses.
errorErrorDetailrequiredWhat went wrong: a `code` to branch on and a `message` to show. The
message is written for a person and may change; the code will not.
Show propertiesHide properties
codeErrorCoderequiredThe machine-readable half of an error response, and the field a client
branches on. Closed: every error carries exactly one of these.
Allowed:
unauthorizedforbiddennot_foundinvalid_requestconflictclient_outdatedprecondition_failedtoo_many_requestsinternalmessagestringrequired401Missing, malformed, or invalid bearer token.
errorErrorDetailrequiredWhat went wrong: a `code` to branch on and a `message` to show. The
message is written for a person and may change; the code will not.
Show propertiesHide properties
codeErrorCoderequiredThe machine-readable half of an error response, and the field a client
branches on. Closed: every error carries exactly one of these.
Allowed:
unauthorizedforbiddennot_foundinvalid_requestconflictclient_outdatedprecondition_failedtoo_many_requestsinternalmessagestringrequired403Caller lacks model_provider.manage, or the provider is a platform row, which only the operator changes.
errorErrorDetailrequiredWhat went wrong: a `code` to branch on and a `message` to show. The
message is written for a person and may change; the code will not.
Show propertiesHide properties
codeErrorCoderequiredThe machine-readable half of an error response, and the field a client
branches on. Closed: every error carries exactly one of these.
Allowed:
unauthorizedforbiddennot_foundinvalid_requestconflictclient_outdatedprecondition_failedtoo_many_requestsinternalmessagestringrequired404No such provider, or the caller cannot see it.
errorErrorDetailrequiredWhat went wrong: a `code` to branch on and a `message` to show. The
message is written for a person and may change; the code will not.
Show propertiesHide properties
codeErrorCoderequiredThe machine-readable half of an error response, and the field a client
branches on. Closed: every error carries exactly one of these.
Allowed:
unauthorizedforbiddennot_foundinvalid_requestconflictclient_outdatedprecondition_failedtoo_many_requestsinternalmessagestringrequired