E-invoices, registered with NRS.
MiTax formats an invoice into a standards-compliant electronic document, validates the counter-party’s Tax Identification Number, transmits it to the Nigeria Revenue Service Merchant-Buyer Solution (MBS), and returns the Invoice Reference Number, cryptographic stamp and QR code.
Built to the NITDA National Regulatory Guideline for Electronic Invoicing (2025) and the PEPPOL/PINT-NG profile. MiTax operates as a System Integrator connecting taxpayers to the MBS registry.
What we conform to.
UBL 2.1 / PINT-NG
EN 16931 · BIS Billing 3.0Every invoice is a Universal Business Language 2.1 document on the Nigerian PEPPOL International (PINT-NG) profile: customization and profile identifiers, supplier and customer parties, tax categories and legal monetary totals.
IRN + CSID + QR
registry acknowledgementOn a successful validate, MBS returns the Invoice Reference Number, the Cryptographic Stamp Identifier and a QR code. MiTax stores all three against the invoice and never fabricates them.
TIN-verified parties
HSN · NGN · VAT 7.5%Counter-parties are validated against the NRS payee-party service before submission. Line items carry HSN commodity codes; VAT is applied at the NTA-2025 standard rate.
Draft to confirmed.
- validate-party — confirm the buyer’s TIN (or RC / phone) against the NRS payee-party validator. Positive results are cached for 24 hours.
- submit — the UBL 2.1 document is posted to the MBS validate endpoint. A success returns an
IRN,CSIDandQR; the invoice moves tovalidated. - confirm — once the buyer has accepted, the IRN is finalised with MBS and the invoice moves to
confirmed.
Request & response.
Requests carry an environment of sandbox or production. Upstream authentication to the MBS registry uses the accredited integrator’s X-API-Key and X-Secret-Key; the secret key is never logged or echoed.
Base URL
https://<your-project>.functions.supabase.co/<function>
Request
{
"tin": "87654321-0001",
"identifier_kind": "tin", // tin | rc | phone
"kind": "buyer", // supplier | buyer
"environment": "sandbox"
}
Response
{
"ok": true,
"cached": false,
"party": {
"tin": "87654321-0001",
"name": "Lagos Blue Foods Ltd",
"address": "Victoria Island, Lagos"
}
}
Request
{
"user_id": "a2e9…",
"ubl_invoice_jsonb": { /* UBL 2.1 / PINT-NG invoice */ },
"environment": "sandbox"
}
Response
{
"ok": true,
"status": "validated",
"invoice_id": "b73a…",
"irn": "NG-IRN-…", // Invoice Reference Number
"csid": "…", // Cryptographic Stamp Identifier
"qr": "data:image/…" // QR payload
}
A rejection from MBS returns status: "rejected" with the registry error preserved. Transport or 5xx errors leave the invoice retryable at status: "failed".
Request
{
"invoice_id": "b73a…", // from /nrs-mbs-submit
"environment": "sandbox"
}
Response
{
"ok": true,
"status": "confirmed",
"invoice_id": "b73a…",
"irn": "NG-IRN-…"
}
Call /nrs-mbs-confirm only after /nrs-mbs-submit has returned an IRN and the invoice sits at validated. A 4xx flips the invoice to rejected (terminal).
A UBL 2.1 invoice.
The ubl_invoice_jsonb body carries a PINT-NG invoice. Below is the XML form of the same structure: identifiers, TIN-bearing parties, tax subtotals by category, monetary totals and HSN-classified lines.
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"> <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:peppol:pint:billing-1@ng-1</cbc:CustomizationID> <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID> <cbc:ID>MTX-B2B-2025-000481</cbc:ID> <cbc:IssueDate>2025-09-15</cbc:IssueDate> <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode> <cbc:DocumentCurrencyCode>NGN</cbc:DocumentCurrencyCode> <!-- AccountingSupplierParty + AccountingCustomerParty with PartyTaxScheme (TIN) --> <!-- TaxTotal → TaxSubtotal by category S/Z/E (VAT 7.5%) --> <!-- LegalMonetaryTotal + InvoiceLine[] with HSN ItemClassificationCode --> </Invoice>
Register your invoices with NRS.
MiTax handles the format, the TIN check, the transmission and the acknowledgement. Tell us what you’re building.
- UBL 2.1 / PINT-NG
- IRN + CSID + QR
- TIN-verified parties