RevenueHogdocs
API

Feedback API

Reference for POST /api/v1/feedback, the API key endpoint that forwards feedback from your servers and forms into RevenueHog, with every error and limit.

POST /api/v1/feedback ingests feedback from your servers, for example a web contact form or a support tool. It requires an API key. For feedback sent straight from your app, use the keyless SDK path.

POST/api/v1/feedbackAPI key

Request

curl https://revenuehog.dev/api/v1/feedback \
  -H "Authorization: Bearer rh_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "bundleId": "com.example.app",
    "kind": "idea",
    "message": "Please add a dark mode to the widget.",
    "rating": 4,
    "appUserId": "user_42",
    "metadata": { "source": "web-form" }
  }'

Prop

Type

Response

201 Created:

{ "ok": true, "id": "…" }

A workspace-wide key whose bundleId is missing or matches no app in your workspace returns 200 { "ok": true } and stores nothing, so a misconfigured integration never retries forever.

Errors

StatusBodyFix
400invalid JSONSend valid JSON.
400invalid kindUse bug, idea, question or praise.
400message is required / message is too long (max 5000)
400data must be an object / metadata must be an object
400data is too large (max 8192 bytes) / metadata is too large (max 8192 bytes)
400rating must be an integer from 1 to 5
401invalid API keyMissing, malformed, unknown or revoked key.
403insufficient scopeThe key lacks feedback:write.
429rate_limited240 requests per minute per workspace; honor retry-after.

Behavior

  • Feedback is stored with source api and counts as attested.
  • A test key (rh_test_…) stores rows with test = true, hidden by default and never posted to Slack.
  • Live feedback is posted to Slack when routing is configured; a Slack failure never fails the write.
  • Each successful call updates the key's last-used time.
  • CORS is permissive and responses are not cached, but keep keys server-side.

Last updated on

On this page