---
title: "List user access invitations"
method: GET
path: "/v1/ads/accounts/user-invitations"
tags: ["Ad Accounts"]
---

# List user access invitations

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

## Request

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

Lists the email invitations to a Google Ads account, with their role and status.

Reads Google's `customer_user_access_invitation` resource for one customer: invitations that are `PENDING`, `DECLINED` or `EXPIRED` (Google expires them 20 days after sending). An accepted invitation becomes a user of the account and leaves this list, which can take Google up to 24 hours. An invitation still waiting for multi-party approval is not listed until a second admin approves it; GET /v1/ads/accounts/user-invitations/pending-approvals lists those. Results are cached for 10 minutes and dropped on every invite or revoke through Zernio.

## Query parameters

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

## Response `200`

Invitations of the customer

- object
  - `customerId` string
  - `invitations` GoogleAdsUserAccessInvitation[]
    - `invitationId` string
    - `emailAddress` string
    - `accessRole` 'ADMIN' | 'STANDARD' | 'READ_ONLY' | 'EMAIL_ONLY' | 'UNKNOWN'
    - `status` 'PENDING' | 'DECLINED' | 'EXPIRED' | 'UNKNOWN'
    - `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** `fd4ba69cb07a`: 1 info
  - endpoint added

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