Get Company Billing
GET /companies/{company_id}/billing
What ONE of your customers is paying you: subscription, invoices, upcoming charge.
Read from the stripe_* tables that the per-org Stripe sync populates
from the customer’s OWN connected account, so this is revenue the caller
receives - not what the caller owes graph8, which is GET /usage.
payment_method is null by design rather than by omission: card data is
not synced, and the hosted portal is the only place it exists.
A company in another org is a 404, not a 403 - the app’s own choice, so that the API cannot be used to test whether a company id exists somewhere else.
Authorizations
Parameters
Path Parameters
Query Parameters
Invoices to return, newest first. 50 is a hard ceiling in the app, applied whatever is sent - declared honestly here so an over-large value is a 422 rather than a silently smaller answer.
Invoices to return, newest first. 50 is a hard ceiling in the app, applied whatever is sent - declared honestly here so an over-large value is a 422 rather than a silently smaller answer.
Header Parameters
Responses
200
Successful Response
object
An OPEN envelope around one report’s answer.
The app wraps every one of these reports in {success, data, meta}, where
meta carries the cache state, the window and - on the agency reports -
failed_org_ids, the orgs that contributed NOTHING to the totals above.
That field is the difference between “this client sent no email” and “we
could not query this client”, so it is forwarded rather than flattened
away.
Open on purpose: data is dict | list in the app and its contents grow
with the product. A closed model would turn every new metric into a
silently dropped one.
object
object
Whether there are more pages
Items per page
Current page number (1-indexed)
Total number of items
422
Validation Error