---
title: "Routed providers · intentic sandbox API"
description: "Subscriptions that run another vendor's model under the Claude Code harness. Every route in the routed providers group of the intentic sandbox API."
url: "https://intentic.dev/api/translator/"
---

Models and accounts

# Routed providers

Subscriptions that run another vendor's model under the Claude Code harness

**On this page (5 sections)**

- [Subscriptions connected through the translator](#translator-accounts)
- [Start connecting a subscription](#translator-connect)
- [Read a subscription connection attempt](#translator-status)
- [Finish a redirect sign-in](#translator-complete)
- [Disconnect one subscription](#translator-disconnect)

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/accounts` Subscriptions 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 |
| `unread` Present while re-reading this account keeps… | object |
| `since` When re-reading this account first failed,… | number |
| `reason` Why, in the provider's own words… | string |
| `cooling` | object |
| `until` | number |
| `reason` | string |
| `verify` | string |
| `state` Whether it can serve a turn… | object |
| `when kind is "ready"` | shape |
| `room` How much of the fullest pool… | number |
| `when kind is "spent"` | shape |
| `reopensAt` When every full pool has reopened,… | number |
| `when kind is "blocked"` | shape |
| `fix` Who can make it serve again:… | "reconnect" | "admin" | "verify" | "wait" |
| `reason` Why, in words a person can… | string |
| `until` When waiting lifts it, in epoch… | number |
| `url` The 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 |
| `unread` Present while re-reading this account keeps… | object |
| `since` When re-reading this account first failed,… | number |
| `reason` Why, in the provider's own words… | string |
| `cooling` | object |
| `until` | number |
| `reason` | string |
| `verify` | string |
| `state` Whether it can serve a turn… | object |
| `when kind is "ready"` | shape |
| `room` How much of the fullest pool… | number |
| `when kind is "spent"` | shape |
| `reopensAt` When every full pool has reopened,… | number |
| `when kind is "blocked"` | shape |
| `fix` Who can make it serve again:… | "reconnect" | "admin" | "verify" | "wait" |
| `reason` Why, in words a person can… | string |
| `until` When waiting lifts it, in epoch… | number |
| `url` The 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 |
| `unread` Present while re-reading this account keeps… | object |
| `since` When re-reading this account first failed,… | number |
| `reason` Why, in the provider's own words… | string |
| `cooling` | object |
| `until` | number |
| `reason` | string |
| `verify` | string |
| `state` Whether it can serve a turn… | object |
| `when kind is "ready"` | shape |
| `room` How much of the fullest pool… | number |
| `when kind is "spent"` | shape |
| `reopensAt` When every full pool has reopened,… | number |
| `when kind is "blocked"` | shape |
| `fix` Who can make it serve again:… | "reconnect" | "admin" | "verify" | "wait" |
| `reason` Why, in words a person can… | string |
| `until` When waiting lifts it, in epoch… | number |
| `url` The 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 |
| `unread` Present while re-reading this account keeps… | object |
| `since` When re-reading this account first failed,… | number |
| `reason` Why, in the provider's own words… | string |
| `cooling` | object |
| `until` | number |
| `reason` | string |
| `verify` | string |
| `state` Whether it can serve a turn… | object |
| `when kind is "ready"` | shape |
| `room` How much of the fullest pool… | number |
| `when kind is "spent"` | shape |
| `reopensAt` When every full pool has reopened,… | number |
| `when kind is "blocked"` | shape |
| `fix` Who can make it serve again:… | "reconnect" | "admin" | "verify" | "wait" |
| `reason` Why, in words a person can… | string |
| `until` When waiting lifts it, in epoch… | number |
| `url` The provider's page where the account's… | string |
| `when kind is "unknown"` | shape |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/translator/accounts" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.translator.accounts();
```

**POST`/translator/{provider}/connect` Start 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 |
| --- | --- | --- |
| `provider` required | "codex" | "grok" | "kimi" | "gemini" | address |

### What comes back

| Field | Type |
| --- | --- |
| `url` The page to open | string |
| `code` The one-time code, where the provider… | string |
| `state` The handshake's id, which status reads… | string |
| `flow` Which shape this is | "device" | "redirect" |
| `catchers` Who is watching for where the… | object[] |
| `kind` | "device" | "browser" |
| `label` | string |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/translator/codex/connect" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.translator.connect({
 "provider": "codex"
});
```

**GET`/translator/{provider}/connect` Read 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 |
| --- | --- | --- |
| `provider` required | "codex" | "grok" | "kimi" | "gemini" | address |
| `state` required | string | query |

### What comes back

| Field | Type |
| --- | --- |
| `when status is "wait"` | shape |
| `when status is "ok"` | shape |
| `when status is "error"` | shape |
| `error` | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/translator/codex/connect?state=idle" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.translator.status({
 "provider": "codex",
 "state": "idle"
});
```

**POST`/translator/{provider}/complete` Finish 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 |
| --- | --- | --- |
| `provider` required Which provider | "codex" | "grok" | "kimi" | "gemini" | address |
| `redirectUrl` required The address the browser was sent… | string | body |
| `state` required The handshake this belongs to | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
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"}'
```

TypeScript

```typescript
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}/disconnect` Disconnect one subscription**

Clears a single account by name. Any others under the same provider stay connected.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `provider` required | "codex" | "grok" | "kimi" | "gemini" | address |
| `name` required | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/translator/codex/disconnect" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"name":"nightly changelog"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.translator.disconnect({
 "provider": "codex",
 "name": "nightly changelog"
});
```

More in Models and accounts

[Previous ← Accounts](https://intentic.dev/api/accounts/)[Next Endpoints →](https://intentic.dev/api/endpoints/)
