Skip to main content

Billing

Endpoints for managing saved payment cards and receipts. Every route is a thin proxy to the external License Manager (LM), which is itself the gateway to the QuickBooks/Intuit payment provider. Raw card numbers never touch Informer's servers: the client tokenizes a card directly with Intuit using the parameters from the tokenization-config endpoint, then sends only the resulting token.

All billing routes require permission.billing.manage. That driver checks the billingManage global permission, which has a Superuser fallback, so a Superuser on the tenant always satisfies it and a non-Superuser needs the billingManage global permission. Permission is not the limiting factor for these endpoints: LM connectivity is.

Live responses

Every response body on this page comes from a live, online install. The billing routes forward each call to the License Manager using the tenant's activation token as a Bearer credential. On an install that cannot reach the LM (for example, an offline or air-gapped deployment), the read endpoints answer 503 with data.code set to lm_unreachable instead of a success body. Because the provider is external and the bodies are not deterministic, this area captures no fixtures.

GET /api/billing/tokenization-config

Return the client-side card tokenization parameters. The client uses these to tokenize a card directly with Intuit so that raw card numbers (PANs) never reach Informer's servers, which keeps Informer out of PCI scope.

Authentication: permission.billing.manage

Response:

The License Manager's tokenization configuration. HAL api rel inf:billing-tokenization-config. Status 200 on a live online install.


GET /api/billing/cards

List the saved payment cards for the tenant.

Authentication: permission.billing.manage

Response:

The License Manager's saved-card list. HAL api rel inf:billing-cards. Status 200 on a live online install.


POST /api/billing/cards

Save a new payment card. The card is tokenized client-side with Intuit first; this endpoint forwards only the resulting token to the License Manager.

Authentication: permission.billing.manage

Request Body:

FieldTypeRequiredDescription
tokenstringYesToken from client-side Intuit tokenization

The payload is stripUnknown, so any unrecognized fields are dropped.

Example Request:

{ "token": "tok_from_client_side_intuit_tokenization" }

Response:

The status and body mirror what the License Manager returns. On an LM error the route reboxes the failure into an error whose status code is the LM response status (or 400 when none is available) and whose message is the LM error text.


GET /api/billing/cards/{id}

Retrieve a single saved card.

Authentication: permission.billing.manage

Path Parameters:

ParameterTypeDescription
idstringLicense Manager card id

Response:

The License Manager's card record. HAL api rel inf:billing-card. Status 200 on a live online install.


DELETE /api/billing/cards/{id}

Delete a saved card.

Authentication: permission.billing.manage

Path Parameters:

ParameterTypeDescription
idstringLicense Manager card id

Response:

Whatever the License Manager returns for the delete, forwarded as-is. Following the Informer DELETE convention, this is 200 with a body, not 204.


GET /api/billing/receipts

List the receipts for the tenant.

Authentication: permission.billing.manage

Response:

The License Manager's receipt list; the status and body mirror what the License Manager returns. HAL api rel inf:billing-receipts. Status 200 on a live online install.


GET /api/billing/receipts/{id}

Render a single receipt as a PDF.

Authentication: permission.billing.manage

Path Parameters:

ParameterTypeDescription
idstringLicense Manager receipt id

Response:

This endpoint does not return JSON. It fetches the receipt from the License Manager, renders it through the receipt Template, then renders that to a PDF and responds application/pdf with a Content-Disposition of inline; filename="informer_receipt_<DocNumber>_<TxnDate>.pdf". HAL api rel inf:billing-receipt.

PDF output

Because the response is a binary PDF (and depends on the live License Manager), there is no JSON body to show here. Request it from a live online install to download the rendered receipt.