---
title: "List invitations awaiting multi-party approval"
method: GET
path: "/v1/ads/accounts/user-invitations/pending-approvals"
tags: ["Ad Accounts"]
---

# List invitations awaiting multi-party approval

`GET /v1/ads/accounts/user-invitations/pending-approvals`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/ads/accounts/user-invitations/pending-approvals`
- Auth: HTTP bearer

Lists the email invitations to a Google Ads account that Google is holding until a second admin approves them.

When Google requires multi-party approval, POST /v1/ads/accounts/user-invitations answers `status: PENDING_APPROVAL` and sends nothing. Those requests are not in GET /v1/ads/accounts/user-invitations; this reads Google's `multi_party_auth_review` resource for the ones still `PENDING` that target an invitation. Approved, rejected, revoked and expired reviews are not listed. Results are cached for 10 minutes and dropped on every invite or withdrawal through Zernio, but an approval or rejection made in Google Ads can take that long to show.

## Query parameters

- `accountId` string, required
- `adAccountId` string

## Response `200`

Invitations awaiting approval on the customer

- object
  - `customerId` string
  - `approvals` GoogleAdsUserInvitationApproval[]
    - `multiPartyAuthReviewId` string: Pass to DELETE /v1/ads/accounts/user-invitations/pending-approvals to withdraw the request.
    - `emailAddress` string, nullable: Invited email address.
    - `accessRole` 'ADMIN' | 'STANDARD' | 'READ_ONLY' | 'EMAIL_ONLY' | 'UNKNOWN'
    - `requestUserEmail` string, nullable: Google user who sent the invitation. Only this user can withdraw it.
    - `createdAt` string, nullable: Google's creation time, yyyy-MM-dd HH:mm:ss.ssssss in the account's time zone.
  - `cachedAt` string, date-time, nullable: When this data was fetched from Google. Null when the cache is unavailable.
  - `stale` boolean: True when Google's quota was exhausted and this is the last successful fetch.

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `403`: The connection has selected ad accounts (its ad-account scope, set with the dashboard picker or GET /v1/connect/{platform}/ads with adAccountIds) and the ad account this request targets is not among them, so the connection may not act on it even though its token can reach it. Code `ad_account_not_selected`. `details` carries `accountId` (the connection), `adAccountId` (the refused ad account) and `selectedAdAccountIds`. Add the ad account to the selection (adAccountIds replaces the whole selection, so pass the ids already selected plus this one) or use a connection that has it selected. Connections without a selection keep reaching every ad account their token can manage.
- `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.
- `429`: Google Ads operations budget or quota exhausted; retry later.
- `501`: Only available on Google Ads accounts

## Changes

- **2026-10-21** `98e9f11e6b3a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/accounts/user-invitations/pending-approvals/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/4e74db179e73?raw)
