HelipodDocs

Wallet and invoices

Wallet balance and transactions, invoices, and the monthly statement.

Every route on this page needs a whole-account key (403 ACCOUNT_KEY_REQUIRED otherwise). Amounts are in Rupiah.

Wallet

GET/account/wallet
The balance every purchase is paid from.
curl https://api.helipod.io/api/account/wallet \
  -H "Authorization: Bearer hel_your_key"
{ "success": true, "data": { "balance": 482500, "currency": "IDR", "updatedAt": "2026-10-16T09:12:03.000Z" } }

Transactions

GET/account/wallet/transactions
Money in and out of the wallet, newest first.

Prop

Type

{
  "success": true,
  "data": {
    "transactions": [
      {
        "id": "6c5d4e3f-2a1b-4c0d-9e8f-7a6b5c4d3e2f",
        "amount": -29400,
        "currency": "IDR",
        "direction": "debit",
        "source": "billing",
        "kind": "email_plan",
        "description": "Email Plan: Starter (1 month)",
        "createdAt": "2026-10-01T03:00:00.000Z",
        "expiresAt": null
      }
    ],
    "total": 128,
    "limit": 50,
    "offset": 0
  }
}

amount is negative for money taken (direction: "debit") and positive for money added (credit). kind names the purchase when it is known, otherwise it is null. total counts every transaction, for paging.

Invoices

GET/account/invoices
Every invoice, newest first.
{
  "success": true,
  "data": [
    {
      "id": "0f1e2d3c-4b5a-4968-8776-655443322110",
      "number": "INV-0F1E2D3C4B",
      "title": "Wallet top-up",
      "subtitle": null,
      "type": "deposit",
      "amount": 500000,
      "currency": "IDR",
      "status": "paid",
      "paidFromWallet": false,
      "paymentMethod": "qris",
      "paymentUrl": null,
      "expiresAt": "2026-10-02T03:00:00.000Z",
      "paidAt": "2026-10-01T03:04:11.000Z",
      "createdAt": "2026-10-01T03:00:00.000Z"
    }
  ]
}

type is deposit (a wallet top-up), subscription, bundle_purchase or vps_purchase; status is pending, paid, failed, expired or refunded. paymentUrl is set only while an invoice is pending: it is the page where it can be paid.

GET/account/invoices/{invoiceId}
A paid invoice as a document: seller, customer, the line and its date.
{
  "success": true,
  "data": {
    "issuedAt": "2026-10-16T09:20:00.000Z",
    "currency": "IDR",
    "seller": { "name": "...", "brand": "Helipod", "address": "...", "taxId": "...", "nib": "...", "contact": "...", "website": "https://helipod.io" },
    "customer": { "name": "Ana Putri", "organization": null, "phone": "+6281234567890", "location": "Jakarta Selatan, DKI Jakarta" },
    "invoice": {
      "id": "0f1e2d3c-4b5a-4968-8776-655443322110",
      "number": "INV-0F1E2D3C4B",
      "date": "2026-10-01T03:04:11.000Z",
      "title": "Wallet top-up",
      "subtitle": null,
      "method": "qris",
      "amount": 500000,
      "createdAt": "2026-10-01T03:00:00.000Z"
    }
  }
}

An invoice that is not paid yet answers 409 INVOICE_NOT_PAID. Your email address is never included.

Monthly statements

A statement is the invoice for one calendar month (Western Indonesia Time): what you paid in, and what the wallet was used for.

GET/account/statements
The months that have a statement.
{ "success": true, "data": { "months": ["2026-10", "2026-09", "2026-08"] } }
GET/account/statements/{month}
One month, as YYYY-MM.
curl https://api.helipod.io/api/account/statements/2026-09 \
  -H "Authorization: Bearer hel_your_key"
{
  "success": true,
  "data": {
    "invoiceNumber": "HLP-202609-1A2B3C4D",
    "month": "2026-09",
    "period": { "start": "2026-08-31T17:00:00.000Z", "end": "2026-09-30T17:00:00.000Z" },
    "partial": false,
    "issuedAt": "2026-10-16T09:20:00.000Z",
    "currency": "IDR",
    "seller": { "...": "..." },
    "customer": { "...": "..." },
    "paid": [
      { "id": "…", "number": "INV-…", "date": "2026-09-03T02:10:00.000Z", "title": "Wallet top-up", "subtitle": null, "method": "qris", "amount": 500000 }
    ],
    "usage": {
      "charges": [ { "date": "2026-09-04T17:30:00.000Z", "description": "Service api: daily renewal", "amount": 1100 } ],
      "refunds": [],
      "credits": []
    },
    "totals": { "paid": 500000, "charges": 34100, "refunds": 0, "credits": 0 },
    "balanceNow": 482500
  }
}

Amounts in usage are positive: charges are purchases paid from the wallet, refunds money returned to it, credits promotions and adjustments. They explain the wallet and are not part of the invoice total, which is totals.paid. The current month is month to date, with partial: true. A month that has not started answers 400 MONTH_NOT_STARTED.

On this page