Sumopod with 9Router: keys and API setup
Prepare a Sumopod AI key, check balance and model restrictions, and evaluate an OpenAI-compatible connection in 9Router with clear authentication and billing checks.
Connect Sumopod to 9Router as a custom OpenAI-compatible Chat Completions provider at https://ai.sumopod.com/v1. First obtain a Sumopod AI key and an allowed model, then save both in the router connection. Sumopod’s documentation requires an AI Balance to create a key; 9Router does not supply that balance.
This guide covers text chat. Sumopod’s current compatibility page describes text generation; it does not establish image support or every coding-agent feature. The steps were source-reviewed on October 23, 2026, without a paid inference test.
Get an AI key with access to the selected model
In Sumopod, open AI → API Keys → + API Key. Give the key a recognizable name. Review any per-key credit limit and model restrictions, then select a model that the key is allowed to call. Copy its exact API identifier from the AI dashboard, not just its display name.
Before adding funds, check the provider’s current charges. A positive account balance does not override a lower per-key limit. Keep the key private; the router stores this upstream credential, while clients use a separate router key.
Make a direct text request
For this Bash/zsh example install curl and jq, set SUMOPOD_API_KEY locally and set SUMOPOD_MODEL to the allowed identifier. The OpenAI-compatible SDK convention uses a Bearer API key; consult your account’s AI Quick Start if its generated authorization differs.
jq -n --arg model "$SUMOPOD_MODEL" \
'{model:$model,messages:[{role:"user",content:"Write one short sentence about rain."}],stream:false}' \
> /tmp/sumopod-direct-probe.json
curl --fail-with-body -i https://ai.sumopod.com/v1/chat/completions \
-H "Authorization: Bearer $SUMOPOD_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @/tmp/sumopod-direct-probe.json
This request can consume balance. Look for a successful chat body with choices and check account usage. If it fails, inspect the returned reason: invalid credential, depleted balance, per-key restriction and unknown model require different changes. Fix that direct failure before configuring the gateway.
Configure and persist the Sumopod connection
In 9Router choose Providers → Custom Providers (OpenAI/Anthropic Compatible) → Add OpenAI Compatible.
| Field | Value |
|---|---|
| Name | Sumopod AI |
| Prefix | sumopod-local (example; keep it unique) |
| API Type | Chat Completions |
| Base URL | https://ai.sumopod.com/v1 |
| API Key (for Check) | Sumopod key, only if checking now |
| Model ID for check | The same allowed ID used in the direct test |
Choose API Type before entering the URL, because changing type resets it. Check can send a model request when /models discovery fails and may consume balance. It is optional, and its key field is not persisted by Create.
After Create, open the node and click Add API Key. Enter a connection Name, the actual Sumopod API Key, and Default Model matching SUMOPOD_MODEL, then Save. In the node’s model section, try Import from /models. If the provider does not expose a usable list, enter the exact allowed model ID and click Add. Copy that row’s full local ID, including the sumopod-local/ prefix.
Repeat the same request locally
Set NINEROUTER_API_KEY to the router-issued key and ROUTER_MODEL to that copied ID. Change only the model identifier, endpoint and authentication from the direct test:
curl --fail-with-body --noproxy '*' http://localhost:20128/v1/models \
-H "Authorization: Bearer $NINEROUTER_API_KEY"
jq --arg model "$ROUTER_MODEL" '.model = $model' \
/tmp/sumopod-direct-probe.json > /tmp/sumopod-router-probe.json
curl --fail-with-body --noproxy '*' -i \
http://localhost:20128/v1/chat/completions \
-H "Authorization: Bearer $NINEROUTER_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @/tmp/sumopod-router-probe.json
Success means a complete chat response and a matching Sumopod route in the router’s request record. A listed model alone does not prove inference or billing success. Match the account usage timestamp when checking charges.
Resolve the first difference
| Direct/local result | Next action |
|---|---|
| Direct fails with a balance or key-limit error | Resolve the named Sumopod limit; restarting 9Router does not replenish it |
| Direct works, local 401 | Determine whether local authentication or the saved upstream key was rejected |
| Direct works, local model error | Compare Default Model with the upstream ID and the client request with the copied prefixed ID |
| Node created but no active route | Finish Add API Key → Save and add/import a model |
| Both text probes work, coding client fails | Compare the client’s API shape and tool parameters; chat compatibility alone does not prove Responses support |
Test streaming and one harmless tool task separately before enabling an unattended agent. Add Sumopod to a fallback combo only after its standalone route works. To undo the test, restore the client’s previous base URL, key and model together; revoke the dedicated Sumopod test key if it is no longer needed.
References for this guide
- Sumopod getting started
- Create a Sumopod API key
- Sumopod OpenAI-compatible API
- 9Router source
- 9Router compatible-provider form
- 9Router saved key and default model
- 9Router compatible model controls
Steps were checked against the linked documentation and source. Provider access and model availability depend on your account. We do not claim a completed live model test unless explicitly stated.