Docs
Dashboard
API reference / ProjectBeta

List model keys

The four providers (anthropic, openai, xai, google) with the project's own-key state. A key is never returned: preview is its last 4 characters. use is the stored choice of whose key calls use; useEffective what they use now (a plan without platformModels, Free, always uses the project's own key). Model keys belong to the project, like everything an API key reaches. Without one, Boxline's keys are used where the plan includes them; each run says which in keySource.

GET/v1/project/model-keys

Request

Method and pathGET/v1/project/model-keys
Base URLhttps://api.boxline.dev
AuthenticationYour API key in the x-api-key header (or Authorization: Bearer). The examples read it from BOXLINE_API_KEY.
curl "https://api.boxline.dev/v1/project/model-keys" \  -H "x-api-key: $BOXLINE_API_KEY"

Responses

200 OK

One item per provider.

Fields

NameTypeDefaultAllowed valuesDescription
keysobject[]––
keys[].providerstring–anthropic, openai, xai, googleAnthropic Claude, OpenAI, Grok (xAI), Google Gemini. Grok and Gemini have no computer use (mode computer is 400).
keys[].usestring–project, platformWhose key a model call uses, the project's own (project, no model charge from Boxline) or the platform's.
keys[].useEffectivestring–project, platformWhose key a model call uses, the project's own (project, no model charge from Boxline) or the platform's.
keys[].hasKeyboolean––
keys[].previewstring | null––The last 4 characters of the key.
keys[].verifiedboolean | null––The provider accepted the key when it was saved (false: it could not be reached).
keys[].createdAtstring | null––Format: date-time.
keys[].updatedAtstring | null––Format: date-time.
keys[].updatedViastring | null–console, api_key, support, null
keys[].lastUsedAtstring | null––Format: date-time.
keys[].platformAvailableboolean––The server holds a key for the provider and the plan includes platformModels.
Response 200
{  "keys": [    {      "provider": "anthropic",      "use": "project",      "useEffective": "project",      "hasKey": false,      "preview": "…",      "verified": false,      "createdAt": "2026-09-29T10:00:00.000Z",      "updatedAt": "2026-09-29T10:00:00.000Z",      "updatedVia": "console",      "lastUsedAt": "2026-09-29T10:00:00.000Z",      "platformAvailable": false    }  ]}

Errors

Errors have a matching HTTP status and the same body. code is stable, so check it in your code; message is for people. See Errors and request ids.

StatusCodesWhen
401 UnauthorizedunauthorizedMissing or invalid API key.
Error body
{  "error": {    "code": "not_found",    "message": "session not found",    "requestId": "req_4fJx0aQm2Lk9Pz7N"  }}

Learn more

These docs describe a beta API. Endpoints, fields and SDK methods may change before general availability; breaking changes will be listed in the changelog.