Ingest HTTP API

webflutter

The endpoint the SDK talks to. Use it directly to pipe feedback from a CLI, a game engine, or anything that isn't a browser.

POST /v1/ingest/feedback

Authenticated by project key + origin: the projectKey in the body must exist, and the request's Origin header must match the project's allowlist. Both failures return the same 403 — the endpoint cannot be used to enumerate keys.

request
curl -X POST https://api.tracebird.dev/v1/ingest/feedback \
  -H "Content-Type: application/json" \
  -H "Origin: https://app.acme.dev" \
  -d '{
    "projectKey": "pk_live_a1b2c3",
    "type": "bug",
    "comment": "checkout total shows NaN",
    "tester": "karim@acme.dev",
    "release": "1.4.2",
    "environment": "staging",
    "route": "/checkout",
    "context": {
      "viewport": "1440 × 900",
      "browser": "Chrome",
      "logs": [{ "level": "error", "text": "TypeError: …" }],
      "network": [{ "method": "POST", "url": "/api/pay", "status": 500, "ms": 612 }]
    }
  }'
202 Accepted
{ "id": "7cdcf106-eb36-453b-8065-c2c4b002c13b" }

Body fields

optiontypedefaultdescription
projectKeystringRequired. 8–64 chars.
typeenumbugbug · idea · question
commentstringRequired. 1–4000 chars.
testerstringanonymous≤ 120 chars.
release / environmentstring≤ 50 chars each.
routestring≤ 500 chars.
contextobjectValidated field by field — see Captured context for every key and cap. Unknown keys are stripped.

Responses

  • 202 — accepted; returns the feedback id.
  • 400 — validation failed; the first offending field is named in the message.
  • 403 — unknown key or origin not allowlisted (intentionally indistinguishable).
  • 413 — body over 8 MB.
  • 429 — rate limited (per-IP backstop).
⚠ heads upServer-to-server callers must still send an Origin header matching the allowlist — add a dedicated origin like ci.acme.dev to the project for automated reporters.