Read billing
The organisation's plan, subscription and card, and the plans on sale with their prices. enabled is false until selling starts.
- Scopes
billing:read - Rate classread
/v1/billingThe organisation's plan, subscription and card, and the plans on sale with their prices. enabled is false until selling starts.
Authorization
apiKey An API key (fo_live_… / fo_test_…) as a bearer token
In: header
Header Parameters
Dated API version; pinned per organisation on first use and overridable per request
Value in
- "2026-10-01"
- "2026-10-04"
The data the request acts on: test is the organisation's sandbox. An OAuth token picks it (live by default); an API key's mode is fixed, and naming the other one is refused
Value in
- "live"
- "test"
ETag of a cached representation; a match returns 304
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/v1/billing"{ "object": "billing_account", "enabled": true, "plan": "string", "subscription": { "status": "incomplete", "plan": "string", "current_period_end": "2019-08-24T14:15:22Z", "cancel_at_period_end": true, "interval": "month", "cancel_at": "2019-08-24T14:15:22Z", "discount": { "name": "string", "percent_off": 1, "amount_off": 0, "ends_at": "2019-08-24T14:15:22Z" }, "scheduled_change": { "plan": "string", "interval": "month", "effective_at": "2019-08-24T14:15:22Z" } }, "card": { "brand": "string", "last4": "string", "exp_month": 1, "exp_year": 2000 }, "plans": [ { "code": "string", "name": "string", "currency": "string", "monthly": 0, "meters": { "property1": { "included": 0, "per": 1, "amount": 0 }, "property2": { "included": 0, "per": 1, "amount": 0 } } } ], "live": true, "grace_ends_at": "2019-08-24T14:15:22Z", "address": { "line1": "string", "line2": "string", "city": "string", "state": "string", "postal_code": "string", "country": "string" }, "tax_id": { "type": "string", "value": "string" }, "details": { "object": "billing_details", "name": "string", "name_follows_org": true, "email": "[email protected]" }, "credit_balance": 0, "currency": "string", "overdue_invoice": { "id": "string", "number": "string", "amount_due": 0, "currency": "string", "hosted_invoice_url": "http://example.com" }}Buy FurniOps AI credit POST
Starts a purchase of the amount, in the billing currency and whole units, as a one-off invoice with tax, and answers the payment the browser confirms with Stripe's Payment Element; then poll `getCreditPurchase`. Credit is added only once Stripe reports the invoice paid, and expires 12 months later. The same `Idempotency-Key` answers the same purchase. Owner only, on a paid plan with Ask AI (403 `feature_unavailable`): refused while a renewal is past due, a payment is disputed or the organisation is being deleted (409), in a currency credit is not sold in (422 `currency_unsupported`), or outside the amounts and balance limit `getCreditBalance` states (422). While billing is switched off, it answers 409 `conflict`.
Read FurniOps AI credit GET
The organisation's FurniOps AI credit in US dollars (micro-USD): the balance, what running Ask AI turns hold, what expires next, today's allowance and spend, how credit is spent, and whether you may buy more and within which amounts. Today's allowance pays first; credit pays once it is used, when `credits_after_allowance` is on.