---
title: "Get ad account billing"
method: GET
path: "/v1/ads/accounts/billing"
tags: ["Ad Accounts"]
---

# Get ad account billing

`GET /v1/ads/accounts/billing`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/ads/accounts/billing`
- Auth: HTTP bearer

Reads the payments accounts a Google Ads account can be billed to, plus its billing setups and account budgets.

Payments accounts come from Google's PaymentsAccountService, read as the manager above the customer: they are the monthly invoicing (consolidated billing) accounts of that manager. An empty `paymentsAccounts` means the manager has no monthly invoicing, so billing cannot be set up through the API and has to be added in Google Ads. Billing setups and account budgets are read live from Google with their status. Results are cached for 10 minutes and dropped on every setup through Zernio.

## Query parameters

- `accountId` string, required
- `adAccountId` string

## Response `200`

Billing state of the customer

- object
  - `customerId` string
  - `paymentsAccounts` object[]
    - `paymentsAccountId` string: Format 1234-5678-9012-3456. Pass it to POST /v1/ads/accounts/billing.
    - `name` string, nullable
    - `currency` string, nullable
    - `paymentsProfileId` string, nullable
    - `payingManagerCustomerId` string, nullable: Manager whose monthly invoice pays this account.
  - `billingSetups` object[]
    - `billingSetupId` string
    - `status` 'PENDING' | 'APPROVED_HELD' | 'APPROVED' | 'CANCELLED' | 'UNKNOWN': APPROVED_HELD means approved but waiting for its first account budget to be approved.
    - `paymentsAccountId` string, nullable
    - `startDateTime` string, nullable: In the account time zone, as Google returns it.
    - `endDateTime` string, nullable
  - `accountBudgets` object[]
    - `accountBudgetId` string
    - `status` 'PENDING' | 'APPROVED' | 'CANCELLED' | 'UNKNOWN'
    - `billingSetupId` string, nullable
    - `approvedSpendingLimitMicros` string, nullable
    - `approvedSpendingLimitType` string, nullable: INFINITE for an unlimited budget.
    - `pendingProposalId` string, nullable: Account budget proposal still waiting for Google's review.
  - `pendingBudgetProposals` object[]: New account budgets proposed but not yet approved by Google. A setup with one is not reused by the POST.
    - `accountBudgetProposalId` string
    - `billingSetupId` string, nullable
  - `cachedAt` string, date-time, nullable: When this data was fetched from Google. Null when the cache is unavailable.
  - `stale` boolean: True when Google's quota was exhausted and this is the last successful fetch.

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `403`: The connection has selected ad accounts (its ad-account scope, set with the dashboard picker or GET /v1/connect/{platform}/ads with adAccountIds) and the ad account this request targets is not among them, so the connection may not act on it even though its token can reach it. Code `ad_account_not_selected`. `details` carries `accountId` (the connection), `adAccountId` (the refused ad account) and `selectedAdAccountIds`. Add the ad account to the selection (adAccountIds replaces the whole selection, so pass the ids already selected plus this one) or use a connection that has it selected. Connections without a selection keep reaching every ad account their token can manage.
- `404`: The account or requested resource was not found or is not accessible. An account ID may have been disconnected and removed. Read GET /v1/accounts for current account IDs.
- `409`: The account exists but is inactive or needs reconnection. Reconnect it, then read GET /v1/accounts for its current account ID before retrying. Code: ads_connection_required.
- `429`: Google Ads operations budget or quota exhausted; retry later.
- `501`: Only available on Google Ads accounts

## Changes

- **2026-10-22** `c083c0fa652b`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/accounts/billing/get.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/4e74db179e73?raw)
