validate_invoice
Pre-validate a Nigeria e-invoice against FIRS / NRS MBS (Merchant Buyer Solution) BEFORE signing — POST /invoice/validate. Returns pass, or the FIRS error list if the payload is rejected (so you fix it before spending a real submission). Bring your own credentials via headers x-firs-api-key AND x-firs-api-secret (generate them in your NRSMBS Dashboard -> API Integration; your business must be enabled for e-invoicing first). If your Dashboard issued a sandbox base URL, also send header x-firs-base-url. You send flat fields (business_id, supplier/customer party name + TIN, invoice_number, service_id, line items with price); this server builds the UBL-mapped JSON and computes VAT (7.5% default) into tax_total and legal_monetary_total. No fiscal effect — nothing is signed.
Parameters21
| business_id | string | required | Your FIRS business_id (UUID) from your NRSMBS Dashboard — identifies the taxpayer entity submitting the invoice. |
| invoice_number | string | optional | Your own invoice/document number (used to build the IRN, unless you pass irn directly). E.g. INV001. |
| service_id | string | optional | Your FIRS-issued Service ID (the middle segment of the IRN, e.g. 6997D6BB). Used with invoice_number + issue_date to build the IRN. Not needed if you pass irn directly. |
| irn | string | optional | Optional ready-made IRN, format InvoiceNumber-ServiceID-YYYYMMDD (e.g. ITW20853450-6997D6BB-20240703). If omitted, built from invoice_number + service_id + issue_date. |
| issue_date | string | optional | Invoice date YYYY-MM-DD. Defaults to today (UTC). |
| invoice_type_code | string | optional | FIRS invoice type code. Default 396 (commercial invoice). See the MBS GetInvoiceTypes list for others. |
| document_currency_code | string | optional | ISO currency of the invoice. Default NGN. |
| supplier_name | string | required | Seller (supplier) legal party_name as registered with FIRS. |
| supplier_tin | string | required | Seller Tax Identification Number (TIN), e.g. TIN-0099990001. |
| supplier_email | string | optional | Optional seller email. |
| supplier_street | string | optional | Optional seller street_name (postal_address). |
| supplier_city | string | optional | Optional seller city_name. |
| supplier_postal_zone | string | optional | Optional seller postal_zone (post code). |
| customer_name | string | required | Buyer (customer) legal party_name. |
| customer_tin | string | required | Buyer Tax Identification Number (TIN). |
| customer_email | string | optional | Optional buyer email. |
| customer_street | string | optional | Optional buyer street_name (postal_address). |
| customer_city | string | optional | Optional buyer city_name. |
| customer_postal_zone | string | optional | Optional buyer postal_zone (post code). |
| tax_category_id | string | optional | Optional FIRS tax_category id for the VAT lines. Default VAT (value-added tax). Use another MBS tax-category code only if the goods fall under a different regime. |
| items | array | required | Line items. Each: name, price (unit price in NGN, tax-EXCLUSIVE), optional quantity (default 1), vat_rate (percent, default 7.5), hsn_code, description, product_category. VAT is computed on top of price*quantity. |
Raw schema
{
"type": "object",
"properties": {
"business_id": {
"type": "string",
"description": "Your FIRS business_id (UUID) from your NRSMBS Dashboard — identifies the taxpayer entity submitting the invoice."
},
"invoice_number": {
"type": "string",
"description": "Your own invoice/document number (used to build the IRN, unless you pass irn directly). E.g. INV001."
},
"service_id": {
"type": "string",
"description": "Your FIRS-issued Service ID (the middle segment of the IRN, e.g. 6997D6BB). Used with invoice_number + issue_date to build the IRN. Not needed if you pass irn directly."
},
"irn": {
"type": "string",
"description": "Optional ready-made IRN, format InvoiceNumber-ServiceID-YYYYMMDD (e.g. ITW20853450-6997D6BB-20240703). If omitted, built from invoice_number + service_id + issue_date."
},
"issue_date": {
"type": "string",
"description": "Invoice date YYYY-MM-DD. Defaults to today (UTC)."
},
"invoice_type_code": {
"type": "string",
"description": "FIRS invoice type code. Default 396 (commercial invoice). See the MBS GetInvoiceTypes list for others."
},
"document_currency_code": {
"type": "string",
"description": "ISO currency of the invoice. Default NGN."
},
"supplier_name": {
"type": "string",
"description": "Seller (supplier) legal party_name as registered with FIRS."
},
"supplier_tin": {
"type": "string",
"description": "Seller Tax Identification Number (TIN), e.g. TIN-0099990001."
},
"supplier_email": {
"type": "string",
"description": "Optional seller email."
},
"supplier_street": {
"type": "string",
"description": "Optional seller street_name (postal_address)."
},
"supplier_city": {
"type": "string",
"description": "Optional seller city_name."
},
"supplier_postal_zone": {
"type": "string",
"description": "Optional seller postal_zone (post code)."
},
"customer_name": {
"type": "string",
"description": "Buyer (customer) legal party_name."
},
"customer_tin": {
"type": "string",
"description": "Buyer Tax Identification Number (TIN)."
},
"customer_email": {
"type": "string",
"description": "Optional buyer email."
},
"customer_street": {
"type": "string",
"description": "Optional buyer street_name (postal_address)."
},
"customer_city": {
"type": "string",
"description": "Optional buyer city_name."
},
"customer_postal_zone": {
"type": "string",
"description": "Optional buyer postal_zone (post code)."
},
"tax_category_id": {
"type": "string",
"description": "Optional FIRS tax_category id for the VAT lines. Default VAT (value-added tax). Use another MBS tax-category code only if the goods fall under a different regime."
},
"items": {
"type": "array",
"minItems": 1,
"description": "Line items. Each: name, price (unit price in NGN, tax-EXCLUSIVE), optional quantity (default 1), vat_rate (percent, default 7.5), hsn_code, description, product_category. VAT is computed on top of price*quantity.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"price": {
"type": "number",
"description": "Tax-exclusive unit price in NGN."
},
"quantity": {
"type": "number",
"description": "Default 1."
},
"vat_rate": {
"type": "number",
"description": "VAT percent for this line. Default 7.5 (Nigeria standard rate). Use 0 for exempt/zero-rated."
},
"hsn_code": {
"type": "string",
"description": "Optional product/commodity code."
},
"product_category": {
"type": "string",
"description": "Optional product category."
}
},
"required": [
"name",
"price"
]
}
}
},
"required": [
"business_id",
"supplier_name",
"supplier_tin",
"customer_name",
"customer_tin",
"items"
]
}