Statements

Reconcile what you owe. NetApps InsureTech bills the purchases you report as paid, less refunds and your share of the commission, on one statement per period (see Paying for what you sell in the Purchases section).

  • GET /statements lists them, newest first.
  • GET /statements/{statementId} reads one, with every line it bills and the payments matched to it.
  • Every billed purchase carries the statementId that billed it and its merchantCommissionMinor.
  • To dispute a statement, use the merchant dashboard.

List your statements

GET/statements

Lists your statements in this environment, newest first. Use it to reconcile what NetApps InsureTech bills you against your own records, and to see what is still due.

statusMeaning
ISSUEDBilled and waiting for payment.
PARTIALLY_PAIDPart of it is paid.
PAIDPaid in full.
OVERDUENot paid in full by its due date.
DISPUTEDYou raised a dispute and support is looking at it.
CANCELLEDWithdrawn. Nothing is owed on it.
DRAFTBeing prepared, not yet billed.
  • Each item is a summary. Read one statement with GET /statements/{statementId} for its lines and the payments matched to it.
  • Filter with status.
  • Test keys read test statements, which hold no real money. Live keys read live statements.
  • Lists page by number: send page (starting at 1) and limit (rows per page, default 20). The pagination object in the response tells you the total, the totalPages and whether there is a next page (hasNextPage).

Errors to expect

StatusCodeWhyWhat to do
400BAD_REQUESTstatus, page or limit is not valid.Fix the fields named in fieldErrors.

Authorization

x-api-keyAPI key · headerrequired

The API key issued to the business, sent as <keyId>:<secret>, for example sk_test_REPLACE_ME:<secret>. The key id prefix selects the environment: sk_test_ keys read and write test data, sk_live_ keys production data.

Headers

X-Request-Id

Your own id for this request, echoed on the response and used as the correlationId of any error. Must match ^[A-Za-z0-9._-]{1,64}$; anything else is replaced with a minted req_<uuid>.

Parameters

statusquery · stringdefault:

Only statements in this status. A value outside the list is a 400.

pagequery · integerdefault:

1-based page number. Defaults to 1.

limitquery · integerdefault:

Rows per page. Defaults to 20.

Responses

200One page of statements.
400Bad request. fieldErrors names every offending field.
401Unauthorized. The API key is missing, unknown, inactive or wrong.
403Forbidden. The key is valid but this business may not use it: read details.reason.
429Rate limited. Wait Retry-After seconds.
500Server error. Quote the correlationId when you report it.
curl -X GET 'https://insure-api.netapps.ng/api/v1/statements'
Response
{
  "items": [
    {
      "id": "6716f0c2a9b8e7d6c5b4a391",
      "statementNumber": 12,
      "environment": "live",
      "currency": "NGN",
      "cadence": "MONTHLY",
      "period": {
        "from": "2026-08-31T23:00:00.000Z",
        "to": "2026-09-30T22:59:59.999Z"
      },
      "status": "PARTIALLY_PAID",
      "issuedAt": "2026-10-01T06:00:04.112Z",
      "dueAt": "2026-10-07T22:59:59.999Z",
      "totals": {
        "grossMinor": 2787500,
        "merchantCommissionMinor": 27875,
        "taxMinor": 0,
        "dueMinor": 2759625,
        "lineCount": 2
      },
      "paidMinor": 1000000,
      "accountNumber": "9932041187",
      "bankName": "Wema Bank",
      "createdAt": "2026-10-01T06:00:04.112Z"
    },
    {
      "id": "66fc12e0a9b8e7d6c5b4a210",
      "statementNumber": 11,
      "environment": "live",
      "currency": "NGN",
      "cadence": "MONTHLY",
      "period": {
        "from": "2026-07-31T23:00:00.000Z",
        "to": "2026-08-31T22:59:59.999Z"
      },
      "status": "PAID",
      "issuedAt": "2026-09-01T06:00:03.871Z",
      "dueAt": "2026-09-07T22:59:59.999Z",
      "totals": {
        "grossMinor": 8075000,
        "merchantCommissionMinor": 80750,
        "taxMinor": 0,
        "dueMinor": 7994250,
        "lineCount": 2
      },
      "paidMinor": 7994250,
      "accountNumber": "9932041187",
      "bankName": "Wema Bank",
      "createdAt": "2026-09-01T06:00:03.871Z"
    }
  ],
  "pagination": {
    "total": 2,
    "page": 1,
    "limit": 20,
    "totalPages": 1,
    "hasNextPage": false,
    "hasPrevPage": false
  }
}

Read one statement

GET/statements/{statementId}

Reads one statement with every line it bills and every payment matched to it. Use it to reconcile line by line: each line names the purchase (purchaseId) and your own reference (transactionId).

What you get back

  • lines: what was billed. PREMIUM lines bill a policy you sold, a later installment on it or a premium increase. ADJUSTMENT lines credit a refund on a cancellation or a premium decrease, or correct an amount. Treat the set of types as open.
  • merchantCommissionMinor on a line is your share of the commission on it, and amountDueMinor is what the line adds to totals.dueMinor. The lines' amountDueMinor add up to totals.dueMinor, unless the statement carries a credit note.
  • totals.dueMinor: what you owe, after your share of the commission (totals.merchantCommissionMinor) and any tax withheld.
  • payments: the transfers matched to this statement, oldest first. paidMinor is the sum applied.
  • dispute: the dispute you raised on the merchant dashboard, or null.
  • creditNote: only when refunds came to more than you owed. totals.dueMinor is then 0 and the statement can be PAID. It shows the credit, what is left of it, the later statements that used it and any payout to you.
  • A line with chargeId bills an installment or a premium change on a purchase: PREMIUM when you collected more, ADJUSTMENT when the premium went down. Its transactionId is the payment reference of that installment or change.
  • A line of type CARRIED_CREDIT shows credit from an earlier statement taken off this one. Its purchaseId is credit_<n>, where <n> is the number of that earlier statement.
  • A correction NetApps InsureTech adds is an ADJUSTMENT line whose purchaseId is adj_<uuid> unless it names a purchase.

A statement of another business, or of the other environment, is 404, the same as one that does not exist.

Authorization

x-api-keyAPI key · headerrequired

The API key issued to the business, sent as <keyId>:<secret>, for example sk_test_REPLACE_ME:<secret>. The key id prefix selects the environment: sk_test_ keys read and write test data, sk_live_ keys production data.

Headers

X-Request-Id

Your own id for this request, echoed on the response and used as the correlationId of any error. Must match ^[A-Za-z0-9._-]{1,64}$; anything else is replaced with a minted req_<uuid>.

Parameters

statementIdpath · stringrequireddefault:

This API's id for the statement, as GET /statements serves it and as billed purchases carry it in statementId.

Responses

200The statement, with its lines and payments.
401Unauthorized. The API key is missing, unknown, inactive or wrong.
403Forbidden. The key is valid but this business may not use it: read details.reason.
404Not found, or not owned by this business.
429Rate limited. Wait Retry-After seconds.
500Server error. Quote the correlationId when you report it.
curl -X GET 'https://insure-api.netapps.ng/api/v1/statements/{statementId}'
Response
{
  "statement": {
    "id": "6716f0c2a9b8e7d6c5b4a391",
    "statementNumber": 12,
    "environment": "live",
    "currency": "NGN",
    "cadence": "MONTHLY",
    "period": {
      "from": "2026-08-31T23:00:00.000Z",
      "to": "2026-09-30T22:59:59.999Z"
    },
    "status": "PARTIALLY_PAID",
    "issuedAt": "2026-10-01T06:00:04.112Z",
    "dueAt": "2026-10-07T22:59:59.999Z",
    "totals": {
      "grossMinor": 2787500,
      "merchantCommissionMinor": 27875,
      "taxMinor": 0,
      "dueMinor": 2759625,
      "lineCount": 2
    },
    "paidMinor": 1000000,
    "accountNumber": "9932041187",
    "bankName": "Wema Bank",
    "createdAt": "2026-10-01T06:00:04.112Z",
    "lines": [
      {
        "type": "PREMIUM",
        "purchaseId": "pur_8258cbe045d4",
        "transactionId": "order_10293",
        "policyNumber": "ACM/MOTOR/2026/000123",
        "currency": "NGN",
        "grossMinor": 4037500,
        "taxWithheldMinor": 0,
        "merchantCommissionMinor": 40375,
        "amountDueMinor": 3997125
      },
      {
        "type": "ADJUSTMENT",
        "purchaseId": "pur_1f0c9a77e2b4",
        "currency": "NGN",
        "grossMinor": -1250000,
        "taxWithheldMinor": 0,
        "merchantCommissionMinor": -12500,
        "amountDueMinor": -1237500,
        "note": "refund on a cancellation"
      }
    ],
    "payments": [
      {
        "transactionId": "txn_7Hq2m9xK",
        "amountMinor": 1000000,
        "appliedMinor": 1000000,
        "receivedAt": "2026-10-03T10:12:44.000Z"
      }
    ],
    "dispute": null,
    "creditNote": {
      "amountMinor": 250000,
      "remainingMinor": 100000,
      "status": "OPEN",
      "carriedTo": [
        {
          "statementId": "66fc12e0a9b8e7d6c5b4a210",
          "amountMinor": 150000,
          "carriedAt": "2026-10-01T06:00:04.112Z"
        }
      ],
      "payouts": []
    }
  }
}