Going Live¶
How to switch from test mode to live mode and what changes when you do.
Test Mode vs Live Mode¶
Every partner account starts in test mode.
| Test mode | Live mode | |
|---|---|---|
| Policies | Auto-approved instantly | Routed to real insurers |
| Certificates | Sample cert URL (certUrl) |
Real cert — Base64 image or PDF (crtfct) |
| Premiums | Not billed | Billable — collect payment before Step 3 |
| Consumer data | Safe to use dummy data | Use real consumer details |
| Insurer checks | Skipped | Active — incorrect data causes declines |
You can confirm your current mode from the environment badge in the Partner Dashboard (amber = TEST, green = LIVE), or check the environment field on any set env_* response.
Switching Mode¶
Toggle the environment badge in the top-right corner of the Partner Dashboard. The change takes effect immediately for all subsequent API calls from your account.
Certificate Response Format Changes¶
In live mode, Step 4 returns a base64-encoded certificate:
Decode and store it:
import base64
data = base64.b64decode(response['crtfct'])
with open(f"certificate.{response['crtfctType']}", 'wb') as f:
f.write(data)
Some products return policyNo instead of a certificate — see the product-specific guide.
Before You Go Live — Checklist¶
All products¶
- [ ] Full 4-step flow tested end-to-end in test mode
- [ ]
consumer_idstored in your database after Step 2 - [ ] Transaction reference (
tx_id) stored after Step 3 - [ ] Step 4 polling implemented (or webhook registered)
- [ ]
crtfctdecoding and storage implemented - [ ] Payment collected from consumer before Step 3
Vehicle — Third-party and Comprehensive¶
- [ ] Chassis number, engine number, and registration plate match physical documents exactly — our insurer verifies against the national database; mismatches cause declines
- [ ] Registration plate sent without hyphens (e.g.
KJA123BCnotKJA-123-BC) - [ ]
yearsent as string ("2019"not2019) - [ ]
vhclValueForInsrncsent as number, not string (4500000not"4500000") — Comprehensive only - [ ] Proof of ownership available for Comprehensive policies (
proofOfOwnrsh) — omit field entirely if unavailable; do not send""ornull
Marine Export (MEXX)¶
- [ ]
voyagefield is an array of objects:[{"origin": "..."}, {"destination": "..."}]— not strings - [ ]
proformaInvoicereference available - [ ] Cargo value in Naira (not USD)
Goods-in-Transit (GTRN)¶
- [ ]
dprtrDateTimeandestmtdArrvlDateTimeinaddtnlFact - [ ]
goodsValueis a number in Naira
Travel (LTIX)¶
- [ ]
departureDateandreturnDateinaddtnlFactduring Step 3 - [ ]
passportNo,occupation,nokName,nokRelationship,nokPhoneprovided - [ ]
destinationcountry andtravelPlanspecified
Device Warranty (PHNN)¶
- [ ]
uIdnt(IMEI) provided - [ ] Step 4 returns
policyNo(notcrtfct) — store and display as the policy reference
Common Live-Mode Issues¶
| Issue | Likely cause | Fix |
|---|---|---|
| Vehicle policy declined | Chassis / engine / plate doesn't match national records | Re-verify details against physical documents |
| Comprehensive declined | Proof of ownership image unreadable | Re-scan, ensure image is clear |
| Premium mismatch | Vehicle value changed between Steps 1 and 3 | Always re-run Step 1 immediately before checkout |
Status stays "p" for >10 min |
Insurer processing delay | Poll SR20 every 30s — push notifications are not currently supported |
crtfct absent, policyNo returned |
Product uses policy number as certificate | Display policyNo — this is the certificate reference |