Skip to content

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:

{
  "status": "a",
  "crtfct": "/9j/4AAQSkZJRgABAQAA...",
  "crtfctType": "jpg"
}

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_id stored in your database after Step 2
  • [ ] Transaction reference (tx_id) stored after Step 3
  • [ ] Step 4 polling implemented (or webhook registered)
  • [ ] crtfct decoding 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. KJA123BC not KJA-123-BC)
  • [ ] year sent as string ("2019" not 2019)
  • [ ] vhclValueForInsrnc sent as number, not string (4500000 not "4500000") — Comprehensive only
  • [ ] Proof of ownership available for Comprehensive policies (proofOfOwnrsh) — omit field entirely if unavailable; do not send "" or null

Marine Export (MEXX)

  • [ ] voyage field is an array of objects: [{"origin": "..."}, {"destination": "..."}] — not strings
  • [ ] proformaInvoice reference available
  • [ ] Cargo value in Naira (not USD)

Goods-in-Transit (GTRN)

  • [ ] dprtrDateTime and estmtdArrvlDateTime in addtnlFact
  • [ ] goodsValue is a number in Naira

Travel (LTIX)

  • [ ] departureDate and returnDate in addtnlFact during Step 3
  • [ ] passportNo, occupation, nokName, nokRelationship, nokPhone provided
  • [ ] destination country and travelPlan specified

Device Warranty (PHNN)

  • [ ] uIdnt (IMEI) provided
  • [ ] Step 4 returns policyNo (not crtfct) — 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