Overview
Every request under/public/* must include a valid partner API key, except:
GET /health— no authentication (liveness check).OPTIONS— CORS preflight (no API key).
/public/* with their key (for example server-side or from a trusted backend).
Base URL
Production API host:/public/... prefix from the site root (some clients also accept /public/v1/..., which the API normalizes to /public/...).
Sending the API key
Use one of the following on each request: Authorization (Bearer)rhino_). Other Authorization: Bearer values are ignored for this purpose.
Key format
Issued keys follow:live. The middle segment is unique per key; the final segment is secret material and must be stored securely.
Minting a key (operators / backend only)
New keys are created withPOST /public/partner/api-keys. This endpoint is not for end-user browsers.
Headers
X-Partner-Mint-Key— must match the Worker secretPARTNER_MINT_SECRET(configured in your deployment). Treat this like a root credential: never expose it in frontends, mobile apps, or public repos.
| Field | Required | Description |
|---|---|---|
party_id | Yes | UUID of the party this client belongs to. |
client_name | No | Label for the API client record (default is derived from environment). |
environment | No | e.g. live (default live). |
scopes | No | Array of scope strings; see Scopes. Defaults include partner:api and keys:manage. |
api_key exactly once. Copy it to a password manager or secret store immediately; it cannot be retrieved again from the API.
Scopes
| Scope | Purpose |
|---|---|
partner:api | Call normal integration routes under /public/* (onboarding, parties, loans, etc.). |
keys:manage | List and revoke keys for your API client (GET / DELETE partner key routes below). |
scopes array when minting.
Wildcards such as * or partner:* are honored by the server when present in stored scopes.
Managing keys
These routes require a valid partner API key withkeys:manage.
List keys (masked)
key_prefix, status, created_at, revoked_at — never the full secret.
Revoke a key
api_key_id (UUID) returned at mint time or from the list endpoint.
Party-scoped URLs
For paths like/public/parties/{partyId}/..., the partyId in the URL must match the party_id tied to your API key. Otherwise the API responds with 403 (party_mismatch).
Internal APIs
Routes under/internal/* are for internal or service-to-service use. Partner API keys are not accepted there; they use separate internal controls. Do not point partner integrations at /internal/*.
Postman
Suggested environment variables:| Variable | Example use |
|---|---|
base_url | https://api.rhino-asset.com |
api_key | Full rhino_... string for Authorization or X-Api-Key on almost all requests |
partner_mint_secret | Only for Mint key requests (X-Partner-Mint-Key) — keep out of shared collections |
- Method + URL:
GET{{base_url}}/public/parties/{{party_id}} - Headers:
AuthorizationBearer {{api_key}}
Next steps
- Stage-specific endpoints: start with Onboarding, then Application, Servicing, etc., from the API overview.
