Public reference

Billing

Every endpoint in this group. Open one for its parameters and a worked example.

3 Endpoints

View as Markdown

Billing

3
GET /api/v1/billing/invoices List invoices across subscribers prm_billing

Every invoice the caller may see, in one list, with filters for reconciling a period. A caller without tenant-wide visibility sees only invoices belonging to subscribers in their own manager subtree.

Authentication
Staff token or session
Requires permission
prm_billing Billing & invoices

username is populated only on this cross-subscriber list, which joins the subscriber table. The per-subscriber list and the single-invoice fetch leave it empty, because there the subscriber is already known.

Parameters

Parameter Description
filter[status] query · string Payment status.
filter[username] query · string Narrow to one subscriber by username.
filter[date_from] query · string Inclusive lower bound. A malformed value is a 400, not an ignored filter.
filter[date_to] query · string Inclusive upper bound.
filter[amount_min] query · number Inclusive lower amount bound.
filter[amount_max] query · number Inclusive upper amount bound.
Response 200 OK
{
  "data": [
    {
      "id": 51204,
      "user_id": 4711,
      "username": "ahmed",
      "invoice_number": "INV-2026-000512",
      "type": "activation",
      "amount": 171.00,
      "discount": 0.00,
      "vat": 14.00,
      "status": "paid",
      "description": "Home 20M (activate)",
      "payment_method": "manager_balance",
      "due_date": "2026-09-20 00:00:00",
      "paid_on": "2026-09-20 09:15:02",
      "created_by_manager_id": 41,
      "created_by_name": "cairo-reseller",
      "created_at": "2026-09-20 09:15:02"
    }
  ],
  "meta": { "page": 1, "page_size": 50, "total": 1284, "has_next": true }
}
POST /api/v1/billing/invoices Issue an invoice prm_billing

Creates an invoice against a named subscriber from line items. discount and vat are percentages from 0 to 100, and the total is computed from the items — never taken from the request.

Authentication
Staff token or session
Requires permission
prm_billing Billing & invoices
Rate limit
t_mutate

discount and vat are PERCENTAGES, and the validator rejects anything above 100. Sending 171.00 in the vat field to mean "171 in tax" is a 400, not a silently large invoice.

Parameters

Parameter Description
user_idrequired body · integer The subscriber being invoiced.
itemsrequired body · array At least one line, each with name, qty, unit_price and an optional per-line tax.
discount body · number Percentage from 0 to 100, not an amount.
vat body · number Percentage from 0 to 100, not an amount.
due_date body · string yyyy-MM-dd HH:mm:ss in UTC.
mark_paid body · boolean Record the new invoice as already settled.
POST /api/v1/billing/invoices/bulk-pay Billing & invoices prm_billing
Authentication
Staff token or session
Requires permission
prm_billing Billing & invoices
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

Written to be read by machines too

The reference is public and needs no account, so a tool that has never seen X-Radius can reach a correct first call on its own.

/llms.txt
An index of every page, with one-line summaries.
/llms-full.txt
The whole reference as one Markdown file, with no navigation to crawl.
/openapi.json
OpenAPI 3.1, generated from the router that serves this instance.
/skill.md
A ready-made skill file for an assistant: authentication, the response envelope and the error codes in one page.
<page-url>.md
Append .md to any reference URL for the same page as Markdown.
Accept: text/markdown
Send this header on the ordinary URL and the answer comes back as Markdown instead.
Hand this to your assistant
Read https://x-radius.com/llms.txt, then fetch the endpoint you need as Markdown by appending .md to its URL.

Try it on your own network.

50 subscribers for 7 days. You pay nothing.