Businesses
A business has a name, a status (ACTIVE / DISABLED), and one or more named API keys,
each stored only as a SHA-256 hash. Disabling a business immediately rejects all of its keys.
Several keys per business is deliberate: it is what makes revocation usable. Killing a
compromised “staging” key should not take “production app” down with it, and a key nobody
can identify is a key nobody dares revoke — hence the name on each one.
Revoking stamps a timestamp rather than deleting the row. Which key was live when a request
was made is exactly what an incident asks, and the key prefix is what resolves a request-log
line to the business that made it.
Scoping
The API key on a request resolves to exactly one business, whichever of that business’s keys was presented. Resources created through the API — payments, webhook endpoints — are tagged with that business’s id, and every read is filtered by it. Requesting another business’s resource returns404, not the data.
Management
- Admin provisions businesses (
POST /api/v1/businesses) and can manage any business by id (PATCH /api/v1/businesses/{id}). - Businesses self-manage through
/api/v1/me(view, rename, rotate their keys) — see Managing businesses. - Admins issue and revoke individual keys from the dashboard
(
POST /api/v1/admin/api-keys,POST /api/v1/admin/api-keys/{id}/revoke). Both are written to the audit trail inside the transaction that makes the change.
Satim merchant credentials are currently shared at the platform level, not per business —
Fintech Core abstracts them away so businesses never handle them directly.