Sales & Invoicing
Submit Sales Transaction (Smart Mode)
The Submit Sales Transaction (Smart Mode) endpoint is the recommended integration method for fiscal sales submission to the Malawi Revenue Authority (MRA) EIS platform.
Smart Mode is designed to handle connectivity challenges gracefully:
- If the MRA server is reachable → the invoice is validated and processed in real time.
- If the MRA server is unreachable → the invoice is signed locally, queued, and automatically synchronized once connectivity is restored.
This ensures uninterrupted business operations while maintaining fiscal compliance.
Endpoint
POST /api/sales/submit-smart
Base URL (Test Environment)
Request Fields
| Field | Data Type | Mandatory | Comments |
|---|---|---|---|
| Authorization | string | yes | This will be computed from a Terminal Activation Code |
| invoiceNumber | string | yes | |
| sellerTIN | string | yes | The Taxpayer Identification Number of the seller |
| buyerTIN | string | no | Needed if its a B2B transaction |
| buyerName | string | no | |
| invoiceHeader.buyerAuthorizationCode | string | no | It is required when the TIN is protected. It is generated from the taxpayers portal |
| siteId | string | yes | This is the site id where the terminal is operating |
| invoiceHeader.globalConfigVersion | integer | yes | this is the configuration that will be received from the terminal activation response |
| invoiceHeader.isReliefSupply | boolean | no | Marks whether the supply is relief exempt. It requires VAT 5 certificate using the Validate VAT 5 Certificate endpoint. |
| invoiceHeader.paymentMethod | string | yes | The method of payment (e.g., Cash, Card, MobileMoney). |
| invoiceLineItems[].productCode | string | yes | Unique product or service code. |
| invoiceLineItems[].description | string | yes | description of the Product or service |
| invoiceLineItems[].unitPrice | decimal | yes | Price per unit product or service. |
| invoiceLineItems[].quantity | decimal | yes | Quantity of items sold |
| invoiceLineItems[].discount | decimal | no | Any discount applied to the line item. |
| invoiceLineItems[].total | decimal | yes | The net total (after discount, before VAT) for the line item. |
| invoiceLineItems[].totalVAT | decimal | yes | VAT amount for this line item. |
| invoiceLineItems[].taxRateId | string | yes | Identifier for the applied tax rate. |
| invoiceLineItems[].isProduct | boolean | yes | True if item is a product, false if it is a service. |
| invoiceSummary.levyBreakDown.levyTypeId | string | no | dentifier of the levy type (e.g., Environmental Levy, Tourism Levy). Required only if a levy applies. |
| invoiceSummary.levyBreakDown.levyRate | decimal | no | Percentage rate (%) applied for this levy. |
| invoiceSummary.levyBreakDown.levyAmount | decimal | no | Monetary value of the levy calculated from the levyRate. |
| invoiceSummary.totalVAT | decimal | yes | Total VAT across all line items. |
| invoiceSummary.invoiceTotal | decimal | yes | Final invoice total including VAT. |
| invoiceSummary.amountTendered | decimal | yes | Amount paid by the customer before giving back any cha |
NOTE: Request Payload for Sale Example are Found in the PostMan Collection
B2B Transactions (buyerTIN)
If buyerTIN is provided:
-
Protected TIN
- Buyer must generate Purchase Authorization Code from MRA portal
buyerAuthorizationCodebecomes mandatory
-
Unprotected TIN
- No authorization code required
Sample Payload

Sample Response
{
"statusCode": 1,
"remark": "Processed successfully. Warning: Client time differs from server time by 2 hours and 60 minutes. Please adjust your system clock.",
"data": {
"validationURL": "https://eservices.mra.mw/doc/v/?vc=96253256902784&c=fdf23c0e6d994ba28ccc63e7c888244b",
"shouldDownloadLatestConfig": true,
"shouldBlockTerminal": false,
"validationErrors": null
},
"errors": []
}