Providers API
Providers store the credentials Rivano uses when forwarding requests to LLM APIs. Provider API keys are encrypted at rest with AES-256 and never returned in API responses.
/api/providers Response (200):
{
"data": [
{
"id": "provider_abc123",
"name": "openai-prod",
"provider": "openai",
"masked": "sk-...Xk9q",
"models": ["gpt-4o", "gpt-4o-mini", "gpt-3.5-turbo"],
"lastTestedAt": "2026-04-03T12:00:00Z",
"lastTestStatus": "ok",
"createdAt": "2026-01-10T09:00:00Z"
},
{
"id": "provider_def456",
"name": "anthropic-prod",
"provider": "anthropic",
"masked": "sk-ant-...7yHm",
"models": ["claude-opus-4-5", "claude-sonnet-4-5"],
"lastTestedAt": "2026-04-03T12:05:00Z",
"lastTestStatus": "ok",
"createdAt": "2026-01-10T09:05:00Z"
}
],
"total": 2
}Note: The masked field shows only the last 4 characters of the API key. The full key is never returned after creation.
import Rivano from '@rivano/sdk';
const rivano = new Rivano({ apiKey: process.env.RIVANO_API_KEY! });
const providers = await rivano.providers.list();
providers.data.forEach(p => console.log(p.name, p.lastTestStatus)); /api/providers Request body:
{
"name": "openai-prod",
"provider": "openai",
"apiKey": "sk-...",
"pricing": {
"gpt-4o": {
"inputCostPer1kTokens": 0.0025,
"outputCostPer1kTokens": 0.01
},
"gpt-4o-mini": {
"inputCostPer1kTokens": 0.00015,
"outputCostPer1kTokens": 0.0006
}
}
}
| Field | Required | Description |
|---|---|---|
name | Yes | Unique provider name within the tenant |
provider | Yes | Provider type: openai, anthropic, google, azure |
apiKey | Yes | The LLM provider API key. Encrypted immediately on receipt. |
pricing | No | Custom pricing per model. Uses provider defaults if omitted. |
Response (201):
{
"data": {
"id": "provider_xyz789",
"name": "openai-prod",
"provider": "openai",
"masked": "sk-...Xk9q",
"createdAt": "2026-04-04T10:00:00Z"
}
}The full API key is not returned. Store it in your secrets manager before sending it here.
await rivano.providers.create({
name: 'openai-prod',
provider: 'openai',
apiKey: process.env.OPENAI_API_KEY!,
pricing: {
'gpt-4o': { inputCostPer1kTokens: 0.0025, outputCostPer1kTokens: 0.01 },
},
}); /api/providers/:id/test Sends a minimal request to the provider to verify the API key is valid and the provider is reachable.
Request body: none required.
Response (200):
{
"status": "ok",
"latencyMs": 412,
"provider": "openai",
"testedAt": "2026-04-04T10:05:00Z"
}Response (200) when test fails:
{
"status": "error",
"error": "Invalid API key",
"provider": "openai",
"testedAt": "2026-04-04T10:05:00Z"
}Note: A failed test returns 200 with status: "error" — it is not an HTTP error because the Rivano API itself succeeded. The underlying provider error is in the error field.
const result = await rivano.providers.test('provider_abc123');
if (result.status !== 'ok') {
console.error('Provider test failed:', result.error);
} /api/providers/:id Deletes the provider record and permanently destroys the encrypted API key. Any agents using this provider will fail until a new provider is configured.
Response (200):
{ "success": true }await rivano.providers.delete('provider_abc123'); Related
- Agents API — Agents reference providers for routing
- Migrate from Direct — Register providers during migration
- Security Overview — Provider key encryption details