---
title: Feedback
url: https://base_url.placeholder/docs/api/feedback
group: Surfaces
---

# Feedback

The agent contract face. `GET /api/v1/agent-guidelines` is the operating rules as one document — public, no key needed. `POST /api/v1/feedback` reports what ImageStep could not do, instead of routing around it, and `GET /api/v1/feedback` reads your reports back.

2 endpoints under `/api/v1/feedback`. What every call shares is on [the REST overview](https://base_url.placeholder/docs/api#conventions), and what they are for — with the calls for every SDK, the CLI and MCP — on [For agents → The operating contract](https://base_url.placeholder/docs/agents#contract). `*` marks a required field.

- GET /api/v1/feedback — Your own reports
- POST /api/v1/feedback — Report something ImageStep could not do

## Your own reports

GET /api/v1/feedback

[Paged](https://base_url.placeholder/docs/errors#pagination) — `page` and `perPage`, or `cursor`, in; `meta` out

Everything this account has submitted, newest first, a page at a time. Yours only; there is no cross-account read.

### Returns `200` — `data` is `Feedback[]`

## Report something ImageStep could not do

POST /api/v1/feedback

Accepts an [`Idempotency-Key`](https://base_url.placeholder/docs/errors#idempotency)

USE THIS WHEN: an op you needed does not exist, a parameter did not behave the way the contract describes, or you were about to work around ImageStep with something local. Reporting the gap is the alternative to routing around it.

Free: no credit, no job, no rate-limit budget beyond the shared API one. `kind` is `capability_gap` (ImageStep cannot do it at all), `bug` (it did not behave the way the contract says) or `other`; `message` says what you were trying to do. `op` names the operation when there is one and is **not** checked against the catalogue — the most useful report is about an op that does not exist yet. `context` is any JSON object worth keeping.

The report comes back (`201`) with the `apiKeyId` it was filed under, so an account running one key per agent can tell whose report it is. It is your account's data: exported with it and deleted with it.

### Request body — `FeedbackRequest`

### Returns `201` — `data` is `Feedback`

Logged

### Errors

| Status | Code and when |
| --- | --- |
| 400 | Nothing is stored when any of these is refused:<br>- `invalid_param` on `kind` — missing, or not one of the three (matched case-insensitively)<br>- `invalid_param` on `message` — missing, blank, or over 4000 characters once trimmed<br>- `invalid_param` on `op` — over 64 characters<br>- `invalid_param` on `context` — over 4000 characters once encoded as JSON |

## Objects

Each described once; a linked type is another object on this page.

### Feedback

| Field | Type | Description |
| --- | --- | --- |
| apiKeyId | string | The API key this was reported with; absent when it came from a signed-in console session. |
| context | object | Anything structured worth keeping: the parameters tried, the client, the model. |
| createdAt | string (date-time) |   |
| id | string | The report's id, `fbk_…` |
| kind | string | capability_gap · bug · other, stored lower-case |
| message | string | What the reporter wrote, trimmed |
| op | string | The op this is about, when it is about one.<br>e.g. "remove_bg" |

### FeedbackRequest

A report from an agent about something ImageStep could not do.

| Field | Type | Description |
| --- | --- | --- |
| context | object | Anything structured worth keeping — the parameters tried, the client, the model; at most 4000 characters once encoded as JSON. |
| kind* | string | capability_gap · bug · other, matched case-insensitively |
| message* | string | What you were trying to do and what stopped you; at most 4000 characters. |
| op | string | The op this is about, when it is about one — any name up to 64 characters; not checked against the catalogue.<br>e.g. "remove_bg" |
