---
title: "Send feedback to Zindex staff"
method: POST
path: "/v1/feedback"
tags: ["Feedback"]
---

# Send feedback to Zindex staff

`POST /v1/feedback`

## Request

- Base URL: `https://api.zindex.ai`
- URL: `https://api.zindex.ai/v1/feedback`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Tell Zindex staff about a bug, a place where the docs and the engine disagree, or something you needed that is missing, with or without a diagram. The person confirms each item: without confirm, nothing is stored and the answer is 400 CONFIRMATION_REQUIRED with preview (the item exactly as staff will see it, with the engine version and client Zindex adds) and a confirm token. Show the person the preview, and only if they agree, send the same body again with confirm; the token is valid for 10 minutes, for this account and this item only. An attached diagram version (id, revision) or snippet is anonymized unless anonymize is false. An account can send 20 items in any 24 hours. Staff read every item; no model does. GET /v1/feedback shows each item's status. Over MCP: diagram_share with action feedback.

## Headers

- `X-Zindex-Client` string

## Request body

- FeedbackRequest
  - `kind` 'bug' | 'docs' | 'request' | 'other', required: docs: the docs and the engine disagree
  - `summary` string, required: One line
  - `expected` string
  - `observed` string
  - `confidence` 'seen' | 'likely' | 'unsure'
  - `id` string: A diagram to attach, by ID or key; not with snippet
  - `revision` integer: With id: the version; default the latest
  - `snippet` union: A scene document or Mermaid text to attach, up to 64 KB; not with id
    - string
    - object
  - `anonymize` boolean: Anonymize the attached diagram or snippet
  - `confirm` string: The token from CONFIRMATION_REQUIRED, once the person agreed

## Response `201`

Sent: { feedbackId, sent: true, status: "new" }

- object
  - `feedbackId` string, required: fb_ plus 12 characters
  - `sent` true, required
  - `status` 'new', required

## Other responses

- `400`: CONFIRMATION_REQUIRED, with confirm and preview: nothing was sent. INVALID_REQUEST: a field is wrong; error says which
- `401`: Missing or invalid API key. Response includes a `code` field that distinguishes the failure mode so clients (dashboard, MCP server) can render actionable copy: `AUTH_REQUIRED` (no key or session was sent), `API_KEY_INVALID` (key not found), `API_KEY_REVOKED` (key was revoked, or its person is no longer in its workspace), `API_KEY_EXPIRED` (key passed its expires_at), and for the site's session cookie `SESSION_EXPIRED` (past its 24 hours), `SESSION_REVOKED` (the account's sessions were ended, for example by a password reset) and `SESSION_INVALID` (not a session this server signed).
- `403`: EMAIL_NOT_VERIFIED: verify the account's email first; READ_ONLY: a diagram attached with a read key or as a viewer
- `404`: NOT_FOUND: no diagram with that id or key in this workspace, or no such revision
- `413`: INPUT_TOO_LARGE: the snippet is over 64 KB
- `422`: PARSE_ERROR or another Mermaid code: a Mermaid snippet to anonymize couldn't be read; send it with anonymize false to keep it as it is
- `429`: RATE_LIMITED: the account sent 20 items in the last 24 hours, or the request rate limit (see Rate Limiting); retryAfter (also the Retry-After header) is the seconds to wait

---

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