Skip to content

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, so 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
projectKeystring-Required. 8-64 chars.
typeenumbugbug · idea · question
commentstring-Required. 1-4000 chars.
testerstringanonymous≤ 120 chars.
release / environmentstring-≤ 50 chars each.
routestring-≤ 500 chars.
contextobject-Validated 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.