Payna is backed by Y Combinator

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/v1

The API is served from the application domain, not from this marketing site. HTTPS only.

At a glance

PropertyValue
AuthenticationBearer token, keys begin pk_live_
MethodsGET only. The API is read only.
Rate limit300 requests per 15 minutes, per API key, sliding window
PaginationPage and limit, default 50, maximum 200
FormatJSON. Every success carries data and meta.
VersioningPath 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.

EndpointReturns
GET /licensesList all licenses
GET /licenses/summaryGet license summary
GET /licenses/{state}Get license for a state
GET /individualsList regulated individuals
GET /individuals/{id}/licensesGet a person’s licenses
GET /individuals/{id}/license-conditionsGet open conditions
GET /individuals/{id}/ce-statusGet continuing education status
GET /individuals/{id}/attestationsGet attestations
GET /individuals/{id}/tasksGet 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

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.