Runbook — agent onboarding & approval
Handling self-registered agent applications. Owner: ZFA agency management + compliance.
Applicant types
| Type | IRA licence required | Sponsor required |
|---|---|---|
licensed | Yes (attach AgentLicense doc). | No. |
introducer | No — but MUST be attached to a licensed sponsor. | Yes. |
Both must submit National ID (NIN + document copy) — mandatory for KYC.
Steps
-
Applicant self-registers via
POST /api/v1/agents/register. Row lands withkycStatus: 'pending'andselfRegistered: true. No InsureLink agency number is issued yet. -
Compliance reviews KYC documents.
- Fetch:
GET /api/v1/agents/{id}— expanddocuments. - Verify NIN document, licence (if licensed), sponsor letter (if introducer).
- Reject:
POST /api/v1/agents/{id}/rejectwith a reason. Applicant is notified via their preferred channel (email/SMS/WhatsApp).
- Fetch:
-
Sponsor invariant (introducers only). The sponsor UUID or public code must resolve to an ACTIVE licensed agent. If the sponsor is inactive/suspended, applicant is auto-rejected with
SPONSOR_INVALID. Applicant may re-submit with a different sponsor. -
Approve.
POST /api/v1/agents/{id}/approve. This:- Issues an InsureLink agency number (auto-generated
AGT-XX-XXXXXXXXXX). - Flips
kycStatustoverifiedand setskycExpiresAt= 12 months from now (IRA re-verification cadence). - Issues a subscription record (default
SubscriptionPlan, prorated). - Fires the welcome notification with credentials.
- Issues an InsureLink agency number (auto-generated
-
IRA registration number (licensed only): captured on the licence record + mirrored to
Agent.iraRegistrationNumberso it appears on the profile. Update viaPOST /api/v1/agents/{id}/licenses.
KYC expiry
- A scheduled job flags agents with
kycExpiresAt < now + 30dand notifies them. On expiry,kycStatustransitions toexpiredand the agent is blocked from creating new referrals (existing referrals / commissions are untouched). - Re-verification is a fresh document submission + compliance re-review.
Use the same
/approveendpoint after review.
Suspend / reinstate
- Suspend:
POST /api/v1/agents/{id}/suspend— captures reason, revokes API keys, keeps historical records. - Reinstate:
POST /api/v1/agents/{id}/reinstate. Introducers sponsored by a suspended agent are NOT auto-suspended; re-verify their sponsor invariant manually.