---
title: "Cursor accounts · intentic sandbox API"
description: "Connecting a Cursor subscription, and the accounts already connected. Every route in the cursor accounts group of the intentic sandbox API, with its input, its answer and a playground."
url: "https://intentic.dev/api/cursor/"
---

Models and accounts

# Cursor accounts

Connecting a Cursor subscription, and the accounts already connected

**On this page (5 sections)**

- [Begin connecting a Cursor account](#cursor-start)
- [Abandon a Cursor sign-in](#cursor-cancel)
- [Connected Cursor accounts](#cursor-accounts)
- [Rename a Cursor account](#cursor-rename)
- [Disconnect a Cursor account](#cursor-disconnect)

Begin a sign-in, abandon one nobody finished, see what is connected, rename one, disconnect one. A sandbox can hold several side by side. Nothing is pasted back and there is no code to type: the page that opens is already addressed to the attempt, and the sandbox completes the exchange itself, so the way to learn it worked is to watch the account list.

**POST`/cursor/login/start` Begin connecting a Cursor account**

Hands back the page to sign in on. The sandbox finishes the handshake itself and stores the credential, so nothing has to be pasted back: watch the account list instead.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `url` The page to open and sign… | string |
| `handshake` This attempt's id, for abandoning it | string |
| `expiresAt` When this attempt stops being answerable,… | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/cursor/login/start" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

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

const result = await sandbox.cursor.start();
```

**POST`/cursor/login/cancel` Abandon a Cursor sign-in**

Stops waiting on a sign-in nobody completed. An abandoned attempt also expires on its own.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `handshake` required Which attempt to stop waiting on | string | body |

### What comes back

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

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/cursor/login/cancel" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"handshake":"…"}'
```

TypeScript

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

const result = await sandbox.cursor.cancel({
 "handshake": "…"
});
```

**GET`/cursor/accounts` Connected Cursor accounts**

Each connected account, and whether its stored key is still good. Cursor publishes no plan-wide allowance, so these rows carry no usage reading.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `force` Measure the plan limits again before… | string | query |

### What comes back

| Field | Type |
| --- | --- |
| `accounts` The connected accounts | object[] |
| `id` The account's id, which is what… | string |
| `label` What it is called here, which… | string |
| `email` Who it signs in as, in… | string |
| `organization` Which organisation it belongs to, where… | string |
| `scope` What the credential is permitted to… | string |
| `connectedAt` When it was connected, in milliseconds | number |
| `needsReauth` Its stored credential can no longer… | boolean |
| `detail` Why, in words a person can… | string |
| `usage` How full its plan limits were… | object |
| `windows` | object[] |
| `kind` | string |
| `label` | string |
| `utilization` | number |
| `resetsAt` | number |
| `measuredAt` | number |

Try it answered in this tab

curl

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

TypeScript

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

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

**POST`/cursor/account/rename` Rename a Cursor account**

Changes the label one account shows under, so several are tellable apart.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which account | string | body |
| `label` required The new name | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `id` The account's id, which is what… | string |
| `label` What it is called here, which… | string |
| `email` Who it signs in as, in… | string |
| `organization` Which organisation it belongs to, where… | string |
| `scope` What the credential is permitted to… | string |
| `connectedAt` When it was connected, in milliseconds | number |
| `needsReauth` Its stored credential can no longer… | boolean |
| `detail` Why, in words a person can… | string |
| `usage` How full its plan limits were… | object |
| `windows` | object[] |
| `kind` | string |
| `label` | string |
| `utilization` | number |
| `resetsAt` | number |
| `measuredAt` | number |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/cursor/account/rename" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"id":"a1b2c3d4","label":"Nightly changelog"}'
```

TypeScript

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

const result = await sandbox.cursor.rename({
 "id": "a1b2c3d4",
 "label": "Nightly changelog"
});
```

**POST`/cursor/account/disconnect` Disconnect a Cursor account**

Clears the stored key for one account. The others stay connected.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which account | string | body |

### What comes back

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

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/cursor/account/disconnect" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"id":"a1b2c3d4"}'
```

TypeScript

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

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

More in Models and accounts

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