e-Invoicing API

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.

Standards

What we conform to.

UBL 2.1 / PINT-NG

EN 16931 · BIS Billing 3.0

Every 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 acknowledgement

On 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.

Lifecycle

Draft to confirmed.

  1. validate-party — confirm the buyer’s TIN (or RC / phone) against the NRS payee-party validator. Positive results are cached for 24 hours.
  2. submit — the UBL 2.1 document is posted to the MBS validate endpoint. A success returns an IRN, CSID and QR; the invoice moves to validated.
  3. confirm — once the buyer has accepted, the IRN is finalised with MBS and the invoice moves to confirmed.
Endpoints

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>
POST /nrs-mbs-validate-party TIN validation

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"
  }
}
POST /nrs-mbs-submit validate & register

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".

POST /nrs-mbs-confirm finalise IRN

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).

Sample document

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>
e-Invoicing

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