Routed providers
Subscriptions that run another vendor's model under the Claude Code harness
On this page(5 sections)
The bundled translator runs a non-Claude model on the user's own subscription, so each provider connects by signing in rather than with an API key, and one provider can hold several accounts at once. Two sign-in shapes ride these routes: a code typed on a device page, which finishes by itself, and a redirect whose landing address is handed back.
GET/translator/accountsSubscriptions connected through the translator
What is signed in per provider. Each provider can hold several accounts at once, and the translator spreads work across them.
What you send
Nothing. Call it as it is.
What comes back
| Field | Type |
|---|---|
codex | object[] |
name | string |
label | string |
usage | object |
windows | object[] |
kind | string |
label | string |
utilization | number |
resetsAt | number |
gates | "all" | "none" | object |
measuredAt | number |
unreadPresent while re-reading this account keeps… | object |
sinceWhen re-reading this account first failed,… | number |
reasonWhy, in the provider's own words… | string |
cooling | object |
until | number |
reason | string |
verify | string |
stateWhether it can serve a turn… | object |
when kind is "ready" | shape |
roomHow much of the fullest pool… | number |
when kind is "spent" | shape |
reopensAtWhen every full pool has reopened,… | number |
when kind is "blocked" | shape |
fixWho can make it serve again:… | "reconnect" | "admin" | "verify" | "wait" |
reasonWhy, in words a person can… | string |
untilWhen waiting lifts it, in epoch… | number |
urlThe provider's page where the account's… | string |
when kind is "unknown" | shape |
grok | object[] |
name | string |
label | string |
usage | object |
windows | object[] |
kind | string |
label | string |
utilization | number |
resetsAt | number |
gates | "all" | "none" | object |
measuredAt | number |
unreadPresent while re-reading this account keeps… | object |
sinceWhen re-reading this account first failed,… | number |
reasonWhy, in the provider's own words… | string |
cooling | object |
until | number |
reason | string |
verify | string |
stateWhether it can serve a turn… | object |
when kind is "ready" | shape |
roomHow much of the fullest pool… | number |
when kind is "spent" | shape |
reopensAtWhen every full pool has reopened,… | number |
when kind is "blocked" | shape |
fixWho can make it serve again:… | "reconnect" | "admin" | "verify" | "wait" |
reasonWhy, in words a person can… | string |
untilWhen waiting lifts it, in epoch… | number |
urlThe provider's page where the account's… | string |
when kind is "unknown" | shape |
kimi | object[] |
name | string |
label | string |
usage | object |
windows | object[] |
kind | string |
label | string |
utilization | number |
resetsAt | number |
gates | "all" | "none" | object |
measuredAt | number |
unreadPresent while re-reading this account keeps… | object |
sinceWhen re-reading this account first failed,… | number |
reasonWhy, in the provider's own words… | string |
cooling | object |
until | number |
reason | string |
verify | string |
stateWhether it can serve a turn… | object |
when kind is "ready" | shape |
roomHow much of the fullest pool… | number |
when kind is "spent" | shape |
reopensAtWhen every full pool has reopened,… | number |
when kind is "blocked" | shape |
fixWho can make it serve again:… | "reconnect" | "admin" | "verify" | "wait" |
reasonWhy, in words a person can… | string |
untilWhen waiting lifts it, in epoch… | number |
urlThe provider's page where the account's… | string |
when kind is "unknown" | shape |
gemini | object[] |
name | string |
label | string |
usage | object |
windows | object[] |
kind | string |
label | string |
utilization | number |
resetsAt | number |
gates | "all" | "none" | object |
measuredAt | number |
unreadPresent while re-reading this account keeps… | object |
sinceWhen re-reading this account first failed,… | number |
reasonWhy, in the provider's own words… | string |
cooling | object |
until | number |
reason | string |
verify | string |
stateWhether it can serve a turn… | object |
when kind is "ready" | shape |
roomHow much of the fullest pool… | number |
when kind is "spent" | shape |
reopensAtWhen every full pool has reopened,… | number |
when kind is "blocked" | shape |
fixWho can make it serve again:… | "reconnect" | "admin" | "verify" | "wait" |
reasonWhy, in words a person can… | string |
untilWhen waiting lifts it, in epoch… | number |
urlThe provider's page where the account's… | string |
when kind is "unknown" | shape |
curl "$SANDBOX/translator/accounts" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.translator.accounts();POST/translator/{provider}/connectStart connecting a subscription
Begins the sign-in for one provider and says which of the two shapes it is: a code you type into a device page, which finishes by itself in the background, or a redirect whose landing address you hand back afterwards.
What you send
| Field | Type | Where |
|---|---|---|
providerrequired | "codex" | "grok" | "kimi" | "gemini" | address |
What comes back
| Field | Type |
|---|---|
urlThe page to open | string |
codeThe one-time code, where the provider… | string |
stateThe handshake's id, which status reads… | string |
flowWhich shape this is | "device" | "redirect" |
catchersWho is watching for where the… | object[] |
kind | "device" | "browser" |
label | string |
curl -X POST "$SANDBOX/translator/codex/connect" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.translator.connect({
"provider": "codex"
});GET/translator/{provider}/connectRead a subscription connection attempt
Reports whether this exact sign-in attempt is waiting, completed, or failed. Completion is tied to the attempt rather than a change in account count, because signing in to an existing account replaces its credential in place.
What you send
| Field | Type | Where |
|---|---|---|
providerrequired | "codex" | "grok" | "kimi" | "gemini" | address |
staterequired | string | query |
What comes back
| Field | Type |
|---|---|
when status is "wait" | shape |
when status is "ok" | shape |
when status is "error" | shape |
error | string |
curl "$SANDBOX/translator/codex/connect?state=idle" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.translator.status({
"provider": "codex",
"state": "idle"
});POST/translator/{provider}/completeFinish a redirect sign-in
For the providers that redirect somewhere this sandbox cannot receive: hand back the address you landed on and the connection completes.
What you send
| Field | Type | Where |
|---|---|---|
providerrequiredWhich provider | "codex" | "grok" | "kimi" | "gemini" | address |
redirectUrlrequiredThe address the browser was sent… | string | body |
staterequiredThe handshake this belongs to | string | body |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X POST "$SANDBOX/translator/codex/complete" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"redirectUrl":"https://sandbox-a1b2c3d4e5f6.intentic.dev","state":"idle"}'import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.translator.complete({
"provider": "codex",
"redirectUrl": "https://sandbox-a1b2c3d4e5f6.intentic.dev",
"state": "idle"
});POST/translator/{provider}/disconnectDisconnect one subscription
Clears a single account by name. Any others under the same provider stay connected.
What you send
| Field | Type | Where |
|---|---|---|
providerrequired | "codex" | "grok" | "kimi" | "gemini" | address |
namerequired | string | body |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X POST "$SANDBOX/translator/codex/disconnect" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"name":"nightly changelog"}'import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.translator.disconnect({
"provider": "codex",
"name": "nightly changelog"
});