Api Endpoint

Stack Billing

Generate a finished, professional invoice PDF from JSON — recipient and line items in, a ready-to-send application/pdf out. Layouts: standard, legal, creative. Totals and tax are computed server-side so the numbers always add up. First payment auto-creates a wallet profile (token + API key in response headers); returning wallets get sequential invoice numbering and can save a sender letterhead. USD only.

Open interactive test console

Offering

Provider
stackbill.app
Method
POST
Offering type
Api Endpoint
Transport type
http
Category
Business And Commerce
Delivery
Not provided
Pricing model
Not provided
x402 version
2

Endpoint context

URL
https://stackbill.app/routes/x402/invoice-from-data
MIME type
Not provided
First seen
2026-10-16T01:50:14.534Z
Last seen
Tags
invoice, invoice-pdf, invoice-generator, billing, pdf-generation

Payment pricing

x402 payment terms are the authoritative price for calling this endpoint.

Payment option 1
0.1 USDC
Atomic price: 100000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "100000",
    "payTo": "0x1f2A484ef654d49c58c625b09e78B538501D652D"
  }
]

Observed health

Status
Reachable
Latest latency
95 ms
Average latency
302 ms
HTTP status
405
Last checked
Reachability
100% over 14 checks

Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.

Input schema

{
  "additionalProperties": false,
  "properties": {
    "body": {
      "properties": {
        "currency": {
          "description": "Optional; must be \"USD\" if present (v1 renders USD only)",
          "type": "string"
        },
        "dueDate": {
          "description": "Optional due date, YYYY-MM-DD",
          "type": "string"
        },
        "invoiceNumber": {
          "description": "Invoice number printed on the PDF. Optional when the request carries an X-StackApps-Token header from a previous paid call — the next sequential number for that wallet is used and returned in the X-Invoice-Number response header",
          "type": "string"
        },
        "lineItems": {
          "description": "At least one line item; amount per line, subtotal, tax and total are computed server-side",
          "items": {
            "properties": {
              "description": {
                "type": "string"
              },
              "quantity": {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              "unitPrice": {
                "minimum": 0,
                "type": "number"
              }
            },
            "required": [
              "description",
              "quantity",
              "unitPrice"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "notes": {
          "description": "Optional notes printed at the bottom of the invoice",
          "type": "string"
        },
        "recipient": {
          "description": "Who the invoice is billed to",
          "properties": {
            "address": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "required": [
            "name",
            "address"
          ],
          "type": "object"
        },
        "sender": {
          "description": "Who the invoice is from. Optional for activated wallet profiles (send X-StackApps-Token) — the profile's saved name and address are used",
          "properties": {
            "address": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "required": [
            "name",
            "address"
          ],
          "type": "object"
        },
        "taxRate": {
          "description": "Optional tax percent applied to the subtotal (e.g. 7.5)",
          "minimum": 0,
          "type": "number"
        },
        "template": {
          "description": "Optional PDF layout (default standard): legal = billing statement with a per-line Date column (populated when descriptions start with 'Work session on YYYY-MM-DD: '); creative = service/fee layout without hours-rate columns (service name taken from the text before ': ' in each description)",
          "enum": [
            "standard",
            "legal",
            "creative"
          ],
          "type": "string"
        }
      },
      "required": [
        "recipient",
        "lineItems"
      ]
    },
    "bodyType": {
      "enum": [
        "json",
        "form-data",
        "text"
      ],
      "type": "string"
    },
    "method": {
      "enum": [
        "POST",
        "PUT",
        "PATCH"
      ],
      "type": "string"
    },
    "type": {
      "const": "http",
      "type": "string"
    }
  },
  "required": [
    "type",
    "method",
    "bodyType",
    "body"
  ],
  "type": "object"
}

Output schema

{
  "properties": {
    "example": {
      "type": "object"
    },
    "type": {
      "type": "string"
    }
  },
  "required": [
    "type"
  ],
  "type": "object"
}