Owner API
Read access to your whole account over HTTPS with a key from Settings → API Access.
Getting started
The Rinsepay Owner API gives your own software read access to everything in your account: locations, bays and their live state, controllers, wash sessions, transactions with line items, refunds, customers, memberships, bundles, fleet accounts and invoices, vouchers, loyalty points, analytics, staff, shifts, payroll, expenses, problem reports and ratings.
1. Create a key
In the Rinsepay app open Settings → API Access and tap Create key. Name it after the tool that will use it. The key is shown once; we only store a hash. Keys start with rp_live_ (or rp_test_ for sandbox accounts).
Tick Include customer contact details only when the integration needs names, emails, phones or plates. Without it those fields come back masked.
2. Make a call
curl https://api.rinsepay.app/api/v1/me \
-H "Authorization: Bearer rp_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
{ "data": { "owner_id": "…", "business_name": "Kraken Car Wash", "timezone": "America/Chicago", "key": { "scopes": ["read"] } } }
Every request needs the key as a Bearer token. Cookies and app logins are never accepted on /api/v1.
3. Lists and pagination
List endpoints return { "data": [...], "next_cursor": "..." }, newest first. Pass next_cursor back as ?cursor= until it is null. limit is 1 to 200 (default 50). Most lists accept since and until (ISO timestamps) on the creation time.
curl "https://api.rinsepay.app/api/v1/transactions?limit=100&since=2026-10-01T00:00:00Z" -H "Authorization: Bearer $KEY"
Money is always integer cents. Timestamps are ISO 8601 in UTC; records carry location_tz so you can show local times.
4. Rate limits
Each key gets 30 calls per minute and 2,000 per day. Heavy calls (transaction pages over 50 rows, P&L, sales tax, payroll, a fleet invoice with its washes) count as 5. Watch the headers:
X-RateLimit-Limit-Minute, X-RateLimit-Remaining-Minute, X-RateLimit-Reset-Minute
X-RateLimit-Limit-Day, X-RateLimit-Remaining-Day, X-RateLimit-Reset-Day
Over the limit you get 429 with Retry-After in seconds. Need more? Email support@rinsepay.app.
5. Errors
{ "error": { "code": "NOT_FOUND", "message": "Location not found" } }
| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST, BAD_CURSOR | A parameter is wrong |
| 401 | UNAUTHORIZED, KEY_REVOKED, KEY_EXPIRED | The key is missing, unknown, revoked or expired |
| 403 | SCOPE_REQUIRED, OWNER_SUSPENDED, OWNER_NOT_ACTIVATED | The key or account cannot do this |
| 404 | NOT_FOUND | No such record in your account |
| 429 | RATE_LIMITED | Slow down (see Retry-After) |
6. Sandbox
Test-mode accounts use https://api.rinsepay.design with rp_test_ keys. Data there is seeded and reset nightly.
Changelog
- 2026-10 · v1.0 First release: 39 read endpoints, OpenAPI document at
/api/v1/openapi.json.
Endpoint reference
Interactive reference generated from openapi.json. Try it with your own key.