API
Authentication and where to find the full endpoint reference.
Everything the dashboard does is available over a clean REST API at
https://app.refundhalt.com. The complete, always-current endpoint
reference lives at
app.refundhalt.com/docs (OpenAPI).
Authentication
Create an API key in Dashboard → API keys and send it as a Bearer token.
API keys work on every /v1 endpoint, exactly like dashboard sessions:
curl https://app.refundhalt.com/v1/apps \
-H "Authorization: Bearer rh_live_..."Real usage evidence
Refund responses carry much stronger evidence when they include the buyer's real usage. You host one small webhook and RefundHalt calls it the moment a refund case opens, so the numbers are always fresh. Reply within 10 seconds; if it is down we retry and fall back to an estimate, so a refund is never blocked. See Usage data for the request/reply contract and the one-line auth check.
Common endpoints
| Endpoint | What it does |
|---|---|
GET /v1/apps | List your apps |
GET /v1/apps/{id}/setup | Setup guide values (webhook URL, topic, …) |
PUT /v1/apps/{id}/policy | Update refund policy & rules |
GET /v1/apps/{id}/forwards | List notification forwards |
POST /v1/apps/{id}/forwards | Add a forward URL |
GET /v1/refund-requests | The refund-request ledger (filterable) |
GET /v1/refunds | Refund outcomes |
GET /v1/analytics/overview | Saved revenue, save rate, totals |
Errors always come back as
{"error": {"code": "...", "message": "...", "details": …}}, and response
shapes never change based on state — empty lists are empty lists, never a
different object.