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.
/api/v1/feedbackAPI keyRequest
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
| Status | Body | Fix |
|---|---|---|
400 | invalid JSON | Send valid JSON. |
400 | invalid kind | Use bug, idea, question or praise. |
400 | message is required / message is too long (max 5000) | |
400 | data must be an object / metadata must be an object | |
400 | data is too large (max 8192 bytes) / metadata is too large (max 8192 bytes) | |
400 | rating must be an integer from 1 to 5 | |
401 | invalid API key | Missing, malformed, unknown or revoked key. |
403 | insufficient scope | The key lacks feedback:write. |
429 | rate_limited | 240 requests per minute per workspace; honor retry-after. |
Behavior
- Feedback is stored with source
apiand counts as attested. - A test key (
rh_test_…) stores rows withtest = 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.
Related
Last updated on
SDK API reference
Wire-level reference for every /api/sdk/v1 endpoint, with request bodies, responses, status codes, error messages, CORS rules and the keyless auth model.
Paywall management API
Read and edit paywall entitlements, SKU defaults and A/B experiments through GET and PUT /api/mobile/paywall, with every operation, field and error message.