---
title: "Issues · intentic sandbox API"
description: "Bugs your own users hit, grouped, and putting an agent on one. Every route in the issues group of the intentic sandbox API."
url: "https://intentic.dev/api/issues/"
---

Ship and share

# Issues

Bugs your own users hit, grouped, and putting an agent on one

**On this page (5 sections)**

- [Bugs your users have reported](#issues-list)
- [File one away, or reopen it](#issues-status)
- [Put an agent on it now](#issues-investigate)
- [Throw one away](#issues-remove)
- [Which sites have loaded the reporter](#issues-installs)

The owner's side of the bug intake, and the counterpart to the pipelines group: an inbox of failures with one route that hands a failure to an agent rather than to you. Reports arrive at the public /intake/… endpoints from the reporter embedded on your sites — a separate prefix precisely because any browser on the internet can reach those and none of these — and the daemon groups them by fingerprint, so a crash that hit a thousand browsers is one row with a count. These routes read that inbox, move a row between open, resolved and ignored, start a turn on one, throw one away, and answer which sites have actually loaded the reporter. Nothing here creates an issue.

**GET`/issues` Bugs your users have reported**

Everything that has crashed or been written in, grouped so a crash that hit a thousand people is one row with a count.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `issues` The inbox, most recently seen first | object[] |
| `kind` | "crash" | "report" | "detection" |
| `title` The one line this is listed… | string |
| `culprit` The frame it came from, when… | string |
| `automationId` Which intake received it | string |
| `origin` Which site it came from | string |
| `firstSeen` When it first happened, in milliseconds | number |
| `lastSeen` When it last happened, in milliseconds | number |
| `count` How many times this exact thing… | number |
| `status` Where it stands with you | "open" | "investigating" | "resolved" | "ignored" |
| `statusAt` When the status last changed, in… | number |
| `release` The build the latest one came… | string |
| `sample` The most recent one, in full | object |
| `kind` A crash the SDK caught, something… | "crash" | "report" | "detection" |
| `message` The error's own message, or the… | string |
| `stack` The stack, verbatim from the browser | string |
| `url` Where it happened: the page's address,… | string |
| `release` Which build it came from: a… | string |
| `userAgent` What the browser said it was | string |
| `description` What the person typed, when a… | string |
| `reporter` Who says they are reporting it | object |
| `email` An address they typed, to reach… | string |
| `name` A name they typed | string |
| `breadcrumbs` What happened just before, oldest first | object[] |
| `at` When, in milliseconds | number |
| `kind` What sort of thing it was:… | string |
| `message` What it said, already truncated by… | string |
| `context` Whatever else the app attached: a… | object |
| `fingerprint` Group by this instead of by… | string |
| `firedAt` What the count stood at the… | number |
| `runs` The turns started for it | object[] |
| `conversationId` The conversation this run became | string |
| `at` When it started, in milliseconds | number |
| `atCount` How many times it had happened… | number |
| `id` The issue's id, which is its… | string |
| `invalid` Files in the issues directory that… | string[] |

Try it answered in this tab

curl

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

TypeScript

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

const result = await sandbox.issues.list();
```

**POST`/issues/{id}/status` File one away, or reopen it**

Moves one issue between open, resolved and ignored. Resolving does not close anything upstream: it is your own inbox.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which issue | string | address |
| `status` required Where it now stands with you | "open" | "resolved" | "ignored" | body |

### What comes back

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

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/issues/a1b2c3d4/status" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"status":"open"}'
```

TypeScript

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

const result = await sandbox.issues.status({
 "id": "a1b2c3d4",
 "status": "open"
});
```

**POST`/issues/{id}/investigate` Put an agent on it now**

Starts a turn on this issue with the crash, its stack and what led up to it as the brief. Answers straight away and runs detached; the issue goes to 'being looked at'.

### What you send

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

### What comes back

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

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/issues/a1b2c3d4/investigate" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

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

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

**DELETE`/issues/{id}` Throw one away**

Forgets an issue entirely. It will come back as new if it happens again, which is usually what you want.

### What you send

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

### What comes back

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

Try it answered in this tab

curl

```bash
curl -X DELETE "$SANDBOX/issues/a1b2c3d4" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

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

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

**GET`/issues/installs/{automationId}` Which sites have loaded the reporter**

The sites whose pages actually loaded this intake's script, and the ones that were turned away. The answer to 'did the snippet land?', which an empty inbox cannot give you.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `automationId` required Which intake | string | address |

### What comes back

| Field | Type |
| --- | --- |
| `origins` | object[] |
| `origin` | string |
| `allowed` | boolean |
| `lastSeenAt` | number |
| `loads` | number |

Try it answered in this tab

curl

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

TypeScript

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

const result = await sandbox.issues.installs({
 "automationId": "a1b2c3d4"
});
```

More in Ship and share

[Previous ← Approvals](https://intentic.dev/api/approvals/)
