Documentation
Payna Compliance API
Programmatic access to the licensing data Payna manages for you. Status, renewal dates, per-person licensing, continuing education, open regulator conditions, and attestations, over HTTPS.
# Is this company licensed in California, right now?
curl -s https://app.payna.com/api/v1/licenses/CA \
-H "Authorization: Bearer $PAYNA_API_KEY"Every endpoint is read only and scoped to your company by the API key you send. There is no company or tenant parameter anywhere in the API, because the key already determines it.
Responses reflect the state as of the last time Payna reconciled your records against the registries, which happens on a schedule rather than on every request. Every response carries a meta.synced_at timestamp so you can show that freshness rather than infer it.
What it covers
The API is split into two resource groups, and most integrations use only one of them.
- Licenses are entity level. This is the company license portfolio across every state and activity type: lending, mortgage, debt collection, money transmission.
- Individuals are person level. Loan officers, insurance adjusters, and any other regulated person, each with their own licenses, continuing education, open conditions, attestations, and task queue.
Individuals are typed by vertical rather than split across separate routes. Filter with ?type=mlo or ?type=adjuster, or omit the filter to get everyone. A new regulated role does not add new endpoints.
Base URL
https://app.payna.com/api/v1The API is served from the application domain, not from this marketing site. HTTPS only.
At a glance
| Property | Value |
|---|---|
| Authentication | Bearer token, keys begin pk_live_ |
| Methods | GET only. The API is read only. |
| Rate limit | 300 requests per 15 minutes, per API key, sliding window |
| Pagination | Page and limit, default 50, maximum 200 |
| Format | JSON. Every success carries data and meta. |
| Versioning | Path versioned at /v1 |
Endpoints
9 endpoints in total. Full parameters and response schemas are on the reference pages, and the interactive reference lets you paste a key and run a real request against your own data.
| Endpoint | Returns |
|---|---|
| GET /licenses | List all licenses |
| GET /licenses/summary | Get license summary |
| GET /licenses/{state} | Get license for a state |
| GET /individuals | List regulated individuals |
| GET /individuals/{id}/licenses | Get a person’s licenses |
| GET /individuals/{id}/license-conditions | Get open conditions |
| GET /individuals/{id}/ce-status | Get continuing education status |
| GET /individuals/{id}/attestations | Get attestations |
| GET /individuals/{id}/tasks | Get assigned tasks |
Response shape
Every successful response is an object with data and meta. Collections put an array in data; single resources put an object there. Errors replace both with a single error key, which is covered on the errors page.
{
"data": [ ... ],
"meta": {
"total": 37,
"page": 1,
"limit": 50,
"synced_at": "2026-07-16T18:36:49Z"
}
}synced_at is the last time Payna reconciled these records against the registry. It is the field to surface if you are showing a freshness indicator to your own users.
Getting a key
BOOK A DEMO
See how Payna runs licensing.
Tell us a little about the company and we’ll walk through how Payna handles licensing and compliance in every US state.