---
title: "Endpoints · intentic sandbox API"
description: "A model server you configured, and the free trial's allowance. Every route in the endpoints group of the intentic sandbox API."
url: "https://intentic.dev/api/endpoints/"
---

Models and accounts

# Endpoints

A model server you configured, and the free trial's allowance

**On this page (4 sections)**

- [Models a connected server offers](#endpoints-models)
- [What is left of the free trial](#endpoints-trial)
- [Which local models this machine can actually run](#endpoints-localModelFit)
- [Fetch the small model's weights ahead of being asked](#endpoints-localModelPrefetch)

Every built-in provider's catalogue is one fixed route, because there is one of each. Endpoints are user-created and unbounded, so the id rides in the address and the answer is whatever the configured server says about itself. The trial belongs here because the trial is an endpoint — the one the daemon provisions rather than you.

**GET`/endpoints/{id}/models` Models a connected server offers**

Asks one configured model server what it serves. There is no built-in list and no fallback: what a server offers is knowable only by asking it, so an empty answer is the honest report that we could not.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which connection | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `models` What this provider serves, in its… | object[] |
| `id` What to name when asking for… | string |
| `label` What to call it on screen | string |
| `efforts` The thinking levels it accepts, where… | string[] |
| `description` What it is good for, in… | string |
| `badges` What it is known for, where… | "reasoning" | "fast"[] |
| `contextWindow` How many tokens this model will… | number |
| `helperOnly` Set where this model may write… | "no-tool-calls" | "instant-tier" |
| `availableAt` When this model can be asked… | number |
| `default` Which one a fresh conversation starts… | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/endpoints/a1b2c3d4/models" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

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

const result = await sandbox.endpoints.models({
 "id": "a1b2c3d4"
});
```

**GET`/endpoints/trial/status` What is left of the free trial**

The allowance, what has been used, when it resets, and which model actually answered the last message. Not being available is the ordinary answer rather than a failure: most sandboxes run against a platform that offers no trial at all.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `available` | boolean |
| `allowance` | integer |
| `used` | integer |
| `remaining` | integer |
| `health` | "unknown" | "healthy" | "degraded" | "unavailable" |
| `resetsAt` | string |
| `retryAt` | string |
| `servedModel` | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/endpoints/trial/status" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

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

const result = await sandbox.endpoints.trial();
```

**GET`/endpoints/local-model/fit` Which local models this machine can actually run**

The memory this sandbox may use, whether a GPU reached it, and every curated model priced two ways: whether it fits on one device's free memory and so runs at full speed, and whether it can load at all. The two the connect view offers, one that downloads in a minute and the best this machine runs at full speed, come from the first; a start is refused only on the second.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `memoryBytes` | integer |
| `memoryCapped` | boolean |
| `gpu` | "granted" | "unsupported" | "absent" |
| `gpuMemoryBytes` | integer |
| `gpuFreeBytes` | integer |
| `budgetBytes` | integer |
| `fullSpeedBytes` | integer |
| `fullSpeedDevice` | "gpu" | "host" |
| `serverReady` | boolean |
| `options` | object[] |
| `model` | string |
| `label` | string |
| `tier` | "instant" | "work" |
| `weightsBytes` | integer |
| `held` | boolean |
| `windows` | object[] |
| `tokens` | integer |
| `totalBytes` | integer |
| `fits` | boolean |
| `fullSpeed` | boolean |
| `instant` | object |
| `model` | string |
| `context` | string |
| `best` | object |
| `model` | string |
| `context` | string |
| `prefetch` | object |
| `model` | string |
| `state` | "idle" | "downloading" | "held" | "failed" |
| `receivedBytes` | integer |
| `totalBytes` | integer |
| `detail` | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/endpoints/local-model/fit" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

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

const result = await sandbox.endpoints.localModelFit();
```

**POST`/endpoints/local-model/prefetch` Fetch the small model's weights ahead of being asked**

Downloads the curated instant model into the workspace cache so that adding it later costs nothing. Stopping leaves the part file, so a later start resumes from where this one stopped rather than beginning again.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `action` required | "start" | "stop" | body |

### What comes back

| Field | Type |
| --- | --- |
| `model` | string |
| `state` | "idle" | "downloading" | "held" | "failed" |
| `receivedBytes` | integer |
| `totalBytes` | integer |
| `detail` | string |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/endpoints/local-model/prefetch" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"action":"start"}'
```

TypeScript

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

const result = await sandbox.endpoints.localModelPrefetch({
 "action": "start"
});
```

More in Models and accounts

[Previous ← Routed providers](https://intentic.dev/api/translator/)[Next Providers →](https://intentic.dev/api/providers/)
