> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thrads.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Ad Account

> Retrieve your organization's default ad account — the top-level scope every campaign, ad group, and ad belongs to.

Every advertiser organization has exactly one default ad account. It is the parent scope for all of your campaigns and the account the Thrad Platform charges. This endpoint returns that account so you can confirm scope, currency, and timezone before creating campaigns.

<Note>
  The ad account is read-only over the API. There is no create, update, or list operation — an organization always has a single default account, provisioned for you in the Thrad Platform dashboard.
</Note>

## Authorizations

<ParamField header="Authorization" type="string" required>
  Bearer token using your organization's API key: `Authorization: Bearer ak_...`. There is **one active key per organization** — create or rotate it in the Thrad Platform dashboard under **Settings → API keys**. Store it as the `THRAD_ADS_API_KEY` environment variable.
</ParamField>

## Request

`GET /v1/ad_account`

This endpoint takes no path, query, or body parameters.

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.thrad.ai/v1/ad_account \
    -H "Authorization: Bearer $THRAD_ADS_API_KEY"
  ```

  ```python Python theme={null}
  import os
  import requests

  resp = requests.get(
      "https://api.thrad.ai/v1/ad_account",
      headers={"Authorization": f"Bearer {os.environ['THRAD_ADS_API_KEY']}"},
  )
  account = resp.json()
  print(account["id"])
  ```
</RequestExample>

<ResponseExample>
  ```json 200 - OK theme={null}
  {
    "id": "f3a1c2d4-5b6e-47a8-9c0d-1e2f3a4b5c6d",
    "name": "Acme Inc.",
    "url": "https://acme.com",
    "timezone": "UTC",
    "currency_code": "USD",
    "preview_url": "https://cdn.thrad.ai/assets/acme-logo.png"
  }
  ```

  ```json 401 - Unauthorized theme={null}
  {
    "error": {
      "message": "Invalid API key.",
      "type": "authentication_error",
      "param": null,
      "code": "invalid_api_key"
    }
  }
  ```
</ResponseExample>

## Response

<ResponseField name="id" type="string">
  The ad account's identifier (a UUID). Use this value as `ad_account_id` when creating a campaign for a non-default account; omit it to target the default account.
</ResponseField>

<ResponseField name="name" type="string">
  Display name of the ad account. May be an empty string if no name is set.
</ResponseField>

<ResponseField name="url" type="string">
  The advertiser's website URL. Falls back to your organization's domain when the account has none, and may be an empty string if neither is set.
</ResponseField>

<ResponseField name="timezone" type="string">
  The account timezone. Always `"UTC"` — all timestamps in the API are Unix seconds interpreted in UTC.
</ResponseField>

<ResponseField name="currency_code" type="string">
  The billing currency. Always `"USD"`.
</ResponseField>

<ResponseField name="preview_url" type="string">
  Optional. A URL to the account's logo image, returned only when a logo has been set. Absent otherwise.
</ResponseField>

## Errors

Errors use the bare error shape — `{ "error": { "message", "type", "param", "code" } }` — not the platform envelope.

| Status                  | Type                   | Code                  | When                                                                      |
| ----------------------- | ---------------------- | --------------------- | ------------------------------------------------------------------------- |
| `401 Unauthorized`      | `authentication_error` | `auth_required`       | The `Authorization` header is missing entirely.                           |
| `401 Unauthorized`      | `authentication_error` | `invalid_api_key`     | The `Authorization: Bearer ak_...` key is malformed, unknown, or revoked. |
| `429 Too Many Requests` | `rate_limit_error`     | `rate_limit_exceeded` | Exceeded the per-key limit of 1000 requests/hour.                         |

<Tip>
  Money and timestamps elsewhere in this API follow strict conventions: resource budgets and bids are **integer micros** (`$1 = 1,000,000`), insights spend figures are **dollar floats**, and all times are **Unix seconds** in UTC. The ad account itself exposes none of these — it only confirms `timezone` is UTC and `currency_code` is USD.
</Tip>
