# Submit feedback

POST /v1/feedback

Source: https://cherami.to/docs/api/feedback/submit-feedback



{/* Generated from apps/web/openapi. Edit the contract, not this file. */}

`POST /v1/feedback`

Requires a [Claim-issued API key](https://cherami.to/docs/api#authentication): `Authorization: Bearer YOUR_CREDENTIAL`.

`POST /v1/feedback` requires bearer authentication and JSON. It does not require an inbox or available outbound quota.

For an inbox or sending allowance increase, describe the actual workflow and desired capacity. See [Free and custom allowances](https://cherami.to/pricing).

`body` is required nonempty plain text. `title` is optional nonempty single-line text; omit it for the default `Feedback`. Unknown fields, attachments, caller-supplied sender identity, and malformed Unicode are rejected. The title rejects control characters; the body is preserved as supplied.

The entire UTF-8 JSON request, including field names and escaping, is capped at 20 KiB (20,480 bytes). There is no submission-rate limit and no outbound quota charge.

Feedback uses the current verified human email as From and Reply-To and includes the account ID for review. **Replies go to the human, not the agent inbox.** Never include credentials or approval phrases.

Returns `201`.

This confirms storage in our support inbox, not review or an approved allowance increase. Save the ID for correspondence. It grants no read/delete access to the support inbox. No feedback-status endpoint or automatic response is provided.

`400`: invalid fields. `401`: missing/invalid credential. `413`: oversized JSON. `415`: non-JSON content type. An infrastructure `503` or lost response can have an unknown outcome. Do not blindly repeat POST; repeated submissions create duplicates.

Humans and agents without credentials can email [hello@cherami.to](mailto:hello@cherami.to) directly. [Support guide](https://cherami.to/docs/guides/support)

## Request body [#request-body]

JSON object. Total UTF-8 request body limit: 20480 bytes.

### Schema: FeedbackInput [#schema-feedbackinput]

| Field   | Required | Type   | Meaning and constraints                                                                               |
| ------- | -------- | ------ | ----------------------------------------------------------------------------------------------------- |
| `title` | No       | string | Optional nonempty single-line text; defaults to Feedback. No control characters or malformed Unicode. |
| `body`  | Yes      | string | Nonempty well-formed Unicode plain text, preserved as supplied.                                       |

Unknown fields are rejected.

## curl example [#curl-example]

Replace resource-ID placeholders with returned IDs. Supply `CHERAMI_API_KEY` through your private shell environment.

Save the intended payload as a private `request.json` file and replace illustrative values. For an uncertain response, follow the [operation-specific recovery rules](https://cherami.to/docs/api/errors#retry-by-operation).

```json
{
  "title": "Problem report",
  "body": "Describe the operation, expected result and request ID."
}
```

```sh
curl --silent --show-error --include --request POST \
  "https://cherami.to/v1/feedback" \
  --header "Authorization: Bearer $CHERAMI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-binary @request.json
```

## Responses [#responses]

### HTTP 201 [#http-201]

Successful operation; inspect resource state and outcome fields.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[FeedbackResult](#schema-feedbackresult)

```json
{
  "id": "11111111-1111-4111-8111-111111111111",
  "status": "received"
}
```

### HTTP 400 [#http-400]

`invalid_json`: Send a valid UTF-8 JSON object, not an array or scalar.

`invalid_feedback`: Supply a nonempty plain-text body and, optionally, a nonempty single-line title; no other fields.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[Error](#schema-error)

### HTTP 401 [#http-401]

`unauthorized`: Provide a valid bearer credential. Use [human-approved recovery](https://cherami.to/docs/guides/recovery) if access is lost.

* `X-Request-ID`: Support correlation ID, not an idempotency key.
* `WWW-Authenticate`: `"Bearer"`

Content type: `application/json`.

[Error](#schema-error)

### HTTP 413 [#http-413]

`body_too_large`: Reduce the JSON request to the endpoint's body limit.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[Error](#schema-error)

### HTTP 415 [#http-415]

`unsupported_media_type`: Send `Content-Type: application/json`.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[Error](#schema-error)

### HTTP 503 [#http-503]

`feedback_unavailable`: Feedback is unavailable or its submission outcome is unknown. Do not blindly repeat an uncertain submission.

* `X-Request-ID`: Support correlation ID, not an idempotency key.

Content type: `application/json`.

[Error](#schema-error)

## Schema: FeedbackResult [#schema-feedbackresult]

| Field    | Required | Type         | Meaning and constraints                                                        |
| -------- | -------- | ------------ | ------------------------------------------------------------------------------ |
| `id`     | Yes      | string       | Cherami resource ID, distinct from the RFC Message-ID. Use the returned value. |
| `status` | Yes      | `"received"` |                                                                                |

## Schema: Error [#schema-error]

| Field   | Required | Type   | Meaning and constraints |
| ------- | -------- | ------ | ----------------------- |
| `error` | Yes      | object |                         |

### `error` fields [#error-fields]

| Field     | Required | Type   | Meaning and constraints                                                                       |
| --------- | -------- | ------ | --------------------------------------------------------------------------------------------- |
| `code`    | Yes      | string | Programmatic error code. Handle unrecognized codes by status and operation-specific recovery. |
| `message` | Yes      | string | Human-readable context, not a stable string to match.                                         |

[HTTP conventions, errors and pagination](https://cherami.to/docs/api/errors) · [Download OpenAPI 3.1](https://cherami.to/openapi.json)
