# Get billing > The customer’s Stripe subscriptions, recent invoices, cards on file and monthly recurring revenue. Source: https://docs.vigilbase.com/one/api/reference/billing/customer-billing-get `GET https://api.vigilbase.com/one/v1/customers/{customerId}/billing` The customer’s Stripe subscriptions, recent invoices, cards on file and monthly recurring revenue. > Deprecated aliases: `GET https://one.vigilbase.com/api/customers/{id}/billing`. They answer with the same bodies, with a `Deprecation` header and a `successor-version` link to this URL. ## Authorizations Send one of these: - `Authorization` (string, header, required): Bearer access token from Vigilbase Identity (`auth.vigilbase.com`), sent as `Authorization: Bearer `. The CLI gets one with `vigilbase login`. Scope: `one:api`. - `Authorization` (string, header, required): Organisation API key (`vb_one_…`) from **Settings → API keys** in Vigilbase One, sent as `Authorization: Bearer vb_one_…`. Read-only keys work. See [organisation API keys](https://docs.vigilbase.com/one/api#organisation-api-keys). - `Authorization` (string, header, required): Vigilbase Identity access token issued to an MCP client (mcp.vigilbase.com). Scope: `one:read`. - Permissions checked: `read:billing` ## Path parameters - `customerId` (string, required) ## Responses Errors are problem details (`application/problem+json`). See [errors](https://docs.vigilbase.com/one/api#errors). ### 200 (application/json) Success - `isPartnerBilled` (boolean, required): Billed through the partner: subscriptions and invoices are the partner’s, for this customer’s contracts. - `partner` (any, required) - `billingContact` (any, required): Name and email on the Stripe customer; null when billed through a partner or not set up. - `monthlyRecurringRevenue` (any, required): Recurring revenue per month in minor units, from subscriptions (or contracts when partner-billed). - `currency` (string | null, required) - `subscriptions` (object[], required) - `id` (string, required) - `status` (string, required) - `description` (string, required): Product names of the items, comma separated. - `currentPeriodStart` (any, required) - `currentPeriodEnd` (any, required) - `cancelAtPeriodEnd` (boolean, required) - `canceledAt` (any, required) - `createdAt` (string, required) - `items` (object[], required) - `id` (string, required) - `quantity` (any, required) - `price` (object, required) - `id` (string, required) - `nickname` (string | null, required) - `unitAmount` (any, required) - `currency` (string | null, required) - `billingScheme` (any, required) - `interval` (any, required) - `intervalCount` (any, required) - `usageType` (any, required) - `transformQuantity` (any, required) - `product` (object, required) - `id` (string | null, required) - `name` (string, required) - `description` (string | null, required) - `invoices` (object[], required) - `id` (string, required) - `number` (string | null, required) - `status` (any, required) - `amountDue` (integer, required): Amount in the currency’s minor units (e.g. cents). Minimum -9007199254740991, maximum 9007199254740991. - `amountPaid` (integer, required): Amount in the currency’s minor units (e.g. cents). Minimum -9007199254740991, maximum 9007199254740991. - `amountRemaining` (integer, required): Amount in the currency’s minor units (e.g. cents). Minimum -9007199254740991, maximum 9007199254740991. - `currency` (string, required) - `description` (string | null, required) - `subscriptionId` (string | null, required) - `lineCount` (integer, required): Minimum -9007199254740991, maximum 9007199254740991. - `createdAt` (string, required) - `dueDate` (any, required) - `paidAt` (any, required) - `hostedInvoiceUrl` (string | null, required) - `invoicePdfUrl` (string | null, required) - `paymentMethods` (object[], required) - `id` (string, required) - `brand` (string | null, required) - `last4` (string | null, required) - `expMonth` (any, required) - `expYear` (any, required) - `contractCount` (any, required): Contracts behind partner billing; null otherwise. ### 400 (application/problem+json) Problem: `validation_failed`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 401 (application/problem+json) Problem: `unauthorized`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 403 (application/problem+json) Problem: `forbidden`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 404 (application/problem+json) Problem: `not_found`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 429 (application/problem+json) Problem: `rate_limit_exceeded`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 502 (application/problem+json) Problem: `upstream_unavailable`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### 503 (application/problem+json) Problem: `service_unavailable`. - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ### default (application/problem+json) Problem details (RFC 9457). - `type` (string, required) - `title` (string, required) - `status` (integer, required): Minimum 400, maximum 599. - `detail` (string, required) - `instance` (string) - `code` (string, required): One of `bad_request`, `validation_failed`, `idempotency_key_invalid`, `unauthorized`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `forbidden`, `step_up_required`, `staff_only`, `read_only_key`, `not_for_api_keys`, `insufficient_scope`, `not_found`, `method_not_allowed`, `conflict`, `idempotency_in_progress`, `gone`, `length_required`, `precondition_failed`, `payload_too_large`, `unsupported_media_type`, `unprocessable_entity`, `idempotency_key_reused`, `rate_limit_exceeded`, `internal_error`, `upstream_unavailable`, `service_unavailable`. - `requestId` (string, required) - `docs` (string) - `errors` (object[]) - `pointer` (string, required) - `message` (string, required) - `retryAfterSeconds` (integer): Minimum 0, maximum 9007199254740991. ## Example request ```bash # Token from `vigilbase login`, or an API key (vb_one_…) curl --request GET \ --url 'https://api.vigilbase.com/one/v1/customers/{customerId}/billing' \ --header "Authorization: Bearer $VIGILBASE_TOKEN" ``` With the Vigilbase CLI: ```bash vigilbase customers billing ``` ## Example response (200) ```json { "isPartnerBilled": true, "partner": "", "billingContact": "", "monthlyRecurringRevenue": "", "currency": "", "subscriptions": [ { "id": "", "status": "", "description": "", "currentPeriodStart": "", "currentPeriodEnd": "", "cancelAtPeriodEnd": true, "canceledAt": "", "createdAt": "", "items": [ { "id": "", "quantity": "", "price": {}, "product": {} } ] } ], "invoices": [ { "id": "", "number": "", "status": "", "amountDue": 123, "amountPaid": 123, "amountRemaining": 123, "currency": "", "description": "", "subscriptionId": "", "lineCount": 123, "createdAt": "", "dueDate": "", "paidAt": "", "hostedInvoiceUrl": "", "invoicePdfUrl": "" } ], "paymentMethods": [ { "id": "", "brand": "", "last4": "", "expMonth": "", "expYear": "" } ], "contractCount": "" } ``` See also the [guide](https://docs.vigilbase.com/one/api/customers).