Propelus allows bulk verification of up to 500 professional licenses per request by submitting a batch via POST to the API. You receive a batchId and verificationUrl to poll asynchronously for results, once the status is COMPLETED. Required fields include licenseNumber, professionCode, and stateCode, with some boards requiring additional conditional data. Results confirm batch acceptance and provide details to fetch verification outcomes.
This is the core check: submit one or many professional licenses and Propelus verifies each against its issuing board. You send a batch, get back a batch ID, then fetch the results when they’re ready.
How it works
-
Submit a batch. POST your list of licenses. You get back a
batchIdand averificationUrlright away. -
Fetch the results. Verification runs asynchronously against each board. Poll the results endpoint with your
batchId— once the batchstatusisCOMPLETED, every license result is available. See reading license results. Alternatively, you can set up a webhook.
What you send
Send Content-Type: application/json and your bearer token. The body has an optional clientMetadata object and a required licenses array. Each license needs at least the required fields — but some boards require more, and fields marked conditional become mandatory for those boards.
| Field | Required | What it is |
|---|---|---|
| licenseNumber | Required | The license number to verify. Format varies by profession and state. |
| professionCode | Required | The type of license, e.g. RN. See state & profession codes. |
| stateCode | Required | The 2-letter state code, or CERT for a certification issued by a national organization. |
| certState | Conditional | The 2-letter state when stateCode is CERT. If there’s no associated state, omit it entirely. |
| dateOfBirth | Conditional | Required by some boards. Format YYYYMMDD (e.g. 19820128). |
| socialSecurityNumber | Conditional | Required by some boards. Exactly 9 digits. |
| firstName | Conditional | License owner’s first name. Required by some boards. |
| lastName | Conditional | License owner’s last name. Required by some boards. |
| middleName | Optional | License owner’s middle name. |
| zipCode | Optional | 5-digit address ZIP code (e.g. 90201). |
| customProperties | Optional | Your own per-license identifiers — echoed back with that license’s result. |
| clientMetadata | Optional | Batch-level object (sibling of licenses). Echoed back on the results. |
customProperties and clientMetadata are yours to use however you like; everything in them comes back untouched.
/v1/licensesandcertifications/verify — same request, but includes national certifications.{
"clientMetadata": {},
"licenses": [
{
"licenseNumber": "RN1234567",
"professionCode": "RN",
"stateCode": "FL",
"customProperties": { "employeeId": "E-4471" },
"dateOfBirth": "19820128",
"firstName": "John",
"lastName": "Snow"
}
]
}
What comes back
A 201 confirms the batch was accepted — not that verification is done. Hold onto the batchId: that’s how you fetch results.
| Field | Type | What it tells you |
|---|---|---|
| batchId | uuid | Unique ID for this batch. Use it to fetch results. |
| verificationUrl | string | The URL where this batch’s results will be available. |
| recordsReceived | integer | How many licenses Propelus accepted — confirm it matches what you sent. |
| addedAt | date-time | Timestamp the batch was received. |
{
"addedAt": "2019-08-24T14:15:22Z",
"batchId": "5579c111-9c50-4f1e-9a3c-7b2e0d4f8a21",
"recordsReceived": 10,
"verificationUrl": "https://api.propelus.com/v1/licenses/results/5579c111-…"
}Where to go next
Once you have a batchId, head to reading license results to fetch and interpret each verification.