---
title: "Assign a user to an ad account"
method: POST
path: "/v1/ads/accounts/users"
tags: ["Ad Accounts"]
---

# Assign a user to an ad account

`POST /v1/ads/accounts/users`

Gives a person of the portfolio tasks on the ad account. `MANAGE` is admin, `ADVERTISE`
creates and edits ads, `ANALYZE` reads reports, `DRAFT` edits drafts only. Assigning an
already assigned user replaces their task set.

## Request body

- object
  - `accountId` string, required — Zernio SocialAccount id used to resolve the Meta token.
  - `adAccountId` string, required — Meta ad account id (act_<n>).
  - `userId` string, required — Business-scoped user id from GET /v1/ads/businesses/users.
  - `tasks` string[], required

## Response `201`

User assigned

- object
  - `adAccountId` string
  - `user` object
    - `id` string
    - `tasks` string[]

## Other responses

- `400` — Invalid input, or Meta rejected the request
- `401` — Unauthorized
- `403` — Meta refused: the token lacks business_management or business admin access.
- `404` — Account not found, or Meta could not load the user or ad account.
- `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` — 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. Google Ads: writes and reports run on one developer token shared by every Google Ads account on Zernio. The token holds Standard access (no daily operations cap), so this only happens when Google throttles the token or your ad account. The envelope has `code: rate_limited`, `platform: google`, `details.quotaScope: DEVELOPER` (`ACCOUNT` when it is your own ad account's quota), `details.resetsAt` (ISO instant when Google accepts requests again) and `Retry-After` counting down to it. Retrying earlier cannot succeed.
- `501` — Only supported on Meta (facebook/instagram)

## Changes

- **2026-09-29** `698a0d89ab62` — 1 info
  - endpoint added

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