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

# List ad accounts

`GET /v1/ads/accounts`

Returns the platform ad accounts available for the given account (e.g. Meta ad
accounts, TikTok advertiser IDs, Google Ads customer IDs).
Meta business-login accounts use their own system-user token. Fresh Meta discovery
includes businessId and businessName from the owning Business Manager when available;
cached entries gain these fields after the next discovery refresh.

For TikTok agencies: enumerates every advertiser under every Business Center the token
can read (paginated server-side), then chunks the lookup against TikTok's
`/advertiser/info/` endpoint (which has a per-call cap of ≤100 IDs). Solo advertisers
without a BC fall back to the OAuth-time `advertiser_ids` list. Cached for 1h on the
SocialAccount; lazy-refreshed on first call after expiry.

For Google Ads: responds `429` when Google's API quota is temporarily exhausted
(instead of an empty list). Retry after a delay.

## Query parameters

- `accountId` string, required
- `adAccountId` string
- `limit` integer

## Response `200`

Ad accounts

- object
  - `accounts` object[]
    - `id` string — Platform ad account ID (e.g. act_123)
    - `name` string
    - `currency` string
    - `businessId` string — Meta only. Owning Business Manager ID when available on the grant.
    - `businessName` string — Owning business name when supplied by the platform.
    - `status` string — LinkedIn only. LinkedIn's own ad account status. In practice always `ACTIVE`, because the LinkedIn query filters to active accounts. Meta, Google, TikTok and Pinterest report `accountStatus` instead; X reports `approvalStatus`.
    - `accountStatus` unknown
    - `approvalStatus` string — X only. X's own ad account approval status. Observed values are `ACCEPTED`, `PENDING` and `REJECTED`, but X does not publish the full vocabulary, so treat an unrecognised value as not usable. Other platforms report `accountStatus` or `status` instead.
    - `disableReason` integer — Meta only. Meta's `disable_reason` code, forwarded unchanged. Present when `accountStatus` is `2` (DISABLED) and Meta gives a reason, which is what separates a policy action from a payment problem. Meta does not publish a stable list of values for this field, so none are enumerated here: resolve the code against Meta's own ad account reference. Absent when Meta reports no reason, or when the connected token cannot read the field.
    - `timezoneName` string — IANA timezone of the ad account (Meta only). Drives daily-budget reset and Insights day boundaries.
    - `timezoneOffsetHoursUtc` number — Signed UTC offset in hours, reflecting current DST (Meta only).
    - `minimumDailyBudget` number — Meta only. Minimum daily budget for the account, in the account currency's major units. This is the impressions-billed minimum; other billing events have higher minimums. Absent when the connected token cannot read it.
    - `selectable` boolean — Meta and X only. Whether the account can create/run ads now. Absent (treat as true) on other platforms.
    - `unusableReason` string, nullable — Meta and X only. Human-readable reason when selectable is false; null when selectable.
  - `cachedAt` string, date-time, nullable — Google only. When this list was fetched from Google. Null when it was never served from cache, or on other platforms.
  - `stale` boolean — Google only. True when Google's daily API quota was exhausted and this is the last successful fetch, not a live read. Absent on other platforms.

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `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.
- `422` — Platform ads connection required (TikTok Ads, X Ads) or Instagram missing linked Facebook account
- `429` — The connected account's upstream platform quota is exhausted. Reddit rate-limits per connected Reddit user (1000 requests per 10-minute window), and that budget is shared by every operation using that account. Retry after the window resets rather than retrying immediately; repeated calls while exhausted do not succeed and keep the budget spent.

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 4 info
  - added the optional property `details/budgetScope` to the response with the `400` status
  - added the optional property `details/budgetScope` to the response with the `404` status
  - added the optional property `details/budgetScope` to the response with the `409` status
  - added the optional property `details/budgetScope` to the response with the `429` status
- **2026-09-15** `0dba7d004d75` — 8 info
  - added the optional property `details/quotaExhausted` to the response with the `400` status
  - added the optional property `details/quotaExhausted` to the response with the `404` status
  - added the optional property `details/quotaExhausted` to the response with the `409` status
  - added the optional property `details/quotaExhausted` to the response with the `429` status
  - …4 more
- **2026-09-10** `e70ed06e7150` — 5 info
  - added the non-success response with the status `400`
  - added the non-success response with the status `404`
  - added the non-success response with the status `409`
  - added the optional property `accounts/items/businessId` to the response with the `200` status
  - …1 more
- **2026-09-08** `d7a8fa118ef0` — 2 info
  - added the optional property `cachedAt` to the response with the `200` status
  - added the optional property `stale` to the response with the `200` status

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/accounts/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/eded32b62823?raw)
