---
title: "Create Meta ad account"
method: POST
path: "/v1/ads/accounts"
tags: ["Ad Accounts"]
---

# Create Meta ad account

`POST /v1/ads/accounts`

Creates a durable Meta ad account in the end user's own business portfolio using
their connected Meta Ads token. Requires an active metaads accountId, Ads access,
business_management permission and business admin access. Discover portfolios with
GET /v1/ads/businesses. System-user tokens may return an empty businesses list;
supply the known business ID in that case.

The self-serve account starts without a payment method. The user must add a payment
method in Ads Manager before ads can deliver. Zernio cannot add payment methods.
Meta may require business verification and limits how many accounts a business can
create. Closing an account does not guarantee more capacity. An ad account cannot
truly be deleted, even after closing it and removing it from a business.

timezoneId is Meta's numeric ID, not an IANA timezone name. Select it from
https://developers.facebook.com/docs/marketing-api/reference/ad-account/timezone-ids/.
For example, 1 is America/Los_Angeles. Meta validates supported currencies and IDs.
endAdvertiser, mediaAgency and partner default to NONE for the self-serve flow.

The new account is added atomically to an existing scoped ad-account allowlist.
Unrestricted connections stay unrestricted. Reconnecting the same Meta identity
preserves this scope unless a caller explicitly replaces it. Discovery is nudged
immediately. Use the returned adAccountId with the existing ads endpoints.

This operation is not idempotent and Zernio never automatically retries it.
Unknown body fields are rejected. No validateOnly or dry-run option is supported.
After a timeout or a 502 with details.creationStatus=unknown, check the business
in Ads Manager before attempting another creation. A 201 with connectionUpdated=false
means the account exists but needs reconnecting with adAccountIds containing the returned ID and the previous
scoped IDs via GET /v1/connect/facebook/ads. Do not repeat the create call.

## Request body

- object
  - `accountId` string, required — Zernio metaads SocialAccount ID.
  - `businessId` string, required — Business portfolio that will own the account.
  - `name` string, required — Ad account name. Whitespace is trimmed.
  - `currency` string, required — Uppercase ISO 4217 currency supported by Meta.
  - `timezoneId` integer, required — Numeric Meta timezone ID from the linked timezone list. For example 1 is America/Los_Angeles.
  - `endAdvertiser` string — End advertiser business or page ID. NONE uses the owning business.
  - `mediaAgency` string — Media agency business or page ID. NONE for self-serve customers.
  - `partner` string — Partner business or page ID. NONE for self-serve customers.
  - `invoice` boolean — Request Meta invoicing. Eligibility is determined by Meta.
  - `invoiceGroupId` string — Existing Meta invoice group ID.
  - `invoicingEmails` string[] — Addresses for Meta invoices.
  - `io` boolean — Meta insertion-order invoicing option.
  - `poNumber` string — Purchase order number.
  - `fundingId` string — Existing Meta funding reference. Does not add a payment method.
  - `adAccountCreatedFromBmFlag` boolean — Meta Business Manager creation flag.

## Response `201`

Ad account created. Check connectionUpdated and payment instructions.

- object
  - `adAccountId` string, required — New Meta ad account ID for subsequent ads calls.
  - `businessId` string, required — Owning business portfolio ID.
  - `connectionUpdated` boolean, required — Whether the connection scope and discovery schedule were updated.
  - `paymentMethodRequired` boolean, required — Always true as a delivery prerequisite. This is not a live funding-source check. Confirm payment or invoicing in Ads Manager.
  - `adsManagerUrl` string, uri, required — Open the created account in Ads Manager.
  - `nextSteps` string, required — Payment setup instructions for the user.
  - `warnings` string[], required — Recovery instructions if the account could not be attached to the connection.

## Other responses

- `400` — Invalid input or Meta rejection. details.reason identifies creation_limit, business_verification_required, unsupported_currency, unsupported_timezone or business_unavailable when recognized.
- `401` — Unauthorized
- `403` — Ads access denied or Meta permission missing. details.reason may be business_management_required, business_admin_required or business_access_required.
- `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.
- `502` — Creation outcome unknown. Check Ads Manager before repeating this non-idempotent request.

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 5 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 `403` 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
  - …1 more
- **2026-09-15** `0dba7d004d75` — 10 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 `403` 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
  - …6 more
- **2026-09-10** `e70ed06e7150` — 1 info
  - endpoint added

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