---
title: "oz0 provider set"
description: "Add or change a provider record."
canonical_url: "https://docs.oz0.ai/reference/cli/oz0/provider/set"
---
# oz0 provider set

> Add or change a provider record.

For: Operators and developers looking up a command.

Add or change a provider record. An existing record the tenant sees is the starting point, or --preset names a shipped one (see `provider list --presets`); flags change single fields. Without --shared the record is the tenant's own, and replaces a shared record of the same ID for that tenant only; --shared changes the record every tenant sees, which only cluster admins may. The key itself is a tenant secret: set it with `oz0 secret set <NAME>`.

## Usage

```bash
oz0 provider set <id> [flags]
```

## Flags

<table>
<thead>
  <tr>
    <th>
      Flag
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Default
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        --access-key-secret
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the tenant secret with SigV4's access key ID; --key-secret holds the secret access key
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --audience
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the JWT bearer assertion's audience (the token URL when empty)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --auth-header
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the header its key goes in, such as Authorization or X-Api-Key
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --auth-kind
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      how calls are signed: header (a key in --auth-header, the default), oauth2_client_credentials, oauth2_jwt_bearer, sigv4 or federated (no stored key)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --auth-prefix
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      what comes before the key in that header, such as "Bearer "
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --aws-region
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the region SigV4 signs for, such as eu-north-1
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --aws-role
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      with --cloud aws: the IAM role's ARN the calling agent assumes (with --aws-region and --aws-service)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --aws-service
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the service SigV4 signs for, such as bedrock
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --base-url
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      what a call's path, such as v1/chat/completions, is appended to
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --cache
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      its prompt cache's facts as JSON, such as '{"style":"none"}' or '{"short_seconds":300,"min_tokens":2048}'; empty takes its format's defaults
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --charges
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      what it charges besides tokens, as JSON, such as '{"tools":{"web_search":{"usd":0.02}},"tiers":{"service_tier":{"priority":1.8}}}'; each fact replaces the shipped one of that name; empty takes the shipped ones
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --client-auth
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      how the client secret is sent to the token URL: post (the default) or basic
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --client-id
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the OAuth2 client (client credentials), or a bare PEM key's issuer (JWT bearer)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --cloud
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      with --auth-kind federated: aws, gcp or entra, the cloud that trusts the tenant's issuer
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --description
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      what it is, for people
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --disabled
      </code>
    </td>
    
    <td>
      bool
    </td>
    
    <td>
      
    </td>
    
    <td>
      keep the record, but route nothing to it
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --entra-directory
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      with --cloud entra: the directory (tenant ID or domain) of the app registration (--client-id)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --format
      </code>
    </td>
    
    <td>
      strings
    </td>
    
    <td>
      
    </td>
    
    <td>
      wire formats it speaks, its default first: anthropic-messages, openai-chat, openai-responses, google-generate-content
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --gcp-service-account
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      with --cloud gcp: a service account the federated token impersonates
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --gcp-workload-provider
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      with --cloud gcp: the workload identity pool provider, //iam.googleapis.com/projects/&lt;number>/locations/global/workloadIdentityPools/&lt;pool>/providers/&lt;provider>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --internal
      </code>
    </td>
    
    <td>
      bool
    </td>
    
    <td>
      
    </td>
    
    <td>
      a tenant's record may reach private addresses, such as a server next to the edge (cluster admins)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --key-secret
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the tenant secret that holds its key, bound to the provider's host or token URL's host unless it is a built-in provider's key (oz0 secret set NAME --host HOST)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --model-in
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      where calls name the model: body or path
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --preset
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      start from a shipped preset, such as openrouter or mistral
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --price-provider
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      its ID in genai-prices, when that differs
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --price-source
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      genai-prices, reported (its own usage.cost) or none
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --provider-state
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      own says this provider account, and each pool member's, serves this tenant alone, so calls may name what it stores: prior responses, files, caches (cluster admins, a tenant's own record; empty takes it back)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --region
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      where it processes data, such as eu, eu-north or us
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --retains-data
      </code>
    </td>
    
    <td>
      bool
    </td>
    
    <td>
      
    </td>
    
    <td>
      it keeps prompts or answers after a call; required for a new record without --preset
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --scope
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      what an OAuth2 token is for, such as <code>
        https://ai.azure.com/.default
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --session-token-secret
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the tenant secret with a SigV4 session token, for temporary credentials
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --shared
      </code>
    </td>
    
    <td>
      bool
    </td>
    
    <td>
      
    </td>
    
    <td>
      the record every tenant sees (cluster admins)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --tenant
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <code>
        default
      </code>
    </td>
    
    <td>
      tenant whose own record it is
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --token-url
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      where the OAuth2 kinds get tokens; the edge calls it (an outbound connection)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --translator
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      
    </td>
    
    <td>
      the record is a translation gateway you run as a process of its own, which makes its calls lossy: agentgateway or agent-router (empty for none)
    </td>
  </tr>
</tbody>
</table>

## Inherited flags

<table>
<thead>
  <tr>
    <th>
      Flag
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Default
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        --context
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <code>
        $OZ0_CONTEXT or &lt;config dir>/orchestrator-zero/context.json
      </code>
    </td>
    
    <td>
      CLI context file written by server init
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        --log-level
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <code>
        info
      </code>
    </td>
    
    <td>
      log level: debug, info, warn or error
    </td>
  </tr>
</tbody>
</table>

See [all `oz0` commands](https://docs.oz0.ai/reference/cli/oz0) and the [global flags](https://docs.oz0.ai/reference/cli/oz0#global-flags).


## Sitemap

See the full [sitemap](https://docs.oz0.ai/sitemap.md) for all pages.
