API reference

Providers

Store your own provider credentials for language models and telephony.

Provider keys are named secrets that belong to your account: the credentials of the telephony or model providers you bring yourself. Each key has a name and a value. Values are encrypted at rest and are never returned in full; reads show seven x characters followed by the last two characters of the value.

All routes need Authorization: Bearer <key>. Adding and removing keys needs the admin role; listing needs viewer.

OperationMethod and path
Add or replace a provider keyPOST /providers
List provider keysGET /providers
Remove a provider keyDELETE /providers/{provider_key_name}

Names the platform reads

Any name is accepted and stored. These are the names the platform looks up:

NameUsed for
DEEPGRAM_API_KEYSpeech-to-text on calls of agents whose transcriber is Deepgram.
SARVAM_API_KEYSpeech-to-text or voice on calls of agents that pick Sarvam.
ELEVENLABS_API_KEYThe voice on calls of agents whose synthesizer is ElevenLabs.
GROQ_API_KEYThe language model on calls of agents whose LLM provider is Groq.
OPENAI_API_KEYThe language model on calls of agents whose LLM provider is OpenAI (without it they run on the platform's own model), plus the Ask assistant, test chat, knowledge search and post-call extraction.
OPENROUTER_API_KEYThe language model on calls of agents whose LLM provider is OpenRouter, with the agent's model.
AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINTThe language model on calls of agents whose LLM provider is Azure OpenAI. The endpoint is the resource URL (for example https://name.openai.azure.com); private addresses are refused.
OPENAI_BASE_URLBase URL of that OpenAI-compatible endpoint, when it is not the default.
TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKENCalls and number purchase through Twilio.
PLIVO_AUTH_ID, PLIVO_AUTH_TOKENCalls and number purchase through Plivo.
EXOTEL_API_KEY, EXOTEL_API_TOKEN, EXOTEL_ACCOUNT_SID, EXOTEL_APP_IDCalls through Exotel.
EXOTEL_SUBDOMAINOptional Exotel API subdomain.

An account's own key takes precedence over a credential the operator configured for the whole platform.

Note: Telephony credentials are only used when the operator runs the platform with TELEPHONY_MODE=live. Otherwise calls go to the built-in stand-in and no provider is contacted.

Operations

Add or replace a provider key

POST /providers

Stores a key. If a key with the same name exists, its value is replaced.

Auth: API key or session token. Role: admin and up.

ParameterInTypeRequiredDescription
provider_namebodystringyesThe key's name, for example TWILIO_AUTH_TOKEN.
provider_valuebodystringyesThe secret value.

Request

bash
curl -X POST https://api.sevennadi.si/providers \
  -H "Authorization: Bearer vk-0123456789abcdef0123456789abcdef" \
  -H "Content-Type: application/json" \
  -d '{"provider_name": "OPENAI_API_KEY", "provider_value": "<your key>"}'

Response 200 OK

json
{"message": "successful", "status": "added"}

Errors

StatusMessage
400provider_name and provider_value are required
403Your role (member) can't change provider keys. It needs admin access; ask an owner or admin of the workspace.

List provider keys

GET /providers

Returns the account's keys, oldest first, with masked values.

Auth: API key or session token. Role: viewer and up.

No parameters.

Request

bash
curl https://api.sevennadi.si/providers \
  -H "Authorization: Bearer vk-0123456789abcdef0123456789abcdef"

Response 200 OK

json
[
  {
    "provider_id": "7c6b5a49-3827-4161-a5b4-c3d2e1f0a9b8",
    "provider_name": "OPENAI_API_KEY",
    "provider_value": "xxxxxxxQ9",
    "humanized_created_at": "just now",
    "created_at": "2026-10-13T08:10:00Z"
  }
]

Remove a provider key

DELETE /providers/{provider_key_name}

Deletes a key by its name.

Auth: API key or session token. Role: admin and up.

ParameterInTypeRequiredDescription
provider_key_namepathstringyesThe provider_name of the key, not its provider_id.

Request

bash
curl -X DELETE https://api.sevennadi.si/providers/OPENAI_API_KEY \
  -H "Authorization: Bearer vk-0123456789abcdef0123456789abcdef"

Response 200 OK

json
{"message": "successful", "status": "removed"}

Errors

StatusMessage
404Provider not found