Skip to content

The project's AI provider settings — shaped by the caller's role

GET
/v1/settings/ai
curl --request GET \
--url https://beta-api.plune.ai/v1/settings/ai \
--header 'Authorization: Bearer <token>'

An owner reads everything but the credentials themselves (AC-12): provider, model, language, when and by whom credentials were saved, the last provider issue if any, and the current calendar month’s usage (AC-15, UTC). A member reads only whether AI is enabled and which provider/model (AC-06) — the same shape as the “AI enabled, provider X” line on SCR-01’s explanation. A reader gets 403: this section does not exist for them at all (AC-06), unlike the draft-availability check, which a reader may still read.

Settings, role-shaped

Media type application/json

What an owner reads — AiSettingsStatus plus AC-05/AC-09/AC-15. Never includes the credentials themselves (AC-12).

object
configured
required

Whether a provider has ever been connected (an ai_settings row exists).

boolean
enabled
required
boolean
provider

Present exactly when configured is true.

string
Allowed values: anthropic openrouter custom
model

Present exactly when configured is true.

string
customAddress

Present when provider is custom.

string
language

Draft language, default en (AC-05) — a project setting, not the reader’s interface language.

string
credentialsSavedAt

Present exactly when configured is true (AC-05, AC-12 — “коли й ким”, never the value).

string format: date-time
credentialsSavedBy

userId of the owner who last connected or replaced credentials.

string
lastIssueKind

AC-09 — the most recent provider issue, if any; null otherwise. Never aborted-shaped: a timeout is not a provider failure.

string
Allowed values: key_rejected provider_rate_limited provider_unavailable invalid_response address_rejected
lastIssueAt
string format: date-time
nullable
usage

Present exactly when configured is true.

object
month
required

Calendar month, UTC.

string
/^\d{4}-\d{2}$/
calls
required
object
succeeded
required
integer
failed
required
integer
aborted
required
integer
cost
required
object
knownUsd
required

Sum of costUsd over calls whose model had a known price at call time.

number
unknownPriceCalls
required

Count of calls whose tokens the provider reported but whose model has no price — “ціна невідома” — never folded into knownUsd as zero (SAD §8 rule 6). A call that reported no tokens (a timeout, a rejected key) has nothing to price and is counted in calls, not here.

integer
recommendedModels

GET, owner only (#896): the model the platform recommends for each provider it lists — none for custom, whose owner names the model. The connect form offers it first; always a model with a known price (AC-15).

object
anthropic
string
openrouter
string
models

GET, owner only (#898): the models the connect form lets the owner choose from for each provider the platform lists — the ones it has a price for, the recommended first, each with that price. None for custom. A model that is not listed is still allowed (model is free text): the list is a help, not a gate.

object
anthropic
Array<object>

One model the connect form lists (#898): the id as a provider writes it and what the platform’s own price table charges for it, per million tokens (AC-15).

object
id
required
string
inputUsdPerMillion
required

USD for a million input tokens.

number
outputUsdPerMillion
required

USD for a million output tokens.

number
openrouter
Array<object>

One model the connect form lists (#898): the id as a provider writes it and what the platform’s own price table charges for it, per million tokens (AC-15).

object
id
required
string
inputUsdPerMillion
required

USD for a million input tokens.

number
outputUsdPerMillion
required

USD for a million output tokens.

number
Examples

Owner view — connected and enabled

{
"configured": true,
"enabled": true,
"provider": "anthropic",
"model": "claude-sonnet-5",
"language": "en",
"credentialsSavedAt": "2026-09-16T09:12:04.151Z",
"credentialsSavedBy": "u-owner1",
"recommendedModels": {
"anthropic": "claude-sonnet-4-5",
"openrouter": "anthropic/claude-haiku-4-5"
},
"models": {
"anthropic": [
{
"id": "claude-sonnet-4-5",
"inputUsdPerMillion": 3,
"outputUsdPerMillion": 15
},
{
"id": "claude-haiku-4-5",
"inputUsdPerMillion": 1,
"outputUsdPerMillion": 5
}
],
"openrouter": [
{
"id": "anthropic/claude-haiku-4-5",
"inputUsdPerMillion": 1.1,
"outputUsdPerMillion": 5.5
},
{
"id": "deepseek/deepseek-v4.1-flash",
"inputUsdPerMillion": 0.035,
"outputUsdPerMillion": 0.29
}
]
}
}

No / invalid token or session

A reader asked (AC-06)

Media type application/json
object
error
required
string
Example
{
"error": "AI settings are not visible to a reader"
}