| title | Import providers from a CSV or JSON file |
|---|
Dashboard → Providers → Import from file creates API-key connections from a CSV or JSON list. Each row can target a different provider. Partial failure is the contract: valid rows still import when others fail, and the modal lists why the failed rows were rejected.
This import does not create new OpenAI/Anthropic-compatible endpoint nodes. Create those first (Dashboard → Providers → Add OpenAI-Compatible, or omniroute nodes add), then import rows whose provider column is that node's id. A per-row baseUrl can still override the node's URL.
Column names are cosmetic. The parser splits each row and destructures by index:
| Index | Field | Required | Notes |
|---|---|---|---|
| 0 | provider |
yes | Existing managed provider id (openai, anthropic, …) or an already-registered OpenAI/Anthropic-compatible node id |
| 1 | name |
yes | Connection display name |
| 2 | apiKey |
yes | API key |
| 3 | baseUrl |
no | Per-row URL override |
| 4 | priority |
no | Integer 1–100 |
A first line whose first column is the literal word provider (any case) is skipped as a header. Blank lines and # comments are skipped.
Download a starter file from the import modal (Download CSV template). Example:
# OmniRoute provider import (positional columns)
provider,name,apiKey,baseUrl,priority
openai,Prod OpenAI,sk-your-openai-key,,1A made-up id such as openai-compatible-chat-001 is not a node. The API returns Unknown or unsupported provider for that row; the modal shows it next to the row name.
A JSON array of objects with the same fields (provider, name, apiKey, baseUrl?, priority?). Unlike CSV, JSON keys are named.
[
{ "provider": "openai", "name": "Prod OpenAI", "apiKey": "sk-your-openai-key", "priority": 1 }
]