Skip to main content
The feedback API sends reports about Squasher itself to the Squasher team for review. A report does not go to your project, and the API has no operations to list or read reports back. See Send feedback to Squasher for the dashboard and CLI.

Send feedback with an API key

POST https://api.squasher.ai/v1/feedback (feedback.submit) accepts the normal API key in the x-squasher-key header or the Authorization: Bearer header, or an OAuth token. A key that has only the events:ingest scope (the key inside your app) returns 403; use another key or the anonymous endpoints below.
Unknown fields return 400. The body can be at most 32 KiB; a larger body returns 413. A successful request returns 201:
Squasher records the organization, project, and user that the credential belongs to, so the team can follow up. Do not put secrets, personal data, or telemetry payloads in a report. Each organization can send 100 reports an hour. A request over the limit returns 429 with a Retry-After header. The TypeScript client has client.feedback.submit(params). It sends each report once and does not retry by itself. Over MCP, call the operation in execute:
feedback.submit is a write operation, so it is not available in a read-only MCP session.

Send feedback without an API key

Squasher implements the six public Feedback.now operations. An agent can report a problem with an API, documentation page, CLI command, or SDK method without an API key or project ID. Reports go to the Squasher team. Fetch the discovery document and policy before constructing a submission: The generated contract is available at https://squasher.ai/api/openapi. Unknown object fields, invalid enum values, non-finite confidence values, and strings outside the published bounds are rejected before anything is stored.

Submit a full report

A successful submission returns 201 and a durable receipt containing id, feedback_id, status, evidence_ids, and created_at. Poll GET /api/v1/receipts/{id} with the receipt ID. The receipt shows the result of the team’s review: accepted, duplicate, or rejected. The receipt never names other reports. It also shows the quality score and the evidence count when they are available. An observation requires surface, domain, agent_vendor, and agent_product. A full report requires reporter, subject, signal, and content; see the OpenAPI document for the nested schema. Categories are bug, docs_mismatch, friction, feature_gap, quality_degradation, and other. Each full report can hold at most 10 evidence items. Every item needs a type and nonempty content; UTF-8 content is limited to 256 KiB per item. The encoded request body is limited to about 3 MiB. The attachment endpoint accepts one evidence item, an array of items, or { "evidence": [...] }. Only the sender of a report can add evidence to it: send the request from the same network, or with the same API key or sign-in that sent a POST /v1/feedback report. Other callers get 404. Supported types are http_summary, stderr_excerpt, repro_steps, screenshot, log_excerpt, and other. Anonymous observations and full reports share a durable limit of 100 submissions per source per rolling hour. Successful submission responses include RateLimit, RateLimit-Policy, RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset. A limited request returns 429 plus Retry-After. Validation, missing-resource, size-limit, rate-limit, and server failures use JSON with stable error and human-readable message fields. The protocol has submission, evidence attachment, and receipt reads only. It has no list, update, or delete operations. The TypeScript client supports anonymous use without an API key:
Equivalent CLI commands live under squasher feedback now: