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" } }
StatusCodeMeaning
400BAD_REQUEST, BAD_CURSORA parameter is wrong
401UNAUTHORIZED, KEY_REVOKED, KEY_EXPIREDThe key is missing, unknown, revoked or expired
403SCOPE_REQUIRED, OWNER_SUSPENDED, OWNER_NOT_ACTIVATEDThe key or account cannot do this
404NOT_FOUNDNo such record in your account
429RATE_LIMITEDSlow 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

Endpoint reference

Interactive reference generated from openapi.json. Try it with your own key.