Zernio
Zernio
API Reference

Accounts & Ops

Accounts

List ad accountsGETCreate Meta ad accountPOSTUpdate ad account settingsPATCHAd account financesGET

Activity

Ad account change / audit logGETList comments on an adGETReply to an ad commentPOSTHide or unhide an ad commentPOSTDelete an ad commentDELETE

Business Assets

Businesses listGETList TikTok Business CentersGETList ad labelsGETA/B tests and lift studiesGETList Instagram ad identitiesGETList advertisable appsGETGet iOS 14 campaign limitsGETList TikTok ad pixelsGET

Extension Assets

List account calloutsGETAdd account calloutsPOSTUpdate account calloutsPUTRemove account calloutDELETEList account sitelinksGETAdd account sitelinksPOSTUpdate account sitelinksPUTRemove account sitelinkDELETEList account snippetsGETAdd account snippetsPOSTUpdate account snippetsPUTRemove account snippetDELETE

Negative Keyword Lists

List negative keyword listsGETCreate a negative keyword listPOSTGet a negative keyword listGETRename a negative keyword listPUTDelete a negative keyword listDELETEReplace negative list keywordsPUT

Custom Conversions

List custom conversionsGETCreate custom conversionPOST

Value Rules

List value rule setsGETCreate a value rule setPOSTRead a value rule setGETReplace a value rule setPUTDelete a value rule setDELETE

Budget Scheduling

List high-demand periodsGETSchedule a budget increasePOST

DSA Compliance

Get ad account DSA defaultsGETGet DSA recommendationsGET

Other

Attach a Google Ads labelPOSTCreate a Google Ads labelPOSTDetach a Google Ads labelDELETEGet manager account hierarchyGETInvite a client account to a managerPOSTList Instagram posts to boostGETRemove a Google Ads labelDELETEAccept, decline, cancel or end a manager linkPATCHUpdate a Google Ads labelPATCH
Dashboard
llms.txtOpenAPI
OverviewPlatformsAPI ReferenceResources
Accounts & Ops

Invite a client account to a manager

Sends a manager-to-client link invitation from managerCustomerId to clientCustomerId (Google's CustomerClientLinkService). The manager must be one the connection's Google user reaches, directly or under another manager (see GET /v1/ads/accounts/hierarchy); the client can be any Google Ads account. The link stays PENDING until someone with access to the client accepts it in Google Ads or through PATCH on this path. Not idempotent: Google refuses a second invitation while one is pending. Send validateOnly: true to have Google check the request without sending anything.


PlatformsGoogle
POST
/v1/ads/accounts/manager-links

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.adaccounts.inviteAdAccountToManager({  body: {    accountId: 'account_abc123',    managerCustomerId: 'managercustomer_abc123',    clientCustomerId: 'clientcustomer_abc123',  },});console.log(data);
{  "managerCustomerId": "string",  "clientCustomerId": "string",  "managerLinkId": "string",  "status": "PENDING",  "validateOnly": true}
Was this page helpful?

Get manager account hierarchy

Live manager (MCC) and client tree for a Google Ads connection. Starts from every customer the Google user behind the connection can access directly and walks each tree to any depth with `customer_client`, then reads each manager's own client links so every client carries its direct parent, the `managerLinkId` and the link status. Invitations a manager sent that the client has not accepted yet appear as clients with `linkStatus: PENDING` (Google returns no name or currency for them). Refused, canceled and ended links are history and are omitted. `managerLinks` on a root lists the managers linked to that account, including invitations it can still accept with PATCH /v1/ads/accounts/manager-links. A directly accessible account that is also nested in another tree appears only once, inside that tree. `directCustomers` lists every account the Google user accesses directly (the ones this connection can accept or decline invitations for) with their pending invitations, including accounts that are also nested in a tree. Customers Google refuses to read (for example a cancelled account) are listed in `unavailable` with Google's reason instead of failing the call. Up to 50 roots and 50 managers per root are read; `truncated` is true when more exist. Cached for 10 minutes per connection; the response carries `cachedAt` and `stale`. When the connection is scoped to specific ad accounts, client accounts outside that scope are hidden (managers stay visible).

List Instagram posts to boost

Lists the media of the Instagram account this Meta connection can reach, so an existing Instagram post can be boosted without connecting the Instagram account separately. Each `posts[].id` is the existing-post id to send as `platformPostId` when creating the ad; Meta turns it into `source_instagram_media_id` on the creative. Identity resolution reuses the same resolver as `/v1/ads/instagram-accounts`. `igUserId` is always checked against the identities the connection can reach and is never trusted as sent. When no identity is reachable the endpoint fails instead of returning an empty list, and the two causes stay apart: `403 reconnect_required` means the connection predates Instagram access (Meta then omits `instagram_business_account` from the Page read rather than erroring, so it looks identical to having no data) and the account must be reconnected granting Instagram access, while `422 instagram_business_account_unresolved` means the Page genuinely has no Instagram professional account linked.

accountId*string

Google ads SocialAccount id.

managerCustomerId*string

Manager customer id, digits only.

clientCustomerId*string

Client customer id to invite, digits only.

validateOnly?boolean
Defaultfalse