Applications and invitations
An application is one subject, one explicit workflow version and one assurance lifecycle. Your externalReference binds it to your customer, account or onboarding record.
Create an individual application
POST /v1/applications
Authorization: Bearer pl_live_…
Idempotency-Key: <unique-business-operation-key>
Content-Type: application/json
{
"type": "individual",
"workflowId": "wf_…",
"channel": "hosted",
"externalReference": "customer_845901",
"recipientEmail": "person@example.com",
"sendEmail": true,
"person": {
"givenName": "Amara",
"familyName": "Vale",
"dateOfBirth": "1992-06-14",
"nationality": "SG",
"email": "person@example.com"
}
}
Create a business application
{
"type": "business",
"workflowId": "wf_business_…",
"channel": "web",
"externalReference": "merchant_29310",
"business": {
"legalName": "Harbour Atlas Pte. Ltd.",
"registrationNumber": "202612345N",
"country": "SG"
}
}
The workflow’s applicationType must match the application. Draft, retired, inaccessible or mismatched policies are rejected.
Assurance routing inputs
| Field | Purpose |
|---|---|
channel | Records hosted, Web, iOS, Android or React Native delivery |
requiredAssurance | Requested assurance target from 0–100 |
maximumCostMinor | Optional route budget in the tenant billing currency |
optimizerStrategyKey | Approved route-selection policy |
These values cannot weaken mandatory workflow or Country Assurance Pack controls.
Read status
GET /v1/applications/{applicationId}
The detailed response contains the pinned workflow, current status/step, risk result, evidence receipts, document and biometric signals, screening candidates, cases, invitation state and signed decision ledger that the caller is authorised to see.
Invitation operations
| Operation | Purpose |
|---|---|
GET /v1/applications/{id}/invitation | Retrieve the current durable invitation and delivery state |
POST /v1/applications/{id}/invitation/send | Send or resend to the supplied recipient |
POST /v1/applications/{id}/invitation/regenerate | Rotate the token, optionally change expiry/recipient and invalidate the old URL |
POST /v1/applications/{id}/invitation/revoke | Immediately block access without deleting the application |
Every mutation uses an idempotency key. Regeneration is a security action: old links stop working and cannot be recovered.
Rescreening
POST /v1/applications/{applicationId}/rescreen
Use explicit rescreening for an immediate check. For approved subjects needing repeated checks, enrol them in ongoing assurance rather than scheduling unbounded application reads from your own cron job.
Recommended data model
Store at minimum:
type AssayraLink = {
prooflineApplicationId: string;
externalReference: string;
workflowId: string;
lastKnownStatus: string;
invitationExpiresAt: string;
updatedAt: string;
};
Do not store the invitation token unless your delivery flow requires it. If retained, treat it as a secret and delete it when the journey completes or is revoked.