---
title: "Report a problem, a documentation gap, or an idea"
method: POST
path: "/feedback"
tags: ["Feedback"]
---

# Report a problem, a documentation gap, or an idea

`POST /feedback`

## Request

- Base URL: `https://api.domscout.io`
- URL: `https://api.domscout.io/feedback`
- Auth: API key in header `x-api-key`

A direct channel from the calling model or developer to the domscout team. **This request is never billed** — it consumes no credits and no quota, and is subject only to the per-second rate limit and a daily report cap.

Use it when an error message was not actionable, a documented parameter did not behave as described, a capture succeeded but returned the wrong thing, or a capability you needed was missing. Include `requestId` when the report is about a specific request and the server will attach its own record of that request — status, error, latency, and the parameters it ran with — so there is no need to restate them.

Reports are read by humans. Do not send secrets; the server strips credential-shaped strings before storing, but the cheapest redaction is not sending them.

## Request body

- FeedbackRequest
  - `message` string, required: What happened, or what would help. The only required field.
  - `type` 'bug' | 'error_report' | 'docs_gap' | 'feature_request' | 'praise' | 'other': Unrecognised values become "other" rather than being rejected.
  - `severity` 'blocking' | 'major' | 'minor' | 'info': "blocking" means you could not complete the task at all.
  - `requestId` string: The X-Request-Id of the request this is about. When present, the server attaches its own record of that request — status, error, latency, format — so you need not restate them.
  - `endpoint` string: e.g. "POST /screenshot".
  - `expected` string: What you expected to happen.
  - `actual` string: What happened instead.
  - `agent` object: Who is reporting: model, framework, version. Self-declared, used only to spot patterns across reports, never for authorization. Up to 10 string/number/boolean values.

## Response `202`

Recorded. Not charged.

- FeedbackAccepted
  - `status` 'received'
  - `feedbackId` string, uuid
  - `charged` false: Always false. Feedback is never billed.
  - `creditCost` 0
  - `reportsToday` integer: Reports from this account in the last 24 hours, including this one.
  - `message` string
  - `normalized` object[]: Fields that were stored differently from how they were sent. This endpoint deliberately coerces rather than rejecting — an unrecognised `type` is filed as "other", an unrecognised `severity` as "info", and a message longer than 8000 characters is truncated — because refusing a bug report over a bad enum value discards the report. Absent when nothing was changed.
    - `field` string
    - `supplied` string
    - `recordedAs` string

## Other responses

- `400`: message is missing or empty. Everything else is coerced rather than rejected.
- `403`: Missing, invalid, or revoked API key.
- `429`: Per-second rate limit, or the daily report cap for this account.
- `503`: A dependency this request needs is unavailable or not configured for this deployment. Codes: SUPABASE_TIMEOUT and SUPABASE_INVALID_RESPONSE (a storage operation did not answer, or answered unreadably — the write may have committed, so any retry must be idempotent), CAPTURE_ARTIFACT_UNAVAILABLE and CAPTURE_ARTIFACT_CORRUPT (a stored artifact could not be read or parsed), ASYNC_JOBS_NOT_CONFIGURED and CAPTURE_RETRIEVAL_NOT_CONFIGURED (the capability is not configured here, on any plan). Retryable unless the code names a deployment configuration.

---

[API](https://skmtc.dev/domscout/apis/domscout-api.md) · [All operations](https://skmtc.dev/domscout/apis/domscout-api/llms.txt) · [OpenAPI document](https://skmtc.dev/domscout/apis/domscout-api/revisions/20562d5b5d94?raw)
