NRS · FIRS e-Invoicing

Transmit e-invoices to NRS with a single API call.

Doftwerks is a midpoint Access Point gateway. Integrate once, send your invoices in our schema, and we sign, report and transmit them to Nigeria's National Revenue Service and your customers.

One integration

Send our schema. We map and route to the recipient Access Point Provider.

Secure by default

Per-environment client credentials, hashed and scoped to your account.

Clear results

A unified response with a code, message and receipt status every time.

Overview

How it works

You authenticate with a client id and secret, POST an invoice in the NRS schema below, and receive a unified response telling you exactly what happened — including the IRN, qr code and receipt status.

  1. 1

    Get credentials

    Register, get approved, then generate sandbox & production keys from your dashboard.

  2. 2

    Send the invoice

    POST your invoice JSON to the transmit endpoint with your headers.

  3. 3

    Read the result

    Use the code and receipt_status to confirm reporting & transmission.

Before you start

NRS resources

Before you can transmit an e-invoice, several fields in the payload must carry official codes issued by NRS/FIRS — not free text. NRS publishes these as reference (lookup) resources that you fetch from their API, persist in your own system, and use to map your invoice data onto our payload.

ResourceUsed to fill
Invoice typeinvoice_type_code (e.g. 381, 380, 384)
Payment meanspayment method / settlement codes
Tax categoriestax_total[].tax_subtotal[].tax_category.id and invoice_line[].tax_category.id (e.g. STANDARD_VAT)
Currenciesdocument_currency_code, tax_currency_code (e.g. NGN)
Invoice Quantity Codesinvoice_line[].price.price_unit (e.g. EA)
Products Codesinvoice_line[].hsn_code + product_category (goods lines)
Service Codesinvoice_line[].isic_code + service_category (service lines)
Local governmentspostal_address.lga (e.g. NG-AB-ANO)
State codespostal_address.state (e.g. NG-LA)
Countriespostal_address.country (e.g. NG)

Retrieve once, persist, and map. Each integrating system should pull these resources from the NRS API and store them (refreshing periodically). You then use them to translate your own data into valid codes — the correct state, lga and country for a postal address; the price_unit for a line quantity; the hsn_code / product_category for a goods line, or the isic_code / service_category for a service line; and the right tax_category. A value that isn't in these lists fails validation.

Browse the NRS resource endpoints

Security

Authentication

Every request is authenticated with a client id / secret pair issued per environment. Your account must be approved before credentials can be generated, and the secret is shown only once — store it securely on your server.

Keep secret server-sideNever embed your secret in a browser, mobile app or public repository.

Sandbox

cli_test_…

Safe to experiment — nothing is reported to FIRS.

Production

cli_live_…

Live transmission to the National Revenue Service.

Request

Request headers

Send the following headers with every request. Missing or malformed headers return a specific error code (see below).

HeaderExampleDescription
Accept
required
application/jsonTells the gateway to return a JSON response.
Content-Type
required
application/jsonThe request body is JSON. A different value returns code 20.
x-client-id
required
cli_live_xxxxxxxxxxxxYour public client identifier. Generate it from your dashboard (sandbox or production).
x-client-secret
required
••••••••••••••••Your secret key. Keep it server-side; never expose it in browsers or mobile apps.

Reference

Base URL

Every e-invoice endpoint shares one base URL. Append the endpoint path — for example /transmit — to build the full URL.

BASEhttps://einvoice.doftwerks.com/api/v1/einvoice

Reference

Transmit endpoint

Send a POST request to the transmit endpoint (base URL + /transmit). Pick your language below to see a ready-to-use example.

POST/transmit
curl -X POST https://einvoice.doftwerks.com/api/v1/einvoice/transmit \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "x-client-id: cli_live_xxxxxxxxxxxx" \
  -H "x-client-secret: ••••••••••••••••" \
  -H "x-invoice-format: nrs" \
  -d @invoice.json

Request

Transmit payload

The complete NRS invoice schema. Send this object as the raw JSON body. Every field is explained in the field reference below.

POST /transmit · body
{
  "business_id": "2f6e9e21-5441-4f05-8889-aacd116f3fc1",
  "invoice_number": "INV202600001",
  "irn": "INV202600001-68415441-20260101",
  "payment_status": "PENDING",
  "invoice_kind": "B2B",
  "issue_date": "2026-01-01",
  "issue_time": "00:00:00",
  "due_date": "2026-01-31",
  "invoice_type_code": "381",
  "tax_point_date": "2026-01-31",
  "document_currency_code": "NGN",
  "tax_currency_code": "NGN",
  "accounting_supplier_party": {
    "party_name": "John & sons",
    "tin": "57161140-8935",
    "email": "[email protected]",
    "telephone": "+2349122944976",
    "business_description": "Technology Firm",
    "postal_address": {
      "street_name": "8000 Marina Blvd, Suite 300",
      "city_name": "Victoria Island",
      "postal_zone": "100323",
      "lga": "NG-AB-EOS",
      "state": "NG-LA",
      "country": "NG"
    }
  },
  "accounting_customer_party": {
    "party_name": "Colleen Diaz Plc",
    "tin": "22701248-8449",
    "email": "[email protected]",
    "telephone": "+2349122944976",
    "business_description": "Professional Services",
    "postal_address": {
      "street_name": "4557 De Silva St",
      "city_name": "Fremont",
      "postal_zone": "100538",
      "lga": "NG-AB-ANO",
      "state": "NG-AB",
      "country": "NG"
    }
  },
  "payment_terms_note": "Net 30 days (30 days after the issue date)",
  "tax_total": [
    {
      "tax_amount": 46125,
      "tax_subtotal": [
        {
          "taxable_amount": 615000,
          "tax_amount": 46125,
          "tax_category": {
            "id": "STANDARD_VAT",
            "percent": 7.5
          }
        }
      ]
    }
  ],
  "legal_monetary_total": {
    "line_extension_amount": 640000,
    "tax_exclusive_amount": 615000,
    "tax_inclusive_amount": 661125,
    "payable_amount": 661125
  },
  "invoice_line": [
    {
      "invoiced_quantity": 1,
      "line_extension_amount": 140000,
      "item": {
        "name": "[E-COM11] Cabinet with Doors",
        "description": "[E-COM11] Cabinet with Doors",
        "sellers_item_identification": "E-COM11"
      },
      "price": {
        "price_amount": 140000,
        "base_quantity": 1,
        "price_unit": "EA"
      },
      "tax_category": [
        {
          "id": "STANDARD_VAT",
          "percent": 7.5
        }
      ],
      "hsn_code": "7203.10",
      "product_category": "Ferrous products; obtained by direct reduction of iron ore, in lumps, pellets or similar forms",
      "isic_code": "",
      "service_category": "",
      "discount_rate": 0,
      "discount_amount": 0,
      "fee_rate": 0,
      "fee_amount": 0
    },
    {
      "invoiced_quantity": 100,
      "line_extension_amount": 5000,
      "item": {
        "name": "Steel Pipes",
        "description": "Hot water steel pipes for homes",
        "sellers_item_identification": "687194817958-2"
      },
      "price": {
        "price_amount": 5000,
        "base_quantity": 1,
        "price_unit": "EA"
      },
      "tax_category": [
        {
          "id": "STANDARD_VAT",
          "percent": 7.5
        }
      ],
      "hsn_code": "7203.10",
      "product_category": "Ferrous products; obtained by direct reduction of iron ore, in lumps, pellets or similar forms",
      "isic_code": "",
      "service_category": "",
      "discount_rate": 5,
      "discount_amount": 25000,
      "fee_rate": 0,
      "fee_amount": 0
    }
  ],
  "billing_reference": [
    {
      "irn": "INV202500031-68415441-20251231",
      "issue_date": "2025-12-31"
    },
    {
      "irn": "INV202500030-68415441-20251230",
      "issue_date": "2025-12-30"
    }
  ]
}

Reference

Transmit field reference

What every line in the payload means. The whole payload — including the nested party, line, tax and total objects — is validated up front, so a request with problems is rejected with a single 422 that lists every field to fix, before anything reaches the Access Point. Required fields are marked below.

Invoice header

root

Top-level fields that describe the invoice document.

FieldDescription
business_idrequiredYour NRS business identifier issued to the supplier entity.
invoice_numberrequiredYour invoice ID — the human-readable invoice number from your own system (e.g. INV202500015). Required on every request; an omitted invoice_number is rejected with code 90 (Invoice number not provided).
irnrequiredInvoice Reference Number — a unique identifier you generate per invoice. Missing IRN returns code 99.
payment_statusSettlement state of the invoice: PAID or PENDING. Initial invoice payment status cannot be PARTIAL or REJECTED
invoice_kindrequiredTransaction type — B2B, B2C or B2G.
issue_daterequiredDate the invoice was issued (YYYY-MM-DD).
issue_timeTime the invoice was issued (HH:MM:SS).
due_dateDate payment is due (YYYY-MM-DD)
invoice_type_coderequiredUBL invoice type code — 381 (commercial), 380 (credit note), 384 (debit note).
tax_point_dateDate used to determine the applicable VAT period (YYYY-MM-DD).
document_currency_coderequiredCurrency the invoice is denominated in, e.g. NGN, USD.
tax_currency_coderequiredCurrency in which tax amounts are reported.
payment_terms_noteHuman-readable payment terms.

Supplier party

accounting_supplier_party

The seller issuing the invoice — this is your company (the registered tenant).

FieldDescription
party_namerequiredRegistered/legal name of the supplier.
tinrequiredSupplier Tax Identification Number.
emailrequiredSupplier contact email.
telephoneSupplier phone (with country code, e.g. +234…).
business_descriptionShort description of the supplier business. Must be at least in length of 5
postal_addressrequiredSupplier postal address (see Postal address below).

Customer party

accounting_customer_party (Conditional)

The buyer receiving the invoice. It is optional for B2C but required for B2B and B2G.

FieldDescription
party_namerequiredName of the customer/buyer.
tinrequiredCustomer TIN (required for B2B / B2G).
emailrequiredCustomer contact email.
telephoneCustomer phone number.
business_descriptionShort description of the customer. Must be at least in length of 5
postal_addressrequiredCustomer postal address (see Postal address below).

Postal address

postal_address

Shared address shape used by both supplier and customer parties.

FieldDescription
street_namerequiredStreet line of the address.
city_namerequiredCity / town.
postal_zonerequiredPostal / ZIP code.
lgarequiredFIRS LGA code, e.g. NG-AB-ANO.
staterequiredFIRS state code, e.g. NG-AB.
countryrequiredTwo-letter country code, e.g. NG.

Tax total

tax_total[]

Array of tax groupings. Each entry carries a total tax amount and a breakdown by category.

FieldDescription
tax_amountrequiredTotal tax for this grouping.
tax_subtotal[].taxable_amountrequiredNet amount the tax is calculated on.
tax_subtotal[].tax_amountrequiredTax charged on the taxable amount.
tax_subtotal[].tax_category.idrequiredTax category — STANDARD_VAT, ZERO_VAT or EXEMPT.
tax_subtotal[].tax_category.percentrequiredApplied VAT rate, e.g. 7.5.

Legal monetary total

legal_monetary_total

Document-level monetary totals. These must reconcile with the invoice lines.

FieldDescription
line_extension_amountrequiredSum of all line net amounts.
tax_exclusive_amountrequiredTotal before tax.
tax_inclusive_amountrequiredTotal including tax.
payable_amountrequiredFinal amount payable by the customer.

Invoice lines

invoice_line[]

One entry per line item on the invoice.

FieldDescription
invoiced_quantityrequiredQuantity of the item sold.
line_extension_amountrequiredNet amount for the line (quantity × price − discounts).
item.namerequiredProduct / service name.
item.descriptionrequiredLonger description of the item.
item.sellers_item_identificationrequiredYour internal SKU / item code.
price.price_amountrequiredUnit price.
price.base_quantityrequiredQuantity the unit price refers to (default 1).
price.price_unitrequiredNRS Invoice Quantity (unit of measure) code, e.g. "EA" for each. Fetch valid codes from the NRS resources (see the NRS resources section).
tax_category.idrequiredTax category for the line.
tax_category.percentrequiredVAT rate for the line.
hsn_codeconditionalHS/product code — required for a GOODS line (paired with product_category). A service line sends this empty and uses isic_code instead.
isic_codeconditionalISIC service code — required for a SERVICE line (paired with service_category). A goods line sends this empty.
product_categoryconditionalProduct classification — required for a GOODS line, alongside hsn_code.
service_categoryconditionalService classification — required for a SERVICE line, alongside isic_code. A non-empty value marks the line as a service.
discount_raterequiredDiscount rate applied to the line. Set to zero 0 if not applicable
discount_amountrequiredDiscount amount applied to the line. Set to zero 0 if not applicable
fee_raterequiredAdditional fee rate. Set to zero 0 if not applicable
fee_amountrequiredAdditional fee amount. Set to zero 0 if not applicable

Billing reference

billing_reference[] (Optional)

Optional. Required only when invoice_type_code is "380" (Credit Note) — it links this document to the original invoice(s) being corrected. Provide one entry per referenced invoice.

FieldDescription
irnrequiredIRN of the original invoice this credit note references.
issue_daterequiredIssue date of that original invoice (YYYY-MM-DD).

Response

Transmit responses

Every response shares the same envelope — a numeric code, a status, a human-readable message, your transmission reference, and a data object.

200 · SuccessThe invoice was accepted and forwarded. Check data.receipt_status.
200 OK
{
  "code": 0,
  "status": "success",
  "message": "Invoice successfully transmitted",
  "reference": "019e83c7-f554-72dd-a671-a1fcad002b4d",
  "data": {
    "irn": "INV202600001-68415441-20260101",
    "qr_code": "iVBORw0KGgoAAAANSUhEUgAA…",
    "receipt_status": 4,
    "is_duplicate": false
  }
}
422 · Validation errorA single required field is missing — here, the IRN (code 99).
422 Unprocessable
{
  "code": 99,
  "status": "error",
  "message": "The irn (Invoice Reference Number) field is required.",
  "reference": null,
  "data": {
    "errors": {
      "irn": [
        "The irn field is required."
      ]
    }
  }
}
422 · Multiple errorsThe payload is validated as a whole, so every failing field comes back at once — fix them all in one pass. Read data.errors (keyed by dotted path).
422 Unprocessable · all errors
{
  "code": 40,
  "status": "error",
  "message": "A goods line needs an hsn_code (HS/product code). A goods line needs a product_category. The accounting_customer_party.tin field is required.",
  "reference": null,
  "data": {
    "errors": {
      "invoice_line.0.hsn_code": [
        "A goods line needs an hsn_code (HS/product code)."
      ],
      "invoice_line.0.product_category": [
        "A goods line needs a product_category."
      ],
      "accounting_customer_party.tin": [
        "The accounting_customer_party.tin field is required."
      ]
    }
  }
}

Reference

Error codes

The code field tells you precisely what happened. Always branch on code, not the HTTP status alone.

CodeMeaning
0

Success

The invoice was accepted and forwarded to the Access Point. Inspect data.receipt_status for the downstream stage.

10

Missing credentials

The x-client-id and/or x-client-secret header was not provided.

11

Invalid credentials

The client id/secret pair did not match an active client, or the client is disabled.

12

Account not approved

Your company account is pending, suspended or rejected. Transmission is blocked until an administrator approves it.

13

Account not found

No company account is linked to these credentials.

14

Crypto keys not found

NRS public key and certificate not setup for this account.

15

Production disabled

Production API access is disabled for this account because production billing has not been activated.

16

Too many requests

You have exceeded the per-minute request limit for this endpoint. Wait the number of seconds in data.retry_after (and the Retry-After header) before retrying.

17

Business and Service ID maybe missing

NRS Business ID and Service ID may not have been provided for this account.

18

Business ID mismatch

Business ID in request payload not the same as the provided resolved client business id.

19

Tax ID mismatch

Tax ID in request payload not the same as the provided resolved client TIN.

20

Unsupported content type

The Content-Type header must be application/json.

21

Empty body

No request body was sent.

22

Invalid JSON

The request body could not be parsed as JSON.

23

IRN record not found

The provided IRN record not found, please transmit.

24

Service ID mismatch

IRN is badly formed. Service ID in iRN format is not the same as the provided resolved client service id.

25

Update invoice status failed

Update invoice status failed on NRS server

26

APP not set on NRS portal

We are not set as your Access Point Provider on the NRS portal, update your APP and retry.

27

E-invoicing not enabled on NRS portal

Please confirm your NRS e-invoicing is enabled, and that we are set as your Access Point Provider on the NRS portal.

28

Acknowledge transmission failed

Acknowledge Transmission failed, try again or contact APP support.

30

Invalid format header

The x-invoice-format header must be "nrs".

40

Validation failed

One or more required fields are missing or invalid. See data.errors for the exact fields.

50

Rejected by Access Point

The downstream Access Point (e.g. FIRS) rejected the invoice. See data for the provider message.

51

Transmission failed

An unexpected error occurred while forwarding the invoice to the Access Point.

52

Access Point unreachable

The downstream Access Point did not respond in time.

53

Network connection error

We are unable to reach the NRS network at this time. Try again later. If the problem persists, contact support.

54

Provider not configured

Your account has not been configured with Access Point credentials. Contact support.

55

Network connection error

Our network is currently down due to maintenance or technical issues. Try again later. If the problem persists, contact support.

56

Signed but not transmitted (APP Error)

Invoice is Signed but could not transmit. Accounting parties APP might be offline or busy, Try again later. If the problem persists, contact support.

90

Invoice number not provided

The required invoice number field is missing from the payload.

91

IRN not provided

The required irn (Invoice Reference Number) field is missing from the payload.

92

Invalid IRN format

The provided irn format is invalid. Check the irn format in the documentation.

93

Irn confirmation failed

The irn confirmation failed, try again or check irn format.

94

Invalid business ID

The provided business ID format is invalid. Check the business ID format in the documentation.

95

Invoice signing failed

The invoice signing failed, might be due to a duplicate signing, try again or contact APP support.

96

Invoice transmission failed

The invoice transmission failed, might be due to a duplicate request or network issues, try again or contact support.

Reference

Receipt statuses

On success, data.receipt_status reports how far the invoice has progressed through the Access Point pipeline.

1

Initiated

Invoice transmission initiated, not yet signed or transmitted.

2

Signed

Invoice signed, but not yet transmitted to NRS.

3

Transmitting

Invoice is been transmitted, waiting for confirmation.

4

Transmitted

Invoice transmitted to NRS successfully.

Reference

Update payment status

After an invoice is transmitted you can update its recorded settlement status — for example when a pending invoice is paid. The IRN goes in the URL; send the new status in the body. When you mark it partial, also include the amount paid.

PATCH/update-status/{irn}
curl -X PATCH https://einvoice.doftwerks.com/api/v1/einvoice/update-status/{irn} \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "x-client-id: cli_live_xxxxxxxxxxxx" \
  -H "x-client-secret: ••••••••••••••••" \
  -d '{ "payment_status": "PAID" }'
FieldDescription
payment_statusrequiredNew settlement state of the invoice: pending, partial, paid, or rejected (case-insensitive).
amountAmount paid. Optional in general, but required when payment_status is partial — it records how much of the invoice has been settled.
reasonOptional note explaining the change (e.g. why an invoice was rejected).
PATCH /update-status/{irn} · body
{
  "payment_status": "PAID"
}
200 · Success
200 OK
{
  "code": 0,
  "status": "success",
  "message": "Invoice status updated successfully",
  "reference": "019e83c7-f554-72dd-a671-a1fcad002b4d",
  "data": {
    "irn": "INV202600001-68415441-20260101",
    "payment_status": "paid",
    "transmit_status": "transmitted"
  }
}

Reference

Report VAT (post-payment)

Report an invoice to NRS for financial (VAT) actions after a payment is received — partial or full. The supplier TIN (agent_tin) and our Access Point service id (integrator_service_id) are added automatically, so you don't send them.

POST/report
curl -X POST https://einvoice.doftwerks.com/api/v1/einvoice/report \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "x-client-id: cli_live_xxxxxxxxxxxx" \
  -H "x-client-secret: ••••••••••••••••" \
  -d @report.json
FieldDescription
irnrequiredInvoice Reference Number of the transmitted invoice being reported.
beneficiary_tinrequiredAccounting Buyer Party TIN (the customer).
currencyrequiredDocument currency code, e.g. NGN.
transaction_daterequiredInvoice issue date (YYYY-MM-DD).
base_amountrequiredLine extension amount — the amount to be taxed.
total_amountrequiredPayable amount — the amount to be collected.
vat_calculatedrequiredTax amount for the tax category (STANDARD_VAT, ZERO_VAT or REDUCED_VAT).
vat_raterequiredPercentage attached to the tax category, e.g. 7.5.
vat_statusrequiredThe VAT tax category ID, e.g. STANDARD_VAT.
other_taxesSum of non-VAT tax amounts.
item_descriptionItem description within the invoice line.
POST /report · body
{
  "irn": "INV001-E9E0C0D3-20240619",
  "beneficiary_tin": "29334238-0001",
  "currency": "NGN",
  "transaction_date": "2024-11-18",
  "base_amount": "100000",
  "total_amount": "112500",
  "vat_calculated": "7500",
  "vat_rate": "7.5",
  "vat_status": "STANDARD_VAT",
  "other_taxes": "5000",
  "item_description": "Items"
}
200 · Success
200 OK
{
  "code": 0,
  "status": "success",
  "message": "VAT reported successfully",
  "reference": "INV001-E9E0C0D3-20240619",
  "data": {
    "ok": true,
    "irn": "INV3030-09012ED1ES-20250912"
  }
}

Reference

Acknowledge a transmission

Acknowledging is you confirming that you have received a transmitted invoice. When you call this, we tell NRS that the received transmission has been received and acknowledged on your behalf. The IRN of the invoice goes in the URL — there is no request body.

You can turn on Auto-acknowledge in the portal (Settings → Auto-acknowledge) and we will acknowledge every transmitted invoice for you automatically. Leave it off to acknowledge yourself by calling this endpoint each time you receive a transmitted-invoice webhook.

POST/acknowledge/{irn}
curl -X POST https://einvoice.doftwerks.com/api/v1/einvoice/acknowledge/{irn} \
  -H "Accept: application/json" \
  -H "x-client-id: cli_live_xxxxxxxxxxxx" \
  -H "x-client-secret: ••••••••••••••••"
200 · Success
200 OK
{
  "code": 0,
  "status": "success",
  "message": "Transmission acknowledged successfully",
  "reference": "INV202600003-4D9B5ECF-20260101",
  "data": []
}

Reference

Webhooks

Every business must provide a webhook URL that accepts POST requests. Whenever a transmitted invoice changes status, we POST a JSON event to that URL so your systems stay in sync without polling.

Respond with 200

Your endpoint must return an HTTP 200 success code to acknowledge receipt. Anything else is treated as a failed delivery and may be retried.

No body or query params

We don't read the response body and never send query parameters — only the JSON payload below in the request body and the 200 status code matter.

You configure your webhook URL from your portal Settings — separately for the sandbox and production environments. Here is a sample of the event we send:

POST {your-webhook-url} · body
{
  "eventType": "TransmissionStatusEvent",
  "irn": "INV202500015-4D9B5ECF-20251230",
  "tenant": "abc-cde-fgh-ijk",
  "status": "Transmitting",
  "environment": "sandbox",
  "timestamp": "2026-06-22T08:57:40+00:00",
  "invoice": {
    "irn": "INV202500015-4D9B5ECF-20251230",
    "due_date": "2026-01-31",
    "tax_total": [
      {
        "tax_amount": 10.5,
        "tax_subtotal": [
          {
            "tax_amount": 10.5,
            "tax_category": {
              "id": "STANDARD_VAT",
              "percent": 7.5
            },
            "taxable_amount": 140
          }
        ]
      }
    ],
    "issue_date": "2025-12-30",
    "issue_time": "00:00:00",
    "business_id": "cb02f028-5ecf-4107-9c40-c1c6b6e64000",
    "invoice_kind": "B2B",
    "invoice_line": [
      {
        "item": {
          "name": "[E-COM11] Cabinet with Doors",
          "description": "[E-COM11] Cabinet with Doors",
          "sellers_item_identification": "E-COM11"
        },
        "price": {
          "price_unit": "EA",
          "price_amount": 140,
          "base_quantity": 1
        },
        "fee_rate": 0,
        "hsn_code": "0101.30",
        "isic_code": null,
        "fee_amount": 0,
        "discount_rate": 0,
        "discount_amount": 0,
        "product_category": "Office",
        "service_category": null,
        "invoiced_quantity": 1,
        "line_extension_amount": 140,
        "tax_category": [
          {
            "id": "STANDARD_VAT",
            "percent": 7.5
          }
        ]
      }
    ],
    "payment_status": "PENDING",
    "tax_point_date": "2025-12-30",
    "invoice_type_code": "381",
    "tax_currency_code": "NGN",
    "payment_terms_note": "End of Following Month",
    "legal_monetary_total": {
      "payable_amount": 150.5,
      "tax_exclusive_amount": 140,
      "tax_inclusive_amount": 150.5,
      "line_extension_amount": 140
    },
    "document_currency_code": "NGN",
    "accounting_customer_party": {
      "tin": "68452114-4234",
      "email": "[email protected]",
      "telephone": "+2555958393",
      "party_name": "Colleen Diaz",
      "postal_address": {
        "lga": "NG-AB-ANO",
        "state": "NG-AB",
        "country": "NG",
        "city_name": "Fremont",
        "postal_zone": "94538",
        "street_name": "4557 De Silva St"
      },
      "business_description": "This is a sample info"
    },
    "accounting_supplier_party": {
      "tin": "18221471-0001",
      "email": "[email protected]",
      "telephone": "+2349122944976",
      "party_name": "John & sons",
      "postal_address": {
        "lga": "NG-AB-ANO",
        "state": "NG-AB",
        "country": "NG",
        "city_name": "Island",
        "postal_zone": "100323",
        "street_name": "8000 Marina Blvd, Suite 300"
      },
      "business_description": "Here is a simple test"
    }
  }
}

Ready to transmit your first invoice?

Create an account, get approved, and generate sandbox credentials in minutes.