The project's AI provider settings — shaped by the caller's role
const url = 'https://beta-api.plune.ai/v1/settings/ai';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations ”Responses
Section titled “ Responses ”Settings, role-shaped
What an owner reads — AiSettingsStatus plus AC-05/AC-09/AC-15. Never includes the credentials themselves (AC-12).
object
Whether a provider has ever been connected (an ai_settings row exists).
Present exactly when configured is true.
Present exactly when configured is true.
Present when provider is custom.
Draft language, default en (AC-05) — a project setting, not the reader’s interface language.
Present exactly when configured is true (AC-05, AC-12 — “коли й ким”, never the value).
userId of the owner who last connected or replaced credentials.
AC-09 — the most recent provider issue, if any; null otherwise. Never aborted-shaped: a timeout is not a provider failure.
Present exactly when configured is true.
object
Calendar month, UTC.
object
object
Sum of costUsd over calls whose model had a known price at call time.
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.
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
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
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
USD for a million input tokens.
USD for a million output tokens.
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
USD for a million input tokens.
USD for a million output tokens.
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 } ] }}Owner view — nothing connected yet (AC-07’s "provider not connected")
{ "configured": false, "enabled": false, "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 } ] }}Member view — state, provider and model only (AC-06)
{ "configured": true, "enabled": true, "provider": "anthropic", "model": "claude-sonnet-5"}No / invalid token or session
A reader asked (AC-06)
object
Example
{ "error": "AI settings are not visible to a reader"}