# CloudConnect API documentation

## Inbox, workspace records, media, activity and phone APIs

## Workspace API coverage

All endpoints below use the same Account/Agency/Group key isolation, rate limits, and current permissions as publishing. API keys cannot impersonate a user, change login credentials, or bypass human OAuth consent. Create business Accounts with POST /accounts (see Create business accounts). Administer the rest of the hierarchy, invitations, domains, billing policy and personal notification preferences in the portal.

Existing keys keep their scopes. In **API keys & MCP → Manage keys → Integration permissions**, select the new scopes and save. For OAuth MCP clients, reconnect and consent to the added scopes. Account-owned keys are supported; an Agency/Group key targets one authorized business with accountId. Endpoints labeled business-wide reject connection-restricted keys to avoid exposing unrelated records.

### Receive and reply to private messages

1. GET /accounts/{accountId}/inbox/conversations discovers synchronized threads. Optional connectionId filters one channel.
2. POST /accounts/{accountId}/inbox/sync with a connectionId starts durable automatic synchronization. For older history, send threadId and older=true.
3. GET /accounts/{accountId}/inbox/messages returns message changes, attachment IDs, deleted/edited flags and delivery states. Save nextCursor, and poll with cursor=... even when hasMore=false. Cursors are opaque and specific to their original filters; persist separate cursors per filter. Process by local message ID and synced_at; updates may repeat. This is polling of retained state, not an immutable event journal. Threads/messages absent upstream cannot be invented.
4. POST /accounts/{accountId}/inbox/conversations/{threadId}/messages with {"requestId":"STABLE-UUID","message":"Your reply"}. Reuse the same requestId after transport errors. HTTP 202 is queue acceptance, not delivery. The conversation details include send-operation status; activity.read permits polling the integration's operation directly.
5. Attachments with status=ready have a signed download endpoint. Raw expiring provider URLs are not exposed. Outbound replies currently support text. SMS and arbitrary new-recipient conversations are not implemented by the current app; X replies remain disabled pending metered sending controls. Platform reply windows still apply.

Existing signed outbound webhooks currently describe publishing events; inbox reception uses the cursor API above. Do not expect SMS or inbox webhook events from those endpoints.

### Draft modules and telephony

Contacts are local CRM records. Messaging broadcasts, workflow graphs, article drafts and saved report definitions can be created and edited through these APIs, but saving them does not execute an automation, send a campaign, or publish a Shopify article. This reflects the actual app's current implementation. Use live publishing, Inbox, Analytics, and Advertising endpoints for those supported operations.

Phone setup APIs expose availability, regulatory requirements, document upload, purchase/port submission and status. Use voice.manage plus connections.manage; purchases/ports additionally require voice.spend, confirmed=true and maxMonthlyCents. These can incur recurring provider charges even in the free customer beta. Upload inspected, owned media first; document transfer requires explicit consent. Identity checks or carrier remediation may still require interactive completion. A phone number does not imply working SMS/voice conversation APIs.

### Endpoint reference

#### get_account

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}**

Read business identity and timezone.

Scopes: `discovery.read`.

#### get_api_features

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/features**

Discover API operations, scopes and limitations. No feature flag or missing provider capability is bypassed.

Scopes: `discovery.read`.

#### get_connection

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/connections/{connectionId}**

Read connection health and last synchronization time.

Scopes: `discovery.read`.

#### create_connect_session

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/connect-sessions**

Create a branded link the business owner opens to connect a social or advertising account without signing in. Open url in a new tab or popup (platforms refuse iframes); the owner approves on the platform, then chooses a Page, organization or board where needed, or for advertising platforms the exact ad account (needs ads.write too; X Ads needs parentConnectionId, which is optional for Meta, LinkedIn and Pinterest Ads). The link works once, in one browser, until expiresAt. Poll get_connect_session or subscribe to connect_session.completed webhooks. A new session for the same business and platform replaces an unfinished one.

Scopes: `connections.manage`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "platform": {
      "type": "string",
      "enum": [
        "instagram",
        "facebook",
        "linkedin",
        "tiktok",
        "twitter",
        "youtube",
        "pinterest",
        "threads",
        "reddit",
        "snapchat",
        "googlebusiness",
        "whatsapp",
        "slack",
        "ads-meta",
        "ads-google",
        "ads-linkedin",
        "ads-tiktok",
        "ads-pinterest",
        "ads-x"
      ],
      "description": "Platform to connect."
    },
    "returnUrl": {
      "description": "Where the browser goes when setup ends. Receives connect_session, status and, when completed, connection_id query parameters.",
      "type": "string",
      "maxLength": 2048,
      "format": "uri"
    },
    "parentConnectionId": {
      "description": "Required for X Ads (the business’s twitter connection). Optional for Meta, LinkedIn and Pinterest Ads, to link the ad account to the business’s facebook, linkedin or pinterest connection; omit it for ads-only businesses. Not accepted for other platforms.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "loginMethod": {
      "description": "Instagram only: sign in with Instagram (default) or through a linked Facebook Page.",
      "type": "string",
      "enum": [
        "instagram_login",
        "facebook_login"
      ]
    },
    "expiresInMinutes": {
      "default": 60,
      "description": "How long the link can be opened. Defaults to 60 minutes.",
      "type": "integer",
      "minimum": 5,
      "maximum": 1440
    }
  },
  "required": [
    "platform",
    "expiresInMinutes"
  ],
  "additionalProperties": false
}
```

#### get_connect_session

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/connect-sessions/{sessionId}**

Read connect session progress: pending (link not opened), authorizing, selecting, verifying, completed (with connectionId), failed (owner may retry from the same link), cancelled or expired.

Scopes: `connections.manage`. Requires a business-wide key.

#### cancel_connect_session

**DELETE https://usecloudconnect.com/api/v1/accounts/{accountId}/connect-sessions/{sessionId}**

Cancel an unfinished connect session and release its reservation. If the platform already connected the account, the session completes instead.

Scopes: `connections.manage`. Requires a business-wide key.

#### get_connection_setup_link

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/connection-setup**

Get the portal onboarding URL for a signed-in workspace member. To connect without a portal sign-in, use create_connect_session.

Scopes: `connections.manage`. Requires a business-wide key.

#### disconnect_connection

**DELETE https://usecloudconnect.com/api/v1/accounts/{accountId}/connections/{connectionId}**

Disconnect the explicitly selected connection. Stops eligible pending work; rejects in-flight publications and phone-number releases. Ads connections also require ads.write.

Scopes: `connections.manage`.

#### list_inbox_conversations

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/inbox/conversations**

Read synchronized conversations with keyset pagination. Use returned thread IDs; never guess platform IDs.

Scopes: `inbox.read`.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "q": {
      "type": "string",
      "maxLength": 200
    },
    "status": {
      "default": "open",
      "type": "string",
      "enum": [
        "open",
        "resolved",
        "all",
        "unassigned"
      ]
    },
    "connectionId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "limit",
    "status"
  ],
  "additionalProperties": false
}
```

#### get_inbox_conversation

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/inbox/conversations/{threadId}**

Read a conversation, its private notes, attachments and recent send operations. Fetch messages separately.

Scopes: `inbox.read`.

#### list_inbox_messages

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/inbox/messages**

Read message changes in ascending synchronization order. Save nextCursor and poll after it, even when hasMore=false. Deleted/edited records and delivery states are included. Attachment IDs use the attachment download endpoint.

Scopes: `inbox.read`.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "threadId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "connectionId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
```

#### sync_inbox

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/inbox/sync**

Queue a current-state sync or older conversation history. Returns before provider synchronization completes. Restricted keys must select an allowed connection or thread.

Scopes: `inbox.read`.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "connectionId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "threadId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "older": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
```

#### update_inbox_conversation

**PATCH https://usecloudconnect.com/api/v1/accounts/{accountId}/inbox/conversations/{threadId}**

Assign, resolve/reopen, or add a private note using the current version. This does not send a message.

Scopes: `inbox.write`.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "status": {
      "type": "string",
      "enum": [
        "open",
        "resolved"
      ]
    },
    "assigneeId": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "note": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000
    }
  },
  "required": [
    "version"
  ],
  "additionalProperties": false
}
```

#### send_inbox_reply

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/inbox/conversations/{threadId}/messages**

Send a text reply to an existing conversation with explicit user intent. requestId is a stable UUID; reuse it on retry. Returns queued operation, not delivery confirmation. Platform reply windows and message allowances apply; X sending is not supported.

Scopes: `inbox.write`.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "requestId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    }
  },
  "required": [
    "requestId",
    "message"
  ],
  "additionalProperties": false
}
```

#### get_inbox_attachment

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/inbox/attachments/{attachmentId}**

Get a 60-second signed URL for a retained attachment. Unavailable or expired upstream content cannot be downloaded.

Scopes: `inbox.read`.

#### refresh_social_analytics

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/analytics/refresh**

Queue fresh social metrics. Poll analytics and the returned operation IDs; this does not fabricate missing metrics.

Scopes: `analytics.read`.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "to": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "connectionId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false
}
```

#### export_social_analytics

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/analytics/export**

Export stored metrics as CSV text with formula-injection escaping.

Scopes: `analytics.read`, `analytics.export`.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "to": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "connectionId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "additionalProperties": false
}
```

#### list_media

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/media**

Browse owned media and processing states, including portal uploads.

Scopes: `media.read`. Requires a business-wide key.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "q": {
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
```

#### download_media

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/media/{mediaId}/download**

Get a short-lived signed URL for owned media.

Scopes: `media.read`. Requires a business-wide key.

#### get_operation

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/operations/{operationId}**

Read the status and safe result of an operation created by this integration. Uncertain means inspect before retrying; accepted does not mean delivered.

Scopes: `activity.read`.

#### list_activity

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/activity**

Read recent operations created by this integration. Conversation changes are available through list_inbox_messages.

Scopes: `activity.read`.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
```

#### get_usage

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/usage**

Read allowance limits, reservations and consumed units. Customer payment remains controlled by platform policy.

Scopes: `billing.read`. Requires a business-wide key.

#### list_contact_records

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/contacts**

List saved contact records. Contacts are local CRM records; they do not subscribe anyone or send messages.

Scopes: `contacts.read`. Requires a business-wide key.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
```

#### get_contact_record

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/contacts/{recordId}**

Read a saved contact record and its current version. Contacts are local CRM records; they do not subscribe anyone or send messages.

Scopes: `contacts.read`. Requires a business-wide key.

#### create_contact_record

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/contacts**

Create a saved contact record. Contacts are local CRM records; they do not subscribe anyone or send messages.

Scopes: `contacts.write`. Requires a business-wide key. Required header: Idempotency-Key (8–200 characters).

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data"
  ],
  "additionalProperties": false
}
```

#### update_contact_record

**PATCH https://usecloudconnect.com/api/v1/accounts/{accountId}/contacts/{recordId}**

Replace a saved contact record using its current version. Contacts are local CRM records; they do not subscribe anyone or send messages.

Scopes: `contacts.write`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data",
    "version"
  ],
  "additionalProperties": false
}
```

#### list_broadcast_records

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/messaging/drafts**

List saved broadcast records. Broadcast drafting only. Campaign execution is not implemented by this module.

Scopes: `messaging.read`. Requires a business-wide key.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
```

#### get_broadcast_record

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/messaging/drafts/{recordId}**

Read a saved broadcast record and its current version. Broadcast drafting only. Campaign execution is not implemented by this module.

Scopes: `messaging.read`. Requires a business-wide key.

#### create_broadcast_record

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/messaging/drafts**

Create a saved broadcast record. Broadcast drafting only. Campaign execution is not implemented by this module.

Scopes: `messaging.write`. Requires a business-wide key. Required header: Idempotency-Key (8–200 characters).

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data"
  ],
  "additionalProperties": false
}
```

#### update_broadcast_record

**PATCH https://usecloudconnect.com/api/v1/accounts/{accountId}/messaging/drafts/{recordId}**

Replace a saved broadcast record using its current version. Broadcast drafting only. Campaign execution is not implemented by this module.

Scopes: `messaging.write`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data",
    "version"
  ],
  "additionalProperties": false
}
```

#### list_workflow_records

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/workflows**

List saved workflow records. Workflow graph drafting and versions only. Activation and executions are not implemented by this module.

Scopes: `workflows.read`. Requires a business-wide key.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
```

#### get_workflow_record

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/workflows/{recordId}**

Read a saved workflow record and its current version. Workflow graph drafting and versions only. Activation and executions are not implemented by this module.

Scopes: `workflows.read`. Requires a business-wide key.

#### create_workflow_record

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/workflows**

Create a saved workflow record. Workflow graph drafting and versions only. Activation and executions are not implemented by this module.

Scopes: `workflows.write`. Requires a business-wide key. Required header: Idempotency-Key (8–200 characters).

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data"
  ],
  "additionalProperties": false
}
```

#### update_workflow_record

**PATCH https://usecloudconnect.com/api/v1/accounts/{accountId}/workflows/{recordId}**

Replace a saved workflow record using its current version. Workflow graph drafting and versions only. Activation and executions are not implemented by this module.

Scopes: `workflows.write`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data",
    "version"
  ],
  "additionalProperties": false
}
```

#### list_article_records

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/articles**

List saved article records. Article drafting only. Saving does not publish to Shopify or Google Business.

Scopes: `business.read`. Requires a business-wide key.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
```

#### get_article_record

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/articles/{recordId}**

Read a saved article record and its current version. Article drafting only. Saving does not publish to Shopify or Google Business.

Scopes: `business.read`. Requires a business-wide key.

#### create_article_record

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/articles**

Create a saved article record. Article drafting only. Saving does not publish to Shopify or Google Business.

Scopes: `business.write`. Requires a business-wide key. Required header: Idempotency-Key (8–200 characters).

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data"
  ],
  "additionalProperties": false
}
```

#### update_article_record

**PATCH https://usecloudconnect.com/api/v1/accounts/{accountId}/articles/{recordId}**

Replace a saved article record using its current version. Article drafting only. Saving does not publish to Shopify or Google Business.

Scopes: `business.write`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data",
    "version"
  ],
  "additionalProperties": false
}
```

#### list_report_records

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/reports**

List saved report records. Saved report definitions only; use analytics or advertising reports for measured data.

Scopes: `analytics.read`. Requires a business-wide key.

Query schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 500
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
```

#### get_report_record

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/reports/{recordId}**

Read a saved report record and its current version. Saved report definitions only; use analytics or advertising reports for measured data.

Scopes: `analytics.read`. Requires a business-wide key.

#### create_report_record

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/reports**

Create a saved report record. Saved report definitions only; use analytics or advertising reports for measured data.

Scopes: `reports.write`. Requires a business-wide key. Required header: Idempotency-Key (8–200 characters).

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data"
  ],
  "additionalProperties": false
}
```

#### update_report_record

**PATCH https://usecloudconnect.com/api/v1/accounts/{accountId}/reports/{recordId}**

Replace a saved report record using its current version. Saved report definitions only; use analytics or advertising reports for measured data.

Scopes: `reports.write`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "data": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "scheduledAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "title",
    "data",
    "version"
  ],
  "additionalProperties": false
}
```

#### list_phone_setups

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/setups**

List number provisioning and port requests owned by this business.

Scopes: `voice.manage`, `connections.manage`. Requires a business-wide key.

#### list_phone_countries

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/countries**

Read current supported countries, number types and provider quotes. Availability can change.

Scopes: `voice.manage`, `connections.manage`. Requires a business-wide key.

#### get_phone_requirements

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/requirements**

Read current availability and regulatory requirements before preparing a number.

Scopes: `voice.manage`, `connections.manage`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "pattern": "^[A-Z]{2}$"
    },
    "numberType": {
      "type": "string",
      "enum": [
        "local",
        "mobile",
        "national",
        "toll_free"
      ]
    },
    "wantsSms": {
      "default": false,
      "type": "boolean"
    }
  },
  "required": [
    "country",
    "numberType",
    "wantsSms"
  ],
  "additionalProperties": false
}
```

#### prepare_phone_setup

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/setups**

Prepare a number order and receive requirements and a quote. This does not buy a number.

Scopes: `voice.manage`, `connections.manage`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "pattern": "^[A-Z]{2}$"
    },
    "numberType": {
      "type": "string",
      "enum": [
        "local",
        "mobile",
        "national",
        "toll_free"
      ]
    },
    "wantsSms": {
      "default": false,
      "type": "boolean"
    },
    "areaCode": {
      "type": "string",
      "pattern": "^\\d{1,8}$"
    }
  },
  "required": [
    "country",
    "numberType",
    "wantsSms"
  ],
  "additionalProperties": false
}
```

#### get_phone_setup

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/setups/{setupId}**

Refresh an existing number order, assignment and regulatory status.

Scopes: `voice.manage`, `connections.manage`. Requires a business-wide key.

#### get_phone_port

**GET https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/ports/{portId}**

Refresh an existing number port and carrier status.

Scopes: `voice.manage`, `connections.manage`. Requires a business-wide key.

#### prepare_phone_port

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/ports**

Check portability and prepare requirements and a quote for transferring a number. Does not submit a carrier order.

Scopes: `voice.manage`, `connections.manage`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "phoneNumber": {
      "type": "string",
      "pattern": "^\\+[1-9]\\d{7,14}$"
    }
  },
  "required": [
    "phoneNumber"
  ],
  "additionalProperties": false
}
```

#### submit_phone_setup

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/setups/{setupId}/submit**

Purchase/provision a number after explicit user approval. Requires confirmed=true and maxMonthlyCents at least the quoted recurring cost. May incur recurring provider charges. Do not retry an uncertain order; read its status.

Scopes: `voice.manage`, `connections.manage`, `voice.spend`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "confirmed": {
      "type": "boolean",
      "const": true
    },
    "values": {
      "default": {},
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 5000
      }
    },
    "address": {
      "type": "object",
      "properties": {
        "street_address": {
          "type": "string",
          "minLength": 2,
          "maxLength": 250
        },
        "extended_address": {
          "type": "string",
          "maxLength": 150
        },
        "locality": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "administrative_area": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "postal_code": {
          "type": "string",
          "minLength": 1,
          "maxLength": 30
        }
      },
      "required": [
        "street_address",
        "locality",
        "administrative_area",
        "postal_code"
      ],
      "additionalProperties": false
    },
    "endUserFirstName": {
      "type": "string",
      "maxLength": 100
    },
    "endUserLastName": {
      "type": "string",
      "maxLength": 100
    },
    "maxMonthlyCents": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "confirmed",
    "values",
    "maxMonthlyCents"
  ],
  "additionalProperties": false
}
```

#### submit_phone_port

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/ports/{portId}/submit**

Submit a carrier port after explicit user authorization. Requires current verification documents, confirmed=true and maxMonthlyCents. May incur recurring charges; poll the same order after uncertainty.

Scopes: `voice.manage`, `connections.manage`, `voice.spend`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "confirmed": {
      "type": "boolean",
      "const": true
    },
    "endUser": {
      "type": "object",
      "properties": {
        "entityName": {
          "type": "string",
          "minLength": 2,
          "maxLength": 200
        },
        "authPersonName": {
          "type": "string",
          "minLength": 2,
          "maxLength": 200
        },
        "accountNumber": {
          "type": "string",
          "minLength": 1,
          "maxLength": 150
        },
        "streetAddress": {
          "type": "string",
          "minLength": 3,
          "maxLength": 250
        },
        "locality": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        "administrativeArea": {
          "type": "string",
          "maxLength": 100
        },
        "postalCode": {
          "type": "string",
          "minLength": 1,
          "maxLength": 30
        },
        "pinPasscode": {
          "type": "string",
          "maxLength": 100
        },
        "taxIdentifier": {
          "type": "string",
          "maxLength": 100
        },
        "businessIdentifier": {
          "type": "string",
          "maxLength": 100
        }
      },
      "required": [
        "entityName",
        "authPersonName",
        "accountNumber",
        "streetAddress",
        "locality",
        "postalCode"
      ],
      "additionalProperties": false
    },
    "values": {
      "default": {},
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 5000
      }
    },
    "portType": {
      "type": "string",
      "enum": [
        "full",
        "partial"
      ]
    },
    "maxMonthlyCents": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "confirmed",
    "endUser",
    "values",
    "portType",
    "maxMonthlyCents"
  ],
  "additionalProperties": false
}
```

#### upload_phone_verification

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/setups/{setupId}/documents**

Submit one owned, inspected media document to the carrier verification service. Explicitly approve sharing this document; maximum 4 MiB PDF/JPEG/PNG. Keep regulatory documents private.

Scopes: `voice.manage`, `connections.manage`, `media.read`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "mediaId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "requirementId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "confirmDocumentTransfer": {
      "type": "boolean",
      "const": true
    }
  },
  "required": [
    "mediaId",
    "requirementId",
    "confirmDocumentTransfer"
  ],
  "additionalProperties": false
}
```

#### upload_port_verification

**POST https://usecloudconnect.com/api/v1/accounts/{accountId}/phone/ports/{portId}/documents**

Submit one owned, inspected media document to the carrier verification service. Explicitly approve sharing this document; maximum 4 MiB PDF/JPEG/PNG. Keep regulatory documents private.

Scopes: `voice.manage`, `connections.manage`, `media.read`. Requires a business-wide key.

JSON body schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "mediaId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "requirementId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "confirmDocumentTransfer": {
      "type": "boolean",
      "const": true
    }
  },
  "required": [
    "mediaId",
    "requirementId",
    "confirmDocumentTransfer"
  ],
  "additionalProperties": false
}
```


## Advertising campaigns, audiences and performance

## Advertising API

Manage campaign hierarchies, creatives, targeting, delivery controls, budgets and performance for connected Meta, Google, LinkedIn, TikTok, Pinterest, X and OpenAI advertisers. Operations are scoped to a business Account and an explicitly selected advertiser. Agency, Group and Account integrations use the same endpoints with their authorized Account ID.

Base: **https://usecloudconnect.com/api/v1/accounts/{accountId}/advertising**.

### Permissions

Connection discovery also needs `discovery.read`. Request explicit API scopes: `ads.read`, `ads.write`, `ads.spend`, `ads.reports`. Reports also require ads.read. Budget changes, bid changes, campaign/ad creation and launch require ads.spend in addition to ads.write. Media attachments require media.read; uploads use the existing media.write endpoints. Existing keys do not gain advertising scopes automatically: create an integration with these scopes in API & integrations. The browser uses the equivalent workspace permissions. Spend actions are unavailable during impersonation.

### Discover and select an advertiser

1. Authorize the advertising platform in Connections first; advertiser IDs are not required at this stage. Discover the business's connections with GET /accounts/{accountId}/connections. Use an ads-* connection.
2. GET /advertising/discover?connectionId={connectionId} returns available advertisers (providerAdvertiserId, name, currency, selectable).
3. POST /advertising/advertisers with {"connectionId":"LOCAL_CONNECTION_UUID","providerAdvertiserId":"SELECTED_ID"}. This verifies that exact advertiser and assigns it exclusively to the selected business. For Meta, Google, LinkedIn and X, provider synchronization is scoped to the advertisers explicitly assigned to this connection; confirmation is required before the binding commits. Never silently select the first advertiser or attach every visible advertiser.
4. GET /advertising/advertisers lists assigned advertisers. Use each returned local UUID below.

### Resources

The following paths are relative to the base above:

| Method | Path | Result |
|---|---|---|
| GET | /advertisers/{advertiserId}/capabilities | Platform differences and full input JSON schemas |
| POST | /advertisers/{advertiserId}/sync | Queue a fresh campaign/ad-set/ad tree read |
| GET | /advertisers/{advertiserId}/objects | Cached objects with local IDs, parent_id, status, version, data, synced_at |
| GET | /advertisers/{advertiserId}/campaigns | Cached campaigns |
| GET | /advertisers/{advertiserId}/ad-sets | Cached ad sets / ad groups |
| GET | /advertisers/{advertiserId}/ads | Cached ads |
| GET | /advertisers/{advertiserId}/creatives | Creatives created in the reusable Meta library |
| GET | /advertisers/{advertiserId}/{campaigns,ad-sets,ads,creatives}/{objectId} | One object |
| POST | /advertisers/{advertiserId}/campaigns | Create a campaign without its first ad |
| POST | /advertisers/{advertiserId}/ads | Create campaign + ad set + ad, or attach to a supported existing parent |
| POST | /advertisers/{advertiserId}/ad-sets | Create ad set WITH its first ad under payload.existingCampaignId (Meta/LinkedIn) |
| POST | /advertisers/{advertiserId}/creatives | Create a reusable Meta creative |
| PATCH | /advertisers/{advertiserId}/{campaigns,ad-sets,ads}/{objectId} | Update fields with version and payload |
| POST | /advertisers/{advertiserId}/{campaigns,ad-sets,ads}/{objectId}/status | Launch or pause with version and payload.status = active or paused |
| GET | /advertisers/{advertiserId}/targeting?q=Denver&dimension=geo&geoType=all | Resolve targeting IDs; dimension also accepts interest, behavior, income, workPosition, workEmployer, workIndustry |
| POST | /advertisers/{advertiserId}/reports | Queue report using fromDate and toDate (YYYY-MM-DD, at most 730 days) |
| GET | /advertisers/{advertiserId}/reports | Stored reports, newest first |
| GET | /advertisers/{advertiserId}/reports/{reportId} | Report with currency, date range, timestamps, backfill_pending, hierarchical metrics and daily series |
| GET | /advertisers/{advertiserId}/audiences | Audiences with local IDs, type, size, status and version |
| POST | /advertisers/{advertiserId}/audiences/sync | Queue a fresh audience read |
| POST | /advertisers/{advertiserId}/audiences | Create an audience |
| GET | /advertisers/{advertiserId}/audiences/{audienceId} | One audience |
| POST | /advertisers/{advertiserId}/audiences/{audienceId}/members | Add people to a customer list |
| POST | /advertisers/{advertiserId}/audiences/{audienceId}/companies | Replace a LinkedIn company list |
| PATCH | /advertisers/{advertiserId}/audiences/{audienceId} | Rename (Meta only) with version and payload |
| POST | /advertisers/{advertiserId}/audiences/{audienceId}/delete | Delete from the platform with version |
| GET | /advertisers/{advertiserId}/operations | Recent requests and outcomes |
| GET | /advertisers/{advertiserId}/operations/{operationId} | Poll one request |
| POST | /advertisers/{advertiserId}/operations | Generic typed operation envelope |

GET lists currently return up to 100 recent operations and 30 reports. Object lists include the assigned advertiser's full locally synchronized set. A sync reads up to 10,000 campaigns; larger accounts fail explicitly instead of silently truncating. Sync is explicit; reports are snapshots with freshness timestamps. Pending upstream backfills are labeled and need another refresh. Never treat missing metrics as zero. Never sum different advertiser currencies. Platform media spend is paid directly to the platform and is separate from CloudConnect software billing.

### Create, edit and launch

All queued writes require an **Idempotency-Key** header (8–200 characters). Keep it stable for the intended request. HTTP 202 means queued, not accepted by the platform or live. Poll the returned operation ID until succeeded, failed or uncertain. An uncertain result must not be retried with a new key: it may already exist remotely. Refresh and reconcile with the platform before further writes. A queued object mutation locks that object's version until its outcome is known.

Create endpoints accept:

```json
{
  "payload": {
    "name": "September offer",
    "goal": "traffic",
    "budgetAmount": 25,
    "budgetType": "daily",
    "headline": "Meet your next favorite",
    "body": "See what's new this week.",
    "linkUrl": "https://example.com/offer",
    "callToAction": "LEARN_MORE",
    "countries": ["US"]
  },
  "mediaId": "READY_MEDIA_UUID"
}
```

Amounts are **whole advertiser-currency units**, never cents. Example: budgetAmount 25 in USD means $25. Google accepts daily budgets; OpenAI accepts lifetime budgets and requires an endDate. Use ISO date-times for startDate/endDate. LinkedIn campaign groups have no budget: put the budget on the ad-set creation instead. For Meta campaign-budget optimization, create a campaign with a budget; for ad-set budgeting omit its campaign budget and supply the budget when adding the ad set.

Use local object UUIDs in payload.existingCampaignId (Meta/LinkedIn), payload.adSetId (Meta/TikTok/LinkedIn), and payload.existingCreativeId (Meta). Account routing, adAccountId, platform and currency are resolved server-side and must not be supplied. Local mediaId is resolved to an authorized, temporary Spaces URL in the worker. The full schema also supports platform-approved external creative URLs, variants, targeting, bidding and conversion IDs.

Campaigns are requested PAUSED. TikTok's empty campaign create endpoint reports ENABLE, and LinkedIn reports DRAFT; empty campaigns contain no delivering ads. Meta/TikTok/LinkedIn ad creation uses paused settings. Other platforms do not document paused ad creation: their ad-create call requires explicit **allowLiveCreation: true**, and may immediately start spending. Do not infer that an arbitrary PAUSED field will prevent delivery on those platforms. Resume parent AND child switches as needed: a paused ad set remains paused when its campaign resumes. Successful launch still does not guarantee delivery; review status, funding, eligibility, and targeting apply.

Update example:

```json
{"version":3,"payload":{"budget":{"amount":40,"type":"daily"}}}
```

Launch/pause example:

```json
{"version":4,"payload":{"status":"active"}}
```

### Platform differences

- Meta: reusable creative library, ad-set creation under an existing campaign, attach ads, campaign/ad-set budgets, creative and targeting edits.
- Google: campaign and ad hierarchy creation; campaign or ad budgets. Existing targeting changes support complete keyword/negative-keyword sets only. Creative replacement is unavailable.
- LinkedIn: our campaign = CampaignGroup; our ad set = Campaign. Attach to either supported level. Targeting edits support countries; creative replacement creates a replacement creative and pauses the old one.
- TikTok: complete hierarchy creation, attachment to existing ad groups, creative/targeting edits, pause/resume and budgets.
- Pinterest, X and OpenAI: complete hierarchy creation, pause/resume and budgets. Post-create targeting/creative replacement is unsupported. OpenAI uses image chat cards and location targeting only.
- There is no documented empty ad-set creation endpoint. The ad-set creation workflow includes its first ad and its creative.
- Goals, required conversion/pixel fields, media formats, minimum budgets and advertiser eligibility remain subject to the selected platform. Unsupported options return errors; they are not silently dropped.

### Audiences

Audiences let you reach your own customers, people who visited your site or engaged with your pages, and people who resemble them. Audience changes never spend money, so they need `ads.read` and `ads.write` but not `ads.spend`. Capabilities list the types each advertiser supports in `audienceTypes`.

| Type | Platforms | Filled from |
|---|---|---|
| `customer_list` | Meta, Google, LinkedIn, TikTok, Pinterest, X | People you upload. Meta matches email and phone; the others match email only |
| `website` | Meta | Pixel visitors: `pixelId`, `retentionDays` (1–180), optional `urlContains` or a full `rule` |
| `lookalike` | Meta | A seed audience: `sourceAudienceId` (local audience ID), `country` (two letters), `ratio` 0.01–0.2 |
| `meta_engagement` | Meta | Page, Instagram or video engagers: `engagementSource`, `sourceId`, `retentionDays` (1–365) |
| `company_list` | LinkedIn | Company rows: each needs `name`, `domain`, `website` or `linkedinPageUrl` |
| `engagement` | LinkedIn | `sourceType`, `trigger`, `lookbackDays` (30/60/90/180/365), `engagementSources` |
| `website_retargeting` | LinkedIn | Insight Tag visitors matching `matchRules` (up to 50) |

Create a customer list, then add people:

```json
{"payload":{"type":"customer_list","name":"Newsletter subscribers"}}
```

```json
{"version":1,"payload":{"source":"contacts","tags":["newsletter"],"lawfulBasisConfirmed":true}}
```

`source` is `contacts` (this business's contacts, optionally narrowed by `tags` or `contactIds`; needs `contacts.read`) or `list` with `users` (up to 10,000 rows of `email` and/or `phone`). `lawfulBasisConfirmed: true` records that you are allowed to use these people's details for advertising; it is required. Emails are trimmed and lowercased, duplicates and rows without a usable identifier are skipped, and the platform receives the details hashed. A contacts upload can include up to 100,000 people and is sent in batches of 10,000. The operation result reports `sent`, `received`, `invalid` and `skipped`. The people themselves are not kept in the operation history.

- Meta, Google and X add to the list. **LinkedIn replaces the whole list on every upload**, so send everyone each time (at most 10,000 people here).
- TikTok and Pinterest create the platform audience on the first upload; until then its status is `pending`. New audiences can take up to 48 hours to become usable, and small lists may never become targetable.
- Company lists are replaced in full with POST `/companies` and `{"version":1,"payload":{"companies":[...]}}`.
- Audiences made directly in the ad platform appear after a refresh. They can be targeted but not edited here.
- Only Meta supports renaming. Audience rules cannot change after creation: create a new audience instead.
- Creating an audience is not repeatable safely. An `uncertain` creation must be checked in the platform, not resubmitted. An `uncertain` upload can be resumed with POST `/operations/{operationId}/retry` within 23 hours.

Target audiences when creating an ad (with its ad set) using local audience IDs. They must already have a platform ID (refresh the audience list after creating one). The platforms do not accept audience changes through later targeting edits:

```json
{"payload":{"name":"Win back","goal":"traffic","budgetAmount":20,"budgetType":"daily","targeting":{"audienceInclude":["LOCAL_AUDIENCE_UUID"],"audienceExclude":["LOCAL_AUDIENCE_UUID"]}}}
```

The top-level `audienceId` field is not accepted; use `targeting.audienceInclude`.

### Generic operation envelope

```json
{"action":"ad.update","objectId":"LOCAL_AD_UUID","version":2,"payload":{"targeting":{"countries":["US","CA"]}}}
```

Actions: `campaign.create`, `ad.create`, `creative.create`, `campaign.update`, `adset.update`, `ad.update`, `campaign.status`, `adset.status`, `ad.status`, `sync`, `report`, `audience.create`, `audience.update`, `audience.delete`, `audience.users`, `audience.companies`, `audience.sync`. The same execution and authorization apply to browser, API and MCP actions.

### Complete input schemas

Schemas describe platform payload fields. accountId, adAccountId, platform and currency shown in upstream-shaped schemas are reserved routing fields: CloudConnect inserts them. Object references listed above are local UUIDs. Additional platform-specific runtime rules still apply.

#### campaign.create

```json
{
  "type": "object",
  "required": [
    "accountId",
    "adAccountId",
    "name",
    "goal"
  ],
  "properties": {
    "accountId": {
      "type": "string"
    },
    "adAccountId": {
      "type": "string"
    },
    "name": {
      "type": "string",
      "maxLength": 255
    },
    "goal": {
      "type": "string",
      "enum": [
        "engagement",
        "traffic",
        "awareness",
        "video_views",
        "lead_generation",
        "lead_conversion",
        "job_applicants",
        "conversions",
        "app_promotion",
        "catalog_sales",
        "page_likes"
      ]
    },
    "isSkadnetworkAttribution": {
      "type": "boolean"
    },
    "promotedObject": {
      "$ref": "#/$defs/AdPromotedObject"
    },
    "buyingType": {
      "type": "string",
      "enum": [
        "AUCTION",
        "RESERVED"
      ]
    },
    "validateOnly": {
      "type": "boolean"
    },
    "specialAdCategories": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "HOUSING",
          "EMPLOYMENT",
          "CREDIT",
          "ISSUES_ELECTIONS_POLITICS",
          "FINANCIAL_PRODUCTS_SERVICES",
          "ONLINE_GAMBLING_AND_GAMING"
        ]
      }
    },
    "budgetAmount": {
      "type": "number"
    },
    "budgetType": {
      "type": "string",
      "enum": [
        "daily",
        "lifetime"
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "PAUSED"
      ]
    },
    "locationTargetingType": {
      "allOf": [
        {
          "$ref": "#/$defs/GoogleLocationTargetingType"
        }
      ]
    },
    "bidStrategy": {
      "type": "string",
      "enum": [
        "LOWEST_COST_WITHOUT_CAP",
        "LOWEST_COST_WITH_BID_CAP",
        "COST_CAP",
        "LOWEST_COST_WITH_MIN_ROAS"
      ]
    },
    "bidAmount": {
      "type": "number"
    },
    "roasAverageFloor": {
      "type": "number"
    },
    "portfolioBidStrategyId": {
      "type": "string",
      "pattern": "^\\d+$"
    }
  },
  "additionalProperties": false
}
```

#### ad.create

```json
{
  "type": "object",
  "required": [
    "accountId",
    "adAccountId",
    "name"
  ],
  "properties": {
    "accountId": {
      "type": "string"
    },
    "adAccountId": {
      "type": "string"
    },
    "name": {
      "type": "string",
      "maxLength": 255
    },
    "campaignName": {
      "type": "string",
      "maxLength": 255
    },
    "adSetName": {
      "type": "string",
      "maxLength": 255
    },
    "adName": {
      "type": "string",
      "maxLength": 255
    },
    "tracking": {
      "$ref": "#/$defs/AdTracking"
    },
    "goal": {
      "type": "string",
      "enum": [
        "engagement",
        "traffic",
        "awareness",
        "video_views",
        "lead_generation",
        "lead_conversion",
        "conversions",
        "app_promotion",
        "catalog_sales",
        "page_likes",
        "job_applicants"
      ]
    },
    "optimizationGoal": {
      "type": "string"
    },
    "billingEvent": {
      "type": "string"
    },
    "buyingType": {
      "type": "string",
      "enum": [
        "AUCTION",
        "RESERVED"
      ]
    },
    "rfPredictionId": {
      "type": "string"
    },
    "promotion": {
      "$ref": "#/$defs/MetaPromotion"
    },
    "creativeFeatures": {
      "$ref": "#/$defs/MetaCreativeFeatures"
    },
    "multiAdvertiser": {
      "type": "string",
      "enum": [
        "OPT_IN",
        "OPT_OUT"
      ]
    },
    "aiDisclosure": {
      "type": "string",
      "enum": [
        "OPT_IN",
        "OPT_OUT"
      ]
    },
    "validateOnly": {
      "type": "boolean"
    },
    "budgetAmount": {
      "type": "number"
    },
    "budgetType": {
      "type": "string",
      "enum": [
        "daily",
        "lifetime"
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "PAUSED"
      ]
    },
    "campaignStatus": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "PAUSED"
      ]
    },
    "budgetLevel": {
      "type": "string",
      "enum": [
        "adset",
        "campaign"
      ]
    },
    "currency": {
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "headline": {
      "type": "string"
    },
    "longHeadline": {
      "type": "string",
      "maxLength": 90
    },
    "body": {
      "type": "string"
    },
    "bodies": {
      "type": "array",
      "minItems": 1,
      "maxItems": 5,
      "items": {
        "type": "string"
      }
    },
    "headlines": {
      "type": "array",
      "minItems": 1,
      "maxItems": 5,
      "items": {
        "type": "string",
        "maxLength": 255
      }
    },
    "descriptions": {
      "type": "array",
      "minItems": 1,
      "maxItems": 5,
      "items": {
        "type": "string",
        "maxLength": 255
      }
    },
    "callToAction": {
      "type": "string",
      "enum": [
        "LEARN_MORE",
        "SHOP_NOW",
        "SIGN_UP",
        "BOOK_TRAVEL",
        "CONTACT_US",
        "DOWNLOAD",
        "GET_OFFER",
        "GET_QUOTE",
        "SUBSCRIBE",
        "WATCH_MORE",
        "ADD_TO_CART",
        "APPLY_NOW",
        "BOOK_NOW",
        "BUY_TICKETS",
        "DONATE",
        "DONATE_NOW",
        "GET_DIRECTIONS",
        "GET_SHOWTIMES",
        "LISTEN_NOW",
        "ORDER_NOW",
        "PLAY_GAME",
        "REQUEST_TIME",
        "SEE_MENU",
        "START_ORDER",
        "INSTALL_MOBILE_APP",
        "USE_APP",
        "REGISTER",
        "JOIN",
        "ATTEND",
        "REQUEST_DEMO",
        "VIEW_QUOTE",
        "APPLY",
        "SEE_MORE",
        "BUY_NOW"
      ]
    },
    "linkUrl": {
      "type": "string",
      "format": "uri"
    },
    "leadGenFormId": {
      "type": "string"
    },
    "imageUrl": {
      "type": "string",
      "format": "uri"
    },
    "images": {
      "type": "object",
      "properties": {
        "landscape": {
          "type": "string",
          "format": "uri"
        },
        "square": {
          "type": "string",
          "format": "uri"
        }
      },
      "additionalProperties": false
    },
    "video": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "format": "uri"
        },
        "id": {
          "type": "string"
        },
        "thumbnailUrl": {
          "type": "string",
          "format": "uri"
        }
      },
      "additionalProperties": false
    },
    "creatives": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "headline",
          "body",
          "linkUrl",
          "callToAction"
        ],
        "properties": {
          "creativeFeatures": {
            "$ref": "#/$defs/MetaCreativeFeatures"
          },
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "headline": {
            "type": "string",
            "maxLength": 255
          },
          "body": {
            "type": "string"
          },
          "imageUrl": {
            "type": "string",
            "format": "uri"
          },
          "video": {
            "type": "object",
            "required": [
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "thumbnailUrl": {
                "type": "string",
                "format": "uri"
              }
            },
            "additionalProperties": false
          },
          "linkUrl": {
            "type": "string",
            "format": "uri"
          },
          "callToAction": {
            "type": "string",
            "enum": [
              "LEARN_MORE",
              "SHOP_NOW",
              "SIGN_UP",
              "BOOK_TRAVEL",
              "CONTACT_US",
              "DOWNLOAD",
              "GET_OFFER",
              "GET_QUOTE",
              "SUBSCRIBE",
              "WATCH_MORE",
              "ADD_TO_CART",
              "APPLY_NOW",
              "BOOK_NOW",
              "BUY_TICKETS",
              "DONATE",
              "DONATE_NOW",
              "GET_DIRECTIONS",
              "GET_SHOWTIMES",
              "LISTEN_NOW",
              "ORDER_NOW",
              "PLAY_GAME",
              "REQUEST_TIME",
              "SEE_MENU",
              "START_ORDER",
              "INSTALL_MOBILE_APP",
              "USE_APP"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "adSetId": {
      "type": "string"
    },
    "existingCampaignId": {
      "type": "string"
    },
    "existingCreativeId": {
      "type": "string"
    },
    "businessName": {
      "type": "string",
      "maxLength": 25
    },
    "boardId": {
      "type": "string"
    },
    "organizationId": {
      "type": "string"
    },
    "targeting": {
      "allOf": [
        {
          "$ref": "#/$defs/TargetingSpec"
        }
      ]
    },
    "countries": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "countryGroups": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "africa",
          "asia",
          "europe",
          "north_america",
          "south_america",
          "oceania",
          "central_america",
          "caribbean",
          "eea",
          "euro_area",
          "nafta",
          "mercosur",
          "afta",
          "apec",
          "gcc",
          "cisfta",
          "emerging_markets",
          "itunes_app_store",
          "android_free_store",
          "android_paid_store"
        ]
      }
    },
    "cities": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "required": [
              "key"
            ],
            "properties": {
              "key": {
                "type": "string"
              },
              "radius": {
                "type": "number"
              },
              "distance_unit": {
                "type": "string",
                "enum": [
                  "mile",
                  "kilometer"
                ]
              }
            },
            "additionalProperties": false
          }
        ]
      }
    },
    "regions": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "required": [
              "key"
            ],
            "properties": {
              "key": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        ]
      }
    },
    "ageMin": {
      "type": "integer",
      "minimum": 13,
      "maximum": 65
    },
    "ageMax": {
      "type": "integer",
      "minimum": 13,
      "maximum": 65
    },
    "interests": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "zips": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "required": [
              "key"
            ],
            "properties": {
              "key": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        ]
      }
    },
    "metros": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "required": [
              "key"
            ],
            "properties": {
              "key": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        ]
      }
    },
    "customLocations": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "latitude",
          "longitude",
          "radius",
          "distanceUnit"
        ],
        "properties": {
          "latitude": {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          },
          "longitude": {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          },
          "radius": {
            "type": "number"
          },
          "distanceUnit": {
            "type": "string",
            "enum": [
              "mile",
              "kilometer"
            ]
          },
          "name": {
            "type": "string"
          },
          "address": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "behaviors": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "workPositions": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "workEmployers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "workIndustries": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "incomeTier": {
      "type": "string",
      "enum": [
        "top_5",
        "top_10",
        "top_10_25",
        "top_25_50"
      ]
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "placements": {
      "type": "object",
      "properties": {
        "publisherPlatforms": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "facebook",
              "instagram",
              "threads",
              "messenger",
              "audience_network",
              "whatsapp"
            ]
          }
        },
        "facebookPositions": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "feed",
              "right_hand_column",
              "marketplace",
              "video_feeds",
              "story",
              "search",
              "instream_video",
              "facebook_reels",
              "facebook_reels_overlay",
              "profile_feed",
              "notification"
            ]
          }
        },
        "instagramPositions": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "stream",
              "story",
              "explore",
              "explore_home",
              "reels",
              "profile_feed",
              "ig_search",
              "profile_reels"
            ]
          }
        },
        "messengerPositions": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "messenger_home",
              "sponsored_messages",
              "story"
            ]
          }
        },
        "audienceNetworkPositions": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "classic",
              "rewarded_video"
            ]
          }
        },
        "threadsPositions": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "threads_stream"
            ]
          }
        },
        "whatsappPositions": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "status"
            ]
          }
        },
        "devicePlatforms": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "mobile",
              "desktop"
            ]
          }
        }
      },
      "additionalProperties": false
    },
    "savedTargetingId": {
      "type": "string"
    },
    "rawTargeting": {
      "type": "object",
      "additionalProperties": true
    },
    "specialAdCategories": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "HOUSING",
          "EMPLOYMENT",
          "CREDIT",
          "FINANCIAL_PRODUCTS_SERVICES",
          "ISSUES_ELECTIONS_POLITICS",
          "ONLINE_GAMBLING_AND_GAMING"
        ]
      }
    },
    "specialAdCategoryCountry": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "regionalRegulatedCategories": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "regionalRegulationIdentities": {
      "type": "object",
      "additionalProperties": {
        "type": "integer"
      }
    },
    "endDate": {
      "type": "string",
      "format": "date-time"
    },
    "startDate": {
      "type": "string",
      "format": "date-time"
    },
    "pageId": {
      "type": "string"
    },
    "instagramAccountId": {
      "type": "string"
    },
    "dynamicCreative": {
      "type": "object",
      "properties": {
        "imageUrls": {
          "type": "array",
          "minItems": 1,
          "maxItems": 10,
          "items": {
            "type": "string",
            "format": "uri"
          }
        },
        "videoUrls": {
          "type": "array",
          "minItems": 1,
          "maxItems": 10,
          "items": {
            "type": "string",
            "format": "uri"
          }
        },
        "bodies": {
          "type": "array",
          "maxItems": 5,
          "items": {
            "type": "string"
          }
        },
        "titles": {
          "type": "array",
          "maxItems": 5,
          "items": {
            "type": "string"
          }
        },
        "descriptions": {
          "type": "array",
          "maxItems": 5,
          "items": {
            "type": "string"
          }
        },
        "linkUrls": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uri"
          }
        },
        "callToActionTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "LEARN_MORE",
              "SHOP_NOW",
              "SIGN_UP",
              "BOOK_TRAVEL",
              "CONTACT_US",
              "DOWNLOAD",
              "GET_OFFER",
              "GET_QUOTE",
              "SUBSCRIBE",
              "WATCH_MORE",
              "ADD_TO_CART",
              "APPLY_NOW",
              "BOOK_NOW",
              "BUY_TICKETS",
              "DONATE",
              "DONATE_NOW",
              "GET_DIRECTIONS",
              "GET_SHOWTIMES",
              "LISTEN_NOW",
              "ORDER_NOW",
              "PLAY_GAME",
              "REQUEST_TIME",
              "SEE_MENU",
              "START_ORDER",
              "INSTALL_MOBILE_APP",
              "USE_APP",
              "REGISTER",
              "JOIN",
              "ATTEND",
              "REQUEST_DEMO",
              "VIEW_QUOTE",
              "APPLY",
              "SEE_MORE",
              "BUY_NOW"
            ]
          }
        },
        "adFormat": {
          "type": "string",
          "enum": [
            "SINGLE_IMAGE",
            "CAROUSEL_IMAGE",
            "SINGLE_VIDEO"
          ]
        }
      },
      "additionalProperties": false
    },
    "carouselCards": {
      "type": "array",
      "minItems": 2,
      "maxItems": 10,
      "items": {
        "type": "object",
        "required": [
          "imageUrl"
        ],
        "properties": {
          "imageUrl": {
            "type": "string",
            "format": "uri"
          },
          "linkUrl": {
            "type": "string",
            "format": "uri"
          },
          "headline": {
            "type": "string",
            "maxLength": 255
          },
          "callToAction": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "defaultLocale": {
      "type": "string"
    },
    "translations": {
      "type": "array",
      "minItems": 1,
      "maxItems": 10,
      "items": {
        "type": "object",
        "required": [
          "locale",
          "headline",
          "body",
          "description"
        ],
        "properties": {
          "locale": {
            "type": "string"
          },
          "headline": {
            "type": "string",
            "maxLength": 255
          },
          "body": {
            "type": "string"
          },
          "linkUrl": {
            "type": "string",
            "format": "uri"
          },
          "imageUrl": {
            "type": "string",
            "format": "uri"
          },
          "videoUrl": {
            "type": "string",
            "format": "uri"
          },
          "thumbnailUrl": {
            "type": "string",
            "format": "uri"
          }
        },
        "additionalProperties": false
      }
    },
    "placementAssets": {
      "allOf": [
        {
          "$ref": "#/$defs/MetaPlacementAssets"
        }
      ]
    },
    "audienceId": {
      "type": "string"
    },
    "campaignType": {
      "type": "string",
      "enum": [
        "display",
        "search",
        "pmax",
        "demand_gen"
      ]
    },
    "locationTargetingType": {
      "allOf": [
        {
          "$ref": "#/$defs/GoogleLocationTargetingType"
        }
      ]
    },
    "assetGroup": {
      "$ref": "#/$defs/GooglePmaxAssetGroupInput"
    },
    "demandGen": {
      "$ref": "#/$defs/GoogleDemandGenInput"
    },
    "keywords": {
      "type": "array",
      "maxItems": 1000,
      "items": {
        "$ref": "#/$defs/KeywordEntry"
      }
    },
    "negativeKeywords": {
      "type": "array",
      "maxItems": 1000,
      "items": {
        "$ref": "#/$defs/KeywordEntry"
      }
    },
    "campaignNegativeKeywords": {
      "type": "array",
      "maxItems": 1000,
      "items": {
        "$ref": "#/$defs/KeywordEntry"
      }
    },
    "additionalHeadlines": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "$ref": "#/$defs/GoogleRsaHeadline"
          }
        ]
      }
    },
    "additionalDescriptions": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "$ref": "#/$defs/GoogleRsaDescription"
          }
        ]
      }
    },
    "sitelinks": {
      "type": "array",
      "minItems": 2,
      "maxItems": 20,
      "items": {
        "type": "object",
        "required": [
          "text",
          "linkUrl"
        ],
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1,
            "maxLength": 25
          },
          "linkUrl": {
            "type": "string",
            "format": "uri"
          },
          "description1": {
            "type": "string",
            "minLength": 1,
            "maxLength": 35
          },
          "description2": {
            "type": "string",
            "minLength": 1,
            "maxLength": 35
          }
        },
        "additionalProperties": false
      }
    },
    "callouts": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 25
      }
    },
    "structuredSnippets": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "items": {
        "type": "object",
        "required": [
          "header",
          "values"
        ],
        "properties": {
          "header": {
            "type": "string",
            "enum": [
              "Amenities",
              "Brands",
              "Courses",
              "Degree programs",
              "Destinations",
              "Featured hotels",
              "Insurance coverage",
              "Models",
              "Neighborhoods",
              "Service catalog",
              "Shows",
              "Styles",
              "Types"
            ]
          },
          "values": {
            "type": "array",
            "minItems": 3,
            "maxItems": 10,
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 25
            }
          }
        },
        "additionalProperties": false
      }
    },
    "advantageAudience": {
      "type": "integer",
      "enum": [
        0,
        1
      ]
    },
    "attributionSpec": {
      "type": "array",
      "minItems": 1,
      "maxItems": 3,
      "items": {
        "type": "object",
        "required": [
          "eventType",
          "windowDays"
        ],
        "properties": {
          "eventType": {
            "type": "string",
            "enum": [
              "CLICK_THROUGH",
              "VIEW_THROUGH",
              "ENGAGED_VIDEO_VIEW"
            ]
          },
          "windowDays": {
            "type": "integer",
            "enum": [
              1,
              7,
              28
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "gender": {
      "type": "string",
      "enum": [
        "all",
        "male",
        "female"
      ]
    },
    "bidStrategy": {
      "allOf": [
        {
          "$ref": "#/$defs/BidStrategy"
        }
      ]
    },
    "bidAmount": {
      "type": "number"
    },
    "roasAverageFloor": {
      "type": "number"
    },
    "portfolioBidStrategyId": {
      "type": "string",
      "pattern": "^\\d+$"
    },
    "valueRuleSetId": {
      "type": "string",
      "pattern": "^\\d+$"
    },
    "valueRulesApplied": {
      "type": "boolean"
    },
    "platformSpecificData": {
      "oneOf": [
        {
          "$ref": "#/$defs/LinkedInAdsPlatformData"
        },
        {
          "$ref": "#/$defs/MetaAdsPlatformData"
        }
      ]
    },
    "dsaBeneficiary": {
      "type": "string",
      "maxLength": 100
    },
    "dsaPayor": {
      "type": "string",
      "maxLength": 100
    },
    "brandIdentity": {
      "type": "object",
      "required": [
        "displayName",
        "imageUrl"
      ],
      "properties": {
        "displayName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 40
        },
        "imageUrl": {
          "type": "string",
          "format": "uri"
        }
      },
      "additionalProperties": false
    },
    "identityId": {
      "type": "string"
    },
    "identityType": {
      "type": "string",
      "enum": [
        "TT_USER",
        "CUSTOMIZED_USER",
        "BC_AUTH_TT"
      ]
    },
    "smartPlus": {
      "type": "boolean"
    },
    "userOs": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "userDevice": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "isSkadnetworkAttribution": {
      "type": "boolean"
    },
    "campaignAttribution": {
      "type": "string",
      "enum": [
        "AEM",
        "SKADNETWORK"
      ]
    },
    "promotedObject": {
      "$ref": "#/$defs/AdPromotedObject"
    }
  },
  "additionalProperties": false
}
```

#### creative.create

```json
{
  "type": "object",
  "required": [
    "accountId",
    "adAccountId",
    "headline",
    "body",
    "linkUrl"
  ],
  "properties": {
    "accountId": {
      "type": "string"
    },
    "adAccountId": {
      "type": "string"
    },
    "headline": {
      "type": "string",
      "maxLength": 255
    },
    "body": {
      "type": "string"
    },
    "callToAction": {
      "type": "string"
    },
    "linkUrl": {
      "type": "string",
      "format": "uri"
    },
    "imageUrl": {
      "type": "string",
      "format": "uri"
    },
    "imageHash": {
      "type": "string"
    },
    "carouselCards": {
      "type": "array",
      "minItems": 2,
      "maxItems": 10,
      "items": {
        "type": "object",
        "required": [
          "imageUrl",
          "linkUrl"
        ],
        "properties": {
          "imageUrl": {
            "type": "string",
            "format": "uri"
          },
          "linkUrl": {
            "type": "string",
            "format": "uri"
          },
          "headline": {
            "type": "string",
            "maxLength": 255
          },
          "callToAction": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "urlTags": {
      "type": "string"
    },
    "promotion": {
      "$ref": "#/$defs/MetaPromotion"
    },
    "creativeFeatures": {
      "$ref": "#/$defs/MetaCreativeFeatures"
    },
    "multiAdvertiser": {
      "type": "string",
      "enum": [
        "OPT_IN",
        "OPT_OUT"
      ]
    },
    "aiDisclosure": {
      "type": "string",
      "enum": [
        "OPT_IN",
        "OPT_OUT"
      ]
    }
  },
  "additionalProperties": false
}
```

#### campaign.update

```json
{
  "type": "object",
  "required": [
    "platform"
  ],
  "properties": {
    "platform": {
      "type": "string",
      "enum": [
        "facebook",
        "instagram",
        "google"
      ]
    },
    "accountId": {
      "type": "string"
    },
    "bidStrategy": {
      "allOf": [
        {
          "$ref": "#/$defs/BidStrategy"
        }
      ]
    },
    "bidAmount": {
      "type": "number"
    },
    "roasAverageFloor": {
      "type": "number"
    },
    "portfolioBidStrategyId": {
      "type": "string",
      "pattern": "^\\d+$"
    },
    "allowSharedBudgetUpdate": {
      "type": "boolean"
    },
    "budget": {
      "type": "object",
      "required": [
        "amount",
        "type"
      ],
      "properties": {
        "amount": {
          "type": "number"
        },
        "type": {
          "type": "string",
          "enum": [
            "daily",
            "lifetime"
          ]
        }
      },
      "additionalProperties": false
    },
    "name": {
      "type": "string",
      "maxLength": 255
    },
    "platformSpecificData": {
      "type": "object",
      "properties": {
        "spendCap": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
```

#### adset.update

```json
{
  "type": "object",
  "required": [
    "platform"
  ],
  "properties": {
    "platform": {
      "type": "string",
      "enum": [
        "facebook",
        "instagram",
        "tiktok",
        "linkedin",
        "pinterest",
        "google",
        "twitter",
        "openai"
      ]
    },
    "budget": {
      "type": "object",
      "properties": {
        "amount": {
          "type": "number"
        },
        "type": {
          "type": "string",
          "enum": [
            "daily",
            "lifetime"
          ]
        }
      },
      "additionalProperties": false
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "paused"
      ]
    },
    "name": {
      "type": "string",
      "maxLength": 255
    },
    "bidStrategy": {
      "allOf": [
        {
          "$ref": "#/$defs/BidStrategy"
        }
      ]
    },
    "bidAmount": {
      "type": "number"
    },
    "roasAverageFloor": {
      "type": "number"
    },
    "valueRuleSetId": {
      "type": "string",
      "pattern": "^\\d+$"
    },
    "valueRulesApplied": {
      "type": "boolean"
    },
    "platformSpecificData": {
      "type": "object",
      "properties": {
        "optimizationGoal": {
          "type": "string"
        },
        "billingEvent": {
          "type": "string"
        },
        "startDate": {
          "type": "string"
        },
        "endDate": {
          "type": "string"
        },
        "dailyMinSpendTarget": {
          "type": "number"
        },
        "lifetimeMinSpendTarget": {
          "type": "number"
        },
        "customerLifecycle": {
          "$ref": "#/$defs/MetaCustomerLifecycle"
        },
        "promotedObject": {
          "type": "object",
          "properties": {
            "pixelId": {
              "type": "string"
            },
            "customEventType": {
              "type": "string"
            },
            "customEventStr": {
              "type": "string"
            },
            "pageId": {
              "type": "string"
            },
            "applicationId": {
              "type": "string"
            },
            "objectStoreUrl": {
              "type": "string"
            },
            "customConversionId": {
              "type": "string"
            },
            "productCatalogId": {
              "type": "string"
            },
            "productSetId": {
              "type": "string"
            },
            "offlineConversionDataSetId": {
              "type": "string"
            },
            "whatsappPhoneNumber": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
```

#### ad.update

```json
{
  "type": "object",
  "properties": {
    "headlines": {
      "type": "array",
      "minItems": 1,
      "maxItems": 15,
      "items": {
        "$ref": "#/$defs/GoogleRsaHeadline"
      }
    },
    "descriptions": {
      "type": "array",
      "minItems": 1,
      "maxItems": 5,
      "items": {
        "$ref": "#/$defs/GoogleRsaDescription"
      }
    },
    "finalUrls": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "format": "uri"
      }
    },
    "assetGroup": {
      "allOf": [
        {
          "$ref": "#/$defs/GooglePmaxAssetGroupUpdate"
        }
      ]
    },
    "demandGen": {
      "allOf": [
        {
          "$ref": "#/$defs/GoogleDemandGenUpdate"
        }
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "paused"
      ]
    },
    "budget": {
      "type": "object",
      "properties": {
        "amount": {
          "type": "number"
        },
        "type": {
          "type": "string",
          "enum": [
            "daily",
            "lifetime"
          ]
        }
      },
      "additionalProperties": false
    },
    "targeting": {
      "type": "object",
      "properties": {
        "keywords": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "required": [
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "matchType": {
                    "type": "string",
                    "enum": [
                      "exact",
                      "phrase",
                      "broad"
                    ]
                  }
                },
                "additionalProperties": false
              }
            ]
          }
        },
        "negativeKeywords": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "required": [
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "maxLength": 80
                  },
                  "matchType": {
                    "type": "string",
                    "enum": [
                      "exact",
                      "phrase",
                      "broad"
                    ]
                  }
                },
                "additionalProperties": false
              }
            ]
          }
        },
        "devices": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "MOBILE",
                  "DESKTOP",
                  "TABLET",
                  "CONNECTED_TV"
                ]
              },
              {
                "type": "object",
                "required": [
                  "device"
                ],
                "properties": {
                  "device": {
                    "type": "string",
                    "enum": [
                      "MOBILE",
                      "DESKTOP",
                      "TABLET",
                      "CONNECTED_TV"
                    ]
                  },
                  "bidModifier": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 10
                  }
                },
                "additionalProperties": false
              }
            ]
          }
        },
        "ageMin": {
          "type": "integer",
          "minimum": 13,
          "maximum": 65
        },
        "ageMax": {
          "type": "integer",
          "minimum": 13,
          "maximum": 65
        },
        "countries": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "locations": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "object",
              "properties": {
                "countries": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "regions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "properties": {
                      "key": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "cities": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "properties": {
                      "key": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "zips": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "properties": {
                      "key": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "metros": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "key"
                    ],
                    "properties": {
                      "key": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false
            }
          ]
        },
        "languages": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "interests": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "id",
              "name"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "advantage_audience": {
          "type": "integer",
          "enum": [
            0,
            1
          ]
        }
      },
      "additionalProperties": false
    },
    "creative": {
      "type": "object",
      "properties": {
        "promotion": {
          "$ref": "#/$defs/MetaPromotion"
        },
        "creativeFeatures": {
          "$ref": "#/$defs/MetaCreativeFeatures"
        },
        "headline": {
          "type": "string"
        },
        "longHeadline": {
          "type": "string",
          "minLength": 1,
          "maxLength": 90
        },
        "businessName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 25
        },
        "squareImageUrl": {
          "type": "string",
          "format": "uri"
        },
        "body": {
          "type": "string"
        },
        "callToAction": {
          "type": "string"
        },
        "linkUrl": {
          "type": "string",
          "format": "uri"
        },
        "imageUrl": {
          "type": "string",
          "format": "uri"
        },
        "videoUrl": {
          "type": "string",
          "format": "uri"
        },
        "videoId": {
          "type": "string"
        },
        "existingCreativeId": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "name": {
      "type": "string",
      "maxLength": 255
    }
  },
  "additionalProperties": false
}
```

#### audience.create

```json
{
  "type": "object",
  "title": "UploadedOrDerivedAudience",
  "required": [
    "accountId",
    "adAccountId",
    "name",
    "type"
  ],
  "properties": {
    "accountId": {
      "type": "string"
    },
    "adAccountId": {
      "type": "string"
    },
    "name": {
      "type": "string",
      "maxLength": 255
    },
    "type": {
      "type": "string",
      "enum": [
        "customer_list",
        "company_list",
        "engagement",
        "meta_engagement",
        "website",
        "website_retargeting",
        "lookalike"
      ]
    },
    "matchRules": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "matchType",
          "matchValue"
        ],
        "properties": {
          "matchType": {
            "type": "string",
            "enum": [
              "EXACT",
              "STARTS_WITH",
              "CONTAINS",
              "ENDS_WITH"
            ]
          },
          "matchValue": {
            "type": "string"
          }
        }
      }
    },
    "sourceType": {
      "type": "string",
      "enum": [
        "VIDEO_ADS",
        "LEAD_GEN_FORMS",
        "ORGANIZATION_PAGES",
        "EVENT_PAGES",
        "SINGLE_IMAGE_ADS"
      ]
    },
    "trigger": {
      "type": "string"
    },
    "lookbackDays": {
      "type": "integer",
      "enum": [
        30,
        60,
        90,
        180,
        365
      ]
    },
    "engagementSources": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "type": "string"
      }
    },
    "companies": {
      "type": "array",
      "minItems": 1,
      "maxItems": 300000,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "domain": {
            "type": "string",
            "maxLength": 100
          },
          "website": {
            "type": "string",
            "maxLength": 100
          },
          "linkedinPageUrl": {
            "type": "string"
          }
        }
      }
    },
    "pixelId": {
      "type": "string"
    },
    "retentionDays": {
      "type": "integer",
      "minimum": 1,
      "maximum": 365
    },
    "engagementSource": {
      "type": "string",
      "enum": [
        "page",
        "instagram",
        "video"
      ]
    },
    "sourceId": {
      "type": "string"
    },
    "event": {
      "type": "string"
    },
    "sourceAudienceId": {
      "type": "string"
    },
    "country": {
      "type": "string"
    },
    "ratio": {
      "type": "number",
      "minimum": 0.01,
      "maximum": 0.2
    },
    "urlContains": {
      "type": "string"
    },
    "rule": {
      "type": "object"
    },
    "customerFileSource": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
```

#### audience.update

```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 255
    },
    "spec": {
      "allOf": [
        {
          "$ref": "#/$defs/TargetingSpec"
        }
      ]
    }
  },
  "additionalProperties": false
}
```

#### audience.companies

```json
{
  "type": "object",
  "required": [
    "companies"
  ],
  "properties": {
    "companies": {
      "type": "array",
      "minItems": 1,
      "maxItems": 300000,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 255
          },
          "domain": {
            "type": "string",
            "maxLength": 100
          },
          "website": {
            "type": "string",
            "maxLength": 100
          },
          "linkedinPageUrl": {
            "type": "string"
          }
        }
      }
    }
  },
  "additionalProperties": false
}
```

#### Shared definitions

References such as `#/$defs/TargetingSpec` in the schemas above resolve here.

```json
{
  "AdPromotedObject": {
    "type": "object",
    "properties": {
      "pixelId": {
        "type": "string"
      },
      "customEventType": {
        "type": "string"
      },
      "customEventStr": {
        "type": "string"
      },
      "pageId": {
        "type": "string"
      },
      "applicationId": {
        "type": "string"
      },
      "objectStoreUrl": {
        "type": "string",
        "format": "uri"
      },
      "customConversionId": {
        "type": "string"
      },
      "productCatalogId": {
        "type": "string"
      },
      "productSetId": {
        "type": "string"
      },
      "offlineConversionDataSetId": {
        "type": "string"
      },
      "whatsappPhoneNumber": {
        "type": "string"
      }
    },
    "additionalProperties": false
  },
  "GoogleLocationTargetingType": {
    "type": "string",
    "enum": [
      "presence",
      "presence_or_interest"
    ]
  },
  "AdTracking": {
    "type": "object",
    "properties": {
      "pixelId": {
        "type": "string"
      },
      "urlTags": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "key",
            "value"
          ],
          "properties": {
            "key": {
              "type": "string"
            },
            "value": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      }
    },
    "additionalProperties": false
  },
  "MetaPromotion": {
    "type": [
      "object",
      "null"
    ]
  },
  "MetaCreativeFeatures": {
    "type": "object",
    "additionalProperties": {
      "type": "string",
      "enum": [
        "OPT_IN",
        "OPT_OUT"
      ]
    },
    "propertyNames": {
      "pattern": "^[a-z0-9_]+$"
    }
  },
  "TargetingSpec": {
    "type": "object",
    "properties": {
      "userOs": {
        "type": "array",
        "minItems": 1,
        "items": {
          "type": "string",
          "minLength": 1
        }
      },
      "userDevice": {
        "type": "array",
        "minItems": 1,
        "items": {
          "type": "string",
          "minLength": 1
        }
      },
      "countries": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "regions": {
        "type": "array",
        "items": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "object",
              "required": [
                "key"
              ],
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          ]
        }
      },
      "cities": {
        "type": "array",
        "items": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "object",
              "required": [
                "key"
              ],
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "radius": {
                  "type": "number"
                },
                "distanceUnit": {
                  "type": "string",
                  "enum": [
                    "mile",
                    "kilometer"
                  ]
                }
              },
              "additionalProperties": false
            }
          ]
        }
      },
      "zips": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "key"
          ],
          "properties": {
            "key": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "metros": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "key"
          ],
          "properties": {
            "key": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "countryGroups": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "africa",
            "asia",
            "europe",
            "north_america",
            "south_america",
            "oceania",
            "central_america",
            "caribbean",
            "eea",
            "euro_area",
            "nafta",
            "mercosur",
            "afta",
            "apec",
            "gcc",
            "cisfta",
            "emerging_markets",
            "itunes_app_store",
            "android_free_store",
            "android_paid_store"
          ]
        }
      },
      "customLocations": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "latitude",
            "longitude",
            "radius",
            "distanceUnit"
          ],
          "properties": {
            "latitude": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "longitude": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            },
            "radius": {
              "type": "number"
            },
            "distanceUnit": {
              "type": "string",
              "enum": [
                "mile",
                "kilometer"
              ]
            },
            "name": {
              "type": "string"
            },
            "address": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "excludedLocations": {
        "type": "object",
        "properties": {
          "countries": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "countryGroups": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "africa",
                "asia",
                "europe",
                "north_america",
                "south_america",
                "oceania",
                "central_america",
                "caribbean",
                "eea",
                "euro_area",
                "nafta",
                "mercosur",
                "afta",
                "apec",
                "gcc",
                "cisfta",
                "emerging_markets",
                "itunes_app_store",
                "android_free_store",
                "android_paid_store"
              ]
            }
          },
          "regions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "key"
              ],
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "cities": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "key"
              ],
              "properties": {
                "key": {
                  "type": "string"
                },
                "radius": {
                  "type": "number"
                },
                "distanceUnit": {
                  "type": "string",
                  "enum": [
                    "mile",
                    "kilometer"
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "zips": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "key"
              ],
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "places": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "key"
              ],
              "properties": {
                "key": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "neighborhoods": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "key"
              ],
              "properties": {
                "key": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "customLocations": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "latitude",
                "longitude",
                "radius",
                "distanceUnit"
              ],
              "properties": {
                "latitude": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 90
                },
                "longitude": {
                  "type": "number",
                  "minimum": -180,
                  "maximum": 180
                },
                "radius": {
                  "type": "number"
                },
                "distanceUnit": {
                  "type": "string",
                  "enum": [
                    "mile",
                    "kilometer"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "address": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          }
        },
        "additionalProperties": false
      },
      "ageMin": {
        "type": "integer",
        "minimum": 13,
        "maximum": 100
      },
      "ageMax": {
        "type": "integer",
        "minimum": 13,
        "maximum": 100
      },
      "gender": {
        "type": "string",
        "enum": [
          "all",
          "male",
          "female"
        ]
      },
      "incomeTier": {
        "type": "string",
        "enum": [
          "top_5",
          "top_10",
          "top_10_25",
          "top_25_50"
        ]
      },
      "languages": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "interests": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "behaviors": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "workPositions": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "workEmployers": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "workIndustries": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "industries": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "companySizes": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "seniorities": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "jobFunctions": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "audienceInclude": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "audienceExclude": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "additionalProperties": false
  },
  "MetaPlacementAssets": {
    "type": "object",
    "required": [
      "rules"
    ],
    "properties": {
      "defaultImageUrl": {
        "type": "string",
        "format": "uri"
      },
      "defaultVideoUrl": {
        "type": "string",
        "format": "uri"
      },
      "defaultThumbnailUrl": {
        "type": "string",
        "format": "uri"
      },
      "rules": {
        "type": "array",
        "minItems": 1,
        "maxItems": 10,
        "items": {
          "type": "object",
          "required": [
            "placements"
          ],
          "properties": {
            "imageUrl": {
              "type": "string",
              "format": "uri"
            },
            "videoUrl": {
              "type": "string",
              "format": "uri"
            },
            "thumbnailUrl": {
              "type": "string",
              "format": "uri"
            },
            "headline": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "body": {
              "type": "string",
              "minLength": 1
            },
            "placements": {
              "type": "object",
              "properties": {
                "publisherPlatforms": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "facebook",
                      "instagram",
                      "threads",
                      "messenger",
                      "audience_network",
                      "whatsapp"
                    ]
                  }
                },
                "facebookPositions": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "feed",
                      "right_hand_column",
                      "marketplace",
                      "video_feeds",
                      "story",
                      "search",
                      "instream_video",
                      "facebook_reels",
                      "facebook_reels_overlay",
                      "profile_feed",
                      "notification"
                    ]
                  }
                },
                "instagramPositions": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "stream",
                      "story",
                      "explore",
                      "explore_home",
                      "reels",
                      "profile_feed",
                      "ig_search",
                      "profile_reels"
                    ]
                  }
                },
                "messengerPositions": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "messenger_home",
                      "sponsored_messages",
                      "story"
                    ]
                  }
                },
                "audienceNetworkPositions": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "classic",
                      "rewarded_video"
                    ]
                  }
                },
                "threadsPositions": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "threads_stream"
                    ]
                  }
                },
                "whatsappPositions": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "status"
                    ]
                  }
                },
                "devicePlatforms": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "mobile",
                      "desktop"
                    ]
                  }
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        }
      }
    },
    "additionalProperties": false
  },
  "GooglePmaxAssetGroupInput": {
    "type": "object",
    "additionalProperties": false,
    "required": [
      "finalUrl",
      "headlines",
      "longHeadline",
      "descriptions",
      "businessName",
      "images"
    ],
    "properties": {
      "name": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128
      },
      "finalUrl": {
        "type": "string",
        "format": "uri",
        "pattern": "^https?://"
      },
      "headlines": {
        "type": "array",
        "minItems": 3,
        "maxItems": 15,
        "uniqueItems": true,
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 30
        }
      },
      "longHeadline": {
        "type": "string",
        "minLength": 1,
        "maxLength": 90
      },
      "descriptions": {
        "type": "array",
        "minItems": 2,
        "maxItems": 5,
        "uniqueItems": true,
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 90
        }
      },
      "businessName": {
        "type": "string",
        "minLength": 1,
        "maxLength": 25
      },
      "images": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "landscape",
          "square",
          "logo"
        ],
        "properties": {
          "landscape": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri",
              "pattern": "^https?://"
            }
          },
          "square": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri",
              "pattern": "^https?://"
            }
          },
          "logo": {
            "type": "array",
            "minItems": 1,
            "maxItems": 5,
            "items": {
              "type": "string",
              "format": "uri",
              "pattern": "^https?://"
            }
          }
        }
      },
      "youtubeVideoId": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{11}$"
      }
    }
  },
  "GoogleDemandGenInput": {
    "type": "object",
    "additionalProperties": false,
    "required": [
      "finalUrl",
      "businessName",
      "headlines",
      "descriptions",
      "images"
    ],
    "properties": {
      "adGroupName": {
        "type": "string",
        "maxLength": 255
      },
      "finalUrl": {
        "type": "string",
        "format": "uri"
      },
      "businessName": {
        "type": "string",
        "maxLength": 25
      },
      "headlines": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "maxLength": 40
        }
      },
      "longHeadlines": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "maxLength": 90
        }
      },
      "descriptions": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "maxLength": 90
        }
      },
      "callToAction": {
        "type": "string",
        "maxLength": 25
      },
      "images": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "logo"
        ],
        "properties": {
          "landscape": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "square": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "portrait": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "logo": {
            "type": "array",
            "minItems": 1,
            "maxItems": 5,
            "items": {
              "type": "string",
              "format": "uri"
            }
          }
        }
      },
      "youtubeVideoIds": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{11}$"
        }
      },
      "carouselCards": {
        "type": "array",
        "minItems": 2,
        "maxItems": 10,
        "items": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "headline",
            "images"
          ],
          "properties": {
            "headline": {
              "type": "string",
              "maxLength": 40
            },
            "finalUrl": {
              "type": "string",
              "format": "uri"
            },
            "callToAction": {
              "type": "string",
              "maxLength": 25
            },
            "images": {
              "type": "object",
              "additionalProperties": false,
              "minProperties": 1,
              "properties": {
                "landscape": {
                  "type": "string",
                  "format": "uri"
                },
                "square": {
                  "type": "string",
                  "format": "uri"
                },
                "portrait": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "channels": {
        "type": "array",
        "minItems": 1,
        "items": {
          "type": "string",
          "enum": [
            "youtube_in_stream",
            "youtube_in_feed",
            "youtube_shorts",
            "discover",
            "gmail",
            "display"
          ]
        }
      },
      "audience": {
        "$ref": "#/$defs/GoogleDemandGenAudience"
      },
      "audienceId": {
        "type": "string"
      }
    }
  },
  "GoogleDemandGenAudience": {
    "type": "object",
    "additionalProperties": false,
    "minProperties": 1,
    "properties": {
      "userLists": {
        "type": "array",
        "minItems": 1,
        "maxItems": 20,
        "items": {
          "type": "string"
        }
      },
      "userInterests": {
        "type": "array",
        "minItems": 1,
        "maxItems": 20,
        "items": {
          "type": "string"
        }
      },
      "customAudiences": {
        "type": "array",
        "minItems": 1,
        "maxItems": 20,
        "items": {
          "type": "string"
        }
      },
      "ageRanges": {
        "type": "array",
        "minItems": 1,
        "maxItems": 6,
        "items": {
          "type": "object",
          "required": [
            "min"
          ],
          "properties": {
            "min": {
              "type": "integer",
              "enum": [
                18,
                25,
                35,
                45,
                55,
                65
              ]
            },
            "max": {
              "type": "integer",
              "enum": [
                24,
                34,
                44,
                54,
                64
              ]
            }
          },
          "additionalProperties": false
        }
      },
      "genders": {
        "type": "array",
        "minItems": 1,
        "maxItems": 3,
        "items": {
          "type": "string",
          "enum": [
            "male",
            "female",
            "undetermined"
          ]
        }
      }
    }
  },
  "KeywordEntry": {
    "oneOf": [
      {
        "type": "string",
        "minLength": 1,
        "maxLength": 80
      },
      {
        "type": "object",
        "required": [
          "text"
        ],
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "matchType": {
            "type": "string",
            "enum": [
              "exact",
              "phrase",
              "broad"
            ]
          }
        },
        "additionalProperties": false
      }
    ]
  },
  "GoogleRsaHeadline": {
    "type": "object",
    "required": [
      "text"
    ],
    "properties": {
      "text": {
        "type": "string",
        "minLength": 1,
        "maxLength": 30
      },
      "pinnedField": {
        "type": "string",
        "enum": [
          "HEADLINE_1",
          "HEADLINE_2",
          "HEADLINE_3"
        ]
      }
    },
    "additionalProperties": false
  },
  "GoogleRsaDescription": {
    "type": "object",
    "required": [
      "text"
    ],
    "properties": {
      "text": {
        "type": "string",
        "minLength": 1,
        "maxLength": 90
      },
      "pinnedField": {
        "type": "string",
        "enum": [
          "DESCRIPTION_1",
          "DESCRIPTION_2"
        ]
      }
    },
    "additionalProperties": false
  },
  "BidStrategy": {
    "type": "string",
    "enum": [
      "LOWEST_COST_WITHOUT_CAP",
      "LOWEST_COST_WITH_BID_CAP",
      "COST_CAP",
      "LOWEST_COST_WITH_MIN_ROAS"
    ]
  },
  "LinkedInAdsPlatformData": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "costType": {
        "type": "string",
        "enum": [
          "CPM",
          "CPC",
          "CPV"
        ]
      },
      "unitCost": {
        "type": "number"
      },
      "optimizationTargetType": {
        "type": "string"
      },
      "creativeSelection": {
        "type": "string",
        "enum": [
          "OPTIMIZED",
          "ROUND_ROBIN"
        ]
      },
      "audienceExpansionEnabled": {
        "type": "boolean"
      },
      "offsiteDeliveryEnabled": {
        "type": "boolean"
      },
      "connectedTelevisionOnly": {
        "type": "boolean"
      },
      "carousel": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "cards"
        ],
        "properties": {
          "cards": {
            "type": "array",
            "minItems": 2,
            "maxItems": 10,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "imageUrl"
              ],
              "properties": {
                "imageUrl": {
                  "type": "string",
                  "format": "uri"
                },
                "headline": {
                  "type": "string"
                },
                "landingUrl": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "document": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "url",
          "title"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          }
        }
      },
      "spotlight": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "headline",
          "callToAction",
          "landingUrl"
        ],
        "properties": {
          "headline": {
            "type": "string"
          },
          "callToAction": {
            "type": "string"
          },
          "landingUrl": {
            "type": "string",
            "format": "uri"
          },
          "logoUrl": {
            "type": "string",
            "format": "uri"
          },
          "organizationName": {
            "type": "string"
          },
          "showMemberProfilePhoto": {
            "type": "boolean"
          },
          "backgroundImageUrl": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "follower": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "headline",
          "description",
          "callToAction"
        ],
        "properties": {
          "headline": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "preApproved": {
                "type": "string"
              },
              "custom": {
                "type": "string"
              }
            }
          },
          "callToAction": {
            "type": "string",
            "enum": [
              "VISIT_ORGANIZATION_COMPANY_PAGE",
              "VISIT_ORGANIZATION_LIFE_PAGE",
              "VISIT_ORGANIZATION_JOBS_PAGE",
              "VISIT_ORGANIZATION_CAREERS_PAGE"
            ]
          },
          "logoUrl": {
            "type": "string",
            "format": "uri"
          },
          "organizationName": {
            "type": "string"
          },
          "showMemberProfilePhoto": {
            "type": "boolean"
          }
        }
      },
      "jobs": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "headline",
          "buttonLabel"
        ],
        "properties": {
          "headline": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "preApproved": {
                "type": "string"
              },
              "custom": {
                "type": "string"
              }
            }
          },
          "buttonLabel": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "preApproved": {
                "type": "string"
              },
              "custom": {
                "type": "string"
              }
            }
          },
          "logoUrl": {
            "type": "string",
            "format": "uri"
          },
          "organizationName": {
            "type": "string"
          },
          "showMemberProfilePhoto": {
            "type": "boolean"
          }
        }
      },
      "textAd": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "headline",
          "description",
          "landingUrl"
        ],
        "properties": {
          "headline": {
            "type": "string",
            "maxLength": 25
          },
          "landingUrl": {
            "type": "string",
            "format": "uri"
          },
          "imageUrl": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "conversation": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "subject",
          "firstMessageId",
          "messages"
        ],
        "properties": {
          "subject": {
            "type": "string"
          },
          "sender": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "footer": {
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "firstMessageId": {
            "type": "string"
          },
          "messages": {
            "type": "array",
            "minItems": 1,
            "maxItems": 25,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "id",
                "text"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "text": {
                  "type": "string",
                  "maxLength": 500
                },
                "buttons": {
                  "type": "array",
                  "minItems": 1,
                  "maxItems": 5,
                  "items": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "text"
                    ],
                    "properties": {
                      "text": {
                        "type": "string",
                        "maxLength": 35
                      },
                      "nextMessageId": {
                        "type": "string"
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "event": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "urn"
        ],
        "properties": {
          "urn": {
            "type": "string",
            "pattern": "^urn:li:event:\\d+$"
          }
        }
      },
      "thoughtLeader": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "postUrn"
        ],
        "properties": {
          "postUrn": {
            "type": "string",
            "pattern": "^urn:li:(share|ugcPost):\\d+$"
          }
        }
      }
    }
  },
  "MetaAdsPlatformData": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "bidStrategy": {
        "$ref": "#/$defs/BidStrategy"
      },
      "bidAmount": {
        "type": "number"
      },
      "roasAverageFloor": {
        "type": "number"
      },
      "dailyMinSpendTarget": {
        "type": "number"
      },
      "lifetimeMinSpendTarget": {
        "type": "number"
      },
      "customerLifecycle": {
        "$ref": "#/$defs/MetaCustomerLifecycle"
      }
    }
  },
  "MetaCustomerLifecycle": {
    "type": "object",
    "additionalProperties": false,
    "required": [
      "strategy"
    ],
    "properties": {
      "strategy": {
        "type": "string",
        "enum": [
          "all_customers",
          "new_customers",
          "new_customers_excluding_engaged"
        ]
      },
      "existingCustomerAudienceIds": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "engagedAudienceIds": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    }
  },
  "GooglePmaxAssetGroupUpdate": {
    "type": "object",
    "additionalProperties": false,
    "minProperties": 1,
    "properties": {
      "finalUrl": {
        "type": "string",
        "format": "uri",
        "pattern": "^https?://"
      },
      "headlines": {
        "type": "array",
        "minItems": 3,
        "maxItems": 15,
        "uniqueItems": true,
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 30
        }
      },
      "longHeadline": {
        "type": "string",
        "minLength": 1,
        "maxLength": 90
      },
      "descriptions": {
        "type": "array",
        "minItems": 2,
        "maxItems": 5,
        "uniqueItems": true,
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 90
        }
      },
      "businessName": {
        "type": "string",
        "minLength": 1,
        "maxLength": 25
      },
      "images": {
        "type": "object",
        "additionalProperties": false,
        "minProperties": 1,
        "properties": {
          "landscape": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri",
              "pattern": "^https?://"
            }
          },
          "square": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri",
              "pattern": "^https?://"
            }
          },
          "logo": {
            "type": "array",
            "minItems": 1,
            "maxItems": 5,
            "items": {
              "type": "string",
              "format": "uri",
              "pattern": "^https?://"
            }
          }
        }
      },
      "youtubeVideoIds": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{11}$"
        }
      }
    }
  },
  "GoogleDemandGenUpdate": {
    "type": "object",
    "additionalProperties": false,
    "minProperties": 1,
    "properties": {
      "finalUrl": {
        "type": "string",
        "format": "uri"
      },
      "businessName": {
        "type": "string",
        "maxLength": 25
      },
      "headlines": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "maxLength": 40
        }
      },
      "longHeadlines": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "maxLength": 90
        }
      },
      "descriptions": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "maxLength": 90
        }
      },
      "callToAction": {
        "type": "string",
        "maxLength": 25
      },
      "images": {
        "type": "object",
        "additionalProperties": false,
        "minProperties": 1,
        "properties": {
          "landscape": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "square": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "portrait": {
            "type": "array",
            "minItems": 1,
            "maxItems": 20,
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "logo": {
            "type": "array",
            "minItems": 1,
            "maxItems": 5,
            "items": {
              "type": "string",
              "format": "uri"
            }
          }
        }
      },
      "youtubeVideoIds": {
        "type": "array",
        "minItems": 1,
        "maxItems": 5,
        "items": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{11}$"
        }
      },
      "channels": {
        "type": "array",
        "minItems": 1,
        "items": {
          "type": "string",
          "enum": [
            "youtube_in_stream",
            "youtube_in_feed",
            "youtube_shorts",
            "discover",
            "gmail",
            "display"
          ]
        }
      },
      "audience": {
        "$ref": "#/$defs/GoogleDemandGenAudience"
      },
      "audienceId": {
        "type": "string"
      }
    }
  }
}
```

### Optional approvals and interrupted creation

Approvals are off by default. If a business enables its approval policy, spend-related requests return status `awaiting_approval`. GET the operation to review its `input` and `inputHash`, then an independent reviewer with `ads.read` and `ads.approve` calls POST `/advertisers/{advertiserId}/operations/{operationId}/approve` with `{ "inputHash": "the-exact-returned-hash" }`. The author cannot approve their own request. Reviewer permissions are checked again by the worker.

An `uncertain` creation may have succeeded externally. POST `/advertisers/{advertiserId}/operations/{operationId}/retry` recovers **campaign.create, ad.create and audience uploads only**, within 23 hours of the original request. It reuses the identical saved payload and original provider idempotency key. Requires `ads.read`, `ads.write` and `ads.spend`. Do not create a new operation with a new key to retry it. After the recovery window, or for other uncertain mutations, inspect the platform and reconcile before taking further action.

Large report reads checkpoint completed pages before retrying rate limits. An incomplete nested ad tree produces REPORT_INCOMPLETE; it is never presented as a complete report.


## Connected TV campaigns, audiences and performance

Plan, launch and measure streaming (connected TV) campaigns for a business: apps, channels and live sports on TVs, tablets and phones. Campaigns are bought in US dollars and run in the United States.

Base: **https://usecloudconnect.com/api/v1/accounts/{accountId}/ctv**. Every path below is relative to this base.

Connected TV is enabled per platform. Your platform administrator assigns each business its advertisers and sets its monthly budget, so a business with no assigned advertiser has nothing to manage yet.

### Scopes

| Scope | Allows |
|---|---|
| `ads.read` | Read advertisers, campaigns, strategies, creatives, audiences, change requests, the budget and targeting lists |
| `ads.write` | Create and edit drafts, pause, duplicate, delete, manage creatives and audiences |
| `ads.spend` | Publish a campaign or resume delivery, which starts spend (also needs `ads.write`) |
| `ads.approve` | Approve or decline a spend change when the business requires approval |
| `ads.reports` | Stats and custom reports (also needs `ads.read`) |
| `media.read` | Create creatives from uploaded media |
| `contacts.read` | Upload people to an audience |

Existing keys do not gain these scopes automatically. Edit the integration under **API & integrations**, select them and save.

### Concepts

- **Advertiser:** the brand a campaign runs for. Advertisers are assigned to a business by the platform administrator. When advertiser creation is enabled, `POST /advertisers` requests a new one.
- **Campaign:** the goal (`AWARENESS`, `TRAFFIC`, `LEADS`, `SALES`, `RETARGETING`, `INSTALL`, `ABM`) and the optimization target, for example CPM at $15.
  - Every campaign starts as a `DRAFT`, and a draft never spends.
  - Publishing sends it to review and then delivery.
  - After publishing, a campaign can only be paused and resumed. Duplicate it to change anything else.
- **Strategy:** a campaign's budget (whole US dollars, `DAILY` or lifetime `GLOBAL`), schedule, targeting and creatives. A campaign can have several strategies. At least one strategy with a creative is required to publish.
- **Creative:** a video built from media you uploaded with `POST /accounts/{accountId}/media/uploads`. Each creative is processed and reviewed before it can deliver.
- **Audience:** a first-party list matched to households. Emails and phone numbers are normalized and hashed (SHA-256) before they leave the platform.

All IDs are CloudConnect UUIDs. Money is reported in US **cents**, except strategy `budget` inputs, which are whole dollars.

### Status values

| Item | Field | Values |
|---|---|---|
| Campaign | `status` | `DRAFT`, `PUBLISHED`, `ARCHIVED`, `deleted` |
| Campaign | `state` (delivery) | `PENDING_REVIEW`, `UPCOMING`, `DELIVERING`, `PAUSED`, `COMPLETED`, `INACTIVE`, `BLOCKED`, `PAYMENT_ISSUE`, `ARCHIVED` |
| Strategy | `state` (review) | `PENDING_REVIEW`, `AUTHORIZED`, `BLOCKED`; `active` is true or false |
| Creative | `approvalStatus` | `PROCESSING`, `PENDING_REVIEW`, `AUTHORIZED`, `BLOCKED` |
| Audience upload | `lastSync.state` | `BUILDING`, `UPDATING`, `READY`, `FAILED`, `CANCELLED`, `EXPIRED` |
| Change request | `status` | `awaiting_approval`, `queued`, `running`, `succeeded`, `failed`, `uncertain`, `rejected` |

State is refreshed about every 5 minutes, and sooner right after a change you made.

### Quick start

```bash
KEY="cc_live_..."; ACCOUNT="11111111-1111-4111-8111-111111111111"
API="https://usecloudconnect.com/api/v1/accounts/$ACCOUNT/ctv"

# 1. Find the assigned advertiser
curl -s "$API/advertisers" -H "Authorization: Bearer $KEY"

# 2. Create a draft campaign (returns 202 with a change request)
curl -s -X POST "$API/campaigns" -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" -H "Idempotency-Key: fall-campaign-1" \
  -d '{"advertiserId":"ADVERTISER_UUID","name":"Fall awareness campaign","goal":"AWARENESS","optimizationGoal":{"type":"CPM","value":15}}'

# 3. Poll the request until it succeeds; result.objectId is the campaign ID
curl -s "$API/requests/REQUEST_UUID" -H "Authorization: Bearer $KEY"

# 4. Upload a video (see Media uploads), then create a creative from it
curl -s -X POST "$API/creatives" -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" -H "Idempotency-Key: fall-video-1" \
  -d '{"advertiserId":"ADVERTISER_UUID","name":"Fall :30","mediaId":"MEDIA_UUID"}'

# 5. Add a strategy with budget, schedule, targeting and the creative
curl -s -X POST "$API/campaigns/CAMPAIGN_UUID/strategies" -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" -H "Idempotency-Key: fall-strategy-1" \
  -d '{"name":"Denver prime time","budget":50,"budgetType":"DAILY","startsAt":"2026-10-15","endsAt":"2026-11-15",
       "targeting":{"geo":{"metroCodes":{"include":["METRO_ID"]}},"devices":["TV"],"dayparting":{"preset":"PRIMETIME"}},
       "creativeIds":["CREATIVE_UUID"]}'

# 6. Publish (needs ads.spend and room in the monthly budget)
curl -s "$API/campaigns/CAMPAIGN_UUID" -H "Authorization: Bearer $KEY"   # read the current version
curl -s -X POST "$API/campaigns/CAMPAIGN_UUID/publish" -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" -H "Idempotency-Key: fall-publish-1" -d '{"version":3}'

# 7. Read performance
curl -s "$API/stats?from=2026-10-15&to=2026-10-31&level=campaign" -H "Authorization: Bearer $KEY"
```

### How changes run

Every create, edit, publish, pause, resume, duplicate or delete is queued and returns **202** with a change request:

```json
{ "id": "REQUEST_UUID", "action": "campaign.create", "status": "queued", "objectId": null,
  "inputHash": "…", "result": null, "error": null, "createdAt": "…", "updatedAt": "…" }
```

- **Follow the outcome:** poll `GET /requests/{requestId}` until `status` is `succeeded` (`result.objectId` is the new or changed item), `failed` (`error.code`, `error.message`; validation failures add `result.fields`), or `uncertain`. Webhook endpoints of the integration that made the change also receive the outcome (see below).
- **Idempotency:** send an `Idempotency-Key` header of 8–200 characters on every change. Repeating a key returns the same request. Reusing a key with a different body returns `409 IDEMPOTENCY_CONFLICT`. Keys are scoped to your integration and business.
- **Versions:** edits and actions carry the item's current `version`, read from GET. A stale version returns `409 VERSION_CONFLICT`. Delete passes it as `?version=N`.
- **One change per item:** while a change to an item is awaiting approval, queued, running or uncertain, a new one returns `409 CTV_OPERATION_PENDING`. Adding a strategy counts as a change to its campaign.
- **Uncertain:** the change may have been applied. **Do not resubmit it.** The next refresh settles it. A create that is found becomes `succeeded` with `result.reconciled: true`. A create that is not found within an hour becomes `failed` with `CTV_NOT_CREATED`, and it is then safe to submit again.
- **Busy upstream:** when the media platform is busy, queued changes wait and retry automatically. Reads can return `429`; retry after the `Retry-After` interval.

The action names are `advertiser.create`, `campaign.create`, `campaign.update`, `campaign.delete`, `campaign.publish`, `campaign.pause`, `campaign.activate`, `campaign.duplicate`, `strategy.create`, `strategy.update`, `strategy.delete`, `strategy.pause`, `strategy.activate`, `strategy.duplicate`, `strategy.creatives`, `creative.create`, `creative.delete`, `audience.create`, `audience.delete`, `audience.members`.

### Spend controls

- **Monthly budget:** each business has a monthly connected TV budget, set by its parent Agency or Group administrator or the platform administrator. Read it with `GET /budget`:

  ```json
  { "monthlyCapCents": 500000, "monthToDateCents": 120000, "committedCents": 310000, "remainingCents": 70000, "overCommitted": false }
  ```

  Publishing, resuming a campaign or strategy, and editing or adding a strategy on a published campaign are all checked against it. The check adds settled spend this month to every live strategy's remaining commitment for the rest of the month:
  - A daily budget counts every remaining day, including today.
  - A lifetime budget counts its unspent balance.

  If the total would exceed the budget, the change is refused with `409 CTV_BUDGET_EXCEEDED`. With no budget set, it is refused with `409 CTV_BUDGET_REQUIRED`. The check runs when you submit and again just before the change is applied.
- **Approvals:** if the business requires approval, spend changes are created as `awaiting_approval`. A different person or integration owner with `ads.approve` reviews the request's `input`, then calls `POST /requests/{requestId}/approve` with `{"inputHash":"…"}`. `POST /requests/{requestId}/reject` declines it. The author cannot approve their own change.
- **Delivery holds:** a campaign state of `BLOCKED` (policy review) or `PAYMENT_ISSUE` needs action from your platform administrator.

### Endpoints

| Method | Path | Scope | Body or query → result |
|---|---|---|---|
| GET | `/advertisers` | ads.read | → `{data:[Advertiser]}` |
| GET | `/advertisers/{advertiserId}` | ads.read | → Advertiser |
| POST | `/advertisers` | ads.write | `{name, url, industry}` → 202 request; only where advertiser creation is enabled |
| GET | `/campaigns` | ads.read | `?advertiserId&status&cursor&limit` → `{data:[Campaign], nextCursor}` |
| POST | `/campaigns` | ads.write | campaign.create body → 202 request |
| GET | `/campaigns/{campaignId}` | ads.read | → Campaign with `strategies` |
| PATCH | `/campaigns/{campaignId}` | ads.write | `{version, name?, goal?, optimizationGoal?, attributionWindow?}`; drafts only |
| DELETE | `/campaigns/{campaignId}?version=N` | ads.write | Drafts only; also removes their strategies |
| POST | `/campaigns/{campaignId}/publish` | ads.spend | `{version}`; draft with a strategy and a creative |
| POST | `/campaigns/{campaignId}/pause` | ads.write | `{version}`; published campaigns |
| POST | `/campaigns/{campaignId}/activate` | ads.spend | `{version}`; resume a paused published campaign |
| POST | `/campaigns/{campaignId}/duplicate` | ads.write | `{version}` → new draft with copied strategies |
| GET | `/campaigns/{campaignId}/strategies` | ads.read | → `{data:[Strategy], nextCursor}` |
| POST | `/campaigns/{campaignId}/strategies` | ads.write | strategy.create body → 202 request |
| GET | `/strategies/{strategyId}` | ads.read | → Strategy |
| PATCH | `/strategies/{strategyId}` | ads.write | `{version, …fields to change}` |
| DELETE | `/strategies/{strategyId}?version=N` | ads.write | Strategies of draft campaigns |
| POST | `/strategies/{strategyId}/pause` | ads.write | `{version}` |
| POST | `/strategies/{strategyId}/activate` | ads.spend | `{version}` |
| POST | `/strategies/{strategyId}/duplicate` | ads.write | `{version}` |
| PUT | `/strategies/{strategyId}/creatives` | ads.write | `{version, creativeIds}` replaces the whole set |
| GET | `/creatives` | ads.read | `?advertiserId&cursor&limit` → `{data:[Creative], nextCursor}` |
| POST | `/creatives` | ads.write, media.read | `{advertiserId, name, mediaId}` → 202 request |
| GET | `/creatives/{creativeId}` | ads.read | → Creative |
| DELETE | `/creatives/{creativeId}?version=N` | ads.write | Not while a published campaign uses it |
| GET | `/audiences` | ads.read | `?advertiserId&cursor&limit` → `{data:[Audience], nextCursor}` |
| POST | `/audiences` | ads.write | `{advertiserId, name}` → 202 request |
| GET | `/audiences/{audienceId}` | ads.read | → Audience with match stats |
| DELETE | `/audiences/{audienceId}?version=N` | ads.write | Not while a campaign targets it |
| POST | `/audiences/{audienceId}/members` | ads.write, contacts.read | `{version, members, lawfulBasisConfirmed:true}`, up to 10,000 people per call |
| GET | `/targeting/{list}` | ads.read | See Targeting |
| GET | `/stats` | ads.read, ads.reports | See Performance |
| POST | `/reports` | ads.read, ads.reports | Custom report → 202 Report |
| GET | `/reports/{reportId}` | ads.reports | → Report with `rows` when ready |
| GET | `/requests` | ads.read | `?status` → 100 most recent change requests |
| GET | `/requests/{requestId}` | ads.read | → change request |
| POST | `/requests/{requestId}/approve` | ads.approve | `{inputHash}` |
| POST | `/requests/{requestId}/reject` | ads.approve | `{}` |
| GET | `/budget` | ads.read | → budget summary |

Lists are newest first. Follow `nextCursor` until it is null; `limit` is 1–100 and defaults to 50.

### Response shapes

```json
// Advertiser
{ "id": "…", "name": "Acme Outdoors", "url": "https://acme.example", "industry": "RETAIL", "syncedAt": "…", "statsSyncedAt": "…", "createdAt": "…" }
// Campaign (GET /campaigns/{id} adds "strategies": [Strategy])
{ "id": "…", "advertiserId": "…", "name": "Fall awareness campaign", "status": "PUBLISHED", "state": "DELIVERING",
  "version": 4, "goal": "AWARENESS", "optimizationGoal": { "type": "CPM", "value": 15 }, "attributionWindowHours": 168,
  "active": true, "startDate": "2026-10-15", "endDate": "2026-11-15", "budgetCents": 155000, "publishedAt": "…", "syncedAt": "…" }
// Strategy
{ "id": "…", "advertiserId": "…", "campaignId": "…", "name": "Denver prime time", "status": "ACTIVE", "state": "AUTHORIZED",
  "version": 2, "budgetCents": 5000, "budgetType": "DAILY", "startsAt": "…", "endsAt": "…", "active": true,
  "targeting": { "devices": ["TV"] }, "creativeIds": ["…"], "syncedAt": "…" }
// Creative
{ "id": "…", "advertiserId": "…", "name": "Fall :30", "status": "ACTIVE", "state": "AUTHORIZED", "version": 1,
  "type": "VIDEO", "approvalStatus": "AUTHORIZED", "mediaId": "…", "syncedAt": "…" }
// Audience
{ "id": "…", "advertiserId": "…", "name": "Past buyers", "status": "ACTIVE", "version": 3,
  "stats": { "matchedReach": 41000, "profiles": 52000, "identifiers": 60000, "updatedAt": "…" },
  "lastSync": { "state": "READY", "records": 60000, "matchedCount": 52000, "audienceSize": 41000, "failure": null } }
```

A strategy's `targeting` and `creativeIds` show what was set through this API. They are `null` and `[]` for strategies copied by duplication or created elsewhere.

### Targeting

```json
{
  "geo": {
    "regions":    { "include": ["…"], "exclude": [] },
    "metroCodes": { "include": ["…"] },
    "cities":     { "include": ["…"] },
    "zipCodes":   { "include": ["…"] }
  },
  "inventory": { "type": "APPS_AND_CHANNELS", "include": ["CHANNEL_ID"], "exclude": [] },
  "devices": ["TV", "TABLET", "MOBILE"],
  "ageRanges": ["RANGE_25_34", "RANGE_35_44"],
  "genders": ["FEMALE"],
  "interests": ["INTEREST_ID"],
  "audiences": { "include": ["AUDIENCE_UUID"], "exclude": [] },
  "dayparting": { "preset": "PRIMETIME" }
}
```

- **Omitting targeting:** leave out any key to target broadly. With no `geo`, the strategy runs nationwide in the US.
- **Inventory:** `inventory.type` is `APPS_AND_CHANNELS` or `LIVE_SPORTS`.
- **Dayparting presets:** `ANY_TIME_ANY_DAY`, `PRIMETIME`, `AFTER_WORK`, `WORK_HOURS`, `SLEEPING_TIME`, `WEEKEND`, `WORK_DAYS`, `CUSTOM`. With `CUSTOM`, pass `customRanges: [{start, end}]`, in minutes from Monday 00:00, from 0 to 10079. For example, Monday to Friday 6–10pm is `[{"start":1080,"end":1320},{"start":2520,"end":2760},…]`.
- **Audiences:** use local audience UUIDs from the same advertiser.

Look up option IDs with `GET /targeting/{list}`:

| List | Query | Returns |
|---|---|---|
| `channels` | `type=APPS_AND_CHANNELS\|LIVE_SPORTS`, `search`, `category` | `{id, name, description, type, categories, deprecated}` |
| `devices`, `ages`, `genders`, `demographics` | none | `{id, name}` |
| `interests` | `search` | `{id, name, parent, size}` |
| `geo` | `type=REGION\|METRO\|CITY\|ZIPCODE` and/or `search` (2+ characters) | `{id, label, reach, type}`: use `id` in the matching `geo` key |

All lists accept `limit` (1–100) and `offset`, and return `{data, total, limit, offset}`. Catalogs are cached for a day and searches for an hour.

### Performance

`GET /stats?from=YYYY-MM-DD&to=YYYY-MM-DD` reads settled daily delivery. Both dates are inclusive, covering up to 400 days. It refreshes hourly and is fast enough for dashboards.

- `level`: `account`, `advertiser`, `campaign` (default) or `strategy`.
- `granularity`: `day` (default) or `total`.
- `advertiserId`, `campaignId`: optional filters.

```json
{ "level": "campaign", "currency": "USD", "data": [
  { "date": "2026-10-16", "advertiserId": "…", "campaignId": "…", "spendCents": 4980, "impressions": 2210,
    "households": 1630, "completedViews": 2050, "cpmCents": 2253, "completionRate": 0.927 } ] }
```

Spend becomes final 12–24 hours after each day ends, so the latest day can rise. Stats start the first time an advertiser is assigned, with up to 45 days of history.

For other metrics or breakdowns, use `POST /reports`. It covers up to 45 days, and up to 5 reports can run at once per business:

```json
{ "from": "2026-10-01", "to": "2026-10-31", "metrics": ["spend","impressions","completed_views","view_through_rate"],
  "dimensions": ["impression_date","campaign_id","channel_name"], "granularity": "DAY", "timezone": "America/New_York",
  "advertiserIds": ["…"], "campaignIds": ["…"] }
```

The request returns a Report with `status` `pending`. Poll `GET /reports/{reportId}` every 15 seconds or more; reports usually take a few minutes. When done, `status` is `ready` with `rows`, or `failed`. The `ctv.report.ready` webhook also fires. Row keys are camelCase, and the `advertiserId`, `campaignId`, `strategyId` and `creativeId` values are CloudConnect UUIDs. Spend is in US dollars in report rows.

- **Metrics:** `spend`, `impressions`, `households`, `frequency`, `cpm`, `completed_views`, `cost_per_completed_view`, `view_through_rate`, `number_of_page_views`, `cost_per_page_view`, `number_of_sessions`, `cost_per_session`, `number_of_leads`, `cost_per_lead`, `installs`, `cost_per_install`, `number_of_purchases`, `cost_per_purchase`, `amount_of_purchases`, `number_of_signups`, `cost_per_signup`, `roas`.
- **Dimensions:** `impression_date`, `campaign_id`, `campaign_name`, `strategy_id`, `strategy_name`, `creative_id`, `creative_name`, `screen`, `channel_name`, `content_name`, `geo_region`, `geo_metro`, `geo_city`, `geo_zip`, `segment_ages`, `segment_genders`, `segment_interests`, `custom_audiences`.
- **Granularity:** `HOUR`, `DAY`, `WEEK` or `MONTH`.
- **Timezones:** `UTC`, `America/New_York`, `America/Denver`, `America/Los_Angeles`, `America/Phoenix` or `Europe/London`.

### Audiences

1. `POST /audiences` with `{advertiserId, name}`, then wait for the request to succeed.
2. `POST /audiences/{audienceId}/members` with up to 10,000 people per call:

```json
{ "version": 1, "lawfulBasisConfirmed": true,
  "members": [ { "email": "jane@example.com" }, { "phone": "+15551234567" },
               { "hashedEmail": "<sha256 hex of the lowercased, trimmed email>" }, { "externalId": "crm-123" } ] }
```

- **What you must confirm:** `lawfulBasisConfirmed` must be `true`, which confirms you may use these details for advertising.
- **Hashing:** plain emails and phones (E.164) are lowercased, trimmed and hashed with SHA-256 before upload. Plain values are held encrypted only until the upload runs, and are never stored after that.
- **Hash format:** a wrong hash format doesn't cause an error; it simply never matches.
- **Upload progress:** shows in the audience's `lastSync`. Match stats update after the upload is processed, which can take a while for large lists.
- **Targeting:** use an audience in a strategy with `targeting.audiences.include` or `targeting.audiences.exclude`.

### Creatives

- **Upload first:** add the video with the media API (`POST /accounts/{accountId}/media/uploads`, then `…/complete`). Use a high-quality MP4 or MOV; 15- or 30-second spots at 1920×1080 are the usual TV formats.
- **Create the creative:** `POST /creatives` with the ready `mediaId`. The request stays `queued` while the video is processed and succeeds once it is stored.
- **Review:** after that, `approvalStatus` moves from `PENDING_REVIEW` to `AUTHORIZED` or `BLOCKED`, and the `ctv.creative.approval_changed` webhook fires.
- **Attaching:** attach creatives to strategies with `creativeIds` or `PUT /strategies/{strategyId}/creatives`.

### Webhooks

Register endpoints with `/webhook-endpoints` (see Outgoing webhooks). Connected TV events go to the endpoints of the integration that made the change or created the item:

- `ctv.request.succeeded`, `ctv.request.failed` and `ctv.request.uncertain`, with `requestId`, `action`, `objectId` and `error` (`{code, message}` or null).
- `ctv.campaign.state_changed`, with `objectId`, `status`, `state` and `previousState`. Examples: review passed, delivering, paused, completed, blocked, payment issue.
- `ctv.creative.approval_changed`, with `objectId`, `status`, `state` and `previousState`.
- `ctv.report.ready`, with `reportId`.

Events can repeat or arrive out of order. Read the item for its current state.

### Errors

Errors use the standard envelope `{ "error": { "code", "message", "fields?" }, "requestId" }`. Codes include:

| Code | Status | Meaning |
|---|---|---|
| `VALIDATION_ERROR` | 422 | Body or query invalid; see `fields` |
| `NOT_FOUND` | 404 | Not in this business, or deleted |
| `SCOPE_REQUIRED` | 403 | The key lacks a needed scope |
| `FEATURE_DISABLED` | 409 | Connected TV is not enabled on this platform |
| `IDEMPOTENCY_CONFLICT` | 409 | Key reused with a different body |
| `VERSION_CONFLICT` | 409 | Item changed; read it again |
| `CTV_OPERATION_PENDING` | 409 | Another change to this item is in progress |
| `CTV_CAMPAIGN_PUBLISHED` | 409 | Published campaigns only pause and resume; duplicate to change |
| `CTV_NOT_PUBLISHED` | 409 | Pause and resume need a published campaign |
| `CTV_STRATEGY_REQUIRED`, `CTV_CREATIVE_REQUIRED` | 422 | Publish needs a strategy with a creative |
| `CTV_BUDGET_REQUIRED`, `CTV_BUDGET_EXCEEDED` | 409 | See Spend controls |
| `INDEPENDENT_REVIEW_REQUIRED` | 403 | The author cannot approve their own change |
| `CTV_REVIEW_UNAVAILABLE` | 409 | The request is not awaiting review |
| `MEDIA_NOT_READY` | 422 | Choose a ready video from this business |
| `CTV_REPORTS_BUSY` | 429 | Wait for running reports |
| `INTEGRATION_RATE_LIMITED` | 429 | Retry after `Retry-After` |
| `CTV_UNAVAILABLE`, `CTV_RECONNECT_REQUIRED` | 503 | The platform's connection needs attention; contact your administrator |

In change requests, `error.code` can also be `CTV_VALIDATION` (settings refused; see `result.fields`), `CTV_CONFLICT`, `CTV_PERMISSION_MISSING`, `CTV_UPLOAD_FAILED`, `CTV_UPLOAD_EXPIRED`, `CTV_NOT_CREATED`, `APPROVAL_REQUIRED`, `PERMISSION_REVOKED` or `STALE_OPERATION`.

### Limits

- United States delivery only. Campaign names are 10–100 characters, strategy names 3–100, creative names 1–150.
- Optimization values are at least $1 with at most 2 decimals. Strategy budgets are whole dollars of at least $1.
- Video creatives only. Up to 500 creatives per strategy and 10,000 audience members per upload call.
- Custom reports cover at most 45 days; stats ranges cover at most 400 days.

### MCP tools

| Tool | Scope | Purpose |
|---|---|---|
| list_ctv | ads.read | List connected TV advertisers, campaigns, creatives, audiences, change requests, or the monthly budget for a business. Returns local IDs to use with other ctv tools. |
| get_ctv | ads.read | Read one connected TV item: a campaign (with strategies), strategy, creative (review status), audience (match stats), change request, or report. |
| create_ctv_campaign | ads.write | Create a draft connected TV campaign for an assigned advertiser (US only). Drafts never spend. Add strategies and creatives, then publish. |
| add_ctv_strategy | ads.write | Add a strategy to a campaign: whole-dollar budget (DAILY or GLOBAL), schedule, targeting (geo IDs, channels, devices, ages, genders, interests, audience IDs, dayparting) and creative IDs. Use search_ctv_targeting for option IDs. |
| update_ctv | ads.write | Edit a draft campaign or a strategy (budget, schedule, targeting, creatives), or delete a draft campaign, strategy, creative or audience. Published campaigns can only be paused or resumed. |
| control_ctv_delivery | ads.write | Publish, pause, resume (activate) or duplicate a campaign, or pause/resume/duplicate a strategy. Publishing and resuming start spend: get explicit user intent; they are checked against the monthly budget and may need independent approval. |
| create_ctv_asset | ads.write | Create a video creative from ready uploaded media, an audience, or (when enabled) a new advertiser. |
| search_ctv_targeting | ads.read | Look up connected TV targeting options: channels, devices, ages, genders, demographics, interests or geo (regions, metros, cities, zip codes). |
| get_ctv_stats | ads.read, ads.reports | Daily spend, impressions, households and completed views by account, advertiser, campaign or strategy. Spend settles 12–24 hours after each day. |
| create_ctv_report | ads.read, ads.reports | Request a custom connected TV report (metrics × dimensions, up to 45 days). Poll get_ctv kind=report for rows. |
| review_ctv_request | ads.approve | Independently approve or decline a connected TV spend change awaiting review. Read the request and its inputHash first; its author cannot approve it. |

The tools call the routes above, so scopes, business boundaries, idempotency, budget checks and approvals are identical to REST.

### Input schemas

#### POST /campaigns

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "advertiserId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "name": {
      "type": "string",
      "minLength": 10,
      "maxLength": 100
    },
    "goal": {
      "type": "string",
      "enum": [
        "AWARENESS",
        "INSTALL",
        "TRAFFIC",
        "RETARGETING",
        "SALES",
        "LEADS",
        "ABM"
      ]
    },
    "optimizationGoal": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "COST_PER_SESSION",
            "COST_PER_LEAD",
            "COST_PER_CALL",
            "COST_PER_PURCHASE",
            "ROAS",
            "CPM",
            "COST_PER_INSTALL",
            "COST_PER_UNIQUE_HOUSEHOLD",
            "COST_PER_UNIQUE_COMPANY"
          ]
        },
        "value": {
          "type": "number",
          "minimum": 1
        }
      },
      "required": [
        "type",
        "value"
      ],
      "additionalProperties": false
    },
    "attributionWindow": {
      "type": "string",
      "enum": [
        "TWELVE_HOURS",
        "ONE_DAY",
        "FORTY_EIGHT_HOURS",
        "SEVENTY_TWO_HOURS",
        "SEVEN_DAYS",
        "THIRTY_DAYS"
      ]
    },
    "active": {
      "default": true,
      "type": "boolean"
    }
  },
  "required": [
    "advertiserId",
    "name",
    "goal",
    "optimizationGoal"
  ],
  "additionalProperties": false
}
```

#### PATCH /campaigns/{campaignId}

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "name": {
      "type": "string",
      "minLength": 10,
      "maxLength": 100
    },
    "goal": {
      "type": "string",
      "enum": [
        "AWARENESS",
        "INSTALL",
        "TRAFFIC",
        "RETARGETING",
        "SALES",
        "LEADS",
        "ABM"
      ]
    },
    "optimizationGoal": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "COST_PER_SESSION",
            "COST_PER_LEAD",
            "COST_PER_CALL",
            "COST_PER_PURCHASE",
            "ROAS",
            "CPM",
            "COST_PER_INSTALL",
            "COST_PER_UNIQUE_HOUSEHOLD",
            "COST_PER_UNIQUE_COMPANY"
          ]
        },
        "value": {
          "type": "number",
          "minimum": 1
        }
      },
      "required": [
        "type",
        "value"
      ],
      "additionalProperties": false
    },
    "attributionWindow": {
      "type": "string",
      "enum": [
        "TWELVE_HOURS",
        "ONE_DAY",
        "FORTY_EIGHT_HOURS",
        "SEVENTY_TWO_HOURS",
        "SEVEN_DAYS",
        "THIRTY_DAYS"
      ]
    }
  },
  "required": [
    "version"
  ],
  "additionalProperties": false
}
```

#### POST /campaigns/{campaignId}/strategies

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 3,
      "maxLength": 100
    },
    "budget": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000000
    },
    "budgetType": {
      "type": "string",
      "enum": [
        "DAILY",
        "GLOBAL"
      ]
    },
    "startsAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
        }
      ]
    },
    "endsAt": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "active": {
      "default": true,
      "type": "boolean"
    },
    "targeting": {
      "type": "object",
      "properties": {
        "geo": {
          "type": "object",
          "properties": {
            "regions": {
              "type": "object",
              "properties": {
                "include": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "exclude": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                }
              },
              "additionalProperties": false
            },
            "cities": {
              "type": "object",
              "properties": {
                "include": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "exclude": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                }
              },
              "additionalProperties": false
            },
            "metroCodes": {
              "type": "object",
              "properties": {
                "include": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "exclude": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                }
              },
              "additionalProperties": false
            },
            "zipCodes": {
              "type": "object",
              "properties": {
                "include": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "exclude": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inventory": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "APPS_AND_CHANNELS",
                "LIVE_SPORTS"
              ]
            },
            "include": {
              "default": [],
              "maxItems": 5000,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              }
            },
            "exclude": {
              "default": [],
              "maxItems": 5000,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              }
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false
        },
        "ageRanges": {
          "maxItems": 7,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "RANGE_18_20",
              "RANGE_21_24",
              "RANGE_25_34",
              "RANGE_35_44",
              "RANGE_45_54",
              "RANGE_55_64",
              "RANGE_65_MORE"
            ]
          }
        },
        "genders": {
          "maxItems": 2,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "MALE",
              "FEMALE"
            ]
          }
        },
        "devices": {
          "maxItems": 3,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "TV",
              "TABLET",
              "MOBILE"
            ]
          }
        },
        "interests": {
          "maxItems": 500,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "audiences": {
          "type": "object",
          "properties": {
            "include": {
              "default": [],
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            },
            "exclude": {
              "default": [],
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            }
          },
          "additionalProperties": false
        },
        "dayparting": {
          "type": "object",
          "properties": {
            "preset": {
              "type": "string",
              "enum": [
                "CUSTOM",
                "ANY_TIME_ANY_DAY",
                "PRIMETIME",
                "AFTER_WORK",
                "WORK_HOURS",
                "SLEEPING_TIME",
                "WEEKEND",
                "WORK_DAYS"
              ]
            },
            "customRanges": {
              "maxItems": 200,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "start": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10079
                  },
                  "end": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10079
                  }
                },
                "required": [
                  "start",
                  "end"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "preset"
          ],
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "creativeIds": {
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    }
  },
  "required": [
    "name",
    "budget",
    "budgetType",
    "startsAt"
  ],
  "additionalProperties": false
}
```

#### PATCH /strategies/{strategyId}

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 3,
      "maxLength": 100
    },
    "budget": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10000000
    },
    "budgetType": {
      "type": "string",
      "enum": [
        "DAILY",
        "GLOBAL"
      ]
    },
    "startsAt": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
        }
      ]
    },
    "endsAt": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "targeting": {
      "type": "object",
      "properties": {
        "geo": {
          "type": "object",
          "properties": {
            "regions": {
              "type": "object",
              "properties": {
                "include": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "exclude": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                }
              },
              "additionalProperties": false
            },
            "cities": {
              "type": "object",
              "properties": {
                "include": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "exclude": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                }
              },
              "additionalProperties": false
            },
            "metroCodes": {
              "type": "object",
              "properties": {
                "include": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "exclude": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                }
              },
              "additionalProperties": false
            },
            "zipCodes": {
              "type": "object",
              "properties": {
                "include": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "exclude": {
                  "default": [],
                  "maxItems": 5000,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "inventory": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "APPS_AND_CHANNELS",
                "LIVE_SPORTS"
              ]
            },
            "include": {
              "default": [],
              "maxItems": 5000,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              }
            },
            "exclude": {
              "default": [],
              "maxItems": 5000,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              }
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false
        },
        "ageRanges": {
          "maxItems": 7,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "RANGE_18_20",
              "RANGE_21_24",
              "RANGE_25_34",
              "RANGE_35_44",
              "RANGE_45_54",
              "RANGE_55_64",
              "RANGE_65_MORE"
            ]
          }
        },
        "genders": {
          "maxItems": 2,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "MALE",
              "FEMALE"
            ]
          }
        },
        "devices": {
          "maxItems": 3,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "TV",
              "TABLET",
              "MOBILE"
            ]
          }
        },
        "interests": {
          "maxItems": 500,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "audiences": {
          "type": "object",
          "properties": {
            "include": {
              "default": [],
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            },
            "exclude": {
              "default": [],
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            }
          },
          "additionalProperties": false
        },
        "dayparting": {
          "type": "object",
          "properties": {
            "preset": {
              "type": "string",
              "enum": [
                "CUSTOM",
                "ANY_TIME_ANY_DAY",
                "PRIMETIME",
                "AFTER_WORK",
                "WORK_HOURS",
                "SLEEPING_TIME",
                "WEEKEND",
                "WORK_DAYS"
              ]
            },
            "customRanges": {
              "maxItems": 200,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "start": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10079
                  },
                  "end": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10079
                  }
                },
                "required": [
                  "start",
                  "end"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "preset"
          ],
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "creativeIds": {
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "version"
  ],
  "additionalProperties": false
}
```

#### PUT /strategies/{strategyId}/creatives

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "creativeIds": {
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    }
  },
  "required": [
    "version",
    "creativeIds"
  ],
  "additionalProperties": false
}
```

#### POST …/publish, /pause, /activate, /duplicate

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "version"
  ],
  "additionalProperties": false
}
```

#### POST /creatives

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "advertiserId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 150
    },
    "mediaId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "advertiserId",
    "name",
    "mediaId"
  ],
  "additionalProperties": false
}
```

#### POST /audiences

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "advertiserId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "advertiserId",
    "name"
  ],
  "additionalProperties": false
}
```

#### POST /audiences/{audienceId}/members

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "members": {
      "minItems": 1,
      "maxItems": 10000,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "maxLength": 320,
            "format": "email",
            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "phone": {
            "type": "string",
            "pattern": "^\\+[1-9]\\d{6,14}$"
          },
          "hashedEmail": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "hashedPhone": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "externalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        },
        "additionalProperties": false
      }
    },
    "lawfulBasisConfirmed": {
      "type": "boolean",
      "const": true
    }
  },
  "required": [
    "version",
    "members",
    "lawfulBasisConfirmed"
  ],
  "additionalProperties": false
}
```

#### POST /advertisers

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "url": {
      "type": "string",
      "maxLength": 500,
      "format": "uri"
    },
    "industry": {
      "type": "string",
      "enum": [
        "AUTOMOTIVE",
        "EDUCATION",
        "FINANCIAL_SERVICES",
        "FOOD_DRINK",
        "FOOD_DRINK_WINE",
        "GAMING",
        "GAMING_GAMBLING",
        "HEALTH_FITNESS",
        "HEALTH_FITNESS_ALTERNATIVE",
        "HUNTING_SHOOTING",
        "LAW_LEGAL_PRACTICE",
        "MEDIA_ENTERTAINMENT",
        "OTHER",
        "POLITICS",
        "PROFESSIONAL_SERVICES",
        "REAL_ESTATE",
        "RELIGION_SPIRITUALITY",
        "RETAIL",
        "TECHNOLOGY_TELECOMMUNICATIONS",
        "TOBACCO_SMOKING",
        "TRAVEL_HOSPITALITY"
      ]
    }
  },
  "required": [
    "name",
    "url",
    "industry"
  ],
  "additionalProperties": false
}
```

#### POST /reports

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "advertiserIds": {
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    },
    "from": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "to": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "metrics": {
      "minItems": 1,
      "maxItems": 22,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "spend",
          "impressions",
          "households",
          "frequency",
          "cpm",
          "completed_views",
          "cost_per_completed_view",
          "view_through_rate",
          "number_of_page_views",
          "cost_per_page_view",
          "number_of_sessions",
          "cost_per_session",
          "number_of_leads",
          "cost_per_lead",
          "installs",
          "cost_per_install",
          "number_of_purchases",
          "cost_per_purchase",
          "amount_of_purchases",
          "number_of_signups",
          "cost_per_signup",
          "roas"
        ]
      }
    },
    "dimensions": {
      "default": [
        "impression_date"
      ],
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "impression_date",
          "campaign_id",
          "campaign_name",
          "strategy_id",
          "strategy_name",
          "creative_id",
          "creative_name",
          "screen",
          "channel_name",
          "content_name",
          "geo_region",
          "geo_metro",
          "geo_city",
          "geo_zip",
          "segment_ages",
          "segment_genders",
          "segment_interests",
          "custom_audiences"
        ]
      }
    },
    "granularity": {
      "default": "DAY",
      "type": "string",
      "enum": [
        "HOUR",
        "DAY",
        "WEEK",
        "MONTH"
      ]
    },
    "timezone": {
      "default": "UTC",
      "type": "string",
      "enum": [
        "UTC",
        "America/New_York",
        "America/Denver",
        "America/Los_Angeles",
        "America/Phoenix",
        "Europe/London"
      ]
    },
    "campaignIds": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    }
  },
  "required": [
    "from",
    "to",
    "metrics"
  ],
  "additionalProperties": false
}
```


## Channel operations: messaging, engagement, business profiles, telephony and more

These operations extend the API across every connected channel. They share one set of rules:

- **Business boundary.** Routes start with `/accounts/{accountId}`. Connection-specific routes take a local `connectionId` from GET /accounts/{accountId}/connections; advertising routes take a local `advertiserId`. Account and profile routing is always resolved by CloudConnect: requests containing `accountId`, `profileId` or `adAccountId` fields are rejected.
- **IDs you can use.** Other IDs in a path (a template, broadcast, queue, review…) must have been returned to this business by this API first, from a list or create call. Unknown or foreign IDs return 404.
- **Writes.** Every write needs an **Idempotency-Key** header (8–200 characters). Repeating the same key and body returns the first result without repeating the action. A different body with the same key returns 409 IDEMPOTENCY_CONFLICT. If the platform did not confirm a write, the response is 502 OUTCOME_UNCERTAIN: operations marked *retry-safe* can be retried with the same key; others must be checked before anything is sent again.
- **Charges.** Operations marked *charges* (SMS, calls, numbers, paid messages, verifications, some X actions) reserve allowance before the request and settle it at the platform's cost afterwards. Without enough allowance they return 409 ALLOWANCE_EXHAUSTED and nothing is sent. Rejected requests release the reservation.
- **Errors.** Platform rejections keep their HTTP status (400, 404, 409, 422) with a short reason. A paused feature returns 503 FEATURE_PAUSED.
- **Discovery.** GET https://usecloudconnect.com/api/v1/accounts/{accountId}/operations lists every operation with its scopes, input schemas and whether your credential may call it. Add `?family=whatsapp` to narrow it. MCP clients use `describe_operations` and one `manage_<family>` tool per family.

### Posting queues

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `list_posting_queues` | GET | `/queues` | posts.read | List posting queues and their weekly time slots. |
| `get_posting_queue` | GET | `/queues/{queueId}` | posts.read | Read one posting queue with its next slot times. |
| `create_posting_queue` | POST | `/queues` | posts.write | Create a posting queue. The first queue becomes the default. Write. |
| `update_posting_queue` | PUT | `/queues/{queueId}` | posts.write | Replace a queue’s slots, name, timezone or default status. Write, retry-safe. |
| `delete_posting_queue` | DELETE | `/queues/{queueId}` | posts.write | Delete one posting queue. Another queue becomes the default if needed. Write, retry-safe. |
| `preview_posting_queue` | GET | `/queues/{queueId}/preview` | posts.read | Preview upcoming slot times for a queue. |
| `get_next_queue_slot` | GET | `/queues/{queueId}/next-slot` | posts.read | Read the next free slot in a queue. |

**list_posting_queues:** Queues belong to the business’s primary publishing profile. Each queue is a weekly set of time slots in its own timezone.

**update_posting_queue:** reshuffleExisting=true reschedules posts already in this queue to the new slots.

### Comments, mentions, reviews and engagement

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `list_commented_posts` | GET | `/engagement/{connectionId}/posts` | inbox.read | List recent posts of a connection with their comment counts. Connections: facebook, instagram, threads, youtube, linkedin, reddit, bluesky, tiktok. |
| `list_post_comments` | GET | `/engagement/{connectionId}/posts/{postId}/comments` | inbox.read | List comments on a post, or replies to one comment. Connections: facebook, instagram, threads, youtube, linkedin, reddit, bluesky, tiktok. |
| `reply_to_post_comment` | POST | `/engagement/{connectionId}/posts/{postId}/comments` | inbox.write | Post a public comment on a post, or reply to one comment. Write. Connections: facebook, instagram, threads, youtube, linkedin, reddit, bluesky, tiktok. |
| `delete_post_comment` | DELETE | `/engagement/{connectionId}/posts/{postId}/comments/{commentId}` | inbox.write | Delete a comment on a post. Write, retry-safe. Connections: facebook, instagram, threads, youtube, linkedin, reddit, bluesky, tiktok. |
| `edit_reddit_comment` | PATCH | `/engagement/{connectionId}/posts/{postId}/comments/{commentId}` | inbox.write | Edit the text of a Reddit comment this connection posted. Write, retry-safe. Connections: reddit. |
| `hide_post_comment` | POST | `/engagement/{connectionId}/posts/{postId}/comments/{commentId}/hide` | inbox.write | Hide a comment so only its author and the page admins see it. Write, retry-safe. Connections: facebook, instagram, threads, tiktok. |
| `unhide_post_comment` | DELETE | `/engagement/{connectionId}/posts/{postId}/comments/{commentId}/hide` | inbox.write | Show a previously hidden comment again. Write, retry-safe. Connections: facebook, instagram, threads, tiktok. |
| `like_post_comment` | POST | `/engagement/{connectionId}/posts/{postId}/comments/{commentId}/like` | inbox.write | Like or react to a comment as this connection. Write, retry-safe. Connections: facebook, instagram, linkedin, reddit, bluesky. |
| `unlike_post_comment` | DELETE | `/engagement/{connectionId}/posts/{postId}/comments/{commentId}/like` | inbox.write | Remove this connection’s like from a comment. Write, retry-safe. Connections: facebook, instagram, linkedin, reddit, bluesky. |
| `send_comment_private_reply` | POST | `/engagement/{connectionId}/posts/{postId}/comments/{commentId}/private-reply` | inbox.write, messaging.send | Send one private message to the author of a comment. Write. Charges messages. Connections: facebook, instagram. |
| `moderate_youtube_comment` | POST | `/engagement/{connectionId}/posts/{postId}/comments/{commentId}/moderation` | inbox.write | Approve, reject or hold a YouTube comment for review. Write, retry-safe. Connections: youtube. |
| `like_social_post` | POST | `/engagement/{connectionId}/posts/{postId}/like` | inbox.write | Like or react to a post as this connection. Write, retry-safe. Connections: linkedin, facebook, youtube, bluesky, instagram. |
| `unlike_social_post` | DELETE | `/engagement/{connectionId}/posts/{postId}/like` | inbox.write | Remove this connection’s like from a post. Write, retry-safe. Connections: linkedin, facebook, youtube, bluesky, instagram. |
| `list_linkedin_mentions` | GET | `/engagement/{connectionId}/mentions` | inbox.read | List mentions of a LinkedIn organization connection. Connections: linkedin. |
| `reply_to_instagram_mention` | POST | `/engagement/{connectionId}/mentions/replies` | inbox.write | Reply to an Instagram mention of this account. Write. Connections: instagram. |
| `resolve_linkedin_mention` | GET | `/engagement/{connectionId}/linkedin/mention-lookup` | posts.read | Turn a LinkedIn profile or company URL into a mention for post text. Connections: linkedin. |
| `list_reviews` | GET | `/engagement/{connectionId}/reviews` | inbox.read | List reviews of a Facebook Page or Google Business Profile connection. Connections: facebook, googlebusiness. |
| `reply_to_review` | POST | `/engagement/{connectionId}/reviews/{reviewId}/reply` | inbox.write | Publish the business’s public reply to a review. Write. Connections: facebook, googlebusiness. |
| `delete_review_reply` | DELETE | `/engagement/{connectionId}/reviews/{reviewId}/reply` | inbox.write | Delete the business’s reply to a Google review. Write, retry-safe. Connections: googlebusiness. |
| `list_comment_automations` | GET | `/engagement/{connectionId}/comment-automations` | workflows.read | List comment-to-message automations of an Instagram or Facebook connection. Connections: instagram, facebook. |
| `create_comment_automation` | POST | `/engagement/{connectionId}/comment-automations` | workflows.write, workflows.activate, messaging.send | Send an automatic private message to people who comment a keyword. Write. Connections: instagram, facebook. |
| `get_comment_automation` | GET | `/engagement/{connectionId}/comment-automations/{automationId}` | workflows.read | Read one comment automation with its stats and recent triggers. Connections: instagram, facebook. |
| `update_comment_automation` | PATCH | `/engagement/{connectionId}/comment-automations/{automationId}` | workflows.write | Change an automation’s keywords, messages, buttons or audience. Write, retry-safe. Connections: instagram, facebook. |
| `set_comment_automation_status` | POST | `/engagement/{connectionId}/comment-automations/{automationId}/status` | workflows.activate, messaging.send | Pause or resume a comment automation. Write, retry-safe. Connections: instagram, facebook. |
| `delete_comment_automation` | DELETE | `/engagement/{connectionId}/comment-automations/{automationId}` | workflows.write | Delete a comment automation and its trigger history. Write, retry-safe. Connections: instagram, facebook. |
| `list_comment_automation_logs` | GET | `/engagement/{connectionId}/comment-automations/{automationId}/logs` | workflows.read | List the comments that triggered an automation and what was sent. Connections: instagram, facebook. |
| `get_instagram_follow_status` | GET | `/engagement/{connectionId}/follow-status/{userId}` | inbox.read | Check whether an Instagram user follows this account. Connections: instagram. |
| `vote_on_reddit` | POST | `/engagement/{connectionId}/reddit/votes` | inbox.write | Upvote, downvote or clear this connection’s vote on a Reddit post or comment. Write, retry-safe. Connections: reddit. |
| `get_reddit_feed` | GET | `/engagement/{connectionId}/reddit/feed` | inbox.read | Read a subreddit feed, or the connection’s home feed. Connections: reddit. |
| `search_reddit_posts` | GET | `/engagement/{connectionId}/reddit/search` | inbox.read | Search Reddit posts, optionally within one subreddit. Connections: reddit. |
| `check_subreddit` | GET | `/engagement/{connectionId}/reddit/subreddit` | posts.read | Check that a subreddit exists and which post types it allows. Connections: reddit. |
| `search_inbox_conversations` | GET | `/engagement/{connectionId}/conversations/search` | inbox.read | Search this connection’s conversations by message text or contact. Connections: facebook, instagram, telegram, whatsapp, slack, reddit. |
| `get_inbox_conversation_details` | GET | `/engagement/{connectionId}/conversations/{conversationId}` | inbox.read | Read a conversation’s platform details and participants. Connections: facebook, instagram, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `set_inbox_conversation_archive` | PUT | `/engagement/{connectionId}/conversations/{conversationId}/status` | inbox.write | Archive a conversation on the platform side, or make it active again. Write, retry-safe. Connections: facebook, instagram, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `mark_inbox_conversation_read` | POST | `/engagement/{connectionId}/conversations/{conversationId}/read` | inbox.write | Mark every unread incoming message in a conversation as read. Write, retry-safe. Connections: facebook, instagram, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `send_inbox_typing_indicator` | POST | `/engagement/{connectionId}/conversations/{conversationId}/typing` | inbox.write | Show a typing indicator to the contact. Write, retry-safe. Connections: facebook, instagram, telegram, whatsapp. |
| `add_inbox_message_reaction` | POST | `/engagement/{connectionId}/conversations/{conversationId}/messages/{messageId}/reactions` | inbox.write | React to a message with an emoji. Write, retry-safe. Connections: telegram, whatsapp, instagram, facebook, slack. |
| `remove_inbox_message_reaction` | DELETE | `/engagement/{connectionId}/conversations/{conversationId}/messages/{messageId}/reactions` | inbox.write | Remove this connection’s reaction from a message. Write, retry-safe. Connections: telegram, whatsapp, instagram, facebook, slack. |
| `edit_inbox_message` | PATCH | `/engagement/{connectionId}/conversations/{conversationId}/messages/{messageId}` | inbox.write | Edit a message this connection sent. Write, retry-safe. Connections: telegram. |
| `delete_inbox_message` | DELETE | `/engagement/{connectionId}/conversations/{conversationId}/messages/{messageId}` | inbox.write | Delete a message from a conversation. Write, retry-safe. Connections: telegram, bluesky, reddit. |
| `reply_to_x_post` | POST | `/engagement/{connectionId}/x/posts/{postId}/replies` | messaging.send | Reply to an X post as this connection. Write. Charges provider_micros. Connections: twitter. |
| `delete_x_reply` | DELETE | `/engagement/{connectionId}/x/posts/{postId}/replies/{replyId}` | messaging.send | Delete a reply this connection posted on X. Write. Charges provider_micros. Connections: twitter. |
| `hide_x_reply` | POST | `/engagement/{connectionId}/x/posts/{postId}/replies/{replyId}/hide` | messaging.send | Hide a reply to this connection’s X post. Write. Charges provider_micros. Connections: twitter. |
| `unhide_x_reply` | DELETE | `/engagement/{connectionId}/x/posts/{postId}/replies/{replyId}/hide` | messaging.send | Show a hidden reply to this connection’s X post again. Write. Charges provider_micros. Connections: twitter. |
| `like_x_post` | POST | `/engagement/{connectionId}/x/posts/{postId}/like` | messaging.send | Like an X post or reply as this connection. Write. Charges provider_micros. Connections: twitter. |
| `unlike_x_post` | DELETE | `/engagement/{connectionId}/x/posts/{postId}/like` | messaging.send | Remove this connection’s like from an X post. Write. Charges provider_micros. Connections: twitter. |
| `bookmark_x_post` | POST | `/engagement/{connectionId}/x/posts/{postId}/bookmark` | messaging.send | Bookmark an X post for this connection. Write. Charges provider_micros. Connections: twitter. |
| `remove_x_bookmark` | DELETE | `/engagement/{connectionId}/x/posts/{postId}/bookmark` | messaging.send | Remove an X post from this connection’s bookmarks. Write. Charges provider_micros. Connections: twitter. |
| `repost_x_post` | POST | `/engagement/{connectionId}/x/posts/{postId}/repost` | messaging.send | Repost an X post as this connection. Write. Charges provider_micros. Connections: twitter. |
| `undo_x_repost` | DELETE | `/engagement/{connectionId}/x/posts/{postId}/repost` | messaging.send | Undo this connection’s repost of an X post. Write. Charges provider_micros. Connections: twitter. |
| `follow_x_user` | POST | `/engagement/{connectionId}/x/users/{userId}/follow` | messaging.send | Follow an X user as this connection. Write. Charges provider_micros. Connections: twitter. |
| `unfollow_x_user` | DELETE | `/engagement/{connectionId}/x/users/{userId}/follow` | messaging.send | Unfollow an X user. Write. Charges provider_micros. Connections: twitter. |
| `lookup_x_post` | POST | `/engagement/{connectionId}/x/posts/lookup` | messaging.send | Read one X post with its author and public metrics. Write, retry-safe. Charges provider_micros. Connections: twitter. |
| `search_x_posts` | POST | `/engagement/{connectionId}/x/search` | messaging.send | Search public X posts from the last 7 days. Write. Charges provider_micros. Connections: twitter. |
| `validate_post_length` | POST | `/engagement/checks/post-length` | posts.read | Count characters of a post the way each platform does. Write, retry-safe. |
| `validate_media_url` | POST | `/engagement/checks/media` | media.read | Check that a media URL is reachable and fits each platform’s size limits. Write, retry-safe. |

**list_commented_posts:** Posts are read live from the platform and cached for up to 10 minutes. Use the returned post id with list_post_comments. Only rows of this connection are returned.

**list_post_comments:** postId is the platform post ID or an ID returned by list_commented_posts. Pass commentId for replies to one comment (Facebook, Instagram, Reddit, TikTok). Results may lag by up to 10 minutes. TikTok requires a TikTok for Business connection.

**reply_to_post_comment:** Pass commentId to reply to a comment; omit it to comment on the post. attachmentUrl (a public image) is Facebook only. Bluesky replies need parentCid, rootUri and rootCid. X replies use reply_to_x_post. A reply whose outcome was not confirmed is not repeated automatically: list the comments before sending it again.

**delete_post_comment:** Supported on Facebook, Instagram, Threads, LinkedIn, Reddit, Bluesky, YouTube and TikTok for Business. LinkedIn accepts the numeric comment ID or the comment URN from list_post_comments.

**hide_post_comment:** Supported on Facebook, Instagram, Threads and TikTok for Business. X replies use hide_x_reply.

**like_post_comment:** Supported on Facebook, Bluesky, Reddit, LinkedIn and, in limited release, Instagram. reactionType applies to LinkedIn only. Bluesky requires cid; keep the returned likeUri to remove the like later.

**unlike_post_comment:** Bluesky needs the likeUri returned by like_post_comment.

**send_comment_private_reply:** Facebook and Instagram only. Each comment allows one private reply within 7 days; a failed attempt can still use it up, so this is never retried automatically. quickReplies and buttons are mutually exclusive. Instagram refuses buttons to commenters who do not follow the account. Uses one message from the messages allowance.

**moderate_youtube_comment:** The connection must own the channel or video. banAuthor is only valid with moderationStatus=rejected and auto-rejects that author’s future comments.

**like_social_post:** The post does not have to belong to this connection. Supported on LinkedIn, Facebook, YouTube, Bluesky and, in limited release, Instagram. reactionType applies to LinkedIn only; Bluesky requires cid. Reddit uses vote_on_reddit and X uses like_x_post.

**unlike_social_post:** Bluesky needs the likeUri returned by like_social_post.

**list_linkedin_mentions:** Mentions arrive from LinkedIn notifications, newest first by default.

**reply_to_instagram_mention:** With commentId, replies under the comment that mentioned the account; without it, comments on the media whose caption mentioned the account. Story mentions are not supported by Instagram. IDs come from comment webhooks.

**resolve_linkedin_mention:** Embed the returned mentionFormat in post content. Person mentions need the connection to administer an organization, and displayName must match the profile exactly to be clickable.

**list_reviews:** Returned review IDs can be replied to with reply_to_review. Ratings filter Google reviews; Facebook uses recommendations.

**reply_to_review:** reviewId must come from list_reviews for this connection. Replaces an existing reply on Google. A reply whose outcome was not confirmed is not repeated automatically: list the reviews before sending it again.

**create_comment_automation:** Omit platformPostId for an account-wide automation. trigger=story_reply answers keyword replies to Instagram stories. Buttons (up to 3) and template (product cards) are mutually exclusive; with buttons dmMessage must be 640 characters or less. A workflow button starts an active automation workflow of the same connection when tapped; workflowId must be returned by this API for this business, and raw postback payloads cannot start workflows. audience and followGate apply to Instagram only. The automation is active as soon as it is created.

**update_comment_automation:** Send only the fields to change. buttons: [] clears buttons. Sending audience without tapToUnlock clears tapToUnlock. Use set_comment_automation_status to pause or resume.

**list_comment_automation_logs:** Includes commenter names and comment text. misses summarizes recent comments that matched no keyword.

**get_instagram_follow_status:** userId is the Instagram-scoped user ID from a message or comment. Instagram only answers for people who have messaged the account; otherwise isFollower is null with an unavailableReason. Pass refresh=true to bypass the short cache.

**vote_on_reddit:** Reddit requires votes to be cast by people: call this only for an explicit action by the account owner, never from an automation. thingId is a Reddit fullname (t3_ post, t1_ comment). direction is 1, -1 or 0 to clear.

**check_subreddit:** Private, banned and missing subreddits return exists=false.

**search_inbox_conversations:** Matches whole words in messages (case and accent insensitive) and substrings of the contact name, username or phone. direction limits matches to incoming or outgoing messages. Returned conversation IDs work with the other conversation operations.

**get_inbox_conversation_details:** conversationId is the thread id from list_inbox_conversations or a conversation id from search_inbox_conversations.

**set_inbox_conversation_archive:** This is separate from resolving a conversation with update_inbox_conversation.

**mark_inbox_conversation_read:** Call this when a person actually views the conversation. WhatsApp also sends read receipts to the contact, except on accounts shared with the WhatsApp Business app.

**send_inbox_typing_indicator:** Best effort on Facebook, Instagram, Telegram and WhatsApp; success=false when the platform did not show it. On WhatsApp it needs a recent incoming message and marks it read.

**add_inbox_message_reaction:** Supported on Telegram (a subset of emoji), WhatsApp, Instagram, Facebook Messenger (within the 24-hour window) and Slack (named emoji only). messageId is a message id from list_inbox_messages.

**edit_inbox_message:** Telegram only: change the text and/or the inline keyboard. replyMarkup is { type: "inline_keyboard", keyboard: [[{ text, callbackData | url }]] }.

**delete_inbox_message:** Telegram deletes for everyone (own messages, or others’ as an admin). Bluesky and Reddit delete only from this connection’s view.

**reply_to_x_post:** Charged at the X API rate for this action, at cost, from the provider_micros allowance. Replies containing a link are charged the higher X rate for posts with URLs.

**delete_x_reply:** Charged at the X API rate for this action, at cost, from the provider_micros allowance.

**hide_x_reply:** Charged at the X API rate for this action, at cost, from the provider_micros allowance.

**unhide_x_reply:** Charged at the X API rate for this action, at cost, from the provider_micros allowance.

**like_x_post:** Charged at the X API rate for this action, at cost, from the provider_micros allowance.

**unlike_x_post:** Charged at the X API rate for this action, at cost, from the provider_micros allowance.

**bookmark_x_post:** Charged at the X API rate for this action, at cost, from the provider_micros allowance. X allows 50 bookmark requests per 15 minutes.

**remove_x_bookmark:** Charged at the X API rate for this action, at cost, from the provider_micros allowance.

**repost_x_post:** Charged at the X API rate for this action, at cost, from the provider_micros allowance. Shares X’s post-creation rate limits.

**undo_x_repost:** Charged at the X API rate for this action, at cost, from the provider_micros allowance.

**follow_x_user:** Charged at the X API rate for this action, at cost, from the provider_micros allowance. Protected accounts receive a follow request (pending_follow=true).

**unfollow_x_user:** Charged at the X API rate for this action, at cost, from the provider_micros allowance.

**lookup_x_post:** Charged at the X API rate for this action, at cost, from the provider_micros allowance. Charged as one X post read; X charges repeat lookups of the same post once per UTC day. tweetId is a numeric ID or an x.com post URL.

**search_x_posts:** Charged at the X API rate for this action, at cost, from the provider_micros allowance. X bills each returned post as a read: limit posts are reserved and only the posts returned are charged. Supports X search operators (from:, conversation_id:, lang:, -is:retweet, "exact phrase", OR).

**validate_post_length:** X counts links as 23 characters and emoji as 2. The X premium row assumes a paid X subscription; publishing enforces each account’s real limit.

**validate_media_url:** Reads the URL’s headers to find its type and size. Private and local addresses are refused.

### Platform insights

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `get_connection_health` | GET | `/insights/{connectionId}/health` | discovery.read | Check one connection’s token, permissions and posting or analytics readiness. Connections: facebook, instagram, youtube, tiktok, linkedin, twitter, threads, bluesky, pinterest, reddit, snapchat, googlebusiness, telegram, whatsapp, slack, discord. |
| `list_connection_health` | GET | `/insights/health` | discovery.read | Summarize the health of every connection of this business. |
| `get_follower_stats` | GET | `/insights/followers` | analytics.read | Read follower counts and growth for every connection of this business. |
| `get_connection_follower_stats` | GET | `/insights/{connectionId}/followers` | analytics.read | Read follower count history and growth for one connection. Connections: facebook, instagram, youtube, tiktok, linkedin, twitter, threads, bluesky, pinterest, reddit, snapchat, googlebusiness, telegram. |
| `list_connection_platform_posts` | GET | `/insights/{connectionId}/platform-posts` | analytics.read | List the 25 most recent posts on the connected platform account. Connections: facebook, instagram, youtube, tiktok, linkedin, twitter, threads, bluesky, pinterest, reddit, snapchat, googlebusiness, telegram. |
| `list_post_insights` | GET | `/insights/{connectionId}/posts` | analytics.read | List post metrics for one connection with an overview and pagination. Connections: facebook, instagram, youtube, tiktok, linkedin, twitter, threads, bluesky, pinterest, reddit, snapchat, googlebusiness, telegram. |
| `get_post_insights` | GET | `/insights/posts/{postId}` | analytics.read | Read metrics for one post across the platforms it was published to. |
| `get_post_insights_timeline` | GET | `/insights/posts/{postId}/timeline` | analytics.read | Read a post’s metrics day by day since it was published. |
| `list_post_insight_changes` | GET | `/insights/changes` | analytics.read | Read post metrics that changed since a cursor. |
| `get_best_posting_times` | GET | `/insights/best-times` | analytics.read | Rank day-and-hour slots (UTC) by average engagement for the business’s primary publishing profile. |
| `get_connection_best_posting_times` | GET | `/insights/{connectionId}/best-times` | analytics.read | Rank day-and-hour slots (UTC) by average engagement for one connection. Connections: facebook, instagram, youtube, tiktok, linkedin, twitter, threads, bluesky, pinterest, reddit, snapchat, googlebusiness, telegram. |
| `get_content_decay` | GET | `/insights/content-decay` | analytics.read | Show how quickly posts reach their total engagement for the business’s primary publishing profile. |
| `get_connection_content_decay` | GET | `/insights/{connectionId}/content-decay` | analytics.read | Show how quickly posts reach their total engagement for one connection. Connections: facebook, instagram, youtube, tiktok, linkedin, twitter, threads, bluesky, pinterest, reddit, snapchat, googlebusiness, telegram. |
| `get_posting_frequency` | GET | `/insights/posting-frequency` | analytics.read | Compare posts per week with engagement rate for the business’s primary publishing profile. |
| `get_connection_posting_frequency` | GET | `/insights/{connectionId}/posting-frequency` | analytics.read | Compare posts per week with engagement rate for one connection. Connections: facebook, instagram, youtube, tiktok, linkedin, twitter, threads, bluesky, pinterest, reddit, snapchat, googlebusiness, telegram. |
| `get_facebook_page_insights` | GET | `/insights/{connectionId}/facebook/page` | analytics.read | Read Facebook Page views, engagement, video and follower metrics. Connections: facebook. |
| `get_facebook_post_earnings` | GET | `/insights/{connectionId}/facebook/post-earnings` | analytics.read | Read lifetime monetization earnings for one Facebook post. Connections: facebook. |
| `get_facebook_post_reactions` | GET | `/insights/{connectionId}/facebook/post-reactions` | analytics.read | Count reactions on a Facebook Page post by type. Connections: facebook. |
| `get_google_business_performance` | GET | `/insights/{connectionId}/google-business/performance` | analytics.read | Read daily Google Business Profile impressions, clicks, calls and directions. Connections: googlebusiness. |
| `get_google_business_search_keywords` | GET | `/insights/{connectionId}/google-business/search-keywords` | analytics.read | List search keywords that showed the Google Business Profile. Connections: googlebusiness. |
| `get_instagram_account_insights` | GET | `/insights/{connectionId}/instagram/account` | analytics.read | Read Instagram account reach, views, engagement and interactions. Connections: instagram. |
| `get_instagram_demographics` | GET | `/insights/{connectionId}/instagram/demographics` | analytics.read | Read Instagram audience age, gender, city and country breakdowns. Connections: instagram. |
| `get_instagram_follower_history` | GET | `/insights/{connectionId}/instagram/follower-history` | analytics.read | Read a daily Instagram follower count series with gains and losses. Connections: instagram. |
| `list_instagram_stories` | GET | `/insights/{connectionId}/instagram/stories` | analytics.read | List the Instagram account’s stories that are live now. Connections: instagram. |
| `get_instagram_story_insights` | GET | `/insights/{connectionId}/instagram/stories/{storyId}` | analytics.read | Read views, reach, replies and navigation for one Instagram story. Connections: instagram. |
| `get_instagram_publishing_limit` | GET | `/insights/{connectionId}/instagram/publishing-limit` | posts.read | Read how many posts the Instagram account can still publish in 24 hours. Connections: instagram. |
| `search_instagram_audio` | GET | `/insights/{connectionId}/instagram/audio` | posts.read | Search Instagram’s music or original-sound catalog, or list trending audio. Connections: instagram. |
| `get_instagram_audio` | GET | `/insights/{connectionId}/instagram/audio/{audioId}` | posts.read | Read one Instagram audio track to recheck it or refresh its preview link. Connections: instagram. |
| `get_linkedin_organization_insights` | GET | `/insights/{connectionId}/linkedin/organization` | analytics.read | Read LinkedIn company page impressions, clicks, engagement and follower growth. Connections: linkedin. |
| `get_linkedin_member_insights` | GET | `/insights/{connectionId}/linkedin/member` | analytics.read | Read totals or a daily series across a LinkedIn personal profile’s posts. Connections: linkedin. |
| `get_linkedin_post_insights` | GET | `/insights/{connectionId}/linkedin/post` | analytics.read | Read impressions, reach, reactions, comments and shares for one LinkedIn post. Connections: linkedin. |
| `list_linkedin_post_reactions` | GET | `/insights/{connectionId}/linkedin/post-reactions` | analytics.read | List who reacted to a LinkedIn company page post and how. Connections: linkedin. |
| `get_tiktok_account_insights` | GET | `/insights/{connectionId}/tiktok/account` | analytics.read | Read TikTok follower, following, likes and video counts with gains and losses. Connections: tiktok. |
| `get_tiktok_creator_info` | GET | `/insights/{connectionId}/tiktok/creator-info` | posts.read | Read a TikTok creator’s privacy options, posting limits and interaction settings. Connections: tiktok. |
| `get_youtube_channel_insights` | GET | `/insights/{connectionId}/youtube/channel` | analytics.read | Read YouTube channel views, watch time and subscriber changes. Connections: youtube. |
| `get_youtube_video_daily_views` | GET | `/insights/{connectionId}/youtube/daily-views` | analytics.read | Read daily views, watch time and engagement for one YouTube video. Connections: youtube. |
| `get_youtube_demographics` | GET | `/insights/{connectionId}/youtube/demographics` | analytics.read | Read YouTube viewer age, gender and country for the channel or one video. Connections: youtube. |
| `get_youtube_video_retention` | GET | `/insights/{connectionId}/youtube/retention` | analytics.read | Read the audience retention curve for one YouTube video. Connections: youtube. |
| `get_inbox_volume` | GET | `/insights/{connectionId}/inbox/volume` | analytics.read | Read daily inbox message volume for one connection. Connections: facebook, instagram, twitter, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `get_inbox_heatmap` | GET | `/insights/{connectionId}/inbox/heatmap` | analytics.read | Read inbox activity by weekday and hour for one connection. Connections: facebook, instagram, twitter, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `get_inbox_response_times` | GET | `/insights/{connectionId}/inbox/response-times` | analytics.read | Read time-to-first-reply statistics for one connection. Connections: facebook, instagram, twitter, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `get_inbox_sources` | GET | `/insights/{connectionId}/inbox/sources` | analytics.read | Break inbox messages down by origin for one connection. Connections: facebook, instagram, twitter, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `list_inbox_conversation_insights` | GET | `/insights/{connectionId}/inbox/conversations` | analytics.read, inbox.read | List conversations of one connection with message totals. Connections: facebook, instagram, twitter, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `get_inbox_conversation_insights` | GET | `/insights/{connectionId}/inbox/conversations/{conversationId}` | analytics.read, inbox.read | Read daily message totals and origins for one conversation. Connections: facebook, instagram, twitter, bluesky, reddit, telegram, whatsapp, slack, discord. |
| `list_inbox_top_connections` | GET | `/insights/inbox/top-connections` | analytics.read | Rank this business’s connections by inbox message volume. |

**get_connection_health:** Works on connections that need attention. WhatsApp connections also include a live check of the phone number link; a valid token alone does not mean WhatsApp can send.

**list_connection_health:** Reads each publishing profile of the business and returns only its own connections. The summary counts are recomputed from the returned rows.

**get_follower_stats:** Follower counts refresh once a day. Defaults to the last 30 days. Accounts are limited to this business’s connections.

**get_connection_follower_stats:** Follower counts refresh once a day. Defaults to the last 30 days.

**list_connection_platform_posts:** Read live from the platform and includes posts that were not created through this API. Returns the platform’s own post IDs (the video ID on YouTube), which the Facebook, LinkedIn and YouTube post insight operations take as input.

**list_post_insights:** Covers posts published through this API (source=api) and posts synced from the platform (source=external). Dates default to the last 90 days; the range may not exceed 366 days. Returned post IDs (_id, and apiPostId for posts published through this API) work with get_post_insights and get_post_insights_timeline; platformPostId values work with the Facebook, LinkedIn and YouTube post operations of the same connection.

**get_post_insights:** Use a post ID from list_post_insights or a post published through this API. The platform may still be syncing (syncStatus pending); read again later. Only this business’s platform rows are returned.

**get_post_insights_timeline:** One row per day and platform. Defaults to the last 90 days. Use a post ID from list_post_insights or a post published through this API.

**list_post_insight_changes:** Call without a cursor first to get the current position (an empty page), load a baseline from list_post_insights, then follow nextCursor. Metrics are absolute values, so a later row for a post supersedes an earlier one. The feed keeps 7 days and covers the business’s primary publishing profile; rows for other accounts are removed, so a page can be shorter than limit while hasMore is true.

**get_best_posting_times:** Groups published posts by weekday (0 = Monday) and UTC hour. Covers the business’s primary publishing profile.

**get_connection_best_posting_times:** Groups published posts by weekday (0 = Monday) and UTC hour.

**get_content_decay:** Each bucket is the average share of final engagement reached by that time after publishing. Covers the business’s primary publishing profile.

**get_connection_content_decay:** Each bucket is the average share of final engagement reached by that time after publishing.

**get_posting_frequency:** One row per platform and weekly post count with the average engagement observed. Covers the business’s primary publishing profile.

**get_connection_posting_frequency:** One row per platform and weekly post count with the average engagement observed.

**get_facebook_page_insights:** Metrics: page_media_view, page_views_total, page_post_engagements, page_video_views, page_video_view_time, page_follows, followers_gained, followers_lost, plus opt-in monetization metrics. Legacy page_impressions and page_fans names are rejected. Up to 89 days, default the last 30.

**get_facebook_post_earnings:** Lifetime totals read live from Meta; never sum them across dates or posts. A post on a Page that is not monetized returns 0. content_monetization_earnings is in micro-units with a currency; monetization_approximate_earnings is unitless. Use a platformPostId that list_post_insights, list_post_insight_changes or list_connection_platform_posts returned for this Page.

**get_facebook_post_reactions:** Returns like, love, haha, wow, sad, angry and care counts plus the total. Use a platformPostId that list_post_insights, list_post_insight_changes or list_connection_platform_posts returned for this Page.

**get_google_business_performance:** Metrics include Maps and Search impressions by device, website clicks, call clicks, direction requests, conversations, bookings and food orders. Data lags 2–3 days; up to 18 months back.

**get_google_business_search_keywords:** Aggregated monthly; keywords under Google’s impression threshold are left out. Defaults to the last 3 months, up to 18 months back.

**get_instagram_account_insights:** Account-wide metrics across feed, stories, explore and profile: reach, views, accounts_engaged, total_interactions, comments, likes, saves, shares, replies, reposts, follows_and_unfollows, profile_links_taps. Only reach supports time_series. Breakdowns (media_product_type, follow_type, follower_type, contact_button_type) need total_value. Up to 90 days, delayed up to 48 hours.

**get_instagram_demographics:** Needs at least 100 followers. Returns the top 45 entries per dimension, delayed up to 48 hours.

**get_instagram_follower_history:** Metrics: follower_count, followers_gained, followers_lost. Built from daily snapshots; up to 89 days, default the last 30.

**list_instagram_stories:** Stories last 24 hours. Live videos and reshared stories are not returned; mediaUrl is null when Meta flags a story for copyright. Listing a story lets you read its insights later, also after it expires.

**get_instagram_story_insights:** source is live while the story is active, cached after it expires when final metrics were received, and unavailable otherwise. Counts under 5 may read as 0. Use a story ID from list_instagram_stories.

**get_instagram_publishing_limit:** quotaUsage counts containers published in the rolling window; compare it with quotaTotal rather than a fixed number.

**search_instagram_audio:** Omit q for the trending list. Returns up to about 30 results with no pagination. Only Instagram accounts connected through Facebook Login can use the catalog; others get a 400 and must reconnect. Pass audioId in the Reel’s platform options when publishing.

**get_instagram_audio:** Preview download links expire after about 1.5 days. Audio is Instagram’s public catalog, not account data. Facebook Login connections only.

**get_linkedin_organization_insights:** Company pages only; personal profiles use get_linkedin_member_insights. Needs the administrator role on the page and organization permissions (a reconnect may be required). Page-view metrics support total_value only. Up to 89 days, default the last 30.

**get_linkedin_member_insights:** Personal profiles only, and only posts published through this API (a LinkedIn limit). Metrics: IMPRESSION, MEMBERS_REACHED, REACTION, COMMENT, RESHARE, POST_SAVE, POST_SEND; MEMBERS_REACHED is not available with DAILY. Without fromDate returns lifetime totals; toDate is exclusive.

**get_linkedin_post_insights:** Works for personal and company page connections. Saves and sends are reported for personal profiles only; clicks for company pages only.

**list_linkedin_post_reactions:** Company pages only; LinkedIn does not expose reactors for personal profiles. Use a post URN that list_post_insights, list_post_insight_changes or list_connection_platform_posts returned for this page. Offset pagination: pass pagination.cursor from the previous page.

**get_tiktok_account_insights:** Metrics: follower_count, following_count, likes_count, video_count, followers_gained, followers_lost. TikTok exposes no account-level impressions, reach or demographics. Needs the user.info.stats permission (a reconnect may be required). Up to 89 days, default the last 30.

**get_tiktok_creator_info:** Use before publishing: lists allowed privacy levels, the maximum video length, whether comments, duets and stitches are available, and commercial content options. Returns 429 when the creator reached TikTok’s daily posting limit.

**get_youtube_channel_insights:** Metrics: views, estimatedMinutesWatched, averageViewDuration, subscribersGained, subscribersLost, followers_gained, followers_lost. Data lags 2–3 days; up to 89 days. Thumbnail impressions are not available from YouTube. Needs the YouTube Analytics permission (a reconnect may be required).

**get_youtube_video_daily_views:** Defaults to the last 30 days ending 3 days ago (YouTube finalizes data after about 3 days); later days are provisional. Up to 90 days. Use a video ID from list_connection_platform_posts or list_post_insights.

**get_youtube_demographics:** Age and gender are viewer percentages; country is a view count. Signed-in viewers only, delayed 2–3 days; low-traffic videos can return empty breakdowns. Defaults to 90 days, or the video’s lifetime when videoId is set.

**get_youtube_video_retention:** Up to 100 points across the video, aggregated over the range (default lifetime). audienceWatchRatio can exceed 1 with rewinds or loops. Empty for videos with few views or before processing completes. Use a video ID from list_connection_platform_posts or list_post_insights.

**get_inbox_volume:** Received, sent, read and failed counts per day with totals and unique conversations. fromDate is required; ranges up to 365 days.

**get_inbox_heatmap:** Only cells with activity are returned (dow 1 = Monday … 7 = Sunday); fill the rest with zeros. fromDate is required; ranges up to 365 days.

**get_inbox_response_times:** Median, p90, p99 and a histogram. Only conversations that received a reply in the range are counted; compare with get_inbox_volume to compute reply rate. fromDate is required; ranges up to 365 days.

**get_inbox_sources:** Origins: human, workflow, sequence, broadcast, comment_automation, api, contact and platform. fromDate is required; ranges up to 365 days.

**list_inbox_conversation_insights:** Paginated with sorting by activity or counts. fromDate is required; ranges up to 365 days. conversationId values work with get_inbox_conversation_insights.

**get_inbox_conversation_insights:** Use a conversation ID from list_inbox_conversation_insights or from the inbox. fromDate is required; ranges up to 365 days.

**list_inbox_top_connections:** Includes received, sent, conversations and median response time per connection. fromDate is required; ranges up to 365 days.

### Channel settings

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `get_instagram_ice_breakers` | GET | `/instagram/{connectionId}/ice-breakers` | inbox.read | Read the ice breaker questions shown when someone opens a chat with an Instagram account. Connections: instagram. |
| `set_instagram_ice_breakers` | PUT | `/instagram/{connectionId}/ice-breakers` | inbox.write | Replace the ice breaker questions on an Instagram account. Write, retry-safe. Connections: instagram. |
| `delete_instagram_ice_breakers` | DELETE | `/instagram/{connectionId}/ice-breakers` | inbox.write | Remove all ice breaker questions from an Instagram account. Write, retry-safe. Connections: instagram. |
| `get_messenger_menu` | GET | `/messenger/{connectionId}/menu` | inbox.read | Read the persistent menu shown in Messenger conversations with a Facebook Page. Connections: facebook. |
| `set_messenger_menu` | PUT | `/messenger/{connectionId}/menu` | inbox.write | Replace the persistent Messenger menu of a Facebook Page. Write, retry-safe. Connections: facebook. |
| `delete_messenger_menu` | DELETE | `/messenger/{connectionId}/menu` | inbox.write | Remove the persistent Messenger menu from a Facebook Page. Write, retry-safe. Connections: facebook. |
| `get_messenger_get_started` | GET | `/messenger/{connectionId}/get-started` | inbox.read | Read the Get Started button of a Facebook Page’s Messenger welcome screen. Connections: facebook. |
| `set_messenger_get_started` | PUT | `/messenger/{connectionId}/get-started` | inbox.write | Set the Get Started button of a Facebook Page’s Messenger welcome screen. Write, retry-safe. Connections: facebook. |
| `delete_messenger_get_started` | DELETE | `/messenger/{connectionId}/get-started` | inbox.write | Remove the Get Started button from a Facebook Page’s Messenger welcome screen. Write, retry-safe. Connections: facebook. |
| `get_telegram_bot_commands` | GET | `/telegram/{connectionId}/commands` | inbox.read | Read the command list of a Telegram bot. Connections: telegram. |
| `set_telegram_bot_commands` | PUT | `/telegram/{connectionId}/commands` | inbox.write | Replace the command list of a Telegram bot. Write, retry-safe. Connections: telegram. |
| `delete_telegram_bot_commands` | DELETE | `/telegram/{connectionId}/commands` | inbox.write | Clear every command of a Telegram bot. Write, retry-safe. Connections: telegram. |
| `get_bluesky_settings` | GET | `/bluesky/{connectionId}/settings` | posts.read | Read the default post languages of a Bluesky account. Connections: bluesky. |
| `update_bluesky_settings` | PATCH | `/bluesky/{connectionId}/settings` | posts.write | Set or clear the default post languages of a Bluesky account. Write, retry-safe. Connections: bluesky. |
| `get_slack_settings` | GET | `/slack/{connectionId}/settings` | posts.read | Read the connected Slack channel and the default author name and avatar. Connections: slack. |
| `update_slack_settings` | PATCH | `/slack/{connectionId}/settings` | posts.write | Set the default author name and avatar used for messages posted to Slack. Write, retry-safe. Connections: slack. |
| `list_slack_members` | GET | `/slack/{connectionId}/members` | inbox.read | List members of the connected Slack workspace who can receive a direct message. Connections: slack. |
| `list_site_blogs` | GET | `/sites/{connectionId}/blogs` | posts.read | List the blogs of a connected Shopify store or WordPress site. Connections: shopify, wordpress. |
| `create_site_blog` | POST | `/sites/{connectionId}/blogs` | posts.write | Create a blog on a connected Shopify store. Write. Connections: shopify, wordpress. |
| `get_site_blog` | GET | `/sites/{connectionId}/blogs/{blogId}` | posts.read | Read one blog of a connected Shopify store or WordPress site. Connections: shopify, wordpress. |
| `update_site_blog` | PATCH | `/sites/{connectionId}/blogs/{blogId}` | posts.write | Rename a Shopify blog or change its URL handle. Write, retry-safe. Connections: shopify, wordpress. |
| `delete_site_blog` | DELETE | `/sites/{connectionId}/blogs/{blogId}` | posts.write | Permanently delete a Shopify blog and every article in it. Write, retry-safe. Connections: shopify, wordpress. |
| `list_blog_articles` | GET | `/sites/{connectionId}/blogs/{blogId}/articles` | posts.read | List the articles of a blog on a connected Shopify store or WordPress site. Connections: shopify, wordpress. |
| `create_blog_article` | POST | `/sites/{connectionId}/blogs/{blogId}/articles` | posts.write, posts.publish | Create, schedule or publish an article on a Shopify or WordPress blog. Write. Connections: shopify, wordpress. |
| `get_blog_article` | GET | `/sites/{connectionId}/blogs/{blogId}/articles/{articleId}` | posts.read | Read one article of a Shopify or WordPress blog. Connections: shopify, wordpress. |
| `update_blog_article` | PATCH | `/sites/{connectionId}/blogs/{blogId}/articles/{articleId}` | posts.write, posts.publish | Change, publish, schedule or unpublish an article on a Shopify or WordPress blog. Write, retry-safe. Connections: shopify, wordpress. |
| `delete_blog_article` | DELETE | `/sites/{connectionId}/blogs/{blogId}/articles/{articleId}` | posts.write | Permanently delete an article from a Shopify or WordPress blog. Write, retry-safe. Connections: shopify, wordpress. |
| `list_pinterest_boards` | GET | `/pinterest/{connectionId}/boards` | posts.read | List the boards of a Pinterest account. Connections: pinterest. |
| `create_pinterest_board` | POST | `/pinterest/{connectionId}/boards` | posts.write | Create a board on a Pinterest account. Write. Connections: pinterest. |
| `set_default_pinterest_board` | PUT | `/pinterest/{connectionId}/default-board` | posts.write | Choose the board pins are published to by default on a Pinterest account. Write, retry-safe. Connections: pinterest. |
| `list_facebook_pages` | GET | `/facebook/{connectionId}/pages` | discovery.read | List the Facebook Pages this connection can manage, with the selected Page. Connections: facebook. |
| `select_facebook_page` | PUT | `/facebook/{connectionId}/page` | connections.manage | Switch which Facebook Page this connection publishes to. Write, retry-safe. Connections: facebook. |
| `list_linkedin_organizations` | GET | `/linkedin/{connectionId}/organizations` | discovery.read | List the LinkedIn company pages this connection administers. Connections: linkedin. |
| `set_linkedin_posting_identity` | PUT | `/linkedin/{connectionId}/posting-identity` | connections.manage | Switch a LinkedIn connection between the personal profile and a company page. Write, retry-safe. Connections: linkedin. |
| `list_reddit_flairs` | GET | `/reddit/{connectionId}/flairs` | posts.read | List the post flairs available in a subreddit. Connections: reddit. |
| `set_reddit_post_flair` | POST | `/reddit/{connectionId}/post-flair` | posts.write | Change the flair of a post this Reddit account already published. Write, retry-safe. Connections: reddit. |
| `list_reddit_subreddits` | GET | `/reddit/{connectionId}/subreddits` | posts.read | List the subreddits a Reddit account can post to, with its default subreddit. Connections: reddit. |
| `set_default_reddit_subreddit` | PUT | `/reddit/{connectionId}/default-subreddit` | posts.write | Choose the subreddit a Reddit account posts to by default. Write, retry-safe. Connections: reddit. |
| `get_reddit_subreddit_rules` | GET | `/reddit/{connectionId}/subreddits/{subreddit}/rules` | posts.read | Read a subreddit’s posting rules and Reddit’s site-wide rules. Connections: reddit. |
| `get_youtube_captions` | GET | `/youtube/{connectionId}/captions` | posts.read | Read the transcript of one of the connected YouTube channel’s own videos. Connections: youtube. |
| `list_youtube_playlists` | GET | `/youtube/{connectionId}/playlists` | posts.read | List the playlists of a YouTube channel, with its default playlist. Connections: youtube. |
| `set_default_youtube_playlist` | PUT | `/youtube/{connectionId}/default-playlist` | posts.write | Store the default playlist of a YouTube channel. Write, retry-safe. Connections: youtube. |
| `list_discord_channels` | GET | `/discord/{connectionId}/channels` | posts.read | List the text, announcement and forum channels of the connected Discord server. Connections: discord. |
| `get_discord_settings` | GET | `/discord/{connectionId}/settings` | posts.read | Read the Discord server, posting channel and author identity of a connection. Connections: discord. |
| `update_discord_identity` | PATCH | `/discord/{connectionId}/identity` | posts.write | Set the author name and avatar shown on messages posted to Discord. Write, retry-safe. Connections: discord. |
| `switch_discord_channel` | PUT | `/discord/{connectionId}/posting-channel/{channelId}` | connections.manage | Move a Discord connection to another channel of the same server. Write, retry-safe. Connections: discord. |
| `list_discord_roles` | GET | `/discord/{connectionId}/roles` | contacts.read | List the roles of the connected Discord server. Connections: discord. |
| `create_discord_role` | POST | `/discord/{connectionId}/roles` | contacts.write | Create a role in the connected Discord server. Write. Connections: discord. |
| `update_discord_role` | PATCH | `/discord/{connectionId}/roles/{roleId}` | contacts.write | Change a Discord role’s name, color, display, mention setting or permissions. Write, retry-safe. Connections: discord. |
| `delete_discord_role` | DELETE | `/discord/{connectionId}/roles/{roleId}` | contacts.write | Permanently delete a Discord role and remove it from every member. Write, retry-safe. Connections: discord. |
| `list_discord_members` | GET | `/discord/{connectionId}/members` | contacts.read | List members of the connected Discord server. Connections: discord. |
| `search_discord_members` | GET | `/discord/{connectionId}/members/search` | contacts.read | Find Discord server members whose username or nickname starts with a query. Connections: discord. |
| `get_discord_member` | GET | `/discord/{connectionId}/members/{userId}` | contacts.read | Read one member of the connected Discord server. Connections: discord. |
| `add_discord_member_role` | PUT | `/discord/{connectionId}/members/{userId}/roles/{roleId}` | contacts.write | Give a role to a member of the connected Discord server. Write, retry-safe. Connections: discord. |
| `remove_discord_member_role` | DELETE | `/discord/{connectionId}/members/{userId}/roles/{roleId}` | contacts.write | Take a role away from a member of the connected Discord server. Write, retry-safe. Connections: discord. |
| `list_discord_events` | GET | `/discord/{connectionId}/events` | posts.read | List the scheduled events of the connected Discord server. Connections: discord. |
| `create_discord_event` | POST | `/discord/{connectionId}/events` | posts.publish | Schedule an event in the connected Discord server. Write. Connections: discord. |
| `get_discord_event` | GET | `/discord/{connectionId}/events/{eventId}` | posts.read | Read one scheduled event of the connected Discord server. Connections: discord. |
| `update_discord_event` | PATCH | `/discord/{connectionId}/events/{eventId}` | posts.write | Change or cancel a scheduled Discord event. Write, retry-safe. Connections: discord. |
| `delete_discord_event` | DELETE | `/discord/{connectionId}/events/{eventId}` | posts.write | Permanently delete a scheduled Discord event. Write, retry-safe. Connections: discord. |
| `create_discord_thread` | POST | `/discord/{connectionId}/channels/{channelId}/threads` | posts.publish | Start a public thread in a channel of the connected Discord server. Write. Connections: discord. |
| `crosspost_discord_message` | POST | `/discord/{connectionId}/channels/{channelId}/messages/{messageId}/crosspost` | posts.publish | Publish an announcement-channel message to every server that follows the channel. Write, retry-safe. Connections: discord. |
| `delete_discord_message` | DELETE | `/discord/{connectionId}/channels/{channelId}/messages/{messageId}` | posts.write | Permanently delete a message from a channel of the connected Discord server. Write, retry-safe. Connections: discord. |
| `list_discord_pins` | GET | `/discord/{connectionId}/channels/{channelId}/pins` | posts.read | List the pinned messages of a Discord channel, most recent first. Connections: discord. |
| `pin_discord_message` | PUT | `/discord/{connectionId}/channels/{channelId}/pins/{messageId}` | posts.write | Pin a message in a Discord channel. Write, retry-safe. Connections: discord. |
| `unpin_discord_message` | DELETE | `/discord/{connectionId}/channels/{channelId}/pins/{messageId}` | posts.write | Unpin a message in a Discord channel. Write, retry-safe. Connections: discord. |
| `send_discord_direct_message` | POST | `/discord/{connectionId}/direct-messages` | messaging.send | Send a direct message from the bot to a member of the connected Discord server. Write. Connections: discord. |

**set_instagram_ice_breakers:** Up to 4 questions of at most 80 characters, replacing the whole set. Give each question a payload, delivered to your webhooks when someone taps it, or a workflowId of an automation workflow to start (one returned by this API for this business, active on this account).

**set_messenger_menu:** Takes Meta’s persistent_menu format: per-locale entries with up to 3 top-level items and 5 nested items. An item { type: "workflow", title, workflowId } starts that automation workflow when tapped; the workflow must have been returned by this API for this business and be active on this account. Meta only shows the menu on a Page that has a Get Started button (set_messenger_get_started); without one the request is refused with 409.

**get_messenger_get_started:** data is null when the Page has no Get Started button.

**set_messenger_get_started:** Meta requires it before a persistent menu can be set. Send payload, delivered to your webhooks when someone taps the button, or workflowId to start an automation workflow returned by this API for this business and active on this account.

**delete_messenger_get_started:** Meta refuses with 409 while a persistent menu is set; delete the menu first.

**set_telegram_bot_commands:** Up to 100 commands. A command is 1–32 lowercase letters, digits or underscores without the leading slash.

**update_bluesky_settings:** 1–3 BCP-47 codes such as "pt" or "en-US"; null clears the default. A post’s own languages override it. Applies only to posts published afterwards.

**update_slack_settings:** Applies to messages only; per-post values still override it. An empty defaultIconUrl clears the avatar. The author name cannot be cleared through this API; set a new one instead.

**list_slack_members:** Bots, deactivated members and Slackbot are excluded. query filters display names and handles without regard to case.

**list_site_blogs:** Cursor-paginated: pass nextCursor unchanged as cursor. A WordPress connection always returns its one site.

**create_site_blog:** Shopify only; WordPress connections are a single site and return 405. The URL handle is generated from the title when omitted.

**update_site_blog:** Shopify only. Changing the handle changes the blog’s URL on the store.

**delete_site_blog:** Shopify only. The deletion happens on the store and cannot be undone.

**list_blog_articles:** Cursor-paginated: pass nextCursor unchanged as cursor. WordPress results include the native status and, for scheduled posts, publishDate.

**create_blog_article:** isPublished=false keeps a draft and wins over publishDate. A future publishDate schedules publication natively on the platform. isPublished=true without a future date publishes immediately. WordPress defaults to a draft and rejects seo. Featured images are downloaded from a public URL (JPEG, PNG, GIF or WebP up to 10 MB on WordPress).

**update_blog_article:** Send any subset of the create fields. tags replaces the whole list. isPublished=false returns the article to draft. Omitting image keeps the current one; it cannot be removed. WordPress rejects seo.

**delete_blog_article:** Cannot be undone. On WordPress the post is force-deleted; uploaded media and tags remain on the site.

**list_pinterest_boards:** Use a board ID as the board when publishing a pin.

**create_pinterest_board:** Pinterest refuses a duplicate board name. The new board can be used immediately.

**set_default_pinterest_board:** The board must be one of this account’s boards.

**list_facebook_pages:** refresh=true reloads the list from Meta, at most once a minute; Pages no longer accessible are removed.

**select_facebook_page:** Changes where the business posts and receives messages. The Page must be in this connection’s Page list. Another connection of the same business already on that Page causes a 409.

**set_linkedin_posting_identity:** Changes where the business posts. For a company page, pass an organizationId from list_linkedin_organizations.

**list_reddit_flairs:** Some subreddits require a flair on every post.

**set_reddit_post_flair:** The subreddit must allow members to choose their own post flair. Only this account’s own posts can be changed. text overrides the label of editable flairs.

**get_reddit_subreddit_rules:** Check them before posting to avoid removal.

**get_youtube_captions:** Returns plain text plus timed cues (format=json) or a SubRip body (format=srt). Auto-generated tracks are included and may appear a few hours after upload. Transcripts are cached after the first read; refresh=true downloads again and uses YouTube quota, so use it only when captions changed. Videos of other channels return 404.

**set_default_youtube_playlist:** Stored for your own use: a video published without a playlist is not added to it automatically. The playlist must belong to this channel.

**list_discord_channels:** Channel types: 0 text, 5 announcement, 15 forum.

**update_discord_identity:** Account-wide defaults; a post may override them. The name is 1–80 characters and cannot contain "clyde" or "discord". An empty webhookAvatarUrl restores the default avatar. The name cannot be cleared through this API; set a new one instead.

**switch_discord_channel:** Changes where the business posts. The channel must come from list_discord_channels and be a text, announcement or forum channel the bot can access. A new posting webhook is created in it.

**list_discord_roles:** Returned unordered; sort by position for Discord’s order.

**create_discord_role:** The bot needs Manage Roles and cannot create a role above its own highest role or grant permissions it lacks. Servers that added the bot before role management must re-invite it.

**update_discord_role:** The role must sit below the bot’s highest role. Omitted fields are unchanged.

**list_discord_members:** Cursor-paginated: pass pagination.nextCursor as after. Returns Discord’s member objects, including role IDs and join dates.

**search_discord_members:** Prefix match only, as Discord does not search inside names.

**get_discord_member:** Returns 404 when the user is not a member of this server.

**add_discord_member_role:** Idempotent. The bot needs Manage Roles and its highest role must be above the target role. The @everyone role cannot be assigned.

**remove_discord_member_role:** Idempotent: removing a role the member lacks succeeds without change.

**list_discord_events:** withUserCount=true adds the number of members who are interested.

**create_discord_event:** external events need a location and endsAt; voice and stage events need a voice or stage channel of this server. startsAt must be in the future. Discord notifies interested members before the start. The bot needs Manage Events.

**update_discord_event:** Send any subset of fields. status=cancelled cancels the event and keeps it in the server’s history. Discord enforces valid status transitions.

**delete_discord_event:** Use update_discord_event with status=cancelled to keep it in the server’s history.

**create_discord_thread:** Pass messageId to start the thread from a message in that channel, or omit it for a standalone thread. autoArchiveDuration is minutes of inactivity: 60, 1440, 4320 or 10080.

**crosspost_discord_message:** Only works in announcement channels; other channels return 400.

**delete_discord_message:** Deleting someone else’s message needs the bot’s Manage Messages permission.

**list_discord_pins:** Discord allows at most 50 pins per channel.

**pin_discord_message:** Idempotent. The bot needs Manage Messages. A channel holds at most 50 pins; unpin one first when full.

**unpin_discord_message:** Idempotent: unpinning a message that is not pinned succeeds without change.

**send_discord_direct_message:** The recipient must be a member of this connection’s server and accept direct messages. Send at least one of content (up to 2,000 characters), embeds or attachments (up to 10 each). Sent immediately and not stored as a post.

### Google Business Profile

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `list_google_business_locations` | GET | `/google-business/{connectionId}/locations` | business.read | List the Google Business Profile locations this connection can manage. Connections: googlebusiness. |
| `select_google_business_location` | PUT | `/google-business/{connectionId}/locations/selected` | connections.manage | Switch which location this Google Business connection manages by default. Write, retry-safe. Connections: googlebusiness. |
| `get_google_business_location_details` | GET | `/google-business/{connectionId}/details` | business.read | Read a location’s name, hours, contact details, categories and services. Connections: googlebusiness. |
| `update_google_business_location_details` | PUT | `/google-business/{connectionId}/details` | business.write | Update a location’s hours, description, contact details, categories or address. Write, retry-safe. Connections: googlebusiness. |
| `get_google_business_attributes` | GET | `/google-business/{connectionId}/attributes` | business.read | Read a location’s attributes such as amenities, accessibility and payment types. Connections: googlebusiness. |
| `update_google_business_attributes` | PUT | `/google-business/{connectionId}/attributes` | business.write | Set location attributes named in attributeMask. Write, retry-safe. Connections: googlebusiness. |
| `list_google_business_attribute_catalog` | GET | `/google-business/{connectionId}/attribute-catalog` | business.read | List the attributes Google offers for a location or a business category. Connections: googlebusiness. |
| `get_google_business_services` | GET | `/google-business/{connectionId}/services` | business.read | Read the services a location offers. Connections: googlebusiness. |
| `replace_google_business_services` | PUT | `/google-business/{connectionId}/services` | business.write | Replace a location’s whole service list. Write, retry-safe. Connections: googlebusiness. |
| `get_google_business_food_menus` | GET | `/google-business/{connectionId}/food-menus` | business.read | Read a restaurant location’s menus, sections, items and prices. Connections: googlebusiness. |
| `replace_google_business_food_menus` | PUT | `/google-business/{connectionId}/food-menus` | business.write | Replace a restaurant location’s menus. Write, retry-safe. Connections: googlebusiness. |
| `list_google_business_media` | GET | `/google-business/{connectionId}/media` | business.read | List the photos and videos on a location’s listing. Connections: googlebusiness. |
| `add_google_business_photo` | POST | `/google-business/{connectionId}/media` | business.write | Add a photo to a location’s listing from a public image URL. Write. Connections: googlebusiness. |
| `delete_google_business_media` | DELETE | `/google-business/{connectionId}/media/{mediaId}` | business.write | Remove a photo or video from a location’s listing. Write, retry-safe. Connections: googlebusiness. |
| `list_google_business_place_actions` | GET | `/google-business/{connectionId}/place-actions` | business.read | List the booking, ordering and reservation buttons on a location’s listing. Connections: googlebusiness. |
| `create_google_business_place_action` | POST | `/google-business/{connectionId}/place-actions` | business.write | Add a booking, ordering or reservation button to a location’s listing. Write. Connections: googlebusiness. |
| `update_google_business_place_action` | PATCH | `/google-business/{connectionId}/place-actions` | business.write | Change the URL or type of a listing button. Write, retry-safe. Connections: googlebusiness. |
| `delete_google_business_place_action` | DELETE | `/google-business/{connectionId}/place-actions` | business.write | Remove a booking, ordering or reservation button from a listing. Write, retry-safe. Connections: googlebusiness. |
| `list_google_business_reviews` | GET | `/google-business/{connectionId}/reviews` | business.read | List a location’s reviews with ratings, comments and owner replies. Connections: googlebusiness. |
| `get_google_business_review` | GET | `/google-business/{connectionId}/reviews/{reviewId}` | business.read | Read one review and its current owner reply. Connections: googlebusiness. |
| `list_google_business_reviews_across_locations` | GET | `/google-business/{connectionId}/location-reviews` | business.read | Read recent reviews across several of this connection’s locations at once. Connections: googlebusiness. |
| `reply_to_google_business_review` | POST | `/google-business/{connectionId}/reviews/{reviewId}/reply` | business.write | Post or replace the owner reply on a review. Write. Connections: googlebusiness. |
| `delete_google_business_review_reply` | DELETE | `/google-business/{connectionId}/reviews/{reviewId}/reply` | business.write | Remove the owner reply from a review. The review itself stays. Write, retry-safe. Connections: googlebusiness. |
| `get_google_business_verification_status` | GET | `/google-business/{connectionId}/verifications` | business.read | Read whether a location is verified, plus its verification history. Connections: googlebusiness. |
| `list_google_business_verification_options` | POST | `/google-business/{connectionId}/verifications/options` | business.read | List the verification methods Google offers for a location. Write, retry-safe. Connections: googlebusiness. |
| `start_google_business_verification` | POST | `/google-business/{connectionId}/verifications` | business.write | Start verifying a location by postcard, phone call, SMS or email. Write. Connections: googlebusiness. |
| `complete_google_business_verification` | POST | `/google-business/{connectionId}/verifications/{verificationId}/complete` | business.write | Complete a pending verification with the code Google sent the business. Write, retry-safe. Connections: googlebusiness. |

**list_google_business_locations:** Returns up to `limit` locations (default 100, max 500) plus the currently selected location. When `hasMore` is true, narrow with `search` (business name) or `filter` (a Google Business Information filter expression such as storeCode="LH279411"). Location IDs returned here are the only ones other Google Business operations accept for this connection.

**select_google_business_location:** Operations that take an optional locationId use the selected location when it is omitted, and review replies always go to the selected location. The location must have been returned by the location list for this connection. Fails with 409 when another connection on the same publishing profile already manages that location.

**get_google_business_location_details:** Uses the selected location unless locationId is given. `readMask` limits the fields (name, title, phoneNumbers, categories, storefrontAddress, websiteUri, regularHours, specialHours, serviceArea, serviceItems, profile, openInfo, metadata, moreHours). The `location` block carries the public review link, Maps link and verification status.

**update_google_business_location_details:** `updateMask` names the fields to change (e.g. regularHours, specialHours, profile.description, websiteUri, phoneNumbers, categories, serviceItems, title, storefrontAddress, serviceArea, openInfo, moreHours). Fields not named are left unchanged; a field named in updateMask but left out of the body is cleared. serviceArea and lists are full replacements. Google may hold edits for review before they appear publicly, and restricts latlng writes to approved clients.

**update_google_business_attributes:** Only attributes listed in `attributeMask` (comma-separated, e.g. has_delivery,has_takeout) change. Available attributes depend on the business category; read the attribute catalog first.

**list_google_business_attribute_catalog:** Location mode (default): attributes valid for the selected location or locationId. Category mode: pass categoryName (categories/...) with regionCode, and optionally languageCode; do not combine with locationId. Paginate with pageToken.

**replace_google_business_services:** Google supports only full replacement: send every service to keep. Each item is either a structured service (serviceTypeId from Google’s catalog) or a free-form service (category plus label), with an optional price.

**get_google_business_food_menus:** Only locations in food categories support menus; others return an error.

**replace_google_business_food_menus:** Send the full menus array; it replaces the current menus. `updateMask` (e.g. "menus") limits which fields change.

**add_google_business_photo:** Google downloads the image from sourceUrl, so it must be publicly reachable. `category` controls where it appears (COVER, PROFILE, LOGO, EXTERIOR, INTERIOR, PRODUCT, FOOD_AND_DRINK, MENU, COMMON_AREA, ROOMS, TEAMS, AT_WORK, ADDITIONAL). Repeating the request adds another copy.

**delete_google_business_media:** Use the `id` from the media list or from adding the photo, with the same locationId it was listed under.

**create_google_business_place_action:** Types: APPOINTMENT, ONLINE_APPOINTMENT, DINING_RESERVATION, FOOD_ORDERING, FOOD_DELIVERY, FOOD_TAKEOUT, SHOP_ONLINE. The response `name` identifies the link for updates and deletion.

**update_google_business_place_action:** `name` is the link name returned by the list or create operation (locations/.../placeActionLinks/...). Send uri, placeActionType or both.

**delete_google_business_place_action:** `name` is the link name returned by the list or create operation.

**list_google_business_reviews:** Uses the selected location unless locationId is given. Up to 50 per page; pass nextPageToken as pageToken. Includes the average rating and total review count.

**get_google_business_review:** Reads from the selected location unless locationId is given; a review from another location returns 404. Read the review before replying if someone may have answered it in Google directly, because replies overwrite without history.

**list_google_business_reviews_across_locations:** Pass up to 50 location IDs from the location list (comma-separated). Results are one flat list; each entry has the location `name` and the `review` (whose identity is review.reviewId). Ordered newest first by default, so you can stop paginating once past your date window. Does not include average ratings; use the single-location review list for those.

**reply_to_google_business_review:** The reply is public and goes to the connection’s selected location. A second reply overwrites the first, and Google keeps no history, so this is not retried automatically: if the outcome is uncertain, read the review before sending again. Use a review ID returned by a review list or read for this connection.

**get_google_business_verification_status:** `voiceOfMerchantState.hasVoiceOfMerchant` is true when the listing is verified and live. Each verification has a state of PENDING, COMPLETED or FAILED and an `id` for completing it.

**list_google_business_verification_options:** Nothing is sent to the business. languageCode is required; service-area businesses must also send context with the service address. Use before starting a verification.

**start_google_business_verification:** Google contacts the business with a code: ADDRESS mails a postcard (mailerContact), PHONE_CALL and SMS use phoneNumber, EMAIL uses emailAddress. Service-area businesses also send context. Submit the code with the complete operation. Repeating the request starts another verification, so it is not retried automatically.

**complete_google_business_verification:** Use a verification `id` from the status or start operation, with the same locationId. A wrong code or a verification that is no longer pending is rejected.

### WhatsApp Business

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `register_whatsapp_number` | POST | `/whatsapp/{connectionId}/register` | connections.manage | Re-register a connected WhatsApp number on the Cloud API. Write, retry-safe. Connections: whatsapp. |
| `get_whatsapp_number_status` | GET | `/whatsapp/{connectionId}/number-status` | messaging.read | Read live quality, messaging tier, name approval and health for a WhatsApp number. Connections: whatsapp. |
| `list_whatsapp_account_events` | GET | `/whatsapp/{connectionId}/account-events` | messaging.read | List Meta notifications for a WhatsApp account, newest first. Connections: whatsapp. |
| `list_whatsapp_templates` | GET | `/whatsapp/{connectionId}/templates` | messaging.read | List message templates on a WhatsApp Business Account. Connections: whatsapp. |
| `create_whatsapp_template` | POST | `/whatsapp/{connectionId}/templates` | messaging.write | Create a message template, custom or from Meta’s template library. Write. Connections: whatsapp. |
| `get_whatsapp_template` | GET | `/whatsapp/{connectionId}/templates/{templateName}` | messaging.read | Read one template variant by name. Connections: whatsapp. |
| `update_whatsapp_template` | PATCH | `/whatsapp/{connectionId}/templates/{templateName}` | messaging.write | Edit one template variant’s components or delivery time-to-live by name. Write, retry-safe. Connections: whatsapp. |
| `delete_whatsapp_template` | DELETE | `/whatsapp/{connectionId}/templates/{templateName}` | messaging.write | Delete a template, every language or one language variant. Write, retry-safe. Connections: whatsapp. |
| `get_whatsapp_template_variant` | GET | `/whatsapp/{connectionId}/templates/by-id/{templateId}` | messaging.read | Read one template language variant by its template ID. Connections: whatsapp. |
| `update_whatsapp_template_variant` | PATCH | `/whatsapp/{connectionId}/templates/by-id/{templateId}` | messaging.write | Edit one template language variant by its template ID. Write, retry-safe. Connections: whatsapp. |
| `delete_whatsapp_template_variant` | DELETE | `/whatsapp/{connectionId}/templates/by-id/{templateId}` | messaging.write | Delete one template language variant by its template ID. Write, retry-safe. Connections: whatsapp. |
| `get_whatsapp_library_template` | GET | `/whatsapp/{connectionId}/template-library` | messaging.read | Look up a pre-approved template from Meta’s template library by exact name. Connections: whatsapp. |
| `list_whatsapp_flows` | GET | `/whatsapp/{connectionId}/flows` | messaging.read | List WhatsApp Flows on the business account. Connections: whatsapp. |
| `create_whatsapp_flow` | POST | `/whatsapp/{connectionId}/flows` | messaging.write | Create a WhatsApp Flow in DRAFT status, optionally cloning another flow. Write. Connections: whatsapp. |
| `get_whatsapp_flow` | GET | `/whatsapp/{connectionId}/flows/{flowId}` | messaging.read | Read one flow with status, validation errors and preview link. Connections: whatsapp. |
| `update_whatsapp_flow` | PATCH | `/whatsapp/{connectionId}/flows/{flowId}` | messaging.write | Rename a DRAFT flow or change its categories or endpoint. Write, retry-safe. Connections: whatsapp. |
| `delete_whatsapp_flow` | DELETE | `/whatsapp/{connectionId}/flows/{flowId}` | messaging.write | Delete a DRAFT flow permanently. Write, retry-safe. Connections: whatsapp. |
| `get_whatsapp_flow_json` | GET | `/whatsapp/{connectionId}/flows/{flowId}/json` | messaging.read | Read the flow’s JSON asset with a temporary download link. Connections: whatsapp. |
| `upload_whatsapp_flow_json` | PUT | `/whatsapp/{connectionId}/flows/{flowId}/json` | messaging.write | Upload or replace the Flow JSON of a DRAFT flow. Write, retry-safe. Connections: whatsapp. |
| `get_whatsapp_flow_preview` | GET | `/whatsapp/{connectionId}/flows/{flowId}/preview` | messaging.read | Get an embeddable web preview link for a flow, drafts included. Connections: whatsapp. |
| `list_whatsapp_flow_versions` | GET | `/whatsapp/{connectionId}/flows/{flowId}/versions` | messaging.read | List a flow’s version history, newest first. Connections: whatsapp. |
| `publish_whatsapp_flow` | POST | `/whatsapp/{connectionId}/flows/{flowId}/publish` | messaging.write | Publish a DRAFT flow so it can be sent. Irreversible. Write, retry-safe. Connections: whatsapp. |
| `deprecate_whatsapp_flow` | POST | `/whatsapp/{connectionId}/flows/{flowId}/deprecate` | messaging.write | Deprecate a PUBLISHED flow so it can no longer be sent or opened. Irreversible. Write, retry-safe. Connections: whatsapp. |
| `send_whatsapp_flow` | POST | `/whatsapp/{connectionId}/flow-messages` | messaging.send | Send a published flow to one recipient as an interactive message. Write. Charges messages. Connections: whatsapp. |
| `list_whatsapp_flow_responses` | GET | `/whatsapp/{connectionId}/flow-responses` | messaging.read | List responses customers submitted from flows, newest first. Connections: whatsapp. |
| `get_whatsapp_flow_encryption_key` | GET | `/whatsapp/{connectionId}/flow-encryption-key` | messaging.read | Read the Flows endpoint encryption key registered on the number. Connections: whatsapp. |
| `register_whatsapp_flow_encryption_key` | POST | `/whatsapp/{connectionId}/flow-encryption-key` | messaging.write | Register or replace the Flows endpoint encryption public key on the number. Write, retry-safe. Connections: whatsapp. |
| `list_whatsapp_groups` | GET | `/whatsapp/{connectionId}/groups` | messaging.read | List active WhatsApp group chats on a number. Connections: whatsapp. |
| `create_whatsapp_group` | POST | `/whatsapp/{connectionId}/groups` | messaging.write | Create a WhatsApp group chat and get its invite link. Write. Connections: whatsapp. |
| `get_whatsapp_group` | GET | `/whatsapp/{connectionId}/groups/{groupId}` | messaging.read | Read a group’s subject, description, participants and settings. Connections: whatsapp. |
| `update_whatsapp_group` | PATCH | `/whatsapp/{connectionId}/groups/{groupId}` | messaging.write | Change a group’s subject, description or join approval mode. Write, retry-safe. Connections: whatsapp. |
| `delete_whatsapp_group` | DELETE | `/whatsapp/{connectionId}/groups/{groupId}` | messaging.write | Delete a group and remove all participants. Write, retry-safe. Connections: whatsapp. |
| `add_whatsapp_group_participants` | POST | `/whatsapp/{connectionId}/groups/{groupId}/participants` | messaging.write | Add up to 8 participants to a group. Write, retry-safe. Connections: whatsapp. |
| `remove_whatsapp_group_participants` | POST | `/whatsapp/{connectionId}/groups/{groupId}/participants/remove` | messaging.write | Remove participants from a group. Write, retry-safe. Connections: whatsapp. |
| `list_whatsapp_group_join_requests` | GET | `/whatsapp/{connectionId}/groups/{groupId}/join-requests` | messaging.read | List pending join requests for a group that requires approval. Connections: whatsapp. |
| `approve_whatsapp_group_join_requests` | POST | `/whatsapp/{connectionId}/groups/{groupId}/join-requests/approve` | messaging.write | Approve pending join requests for a group. Write, retry-safe. Connections: whatsapp. |
| `reject_whatsapp_group_join_requests` | POST | `/whatsapp/{connectionId}/groups/{groupId}/join-requests/reject` | messaging.write | Reject pending join requests for a group. Write, retry-safe. Connections: whatsapp. |
| `create_whatsapp_group_invite_link` | POST | `/whatsapp/{connectionId}/groups/{groupId}/invite-link` | messaging.write | Create a new invite link for a group, revoking the previous one. Write. Connections: whatsapp. |
| `get_whatsapp_business_profile` | GET | `/whatsapp/{connectionId}/business-profile` | messaging.read | Read the WhatsApp Business profile: about, address, description, email, websites. Connections: whatsapp. |
| `update_whatsapp_business_profile` | PATCH | `/whatsapp/{connectionId}/business-profile` | messaging.write | Update fields of the WhatsApp Business profile. Write, retry-safe. Connections: whatsapp. |
| `update_whatsapp_profile_photo` | POST | `/whatsapp/{connectionId}/business-profile/photo` | messaging.write | Replace the WhatsApp Business profile photo from an image link. Write, retry-safe. Connections: whatsapp. |
| `get_whatsapp_username` | GET | `/whatsapp/{connectionId}/business-profile/username` | messaging.read | Read the WhatsApp Business username and its approval status. Connections: whatsapp. |
| `set_whatsapp_username` | PUT | `/whatsapp/{connectionId}/business-profile/username` | messaging.write | Claim or transfer a WhatsApp Business username. Write, retry-safe. Connections: whatsapp. |
| `delete_whatsapp_username` | DELETE | `/whatsapp/{connectionId}/business-profile/username` | messaging.write | Release the WhatsApp Business username so others can claim it. Write, retry-safe. Connections: whatsapp. |
| `list_whatsapp_username_suggestions` | GET | `/whatsapp/{connectionId}/business-profile/username-suggestions` | messaging.read | Suggest available usernames based on the business profile name. Connections: whatsapp. |
| `get_whatsapp_display_name` | GET | `/whatsapp/{connectionId}/business-profile/display-name` | messaging.read | Read the number’s display name and its Meta review status. Connections: whatsapp. |
| `request_whatsapp_display_name_change` | POST | `/whatsapp/{connectionId}/business-profile/display-name` | messaging.write | Submit a new display name for Meta review. Write, retry-safe. Connections: whatsapp. |
| `list_whatsapp_blocked_users` | GET | `/whatsapp/{connectionId}/blocked-users` | messaging.read | List WhatsApp users blocked on a number. Connections: whatsapp. |
| `block_whatsapp_users` | POST | `/whatsapp/{connectionId}/blocked-users` | messaging.write | Block up to 1,000 WhatsApp users on a number. Write, retry-safe. Connections: whatsapp. |
| `unblock_whatsapp_users` | POST | `/whatsapp/{connectionId}/blocked-users/remove` | messaging.write | Unblock up to 1,000 WhatsApp users on a number. Write, retry-safe. Connections: whatsapp. |
| `get_whatsapp_block_status` | GET | `/whatsapp/{connectionId}/blocked-users/status` | messaging.read | Check whether one WhatsApp user is blocked on a number. Connections: whatsapp. |
| `get_whatsapp_conversion_dataset` | GET | `/whatsapp/{connectionId}/conversion-dataset` | ads.read | Read the Meta dataset linked for Click-to-WhatsApp conversions, if any. Connections: whatsapp. |
| `provision_whatsapp_conversion_dataset` | POST | `/whatsapp/{connectionId}/conversion-dataset` | ads.write | Create or fetch the Meta dataset for Click-to-WhatsApp conversions. Write, retry-safe. Connections: whatsapp. |
| `list_whatsapp_conversions` | GET | `/whatsapp/{connectionId}/conversions` | ads.read | List recent conversion events sent for a WhatsApp number. Connections: whatsapp. |
| `send_whatsapp_conversion` | POST | `/whatsapp/{connectionId}/conversions` | ads.write | Report a conversion from a Click-to-WhatsApp conversation to Meta. Write, retry-safe. Connections: whatsapp. |
| `get_whatsapp_calling_settings` | GET | `/whatsapp/{connectionId}/calling` | voice.read | Read calling settings for a WhatsApp number. Connections: whatsapp. |
| `check_whatsapp_call_permission` | GET | `/whatsapp/{connectionId}/call-permissions` | voice.read | Check whether a consumer has granted permission to receive calls. Connections: whatsapp. |
| `request_whatsapp_call_permission` | POST | `/whatsapp/{connectionId}/call-permissions` | messaging.send | Ask a consumer for permission to call them on WhatsApp. Write, retry-safe. Charges messages. Connections: whatsapp. |
| `estimate_whatsapp_call` | GET | `/whatsapp/{connectionId}/calls/estimate` | voice.read | Estimate the cost of an outbound WhatsApp call. Connections: whatsapp. |
| `list_whatsapp_calls` | GET | `/whatsapp/{connectionId}/calls` | voice.read | List call history for a WhatsApp number, newest first. Connections: whatsapp. |
| `start_whatsapp_call` | POST | `/whatsapp/{connectionId}/calls` | voice.spend | Place an outbound WhatsApp voice call to a consumer who granted permission. Write, retry-safe. Charges provider_micros. Connections: whatsapp. |
| `get_whatsapp_call` | GET | `/whatsapp/{connectionId}/calls/{callId}` | voice.read | Read one WhatsApp call with status, duration and billing. Connections: whatsapp. |
| `get_whatsapp_call_recording` | GET | `/whatsapp/{connectionId}/calls/{callId}/recording` | voice.read | Get a fresh, short-lived link to a call recording (MP3). Connections: whatsapp. |

**register_whatsapp_number:** Use when the number has its own two-step verification PIN and sends fail with a permission error while the connection still looks healthy. Send the 6-digit PIN set on the number; omit it to apply the platform’s default registration PIN. The PIN is used for this call only and is not stored. Repeating the call is harmless.

**get_whatsapp_number_status:** Fetched live from Meta: display number and name approval, quality rating, messaging-limit tier, throughput, official-business badge, health status, and the owning WhatsApp Business Account’s verification status and timezone.

**list_whatsapp_account_events:** Template review outcomes (approved, rejected, paused, recategorized) and account status changes (restricted, disabled, reinstated, disconnected). The feed starts at the first event recorded for the account and is not backfilled.

**list_whatsapp_templates:** One entry per name and language; a multi-language template appears once per language, each with its own template ID. Fetched live from Meta.

**create_whatsapp_template:** Custom templates (components) go to Meta review, which can take up to 24 hours; the final status arrives as a template status event. Library templates (library_template_name, no components) are pre-approved. Library templates with URL or phone buttons need matching library_template_button_inputs; look them up with get_whatsapp_library_template. Flow buttons may only reference flows returned by this API. message_send_ttl_seconds ranges: AUTHENTICATION 30–900, UTILITY 30–43200, MARKETING 43200–2592000; -1 keeps the 30-day default for AUTHENTICATION and UTILITY.

**get_whatsapp_template:** A name identifies a family of language variants. Pass language to address one variant; without it, a name with several languages is a 409 listing them. Template names are scoped to this WhatsApp Business Account.

**update_whatsapp_template:** Name, language and category cannot change. Meta allows edits only in APPROVED, REJECTED or PAUSED state; an approved template can be edited once per 24 hours and 10 times per 30 days. A component edit sends the variant back to review (status normally PENDING); a TTL-only edit keeps it approved. Pass language when the name has several languages.

**delete_whatsapp_template:** Without language this deletes every language variant of the name. Pass language to delete one variant; the response scope says which happened. The name cannot be reused for 30 days.

**get_whatsapp_template_variant:** Use the ID from list_whatsapp_templates or a template status event after listing templates. Includes rejected_reason and quality score when Meta reports them.

**update_whatsapp_template_variant:** Same rules as update_whatsapp_template: edits only in APPROVED, REJECTED or PAUSED state, at most once per 24 hours for approved templates; component edits go back to review.

**delete_whatsapp_template_variant:** Other languages of the same name are untouched. The name cannot be reused for 30 days once its last variant is deleted.

**get_whatsapp_library_template:** Returns the body, parameters, available languages and buttons, or template: null when nothing matches. Templates with URL or phone buttons need matching library_template_button_inputs when created. If the requested language is not offered, the first available variant is returned.

**list_whatsapp_flows:** Includes status (DRAFT, PUBLISHED, DEPRECATED, BLOCKED, THROTTLED), categories, validation errors and version within the flow’s clone lineage.

**create_whatsapp_flow:** Then upload Flow JSON and publish it to make it sendable. cloneFlowId copies the Flow JSON of a flow returned by this API; asVersion=true keeps the clone in that flow’s version lineage. endpointUri (HTTPS) is used only when the Flow JSON declares data_api_version 3.0.

**update_whatsapp_flow:** Published flows are immutable; create a new flow (optionally cloning) instead.

**delete_whatsapp_flow:** Only DRAFT flows can be deleted; deprecate published flows instead.

**upload_whatsapp_flow_json:** Flow JSON defines the screens, components and navigation (Meta’s Flow JSON reference). Meta validates it on upload; validation_errors is empty when valid.

**get_whatsapp_flow_preview:** The link is reused for about 30 days. invalidate=true mints a fresh link and the previous one stops working.

**list_whatsapp_flow_versions:** Versions are flows cloned with asVersion=true. Each entry carries the version’s live name and status; missing=true means Meta no longer has it.

**publish_whatsapp_flow:** The flow and its JSON become immutable. Fails when the flow has validation errors, or when it uses an endpoint and no encryption key is registered.

**deprecate_whatsapp_flow:** Sessions already open may continue until they complete.

**send_whatsapp_flow:** The recipient opens the flow natively from a call-to-action button; responses arrive as messages and through list_whatsapp_flow_responses. Interactive messages need an open 24-hour customer-service window. Charged as one message. draft=true sends an unpublished flow for testing. flow_token correlates responses; omit it to let responses be attributed to the flow automatically.

**list_whatsapp_flow_responses:** Pass flowId to scope to one flow; responses sent with a custom flow_token are not attributed to a flow.

**get_whatsapp_flow_encryption_key:** Endpoint-backed flows (data_exchange) need a registered RSA public key; publishing fails without one. registered reflects whether a key is present.

**register_whatsapp_flow_encryption_key:** Only one key is active per number; a new key replaces the previous one. The flow endpoint must serve the matching private key. Private keys are rejected.

**list_whatsapp_groups:** Cloud API-only numbers; not available on numbers shared with the WhatsApp Business app. Page with after from paging.cursors.after.

**create_whatsapp_group:** Groups are invite-only and hold at most 8 participants. Cloud API-only numbers. joinApprovalMode controls whether people joining by link need approval.

**add_whatsapp_group_participants:** A group holds at most 8 participants in total. Meta documents groups as invite-only, so people normally join through the invite link.

**create_whatsapp_group_invite_link:** Not retry-safe after an unconfirmed outcome: a second call would revoke the link the first one created.

**update_whatsapp_business_profile:** Only fields sent are changed. about max 139 characters, description max 512, at most 2 websites. Change the photo with update_whatsapp_profile_photo.

**update_whatsapp_profile_photo:** The image is fetched server-side from a public HTTPS link that must not redirect. JPEG or PNG, max 5 MB, 640×640 recommended. Locked on numbers shared with the WhatsApp Business app.

**get_whatsapp_username:** status is approved (active), reserved (pending activation) or none.

**set_whatsapp_username:** 3–35 characters: letters, digits, periods and underscores, at least one letter, no leading, trailing or consecutive periods, no www prefix and no domain suffix. If another account holds the name, send transferAction=force_transfer to request a transfer.

**request_whatsapp_display_name_change:** Must follow WhatsApp naming guidelines and represent the business. Review typically takes 1–3 business days; read get_whatsapp_display_name for the outcome.

**list_whatsapp_blocked_users:** Pass nextCursor back as after for the next page. The blocklist holds up to 64,000 users.

**block_whatsapp_users:** Blocked users cannot message the number and sends to them fail. Only users who messaged within the last 24 hours can be blocked, and other business accounts cannot be. Per-user failures are listed in failed while the rest succeed.

**unblock_whatsapp_users:** Per-user failures are listed in failed while the rest succeed.

**get_whatsapp_conversion_dataset:** datasetId is null until provisioned. Conversions can be sent only once it exists.

**provision_whatsapp_conversion_dataset:** A WhatsApp Business Account owns at most one such dataset, so repeating returns the same ID with created=false. Needs the connection to carry Meta’s business-events permission; otherwise reconnect the number.

**list_whatsapp_conversions:** Covers about the last 30 days.

**send_whatsapp_conversion:** Attributes LeadSubmitted, Purchase, AddToCart, InitiateCheckout or ViewContent to the ad that started the chat. Identify the conversation by threadId (an inbox conversation on this connection) or phoneE164 (digits only); it must have started from an ad click. Provision the dataset first. eventId deduplicates at Meta, so retries are safe. A 200 means Meta received the request; check eventsFailed and failures. email and externalId are hashed before sending.

**get_whatsapp_calling_settings:** Whether calling is enabled, the forward destination, recording, caller ID, the call deep link and the maximum call duration. Placing calls requires a maximum call duration of 120 minutes or less.

**check_whatsapp_call_permission:** Returns the permission state (temporary, permanent or none) and which actions are allowed now: start_call or send_call_permission_request.

**request_whatsapp_call_permission:** Sends the consent prompt; the consumer must tap Allow before a call can start. Meta allows 1 prompt per consumer per 24 hours (2 per 7 days) and needs an open 24-hour customer-service window. Charged as one message.

**estimate_whatsapp_call:** billableCostUSD (carrier leg plus recording) is what start_whatsapp_call charges to the allowance. The Meta per-minute fee is billed by Meta directly to the WhatsApp Business Account and is shown for reference only.

**list_whatsapp_calls:** Pass nextCursor back as before for the next page. since and until bound the range.

**start_whatsapp_call:** The call is bridged to the number’s configured forward destination and continues asynchronously; follow it with get_whatsapp_call. Requires calling enabled, consumer permission, and a maximum call duration of 120 minutes or less on the number. The allowance is charged the quoted telephony and recording cost for that maximum duration when the call is placed. The Meta per-minute fee is billed by Meta to the WhatsApp Business Account. Retrying with the same Idempotency-Key never dials twice.

**get_whatsapp_call:** Fetch a fresh recording link with get_whatsapp_call_recording.

**get_whatsapp_call_recording:** Links expire about 10 minutes after they are issued; request a new one to play later.

### Contacts, broadcasts, sequences and automations

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `list_automation_contacts` | GET | `/automation/contacts` | contacts.read | List messaging contacts of this business. |
| `list_automation_connection_contacts` | GET | `/automation/connections/{connectionId}/contacts` | contacts.read | List messaging contacts reachable through one connection. Connections: instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack. |
| `create_automation_contact` | POST | `/automation/contacts` | contacts.write | Create a messaging contact without a channel. Write. |
| `create_automation_connection_contact` | POST | `/automation/connections/{connectionId}/contacts` | contacts.write | Create a messaging contact with a channel on one connection. Write. Connections: instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack. |
| `get_automation_contact` | GET | `/automation/contacts/{contactId}` | contacts.read | Read one messaging contact with its channels. |
| `update_automation_contact` | PATCH | `/automation/contacts/{contactId}` | contacts.write | Change fields on a messaging contact. Write, retry-safe. |
| `delete_automation_contact` | DELETE | `/automation/contacts/{contactId}` | contacts.write | Permanently delete a messaging contact and its channels. Write, retry-safe. |
| `list_automation_contact_channels` | GET | `/automation/contacts/{contactId}/channels` | contacts.read | List the messaging channels linked to a contact. |
| `set_automation_contact_field` | PUT | `/automation/contacts/{contactId}/fields/{slug}` | contacts.write | Set a custom field value on a contact. Write, retry-safe. |
| `clear_automation_contact_field` | DELETE | `/automation/contacts/{contactId}/fields/{slug}` | contacts.write | Remove a custom field value from a contact. Write, retry-safe. |
| `import_automation_contacts` | POST | `/automation/contacts/bulk` | contacts.write | Import up to 1,000 messaging contacts without channels. Write. |
| `import_automation_connection_contacts` | POST | `/automation/connections/{connectionId}/contacts/bulk` | contacts.write | Import up to 1,000 messaging contacts with channels on one connection. Write, retry-safe. Connections: instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack. |
| `sync_contacts_to_messaging` | POST | `/automation/contacts/sync` | contacts.read, contacts.write | Copy this business’s saved contacts into messaging contacts. Write. |
| `list_automation_custom_fields` | GET | `/automation/custom-fields` | contacts.read | List contact custom field definitions. |
| `create_automation_custom_field` | POST | `/automation/custom-fields` | contacts.write | Define a custom field for contacts. Write. |
| `update_automation_custom_field` | PATCH | `/automation/custom-fields/{fieldId}` | contacts.write | Rename a custom field or replace its select options. Write, retry-safe. |
| `delete_automation_custom_field` | DELETE | `/automation/custom-fields/{fieldId}` | contacts.write | Delete a custom field and its values on every contact. Write, retry-safe. |
| `list_automation_broadcasts` | GET | `/automation/broadcasts` | messaging.read | List broadcasts with delivery stats. |
| `create_automation_broadcast` | POST | `/automation/connections/{connectionId}/broadcasts` | messaging.write | Create a draft broadcast that sends from one connection. Write. Connections: instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack. |
| `get_automation_broadcast` | GET | `/automation/broadcasts/{broadcastId}` | messaging.read | Read one broadcast with its configuration and delivery stats. |
| `update_automation_broadcast` | PATCH | `/automation/broadcasts/{broadcastId}` | messaging.write | Change a draft broadcast’s name, message, template or segment. Write, retry-safe. |
| `delete_automation_broadcast` | DELETE | `/automation/broadcasts/{broadcastId}` | messaging.write | Delete a draft broadcast. Write, retry-safe. |
| `list_automation_broadcast_recipients` | GET | `/automation/broadcasts/{broadcastId}/recipients` | messaging.read | List a broadcast’s recipients and their delivery status. |
| `add_automation_broadcast_recipients` | POST | `/automation/broadcasts/{broadcastId}/recipients` | messaging.write | Add recipients to a draft broadcast. Write, retry-safe. |
| `send_automation_broadcast` | POST | `/automation/broadcasts/{broadcastId}/send` | messaging.send | Start sending a draft broadcast now. Write. Charges messages. |
| `schedule_automation_broadcast` | POST | `/automation/broadcasts/{broadcastId}/schedule` | messaging.send | Schedule a draft broadcast for a future time. Write. Charges messages. |
| `cancel_automation_broadcast` | POST | `/automation/broadcasts/{broadcastId}/cancel` | messaging.write | Cancel a scheduled or sending broadcast. Write, retry-safe. |
| `list_automation_sequences` | GET | `/automation/sequences` | workflows.read | List messaging sequences with enrollment stats. |
| `create_automation_sequence` | POST | `/automation/connections/{connectionId}/sequences` | workflows.write | Create a draft multi-step messaging sequence on one connection. Write. Connections: instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack. |
| `get_automation_sequence` | GET | `/automation/sequences/{sequenceId}` | workflows.read | Read one sequence with its steps and enrollment stats. |
| `update_automation_sequence` | PATCH | `/automation/sequences/{sequenceId}` | workflows.write | Change a sequence’s name, steps or exit rules. Write, retry-safe. |
| `delete_automation_sequence` | DELETE | `/automation/sequences/{sequenceId}` | workflows.write | Delete a sequence and stop its active enrollments. Write, retry-safe. |
| `activate_automation_sequence` | POST | `/automation/sequences/{sequenceId}/activate` | messaging.send | Start or resume a sequence so enrolled contacts receive its steps. Write, retry-safe. |
| `pause_automation_sequence` | POST | `/automation/sequences/{sequenceId}/pause` | workflows.write | Pause a sequence. Enrolled contacts wait until it is activated again. Write, retry-safe. |
| `enroll_automation_sequence_contacts` | POST | `/automation/sequences/{sequenceId}/enrollments` | messaging.send | Enroll contacts of this business in a sequence. Write. Charges messages. |
| `list_automation_sequence_enrollments` | GET | `/automation/sequences/{sequenceId}/enrollments` | workflows.read | List contacts enrolled in a sequence and their progress. |
| `unenroll_automation_sequence_contact` | DELETE | `/automation/sequences/{sequenceId}/enrollments/{contactId}` | workflows.write | Remove a contact from a sequence so it receives no further steps. Write, retry-safe. |
| `list_automation_workflows` | GET | `/automation/workflows` | workflows.read | List conversation workflows with run stats. |
| `create_automation_workflow` | POST | `/automation/connections/{connectionId}/workflows` | workflows.write | Create a draft conversation workflow on one connection. Write. Connections: whatsapp, instagram, facebook, telegram, twitter, bluesky, reddit. |
| `get_automation_workflow` | GET | `/automation/workflows/{workflowId}` | workflows.read | Read one workflow with its graph and run stats. |
| `update_automation_workflow` | PATCH | `/automation/workflows/{workflowId}` | workflows.write | Change a workflow’s name, description or graph. Write, retry-safe. |
| `move_automation_workflow` | PUT | `/automation/workflows/{workflowId}/connection` | workflows.write | Move a workflow to another connection of this business. Write, retry-safe. |
| `delete_automation_workflow` | DELETE | `/automation/workflows/{workflowId}` | workflows.write | Delete a workflow and all of its runs. Write, retry-safe. |
| `activate_automation_workflow` | POST | `/automation/workflows/{workflowId}/activate` | workflows.activate | Check a workflow is runnable and set it live. Write, retry-safe. |
| `pause_automation_workflow` | POST | `/automation/workflows/{workflowId}/pause` | workflows.write | Stop a workflow from starting new runs. Write, retry-safe. |
| `duplicate_automation_workflow` | POST | `/automation/workflows/{workflowId}/duplicate` | workflows.write | Copy a workflow into a new draft. Write. |
| `list_automation_workflow_versions` | GET | `/automation/workflows/{workflowId}/versions` | workflows.read | List a workflow’s saved versions, newest first. |
| `get_automation_workflow_version` | GET | `/automation/workflows/{workflowId}/versions/{version}` | workflows.read | Read the full graph of one saved workflow version. |
| `restore_automation_workflow_version` | POST | `/automation/workflows/{workflowId}/versions/{version}/restore` | workflows.write | Replace a workflow’s graph with a saved version. Write, retry-safe. |
| `list_automation_workflow_runs` | GET | `/automation/workflows/{workflowId}/runs` | workflows.read | List recent runs of a workflow. |
| `start_automation_workflow_run` | POST | `/automation/workflows/{workflowId}/runs` | workflows.activate, messaging.send | Start a workflow run by hand in one conversation. Write. Charges messages. |
| `get_automation_workflow_run_events` | GET | `/automation/workflows/{workflowId}/runs/{runId}/events` | workflows.read | Read the step-by-step timeline of one workflow run. |

**list_automation_contacts:** Contacts are the people that broadcasts, sequences and workflows message. Search matches name, email and company, not phone numbers. limit and skip apply to each of the business’s profiles. Contains personal data.

**list_automation_connection_contacts:** Returns contacts that have a channel on this connection, whichever profile created them. Contains personal data.

**create_automation_contact:** Creates a CRM-only contact in the business’s primary profile. Add a channel by creating the contact on a connection instead. Not retry-safe: a repeated create makes a second contact.

**create_automation_connection_contact:** platformIdentifier is the person’s ID on the platform (a phone number for WhatsApp). Fails with 409 if that identifier already has a channel on this connection.

**get_automation_contact:** Includes message counts and linked conversations. Contains personal data.

**update_automation_contact:** Only the fields sent change; tags replaces the whole tag list. Setting isSubscribed=false stops broadcasts and sequences reaching the contact.

**list_automation_contact_channels:** One channel per platform identity, for example a WhatsApp number or Instagram user.

**set_automation_contact_field:** The value type must match the field definition (text, number, date, boolean or select).

**clear_automation_contact_field:** The field definition is not affected.

**import_automation_contacts:** CRM-only import into the business’s primary profile. Duplicates are skipped and their new tags merged. The response reports created, skipped and per-row errors but not contact IDs; list contacts to address them.

**import_automation_connection_contacts:** Each row needs a platformIdentifier; WhatsApp identifiers must be phone numbers. Rows already bound to a channel on this connection are skipped and their new tags merged, so resending is harmless. Per-row failures are reported in errors[].

**sync_contacts_to_messaging:** Reads up to 1,000 saved CloudConnect contacts (optionally only the given contact record IDs or tags) and imports name, email, company and tags into the business’s primary profile. Phone numbers are not copied, because a phone channel needs a connection; use the connection import for that. Existing matches are skipped and their tags merged. Narrow with tags when there are more than 1,000.

**create_automation_custom_field:** Types: text, number, date, boolean and select (select needs options). The slug is generated from the name when omitted and cannot repeat (409). The type cannot change later.

**list_automation_broadcasts:** limit and skip apply to each of the business’s profiles.

**create_automation_broadcast:** WhatsApp broadcasts need an approved template (template.components and variableMapping fill its variables per recipient); other platforms use message. Add recipients, then send or schedule it. Creating a draft sends nothing.

**update_automation_broadcast:** Only draft broadcasts can change.

**delete_automation_broadcast:** Only drafts can be deleted; cancel a scheduled or sending broadcast instead.

**list_automation_broadcast_recipients:** summary totals cover every recipient regardless of filter. Failed WhatsApp sends carry the platform error code and a plain explanation. Contains personal data.

**add_automation_broadcast_recipients:** Add contacts of this business by ID, raw phone numbers (contacts are created for them), or useSegment=true to add everyone matching the broadcast’s segment filters. Only draft broadcasts accept recipients (409 otherwise). Duplicates and contacts without a channel on the platform are skipped, so resending is harmless. Adding recipients sends nothing.

**send_automation_broadcast:** Charges one message per recipient on the broadcast at the moment of sending. The first batch is sent during the request and the rest continue in the background; follow progress with the recipients list. Paid WhatsApp templates also incur platform conversation charges.

**schedule_automation_broadcast:** Charges one message per current recipient when scheduled; recipients cannot be added afterwards. Cancelling later does not return the charge. Not retry-safe: after an unconfirmed outcome, read the broadcast before scheduling again.

**cancel_automation_broadcast:** Messages already sent are not affected and their charge stays.

**list_automation_sequences:** limit and skip apply to each of the business’s profiles.

**create_automation_sequence:** Each step waits delayMinutes and then sends a message, or a WhatsApp template on WhatsApp. By default a contact leaves the sequence when they reply or unsubscribe. Creating a sequence sends nothing.

**update_automation_sequence:** steps replaces the whole step list and is only allowed while the sequence is draft or paused. Contacts are charged for the step count when enrolled, so while any are still in progress the step list cannot grow (409 SEQUENCE_IN_USE).

**activate_automation_sequence:** The sequence needs at least one step. Messages are charged when contacts are enrolled, not on activation.

**enroll_automation_sequence_contacts:** Charges one message per enrolled contact per step; the reservation covers every contact sent and is settled on the number actually enrolled. Contacts already enrolled, or without a subscribed channel on the sequence’s platform, are skipped and reported in results[]. Messages go out once the sequence is active. Not retry-safe: after an unconfirmed outcome, list enrollments before enrolling again.

**list_automation_sequence_enrollments:** Contains personal data.

**unenroll_automation_sequence_contact:** Steps already sent stay charged.

**list_automation_workflows:** limit and skip apply to each of the business’s profiles.

**create_automation_workflow:** Builds a branching workflow from nodes and edges. It starts as a draft; activate it to answer matching inbound messages. Nodes: trigger, send_message, wait_for_reply, condition, set_variable, delay, webhook, handoff, a_b_split, set_field, enroll_sequence, add_tag, remove_tag, end. AI and voice-call nodes are not available through this API: they run on shared platform credentials and unmetered spend. enroll_sequence nodes must name a sequence of this business (a literal ID, not a variable); handoff nodes cannot assign to a specific user. The node and edge arrays replace the whole graph.

**update_automation_workflow:** The graph can change only while the workflow is draft or paused; each graph change records a version you can restore. Nodes: trigger, send_message, wait_for_reply, condition, set_variable, delay, webhook, handoff, a_b_split, set_field, enroll_sequence, add_tag, remove_tag, end. AI and voice-call nodes are not available through this API: they run on shared platform credentials and unmetered spend. enroll_sequence nodes must name a sequence of this business (a literal ID, not a variable); handoff nodes cannot assign to a specific user. The node and edge arrays replace the whole graph.

**move_automation_workflow:** connectionId must be a healthy connection of this business on a platform that runs workflows. The graph is checked again against the new platform; nodes the new platform cannot run are reported as errors. Needs an integration without a connection restriction, because the workflow may currently run on any connection.

**activate_automation_workflow:** Once active, matching inbound messages start runs that reply automatically. The graph needs a trigger node and a reachable entry, and the saved graph is checked against the same node rules as an update before it goes live. Messages sent and sequence enrollments made by live workflows are not charged per message.

**pause_automation_workflow:** Runs already in progress continue to completion.

**duplicate_automation_workflow:** Copies the graph, name, description and connection. Run history is not copied. Each request makes another copy.

**list_automation_workflow_versions:** A version is recorded before every graph change and on every restore.

**restore_automation_workflow_version:** The current graph is saved as a new version first, so a restore can be undone. The workflow must be draft or paused.

**list_automation_workflow_runs:** Shows each run’s status, current node and collected variables. May contain personal data.

**start_automation_workflow_run:** Target an inbox conversation of this business with threadId, or (WhatsApp only) a phone number with to. text is treated as the inbound message. Charges one message per send step in the graph plus the steps of any sequence it enrolls into (at most 3); workflows that loop, or whose saved graph has nodes this API refuses, are rejected. The graph must be runnable. Not retry-safe: each request starts another run.

**get_automation_workflow_run_events:** Each node visited, the branch taken, errors and durations. Kept for 90 days.

### SMS, voice and phone numbers

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `get_phone_number_status` | GET | `/phone-numbers/{connectionId}` | voice.read | Read a phone number’s provisioning and regulatory status. Connections: phone. |
| `search_available_phone_numbers` | GET | `/phone-numbers/available` | voice.read | Search purchasable phone numbers in a country. |
| `validate_phone_kyc_address` | POST | `/phone-numbers/address-validation` | voice.manage | Check a postal address for a regulated phone number before submitting identity details. Write, retry-safe. |
| `get_phone_number_remediation` | GET | `/phone-numbers/{connectionId}/regulatory-review` | voice.manage, connections.manage | List the regulatory requirements a reviewer declined for a number. Connections: phone. |
| `resubmit_phone_number_remediation` | POST | `/phone-numbers/{connectionId}/regulatory-review` | voice.manage, connections.manage | Resubmit corrected values, documents or address for a declined number. Write. Connections: phone. |
| `reply_phone_number_reviewer` | POST | `/phone-numbers/{connectionId}/regulatory-review/replies` | voice.manage, connections.manage | Send a free-text reply, with optional files, to a number’s regulatory reviewer. Write. Connections: phone. |
| `respond_phone_number_reviewer` | POST | `/phone-numbers/{connectionId}/regulatory-review/responses` | voice.manage, connections.manage | Send a message and corrections to a number’s regulatory reviewer in one request. Write. Connections: phone. |
| `get_phone_port_requirements` | GET | `/phone-ports/{portId}/requirements` | voice.manage, connections.manage | List the live requirements of a submitted number transfer. |
| `cancel_phone_port` | DELETE | `/phone-ports/{portId}` | voice.manage, connections.manage | Cancel a number transfer that has not completed. Write, retry-safe. |
| `configure_phone_number_voice` | POST | `/phone-numbers/{connectionId}/voice` | voice.manage, voice.spend | Turn on phone calling for a number or update its call handling. Write, retry-safe. Connections: phone. |
| `disable_phone_number_voice` | DELETE | `/phone-numbers/{connectionId}/voice` | voice.manage | Turn off phone calling for a number, keeping its settings for later. Write, retry-safe. Connections: phone. |
| `get_phone_number_whatsapp_calling` | GET | `/phone-numbers/{connectionId}/whatsapp-calling` | voice.read | Read the WhatsApp calling configuration of a phone number. Connections: phone. |
| `enable_phone_number_whatsapp_calling` | POST | `/phone-numbers/{connectionId}/whatsapp-calling` | voice.manage, voice.spend | Turn on WhatsApp calling for a phone number and set where calls go. Write, retry-safe. Connections: phone. |
| `update_phone_number_whatsapp_calling` | PATCH | `/phone-numbers/{connectionId}/whatsapp-calling` | voice.manage, voice.spend | Change WhatsApp calling settings on a number where calling is on. Write, retry-safe. Connections: phone. |
| `disable_phone_number_whatsapp_calling` | DELETE | `/phone-numbers/{connectionId}/whatsapp-calling` | voice.manage | Turn off WhatsApp calling on a number, keeping its routing for later. Write, retry-safe. Connections: phone. |
| `enable_phone_number_sms` | POST | `/phone-numbers/{connectionId}/sms` | voice.manage | Turn on SMS for a number and see whether it needs a carrier registration. Write, retry-safe. Connections: phone. |
| `disable_phone_number_sms` | DELETE | `/phone-numbers/{connectionId}/sms` | voice.manage | Turn off SMS for a number. Its carrier registration is kept. Write, retry-safe. Connections: phone. |
| `reuse_phone_number_sms_registration` | POST | `/phone-numbers/{connectionId}/sms/reuse-registration` | voice.manage, messaging.write | Add a number to this business’s approved SMS registration without new fees. Write, retry-safe. Connections: phone. |
| `send_phone_sms` | POST | `/phone-numbers/{connectionId}/sms/messages` | messaging.send | Send an SMS from a phone number. Write. Charges sms_segments. Connections: phone. |
| `list_phone_sms_opt_outs` | GET | `/phone-numbers/{connectionId}/sms/opt-outs` | messaging.read | List recipients who replied STOP to a phone number. Connections: phone. |
| `preflight_phone_sms_registration` | POST | `/phone-numbers/{connectionId}/sms/registrations/preflight` | messaging.write | Dry-run a 10DLC SMS registration for a number and list likely rejection reasons. Write, retry-safe. Connections: phone. |
| `start_phone_sms_registration` | POST | `/phone-numbers/{connectionId}/sms/registrations` | messaging.write, voice.spend | Start the US carrier registration a number needs before SMS delivers. Write. Charges provider_micros. Connections: phone. |
| `list_sms_registrations` | GET | `/sms/registrations` | messaging.read | List this business’s SMS carrier registrations. |
| `get_sms_registration` | GET | `/sms/registrations/{registrationId}` | messaging.read | Read one SMS carrier registration and any open change request. |
| `deactivate_sms_registration` | DELETE | `/sms/registrations/{registrationId}` | messaging.write | Permanently end an SMS registration so its monthly campaign fee stops. Write, retry-safe. |
| `appeal_sms_registration` | POST | `/sms/registrations/{registrationId}/appeal` | messaging.write | Appeal a rejected 10DLC campaign, optionally fixing its content first. Write. |
| `resend_sms_registration_code` | POST | `/sms/registrations/{registrationId}/code/resend` | messaging.write | Text the sole-proprietor verification code again. Write. |
| `verify_sms_registration_code` | POST | `/sms/registrations/{registrationId}/code/verify` | messaging.write | Submit the sole-proprietor verification code for an SMS registration. Write, retry-safe. |
| `respond_sms_registration_review` | POST | `/sms/registrations/{registrationId}/responses` | messaging.write | Answer a reviewer’s change request on an SMS registration. Write. |
| `list_phone_number_calls` | GET | `/phone-numbers/{connectionId}/calls` | voice.read | List calls on a phone number, newest first. Connections: phone. |
| `estimate_phone_call` | GET | `/phone-numbers/{connectionId}/calls/estimate` | voice.read | Estimate the cost of a phone call from a number. Connections: phone. |
| `get_phone_number_call` | GET | `/phone-numbers/{connectionId}/calls/{callId}` | voice.read | Read one call on a phone number, including its transcript. Connections: phone. |
| `get_phone_number_call_recording` | GET | `/phone-numbers/{connectionId}/calls/{callId}/recording` | voice.read | Get a fresh playable link to a call recording. Connections: phone. |
| `end_phone_number_call` | POST | `/phone-numbers/{connectionId}/calls/{callId}/end` | voice.manage | Hang up a live call on a phone number. Write, retry-safe. Connections: phone. |

**get_phone_number_status:** Statuses include pending_regulatory, regulatory_declined, provisioning, verifying, active and suspended. A regulated number may carry an identity-verification link for the end user and, when declined, the reviewer’s reason.

**search_available_phone_numbers:** Inventory search with optional area code, city, digit pattern and SMS capability filters (voice is always required). Results are a live snapshot and nothing is held: buy a number through the phone setup API, which assigns a number of the chosen country and type.

**validate_phone_kyc_address:** Optional fast check of the address step of a regulated-number order. Without administrative_area the check is skipped and returns skipped=true; the final submission validates again. Undeliverable addresses return 400, sometimes with suggested corrections.

**get_phone_number_remediation:** Only for numbers in regulatory_declined. Returns the declined requirements as a form spec (same field shape as phone setup requirements) and the decline reason; otherwise 400.

**resubmit_phone_number_remediation:** Patches the corrections onto the same requirement group and resubmits it; the number moves back to pending_regulatory. No new number and no new charge. Send only corrected fields. Documents are sent inline (base64, up to 10 MB each).

**reply_phone_number_reviewer:** For questions the structured form cannot answer. A reply to a comment-style request moves the number back into review; a reply to a formal decline is supplementary and the correction must still be resubmitted. Up to 5 attachments (PDF, JPG, PNG or WEBP, 10 MB each).

**respond_phone_number_reviewer:** Corrections are resubmitted (status resubmitted, the number goes back into review); a message or attachments are posted to the reviewer thread. Corrections may fan out to other numbers on the same registration (siblingsResubmitted). Documents are sent inline (base64, up to 10 MB each).

**get_phone_port_requirements:** Takes the transfer ID from the phone setup API. Shows which requirements are filled, pending, under review or bounced (requirement-info-exception), so a rejected international transfer can be fixed.

**cancel_phone_port:** Only transfers that have not ported can be cancelled. The carrier may report cancel-pending before cancelled. Read the transfer through the phone setup API afterwards to release its reserved capacity. Cancelling an already cancelled transfer succeeds.

**configure_phone_number_voice:** Only fields present are written; omitting forwardTo keeps the current destination and an empty string makes the number outbound-only. Covers the forward destination (phone, SIP or AI-agent WebSocket), voicemail, business hours, IVR menu, blocked callers, recording and transcription. Inbound minutes and forwarded legs are billed per minute by the carrier as calls arrive, so this needs voice.spend. Refused while the number is attached to a SIP trunk.

**get_phone_number_whatsapp_calling:** Secrets are never returned; sipAuthPasswordConfigured says whether a SIP password is stored. outboundDisabled is true where the number’s country blocks business-initiated WhatsApp calls.

**enable_phone_number_whatsapp_calling:** whatsappConnectionId is the business’s healthy WhatsApp connection for this number. WhatsApp may refuse enablement for numbers below its messaging tier. Calls forwarded to a phone (tel:) add a carrier leg billed per minute; set maxCallDurationSeconds (30–14400) to cap forwarded calls. Needs voice.spend. Refused while the number is attached to a SIP trunk.

**update_phone_number_whatsapp_calling:** Only fields present are written; null clears a nullable field (SIP credentials, call-icon countries, duration cap). No change is sent to WhatsApp itself; only call routing changes. Needs voice.spend because forwardTo may add a billed carrier leg.

**enable_phone_number_sms:** Check enabled: false with smsCapable=false means the number cannot text; notReady=true means it is still provisioning. US numbers need an approved carrier registration before messages deliver: needsRegistration=true asks for one, and reusable names an approved registration of this business the number can join with reuse_phone_number_sms_registration. Safe to repeat.

**reuse_phone_number_sms_registration:** Enable SMS on the number first. The number joins the approved registration that SMS enablement reports as reusable; it must be a registration this business created. Otherwise 409 REGISTRATION_REQUIRED and nothing changes.

**send_phone_sms:** Sends from this connection’s number. Text only, up to 10 segments (1530 GSM-7 or 670 Unicode characters). Charges SMS segments per recipient: 160 GSM-7 characters per single message, 153 per part when split, 70/67 for Unicode. US numbers need an approved carrier registration. Recipients who replied STOP are refused with 409. sendAt schedules a future send. Delivery and replies arrive as message webhooks.

**list_phone_sms_opt_outs:** Most recent first. Recipients are re-subscribed only by replying START. limit applies before results are narrowed to this number, so a page can hold fewer rows than requested.

**preflight_phone_sms_registration:** Composes the exact brand and campaign a submission would file (disclosures and auto-replies included) and returns findings; block severity means a near-certain carrier rejection. Nothing is created or charged.

**start_phone_sms_registration:** 10DLC (standard_10dlc or sole_prop_10dlc) needs brand and campaign; toll_free needs tollFree. The registration covers only this number. Approval is asynchronous: poll get_sms_registration. Sole-proprietor registrations text a code to brand.mobilePhone; submit it with verify_sms_registration_code. Charges the $9 brand fee plus three months of the campaign fee ($20/month standard and toll-free, $4/month sole proprietor), which carriers bill regardless; later months recur. Needs voice.spend. resubmitRequestId updates a registration returned for changes in place, without new fees. If this business already has an approved registration, reuse it instead.

**list_sms_registrations:** Shows registrations started through this API, newest first, with brand and campaign status, trust score and throughput. Deactivated registrations are hidden unless includeDeactivated=true.

**get_sms_registration:** Poll after starting a registration. reviewRequest lists points to answer with respond_sms_registration_review; rejected registrations include the submitted campaign content for an appeal.

**deactivate_sms_registration:** Irreversible. Covered numbers can no longer send SMS (receiving continues) until registered again, with new fees. Carriers bill the first 3 months regardless.

**appeal_sms_registration:** Only registrations that reached campaign creation can be appealed. Corrected messageFlow and samples are applied before the appeal is filed. appealReason goes to the carrier reviewer verbatim. The registration returns to pending.

**resend_sms_registration_code:** Only while the registration awaits its code. Limited to one send per minute.

**verify_sms_registration_code:** On success the registration continues to campaign creation automatically.

**respond_sms_registration_review:** For registrations in changes_requested, or rejected ones with a reviewRequest. When the request has points, send one answer per point (requestId guards against answering a replaced request, 409). The registration returns to review. To change submitted brand or campaign fields, start the registration again with resubmitRequestId.

**list_phone_number_calls:** Covers regular phone calls and WhatsApp calls on this number, inbound and outbound, with duration, end reason, transcript snippet and billing breakdown. Paginate by passing nextCursor as before. limit applies before results are narrowed to this number, so a page can hold fewer rows than requested.

**estimate_phone_call:** Quote for the carrier leg plus optional recording and transcription, using the same formula as the final invoice and deliberately slightly high. minutes is 1–120.

**get_phone_number_call:** Use a call ID returned by list_phone_number_calls for this number.

**get_phone_number_call_recording:** Returns { url } to an MP3 that expires about 10 minutes after it is issued; request a new one when it lapses. 404 when the call has no recording.

**end_phone_number_call:** Works for ringing and answered calls, phone or WhatsApp. Ending a call that already ended succeeds with its current status. Final duration and cost appear on the call shortly after.

### Advertising campaign tools

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `list_ad_budget_schedules` | GET | `/ads/{advertiserId}/budget-schedules` | ads.read | List scheduled budget increases on a campaign or ad set. |
| `schedule_ad_budget_increase` | POST | `/ads/{advertiserId}/budget-schedules` | ads.read, ads.write, ads.spend | Schedule a temporary budget increase for a campaign or ad set. Write. |
| `list_ad_value_rule_sets` | GET | `/ads/{advertiserId}/value-rule-sets` | ads.read | List the ad account’s value rule sets (bid adjustments by audience segment). |
| `create_ad_value_rule_set` | POST | `/ads/{advertiserId}/value-rule-sets` | ads.read, ads.write, ads.spend | Create a value rule set that raises or lowers bids for audience segments. Write. |
| `get_ad_value_rule_set` | GET | `/ads/{advertiserId}/value-rule-sets/{valueRuleSetId}` | ads.read | Read one value rule set with every rule and criterion ID. |
| `replace_ad_value_rule_set` | PUT | `/ads/{advertiserId}/value-rule-sets/{valueRuleSetId}` | ads.read, ads.write, ads.spend | Replace a value rule set’s name and complete rule list. Write, retry-safe. |
| `delete_ad_value_rule_set` | DELETE | `/ads/{advertiserId}/value-rule-sets/{valueRuleSetId}` | ads.read, ads.write | Delete a value rule set. Write, retry-safe. |
| `get_ad_account_finance` | GET | `/ads/{advertiserId}/finance` | ads.read | Read the ad account’s balance, lifetime spend, spend cap and payment method. |
| `list_ad_account_activity` | GET | `/ads/{advertiserId}/activity` | ads.read | List the ad account’s change history: who changed what and when. |
| `get_ad_dsa_defaults` | GET | `/ads/{advertiserId}/dsa-defaults` | ads.read | Read the default EU Digital Services Act beneficiary and payor on the ad account. |
| `get_ad_dsa_recommendations` | GET | `/ads/{advertiserId}/dsa-recommendations` | ads.read | List suggested beneficiary and payor names for EU Digital Services Act disclosures. |
| `list_ad_labels` | GET | `/ads/{advertiserId}/labels` | ads.read | List the organizational labels on the ad account. |
| `list_ad_studies` | GET | `/ads/{advertiserId}/studies` | ads.read | List the ad account’s A/B tests and lift studies. |
| `list_ad_business_centers` | GET | `/ads/{advertiserId}/business-centers` | ads.read | List the TikTok Business Centers this advertising connection can read. |
| `list_ad_businesses` | GET | `/ads/{advertiserId}/businesses` | ads.read | List the Meta business portfolios the connected login belongs to. |
| `attach_ad_campaign_assets` | POST | `/ads/{advertiserId}/campaigns/{campaignId}/assets` | ads.read, ads.write, ads.spend | Create and attach sitelinks, callouts and structured snippets to a campaign. Write. |
| `boost_post_as_ad` | POST | `/ads/{advertiserId}/boosts` | ads.read, ads.write, ads.spend | Turn a published post into a paid ad, keeping its engagement. Write, retry-safe. |
| `pause_ad_campaigns` | POST | `/ads/{advertiserId}/campaigns/pause` | ads.read, ads.write | Pause up to 50 campaigns in one call. Write, retry-safe. |
| `resume_ad_campaigns` | POST | `/ads/{advertiserId}/campaigns/resume` | ads.read, ads.write, ads.spend | Resume up to 50 campaigns in one call. Write, retry-safe. |
| `duplicate_ad_campaign` | POST | `/ads/{advertiserId}/campaigns/{campaignId}/duplicate` | ads.read, ads.write, ads.spend | Copy a campaign with its ad sets, ads, creatives and targeting. Write, retry-safe. |
| `duplicate_ad_set` | POST | `/ads/{advertiserId}/ad-sets/{adSetId}/duplicate` | ads.read, ads.write, ads.spend | Copy an ad set, optionally into another campaign. Write, retry-safe. |
| `duplicate_ad` | POST | `/ads/{advertiserId}/ads/{adId}/duplicate` | ads.read, ads.write, ads.spend | Copy one ad, optionally into another ad set. Write, retry-safe. |
| `get_ad_daily_timeline` | GET | `/ads/{advertiserId}/timeline` | ads.read, ads.reports | Read daily spend, delivery and conversion totals for the ad account. |
| `list_ad_search_keywords` | GET | `/ads/{advertiserId}/keywords` | ads.read | List Search keywords (positive and negative) with quality scores. |
| `list_ads_with_metrics` | GET | `/ads/{advertiserId}/ads` | ads.read, ads.reports | List this advertiser’s ads with performance metrics for a date range. |
| `get_ad_analytics` | GET | `/ads/{advertiserId}/ads/{adId}/analytics` | ads.read, ads.reports | Read one ad’s summary metrics, daily series and optional breakdowns. |
| `get_ad_campaign_analytics` | GET | `/ads/{advertiserId}/campaigns/{campaignId}/analytics` | ads.read, ads.reports | Read a campaign’s summary metrics, daily series and optional breakdowns. |
| `list_ad_search_terms` | GET | `/ads/{advertiserId}/search-terms` | ads.read, ads.reports | List the search queries that triggered ads, with cost and conversions. |
| `query_ad_insights` | GET | `/ads/{advertiserId}/insights` | ads.read, ads.reports | Run a live, flexible insights query against the ad account. |
| `create_ad_insights_report` | POST | `/ads/{advertiserId}/insight-reports` | ads.read, ads.reports | Start an asynchronous insights report for long ranges or large accounts. Write, retry-safe. |
| `get_ad_insights_report` | GET | `/ads/{advertiserId}/insight-reports/{reportRunId}` | ads.read, ads.reports | Read an insights report’s progress, and its rows once complete. |
| `get_keyword_historical_metrics` | POST | `/ads/{advertiserId}/keywords/historical-metrics` | ads.read | Read historical search volume, competition and bid ranges for keywords. Write, retry-safe. |
| `generate_keyword_ideas` | POST | `/ads/{advertiserId}/keywords/ideas` | ads.read | Generate keyword ideas from seed keywords, a landing page, or both. Write, retry-safe. |
| `estimate_ad_reach` | POST | `/ads/{advertiserId}/targeting/reach-estimate` | ads.read | Estimate the audience size of a targeting spec before creating a campaign. Write, retry-safe. |
| `get_ad_bid_pricing` | POST | `/ads/{advertiserId}/targeting/bid-pricing` | ads.read | Read the suggested bid, bid limits and daily budget bounds for a targeting spec. Write, retry-safe. |
| `forecast_ad_delivery` | POST | `/ads/{advertiserId}/targeting/supply-forecast` | ads.read | Forecast impressions, clicks and spend for a targeting spec over a time range. Write, retry-safe. |
| `get_ad_creative` | GET | `/ads/{advertiserId}/creatives/{creativeId}` | ads.read | Read one creative’s full details. |
| `rename_ad_creative` | PUT | `/ads/{advertiserId}/creatives/{creativeId}` | ads.read, ads.write | Rename a creative. Write, retry-safe. |
| `delete_ad_creative` | DELETE | `/ads/{advertiserId}/creatives/{creativeId}` | ads.read, ads.write | Delete a creative that no ad uses. Write, retry-safe. |
| `preview_ad_creative` | POST | `/ads/{advertiserId}/previews` | ads.read | Render placement previews of a creative before any ad exists. Write, retry-safe. |
| `get_ad_media` | GET | `/ads/{advertiserId}/ads/{adId}/media` | ads.read | Read direct image and video URLs used by an ad’s live creative. |
| `preview_ad` | GET | `/ads/{advertiserId}/ads/{adId}/preview` | ads.read | Render placement previews of an existing ad. |
| `list_ad_catalogs` | GET | `/ads/{advertiserId}/catalogs` | ads.read | List the Meta product catalogs available to this ad account. |
| `list_ad_catalog_product_sets` | GET | `/ads/{advertiserId}/catalogs/{catalogId}/product-sets` | ads.read | List a product catalog’s product sets. |
| `upload_ad_image` | POST | `/ads/{advertiserId}/images` | ads.read, ads.write | Upload an image to the ad account’s image library. Write, retry-safe. |
| `list_ad_images` | GET | `/ads/{advertiserId}/images` | ads.read | List the ad account’s image library. |
| `upload_ad_video` | POST | `/ads/{advertiserId}/videos` | ads.read, ads.write | Upload a video to the ad account’s video library. Write. |
| `list_ad_videos` | GET | `/ads/{advertiserId}/videos` | ads.read | List the ad account’s video library. |
| `delete_ad_video` | DELETE | `/ads/{advertiserId}/videos/{videoId}` | ads.read, ads.write | Remove a video from the ad account’s video library. Write, retry-safe. |
| `create_call_ad` | POST | `/ads/{advertiserId}/call-ads` | ads.read, ads.write, ads.spend | Create a click-to-call ad that dials a phone number. Write, retry-safe. |
| `create_messaging_ad` | POST | `/ads/{advertiserId}/messaging-ads` | ads.read, ads.write, ads.spend | Create a click-to-message ad that opens WhatsApp, Messenger or Instagram Direct. Write, retry-safe. |
| `create_reach_frequency_prediction` | POST | `/ads/{advertiserId}/reach-frequency-predictions` | ads.read, ads.write | Get a reach-and-frequency price quote for a date range. Write, retry-safe. |
| `get_reach_frequency_prediction` | GET | `/ads/{advertiserId}/reach-frequency-predictions/{predictionId}` | ads.read | Read a reach-and-frequency prediction’s status and estimates. |
| `reserve_reach_frequency_prediction` | POST | `/ads/{advertiserId}/reach-frequency-predictions/{predictionId}/reserve` | ads.read, ads.write, ads.spend | Lock a prediction’s quoted price and inventory. Write. |
| `cancel_reach_frequency_reservation` | DELETE | `/ads/{advertiserId}/reach-frequency-predictions/{predictionId}` | ads.read, ads.write | Release a reserved prediction’s locked price and inventory. Write, retry-safe. |

**list_ad_budget_schedules:** Meta only. Pass exactly one of campaignId or adSetId (local IDs). Rows are returned as Meta reports them, paged with limit/after.

**schedule_ad_budget_increase:** Meta only, and raises spend: requires ads.spend and is refused when the business requires advertising approval. Pass exactly one of campaignId or adSetId. timeStart/timeEnd are Unix seconds on a 15-minute boundary. ABSOLUTE budgetValue is in whole units of the advertiser currency; MULTIPLIER is a factor of the current budget. A campaign cannot mix ABSOLUTE and MULTIPLIER schedules. Not retry-safe.

**list_ad_value_rule_sets:** Meta only. Up to 6 sets per ad account, 10 rules per set, 4 criteria per rule. Rules apply in order and the first match wins. Sets apply only to auto-bid or cost-cap ad sets.

**create_ad_value_rule_set:** Meta only. Changes bidding, so it requires ads.spend and is refused when the business requires advertising approval. criteriaValueTypes pair one-to-one with criteriaValues ("NONE" except for LOCATION). INCREASE accepts 1-1000 percent, DECREASE 1-90. Attach the returned set to an ad set to use it. Not retry-safe.

**get_ad_value_rule_set:** Meta only. Read before replacing: the update is a full replace, and IDs keep rules and criteria you are not changing.

**replace_ad_value_rule_set:** Meta only. Full replace: keep a rule or criterion by sending its id, add one without an id, and any rule or criterion left out is deleted. Array order is evaluation order. Changes bidding, so it requires ads.spend and is refused when the business requires advertising approval.

**delete_ad_value_rule_set:** Meta only. Ad sets that use it are not changed; detach them first in the ad set settings.

**get_ad_account_finance:** Meta only. Money values are whole units of the account currency.

**list_ad_account_activity:** Meta only. Rows are returned as Meta reports them. objectId (a local campaign, ad set or ad ID) filters the returned page only, so combine it with paging to walk one object’s history.

**get_ad_dsa_defaults:** Meta only. Fields are omitted when no default is set.

**get_ad_dsa_recommendations:** Meta only. Suggestions are unlabeled and may be empty. They are legal disclosures, so let a person choose; nothing is applied automatically.

**list_ad_labels:** Meta and Google Ads. Meta pages with limit/after. Google returns every label in one page; when Google’s quota is exhausted the last cached list is returned with stale: true.

**list_ad_studies:** Meta only. fields optionally overrides the default projection with Graph field names.

**list_ad_business_centers:** TikTok only. Each Business Center reports how many advertisers it holds (null when unknown). Solo advertisers return an empty list.

**list_ad_businesses:** Meta only. Reflects the connected login of this advertiser, not the ad account alone.

**attach_ad_campaign_assets:** Google Ads only. Provide at least one of sitelinks (2-20), callouts or structuredSnippets. Sitelink description1 and description2 go together. Extends live ads, so it requires ads.spend and is refused when the business requires advertising approval. Not retry-safe.

**boost_post_as_ad:** Creates a campaign, ad set and ad from a post, or adds the ad under an existing ad set (adSetId, Meta only; the ad set then owns budget, schedule and targeting). Pass platformPostId, sparkPosts (TikTok Smart+), or postId (a published post from this API; not accepted on Meta or TikTok advertisers). Starts spend, so it requires ads.spend and is refused when the business requires advertising approval. Available goals vary by platform. adSetId and existingCampaignId are local IDs. Retry-safe with the same Idempotency-Key. New campaigns, ad sets and ads appear in the advertising objects list after an advertising refresh (POST .../advertising/advertisers/{advertiserId}/sync).

**pause_ad_campaigns:** Writes only each campaign’s own switch; ad sets and ads keep theirs. Campaigns already paused are skipped. Each result carries the local campaignId. Retry-safe.

**resume_ad_campaigns:** Turns each campaign’s own switch on; ad sets and ads paused individually stay paused. Starts spend, so it requires ads.spend and is refused when the business requires advertising approval. Each result carries the local campaignId. Retry-safe.

**duplicate_ad_campaign:** Meta, TikTok and LinkedIn. The copy is paused unless statusOption says otherwise; ACTIVE or INHERITED_FROM_SOURCE can start a second stream of spend, so this requires ads.spend and is refused when the business requires advertising approval. Retry-safe with the same Idempotency-Key. New campaigns, ad sets and ads appear in the advertising objects list after an advertising refresh (POST .../advertising/advertisers/{advertiserId}/sync).

**duplicate_ad_set:** Meta only. campaignId (local) moves the copy into another campaign of this advertiser. Ads and creatives are copied by default. Can start spend, so it requires ads.spend and is refused when the business requires advertising approval. Retry-safe with the same Idempotency-Key. New campaigns, ad sets and ads appear in the advertising objects list after an advertising refresh (POST .../advertising/advertisers/{advertiserId}/sync).

**duplicate_ad:** Meta only. adSetId (local) moves the copy into another ad set. reuseSourceCreative keeps the same post and its likes, comments and shares. Can start spend, so it requires ads.spend and is refused when the business requires advertising approval. Retry-safe with the same Idempotency-Key. New campaigns, ad sets and ads appear in the advertising objects list after an advertising refresh (POST .../advertising/advertisers/{advertiserId}/sync).

**get_ad_daily_timeline:** One row per day across every ad of this advertiser. Defaults to the last 90 days, up to 730. backfillPending: true means older days are still loading; repeat shortly. Meta advertisers may narrow to facebook or instagram.

**list_ad_search_keywords:** Google Ads only. Ad-group keywords refreshed about daily; campaign-level negatives are not included. campaignId and adSetId are local IDs.

**list_ads_with_metrics:** Defaults to the last 90 days, up to 730. source=created_here limits the list to ads created through this platform. campaignId and adSetId are local IDs. Ads carry platform IDs; use the advertising objects list for local IDs. backfillPending: true means older days are still loading.

**get_ad_analytics:** Defaults to the last 90 days, up to 730. breakdowns: Meta age, gender, country, publisher_platform, device_platform, region; TikTok gender, age, country_code, platform, ac, language; LinkedIn firmographics.

**get_ad_campaign_analytics:** Defaults to the last 90 days, up to 730. Breakdowns are fetched live at campaign level. Google adds search impression-share ratios.

**list_ad_search_terms:** Google Ads only. Defaults to the last 30 days, ordered by cost. campaignId and adSetId are local IDs. stale: true means Google’s quota was exhausted and the last good copy was returned.

**query_ad_insights:** Meta: objectId (a local campaign, ad set or ad ID; defaults to the whole ad account) with fields, breakdowns, level and date options; rows are returned as Meta reports them. Google Ads: query takes a read-only GAQL SELECT (v25 fields), paged with pageToken. TikTok: dataLevel, dimensions, metrics, fromDate and toDate are required. filtering is a JSON array of {field, operator, value}. Use insight reports for long ranges on Meta.

**create_ad_insights_report:** Meta only. Same options as the live insights query, processed by Meta in the background. objectId is a local campaign, ad set or ad ID and defaults to the whole ad account. Poll the returned reportRunId with get_ad_insights_report.

**get_ad_insights_report:** Meta only. Rows appear when status is "Job Completed", paged with limit/after.

**get_keyword_historical_metrics:** Google Ads only. Up to 1,000 keywords. Counters are strings; bids are micros of the account currency. Omitting countries means worldwide. Read-only.

**generate_keyword_ideas:** Google Ads only. Returns ideas with monthly searches, competition and top-of-page bid micros. Omitting countries means worldwide. Read-only.

**estimate_ad_reach:** Meta, LinkedIn, X and Pinterest return bounds; Google and TikTok return available: false. audienceInclude/audienceExclude in spec take local audience IDs. estimateReady: false means Meta is still computing; retry shortly. Read-only.

**get_ad_bid_pricing:** LinkedIn only; other advertisers return available: false. pricing is null when LinkedIn has no data for the combination. Read-only.

**forecast_ad_delivery:** LinkedIn only; other advertisers return available: false. timeRangeStart/timeRangeEnd are Unix milliseconds in the future. Pass dailyBudget or totalBudget; without optimizationTarget, competingBid is required. Read-only.

**get_ad_creative:** Meta only. fields optionally overrides the default projection with Graph field names.

**rename_ad_creative:** Meta only. Only the name can change; for new content create a creative and swap it onto the ad.

**delete_ad_creative:** Meta only. Meta refuses to delete a creative an ad still references. The local objects list keeps the entry until the next advertising refresh.

**preview_ad_creative:** Meta only. Provide exactly one of existingCreativeId (local) or creativeSpec (a Meta creative spec). Each preview is an embeddable iframe snippet; html is null when Meta returns none for a format. Read-only.

**get_ad_media:** Meta only. URLs are signed and short-lived (images about a day, videos about 12 days); fetch again before serving or downloading.

**preview_ad:** Meta only. formats is a comma-separated list of up to 10 Meta ad formats (default DESKTOP_FEED_STANDARD). Each preview is an embeddable iframe snippet.

**list_ad_catalogs:** Meta only. Lists catalogs of the ad account’s business portfolio, or of businessId when given. When the login sees several portfolios and none can be inferred, the error lists them.

**list_ad_catalog_product_sets:** Meta only. A catalog-sales ad promotes a product set, not the catalog itself. Use a catalogId returned by list_ad_catalogs.

**upload_ad_image:** Meta only. imageBase64 takes raw base64 or a data URL, up to 30 MB decoded. Returns the image hash and a hosted URL usable as imageUrl when creating ads. Re-uploading the same bytes returns the same hash.

**list_ad_images:** Meta only. Each hash can be reused wherever an image hash is accepted. fields optionally overrides the default projection.

**upload_ad_video:** Meta only. Provide exactly one of videoUrl (public https URL) or videoBase64 (about 4.5 MB at most). The call waits until Meta reports the video ready, which can take minutes. The returned video id can be reused in ads and previews. Not retry-safe: a repeat uploads a second copy.

**list_ad_videos:** Meta only. A video is usable once status.video_status is ready. source is a signed, expiring playback URL; never store it. fields optionally overrides the default projection.

**delete_ad_video:** Meta only. Use a video id returned by list_ad_videos or upload_ad_video.

**create_call_ad:** Meta only. Creates a campaign, ad set and ad (or adds to an existing ad set with adSetId, a local ID) with a Call Now button. Use either the single-creative shape (headline, body and imageUrl or video) or creatives[]. Audience IDs are local. Starts spend, so it requires ads.spend and is refused when the business requires advertising approval. Retry-safe with the same Idempotency-Key. New campaigns, ad sets and ads appear in the advertising objects list after an advertising refresh (POST .../advertising/advertisers/{advertiserId}/sync).

**create_messaging_ad:** Meta only. destination picks one app; destinations (2-3) lets Meta choose per viewer. Use the single-creative shape, creatives[], an existing post (platformPostId or objectStoryId), or placementAssets for per-placement media. validateOnly: true checks the request without creating anything. Audience IDs and adSetId/existingCampaignId are local. Starts spend, so it requires ads.spend and is refused when the business requires advertising approval. Retry-safe with the same Idempotency-Key. New campaigns, ad sets and ads appear in the advertising objects list after an advertising refresh (POST .../advertising/advertisers/{advertiserId}/sync).

**create_reach_frequency_prediction:** Meta only. A quote: nothing is bought. Pass exactly one of budgetAmount (whole currency units) or reach. Returns the estimate and its allowed bounds; predictions expire on their own. targeting audience IDs are local. Reserve a prediction to lock its price.

**get_reach_frequency_prediction:** Meta only. status is ready, pending or failed.

**reserve_reach_frequency_prediction:** Meta only. Returns a new reserved prediction id, valid until expiresAt, to use when creating a reserved campaign. Commits to spend, so it requires ads.spend and is refused when the business requires advertising approval. Not retry-safe.

**cancel_reach_frequency_reservation:** Meta only. Unreserved predictions expire on their own.

### Advertising conversions, pixels, lead forms and leads

| Operation | Method | Path | Scopes | Notes |
|---|---|---|---|---|
| `list_ad_conversion_destinations` | GET | `/advertising/advertisers/{advertiserId}/conversion-destinations` | ads.read | List the conversion destinations this advertiser can send conversion events to. |
| `create_ad_conversion_destination` | POST | `/advertising/advertisers/{advertiserId}/conversion-destinations` | ads.write | Create a Google Ads conversion action or a LinkedIn conversion rule. Write. |
| `get_ad_conversion_destination` | GET | `/advertising/advertisers/{advertiserId}/conversion-destinations/{destinationId}` | ads.read | Read one LinkedIn conversion rule. |
| `update_ad_conversion_destination` | PATCH | `/advertising/advertisers/{advertiserId}/conversion-destinations/{destinationId}` | ads.write | Update a LinkedIn conversion rule’s name, status, attribution or value. Write, retry-safe. |
| `delete_ad_conversion_destination` | DELETE | `/advertising/advertisers/{advertiserId}/conversion-destinations/{destinationId}` | ads.write | Disable a LinkedIn conversion rule. Write, retry-safe. |
| `get_ad_conversion_destination_metrics` | GET | `/advertising/advertisers/{advertiserId}/conversion-destinations/{destinationId}/metrics` | ads.read | Read attributed conversions, value and cost for a LinkedIn conversion rule by date. |
| `list_ad_conversion_destination_ad_sets` | GET | `/advertising/advertisers/{advertiserId}/conversion-destinations/{destinationId}/ad-sets` | ads.read | List the ad sets (LinkedIn campaigns) associated with a LinkedIn conversion rule. |
| `associate_ad_conversion_destination_ad_sets` | POST | `/advertising/advertisers/{advertiserId}/conversion-destinations/{destinationId}/ad-sets` | ads.write | Associate ad sets (LinkedIn campaigns) with a LinkedIn conversion rule. Write, retry-safe. |
| `dissociate_ad_conversion_destination_ad_sets` | DELETE | `/advertising/advertisers/{advertiserId}/conversion-destinations/{destinationId}/ad-sets` | ads.write | Remove ad sets (LinkedIn campaigns) from a LinkedIn conversion rule. Write, retry-safe. |
| `list_ad_custom_conversions` | GET | `/advertising/advertisers/{advertiserId}/custom-conversions` | ads.read | List the Meta custom conversions of this advertiser’s ad account. |
| `create_ad_custom_conversion` | POST | `/advertising/advertisers/{advertiserId}/custom-conversions` | ads.write | Create a Meta custom conversion on one of this advertiser’s pixels. Write, retry-safe. |
| `list_ad_tracking_tags` | GET | `/advertising/advertisers/{advertiserId}/tracking-tags` | ads.read | List the tracking tags (pixels, Insight Tags, conversion tags) of this ad account. |
| `create_ad_tracking_tag` | POST | `/advertising/advertisers/{advertiserId}/tracking-tags` | ads.write | Create a tracking tag (pixel) on this advertiser’s ad account. Write. |
| `get_ad_tracking_tag` | GET | `/advertising/advertisers/{advertiserId}/tracking-tags/{tagId}` | ads.read | Read one tracking tag with its install code and last fire time. |
| `update_ad_tracking_tag` | PATCH | `/advertising/advertisers/{advertiserId}/tracking-tags/{tagId}` | ads.write | Rename a tracking tag or change its matching, cookie or data-use settings. Write, retry-safe. |
| `get_ad_tracking_tag_stats` | GET | `/advertising/advertisers/{advertiserId}/tracking-tags/{tagId}/stats` | ads.read | Read event counts or health for a tracking tag. |
| `list_ad_tracking_tag_shares` | GET | `/advertising/advertisers/{advertiserId}/tracking-tags/{tagId}/shares` | ads.read | List the ad accounts a tracking tag is shared with. |
| `share_ad_tracking_tag` | POST | `/advertising/advertisers/{advertiserId}/tracking-tags/{tagId}/shares` | ads.write | Share a tracking tag with another advertiser of this business. Write, retry-safe. |
| `unshare_ad_tracking_tag` | DELETE | `/advertising/advertisers/{advertiserId}/tracking-tags/{tagId}/shares` | ads.write | Stop sharing a tracking tag with another advertiser of this business. Write, retry-safe. |
| `send_ad_conversions` | POST | `/advertising/advertisers/{advertiserId}/conversions` | ads.write | Send server-side conversion events to the advertiser’s ad platform. Write. |
| `adjust_ad_conversions` | POST | `/advertising/advertisers/{advertiserId}/conversion-adjustments` | ads.write | Retract, restate or enhance Google Ads conversions sent earlier. Write, retry-safe. |
| `get_ad_conversion_quality` | GET | `/advertising/advertisers/{advertiserId}/conversion-quality` | ads.read | Read event match quality and pixel-to-server coverage for a destination. |
| `list_ad_lead_forms` | GET | `/advertising/advertisers/{advertiserId}/lead-forms` | ads.read | List the lead forms of this advertiser’s Facebook Page or LinkedIn company page. |
| `get_ad_lead_form` | GET | `/advertising/advertisers/{advertiserId}/lead-forms/{formId}` | ads.read | Read one lead form with its questions and thank-you page. |
| `create_ad_lead_form` | POST | `/advertising/advertisers/{advertiserId}/lead-forms` | ads.write | Create a lead form on the advertiser’s Facebook Page or LinkedIn company page. Write. |
| `archive_ad_lead_form` | DELETE | `/advertising/advertisers/{advertiserId}/lead-forms/{formId}` | ads.write | Archive a lead form. Write, retry-safe. |
| `create_ad_lead_form_test_lead` | POST | `/advertising/advertisers/{advertiserId}/lead-forms/{formId}/test-leads` | ads.write | Submit a test lead to a Meta lead form. Write. |
| `list_ad_lead_form_leads` | GET | `/advertising/advertisers/{advertiserId}/lead-forms/{formId}/leads` | ads.read, contacts.read | List the leads submitted through one Meta lead form. |
| `list_ad_leads` | GET | `/advertising/advertisers/{advertiserId}/leads` | ads.read, contacts.read | List leads submitted through this advertiser’s lead forms, newest first. |
| `list_ad_local_services_leads` | GET | `/advertising/advertisers/{advertiserId}/local-services-leads` | ads.read, contacts.read | List Google Local Services leads (calls, messages and bookings), newest first. |
| `list_ad_local_services_lead_conversations` | GET | `/advertising/advertisers/{advertiserId}/local-services-leads/{leadId}/conversations` | ads.read, contacts.read | List the calls and messages of one Google Local Services lead, oldest first. |
| `list_ad_comments` | GET | `/advertising/advertisers/{advertiserId}/ads/{adId}/comments` | ads.read | List comments on an ad’s underlying post, including posts that never ran organically. |
| `get_ad_url_tracking` | GET | `/advertising/advertisers/{advertiserId}/ads/{adId}/url-tracking` | ads.read | Read the click-URL tracking parameters of an ad. |
| `update_ad_url_tracking` | PATCH | `/advertising/advertisers/{advertiserId}/ads/{adId}/url-tracking` | ads.write | Set the click-URL tracking parameters of an ad. Write, retry-safe. |

**list_ad_conversion_destinations:** Meta and OpenAI Ads: pixels. Google Ads: conversion actions. LinkedIn: conversion rules. Pinterest: the ad account itself. Only destinations of this advertiser’s ad account are returned. Use an `id` as `destinationId` when sending conversions. Google and LinkedIn lock the event type to the destination (`type`).

**create_ad_conversion_destination:** Google Ads: created for offline uploads; a name that already exists is reused, the same name with another category is a 409. `primaryForGoal: true` immediately influences Smart Bidding. LinkedIn: not idempotent on the platform, so an uncertain create must be checked before another is sent; by default the rule is associated with every campaign once (`autoAssociationType`). 365-day windows apply only to LEAD, PURCHASE, ADD_TO_CART, QUALIFIED_LEAD and SUBMIT_APPLICATION. Meta and OpenAI Ads pixels are created as tracking tags instead.

**get_ad_conversion_destination:** LinkedIn only. A soft-deleted rule is returned with status `inactive`.

**update_ad_conversion_destination:** LinkedIn only. At least one field is required. `enabled: false` is the same as deleting the rule. The rule type and ad account cannot change; create a new rule instead.

**delete_ad_conversion_destination:** LinkedIn only. LinkedIn has no hard delete: the rule is disabled and stays readable with status `inactive`.

**get_ad_conversion_destination_metrics:** LinkedIn only. DAILY data is kept about 6 months; MONTHLY and YEARLY 24 months. ALL over more than 6 months rounds to month boundaries.

**list_ad_conversion_destination_ad_sets:** LinkedIn only. `adSetId` is the local ad set ID, or null when that campaign has not been synchronized yet. Campaigns created after the rule need explicit association.

**associate_ad_conversion_destination_ad_sets:** LinkedIn only. Up to 100 local ad set IDs. The result lists which succeeded and which failed (for example the wrong campaign type for the rule), so only failed rows need a retry.

**dissociate_ad_conversion_destination_ad_sets:** LinkedIn only. `adSetIds` is a comma-separated list of up to 100 local ad set IDs. The result lists which succeeded and which failed.

**list_ad_custom_conversions:** Meta only. Includes archived conversions (`isArchived`). Use an `id` as the custom conversion when creating conversion-optimized ads.

**create_ad_custom_conversion:** Meta only. `pixelId` must be a tracking tag returned for this advertiser. `rule` is Meta’s conversion rule, for example {"url":{"i_contains":"thank-you"}}. A non-archived conversion with the same name on the same pixel is returned instead of created (`reused: true`). Returns `customConversionId` for conversion-optimized ads.

**list_ad_tracking_tags:** Meta and OpenAI Ads pixels, LinkedIn Insight Tags, Pinterest tags, TikTok pixels and the Google tag, where the platform supports it (others answer 501). The list omits the install `code`; read one tag for it. `installed` shows whether the tag has ever fired.

**create_ad_tracking_tag:** Meta: creates a pixel; it is not installed until the returned `code` is on the site or events are sent through the conversions endpoint. OpenAI Ads: also provisions a conversions key and, with `defaultEventType`, a conversion event. Pinterest: creates a conversion tag; `automaticMatchingFields` is Pinterest only. TikTok: names are at most 40 characters and must be unique. LinkedIn and Google Ads have one tag per ad account, which is returned when it already exists (`name` is ignored on LinkedIn); X has one pixel per ad account and answers 409 when it exists. Meta, OpenAI Ads, Pinterest and TikTok create a new tag on every call, so an uncertain create must be checked by listing tags before another is sent. Tags cannot be deleted through any platform API.

**get_ad_tracking_tag:** Includes the base `code` snippet, `lastFiredTime` (not on TikTok) and, where the platform ties conversions to the tag, its `events`.

**update_ad_tracking_tag:** Meta: name, automatic matching, first-party cookies and data use. LinkedIn: first-party cookie status only, applied to every ad account using the tag. Google Ads: `autoTagging` only. TikTok and LinkedIn also accept `enableFirstPartyCookies`. OpenAI Ads and Pinterest tags cannot be edited (501). At least one field is required.

**get_ad_tracking_tag_stats:** Meta: aggregated counts by `aggregation` (default event); narrow long windows to about 7 days. OpenAI Ads: the latest events of the last 15 minutes (no time window). LinkedIn and Pinterest: health rows rather than counts. Platforms without a stats API answer 501. Times are unix seconds.

**list_ad_tracking_tag_shares:** Meta, LinkedIn and TikTok (Business Center pixels); other platforms answer 501. LinkedIn lists only ad accounts the connection can see, with the role appended to the name.

**share_ad_tracking_tag:** `targetAdvertiserId` must be another advertiser of this business on the same platform. Meta requires administering both the pixel’s Business Manager and the target ad account; LinkedIn grants use-only access and rejects a target that already has an Insight Tag; TikTok needs a Business Center pixel.

**unshare_ad_tracking_tag:** Meta, LinkedIn and TikTok. LinkedIn refuses to remove the last ad account holding the tag.

**send_ad_conversions:** Meta, Google Ads, LinkedIn, TikTok (offline conversions only), OpenAI Ads and Pinterest. `destinationId` is a destination or tracking tag returned for this advertiser (Google: the conversion action resource name; Pinterest: the ad account ID). Personal fields are sent as plaintext and hashed before they reach the ad platform; they are not stored here. Give every event a stable `eventId` so the platform can deduplicate it against browser events. Up to 1,000 events. Check `eventsFailed` and `failures` for partial failure.

**adjust_ad_conversions:** Google Ads only. RETRACTION removes a conversion; RESTATEMENT sets the corrected total value (`restatementValue`); ENHANCEMENT attaches email or phone (hashed before sending; `orderId` required). Identify each conversion by `orderId` (the original `eventId`) or by `gclid` with `conversionTime`. Times are unix seconds. Up to 2,000 adjustments; check `failures` for rows Google rejected.

**get_ad_conversion_quality:** Meta: Event Match Quality per web event for a pixel of this advertiser. Pinterest: Event Quality Score for the last 14 days of web conversions; `destinationId` defaults to the ad account. Other platforms answer 405.

**list_ad_lead_forms:** Meta: forms on the Facebook Page linked to the advertising connection. LinkedIn: forms owned by the ad account’s company page. Paginate with `cursor`.

**get_ad_lead_form:** Meta forms come in Meta’s field names; `fields` (Meta only) replaces the default field selection with a comma-separated list using {} for nested fields. LinkedIn forms come in LinkedIn’s own shape.

**create_ad_lead_form:** `form` holds the content and its shape depends on the platform. Meta: `questions` (prefilled types such as EMAIL, PHONE or FULL_NAME omit `key` and `label`; CUSTOM questions need both), thank-you page and context card. LinkedIn: `headline`, `description`, free-text and multiple-choice `questions`, `consents`, and `state` (DRAFT by default). Not idempotent on either platform: an uncertain create must be checked by listing forms before another is sent.

**archive_ad_lead_form:** Neither Meta nor LinkedIn deletes forms; the form is archived and stays readable. Ads using it stop collecting leads through it.

**create_ad_lead_form_test_lead:** Meta only. Use it to check lead retrieval without real ad traffic. Meta allows one test lead per form at a time; delete the previous one in Meta before sending another.

**list_ad_lead_form_leads:** Meta only; for LinkedIn forms use the leads list with `formId`. Leads contain personal data, so this also needs the contacts.read scope; they are read live and nothing is stored here. `since` is unix seconds. Paginate with `cursor`.

**list_ad_leads:** Meta leads arrive in real time. LinkedIn leads are read live and LinkedIn keeps them 90 days; reading them needs a connection authorized for lead access. Leads contain personal data, so this also needs the contacts.read scope; they are not stored here. Filter by `formId` (a form returned for this advertiser) and `since` (unix seconds). Paginate with `cursor`.

**list_ad_local_services_leads:** Google Ads only. Leads contain personal data, so this also needs the contacts.read scope. Read live from Google; nothing is stored here. Google never returns healthcare leads, and WIPED_OUT leads have no contact details. Dates are YYYY-MM-DD. Paginate with `pageToken`. Draws on the Google Ads operations budget; a 429 means retry later.

**list_ad_local_services_lead_conversations:** Google Ads only. Phone calls include duration and a recording URL; messages include text and attachment URLs, so this also needs the contacts.read scope. Read live; nothing is stored here. Paginate with `pageToken`.

**list_ad_comments:** Meta and TikTok. A Meta ad on both Facebook and Instagram has two threads: `placement` picks one (default Instagram when present). Instagram comments need the Instagram account connected to this business. TikTok: `since`/`until` (YYYY-MM-DD) select at most 30 days, default the last 30; a page can be empty while `pagination.hasMore` is true. `adId` is the local ad ID from the advertising objects endpoint.

**get_ad_url_tracking:** Meta: the creative’s URL tags. Google Ads: the campaign’s tracking template and final URL suffix. LinkedIn: the campaign’s dynamic and custom UTM parameters. TikTok, X and Pinterest answer 405. These are URL parameters, not pixels.

**update_ad_url_tracking:** Send only the fields for the ad’s platform. Meta (`urlTags`): creatives are immutable, so a new creative is built from the existing one and the ad is repointed to it; send `creative` only when Meta reports the existing creative cannot be rebuilt. Google Ads: `trackingUrlTemplate` (must contain {lpurl}) and/or `finalUrlSuffix`, applied to the campaign. LinkedIn: `dynamicValueParameters` and/or `customValueParameters`, applied to the campaign. Changes show in cached objects after the next advertising refresh.

## Social analytics API

GET https://usecloudconnect.com/api/v1/accounts/{accountId}/analytics?from=YYYY-MM-DD&to=YYYY-MM-DD retrieves stored social analytics with rows, daily totals, connection freshness, and null for unavailable metrics. Requires analytics.read. Optional connectionId selects one connection; it is required for connection-restricted API keys. Use POST /accounts/{accountId}/analytics/refresh to queue fresh metrics; the GET endpoint reads the latest stored snapshot. Date ranges are limited to 366 days.

## Connect AI clients with MCP

MCP endpoint: **https://usecloudconnect.com/mcp**. Transport: **Streamable HTTP**, stateless JSON responses. Runs inside the existing web service; no extra server, port or paid service is required. This server covers publishing, advertising, Connected TV, analytics reads/refresh/export, Inbox reads/replies/attachments, media browsing, local contacts and draft modules, connection management, activity, usage, and phone onboarding. The Workspace API coverage section lists the additional tool names and scopes. Draft tools do not activate unimplemented messaging campaigns, workflows, SMS or voice services.

### Connect an AI client

1. In **API & integrations**, create an integration at the platform, Agency, Group or Account level. Select business/connection scope and only the permissions the AI needs. Account-owned integrations remain restricted to that business.
2. Add the MCP endpoint to your AI client. Choose OAuth and dynamic client registration (DCR), where requested. You do not need to generate an API key for OAuth.
3. Sign in with your existing invited user, verify with a passkey or TOTP, choose the integration and approve specific scopes. Read-only scopes are selected initially. Select publishing permissions only when you want the client to publish. Select **offline_access** to allow token refresh for up to 30 days.
4. Ask the agent to list Accounts and Connections, inspect capabilities, and prepare drafts. Publishing remains subject to your integration’s configured trust, business approval policy and platform readiness.

**ChatGPT:** add a custom MCP app/plugin in your workspace’s developer settings using the endpoint above and OAuth. Use DCR (the server advertises its registration endpoint). Availability and approval depend on your ChatGPT plan and workspace settings. [Official setup](https://help.openai.com/en/articles/12584461-developer-mode-and-full-mcp-connectors-in-chatgpt-beta) · [OAuth configuration](https://developers.openai.com/plugins/build/auth).

**Claude:** in Settings → Connectors, add a custom connector using the endpoint and complete OAuth. Workspace administrators may need to approve it. [Official setup](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp).

**Claude Code:**

```sh
claude mcp add --transport http publishing https://usecloudconnect.com/mcp
```

Then use `/mcp` in Claude Code to authenticate. [Official CLI reference](https://code.claude.com/docs/en/mcp).

**Codex:**

```sh
codex mcp add publishing --url https://usecloudconnect.com/mcp
codex mcp login publishing --scopes discovery.read,posts.read,posts.write,posts.publish,posts.cancel,posts.retry,media.read,media.write,offline_access
```

For server-to-server developer clients, existing API keys also work through an Authorization bearer header. Codex can read the key from your secret-managed environment:

```sh
codex mcp add publishing --url https://usecloudconnect.com/mcp --bearer-token-env-var PUBLISHING_API_KEY
```

Never paste credentials into prompts or commit them in configuration. OAuth is recommended for interactive clients. Client-side tool confirmation is an additional safeguard; it does not replace server permissions. Connecting a client does not authorize an agent to publish unspecified content.

### Tool reference

Tools are listed only when the credential has the required base scope. Every call rechecks current integration access. Discovery and list tools accept cursor/limit; follow nextCursor until null.

| Tools | Scope | Purpose |
| --- | --- | --- |
| list_accounts, list_connections, get_connection_capabilities | discovery.read | Resolve exact destinations, health and supported formats |
| list_posts, get_post, get_post_batch | posts.read | Read this integration’s posts, versions and per-item outcomes |
| validate_post_batch | posts.write | Validate up to 100 items without storing or publishing |
| create_post_batch, edit_post | posts.write | Create drafts or delivery requests, edit exact versions; publishing additionally requires posts.publish |
| submit_post | posts.publish | Submit a post for its configured delivery |
| cancel_post, unpublish_post | posts.cancel | Cancel pending delivery or remove a supported published post |
| retry_post | posts.retry | Retry eligible failures with reconciliation protection |
| create_media_upload, complete_media_upload, import_media | media.write | Prepare durable media and inspection |
| get_media | media.read | Inspect processing state and metadata |
| list_webhook_endpoints, create_webhook_endpoint, disable_webhook_endpoint | webhooks.manage | Manage outbound signed status notifications |
| list_webhook_deliveries, replay_webhook_delivery | webhooks.manage | Inspect and replay failed delivery |
| list_advertisers, discover_advertisers, get_advertising, search_ad_targeting | ads.read | Discover and read advertising objects, audiences (section `audiences`), capabilities and targeting |
| bind_advertiser, mutate_advertising | ads.write | Assign advertisers and queue changes; spend actions additionally require ads.spend. Audience actions (audience.create, audience.users, audience.companies, audience.update, audience.delete, audience.sync) never spend; adding people from contacts also requires contacts.read and lawfulBasisConfirmed: true |
| approve_advertising | ads.approve | Independent review of the exact request when business approvals are enabled |
| recover_advertising_creation | ads.write (+ ads.spend for creation) | Recover uncertain campaign/ad creation with the original key, or resume an uncertain audience upload, within 23 hours |
| refresh_advertising | ads.read | Refresh the cached campaign hierarchy |
| list_ctv, get_ctv, search_ctv_targeting | ads.read | Read Connected TV advertisers, campaigns, strategies, creatives, audiences, change requests, budget and targeting options |
| create_ctv_campaign, add_ctv_strategy, update_ctv, create_ctv_asset | ads.write | Create and edit Connected TV drafts, strategies, creatives and audiences; changes are queued and return a request to poll |
| control_ctv_delivery | ads.write (+ ads.spend to publish or resume) | Publish, pause, resume or duplicate campaigns and strategies; spend is checked against the monthly budget and approvals |
| get_ctv_stats, create_ctv_report | ads.read, ads.reports | Daily Connected TV delivery and custom reports |
| review_ctv_request | ads.approve | Independently approve or decline a Connected TV spend change |
| list_account_parents, create_account | accounts.create | Create a business Account under an Agency or Group this key manages, idempotently |
| describe_operations | discovery.read | List channel operations with their parameters, input schemas, scopes, charges and whether this credential may call them |
| manage_<family> | Per operation | One tool per channel-operations family (for example manage_whatsapp, manage_telephony, manage_google_business). Pass operation, params, query, body and, for writes, a stable idempotencyKey. Offered when the credential holds any scope the family uses; each operation still checks its own scopes |
| create_advertising_report | ads.reports | Retrieve performance with ads.read also required |
| get_social_analytics | analytics.read | Read stored daily social metrics and freshness |
| read_documentation | Any authenticated access | Read this entire Markdown guide |

MCP resources: `workspace://docs/publishing` (this complete Markdown guide), `workspace://docs/openapi` (REST OpenAPI). Prompt: `prepare_social_posts`, with a required brief and optional accountId, prepares drafts and asks for missing destination choices. Tools have machine-readable input schemas and read-only/destructive/idempotency annotations.

### Batch arguments

`create_post_batch` uses the REST batch payload plus an `idempotencyKey` argument. Each item has its own connectionId, content, title, format, media, platformOptions and delivery. IDs are local application IDs from discovery. Exact platform options and media constraints are documented below.

```json
{
  "accountId": "11111111-1111-4111-8111-111111111111",
  "idempotencyKey": "crm-article-847-v1",
  "externalReference": "article-847",
  "items": [{
    "clientReference": "article-847-facebook",
    "connectionId": "22222222-2222-4222-8222-222222222222",
    "title": "Our latest article",
    "format": "text",
    "content": "A summary tailored to this connection.",
    "delivery": {"mode": "draft"}
  }]
}
```

For immediate delivery use `{"mode":"now"}`. For scheduling use `{"mode":"scheduled","scheduledAt":"2027-01-15T09:00:00-07:00"}`. Confirm the actual business timezone and intended date; the example date is a placeholder. Validate first with validate_post_batch (same arguments without idempotencyKey).

Post actions use postId, current version and idempotencyKey. edit_post also takes the complete replacement input as post. Media upload tools return short-lived signed URLs; send binary bytes directly to storage, never as base64 inside MCP. Then complete the upload and poll get_media until ready. import_media accepts accountId, a public HTTPS url, optional name, and idempotencyKey.

Successful tool results expose `{httpStatus,result}` in both text JSON and structuredContent. Business errors set isError and return a stable code/message. Partial batch acceptance retains per-item results. HTTP 202 means accepted, never proof of publication. Preserve idempotency keys and clientReference values on retries; poll uncertain jobs rather than issuing duplicates. Rate limits are shared with REST at integration and owner levels, including MCP discovery requests.

### Authorization and revocation

OAuth uses exact registered redirect URIs, authorization-code flow with S256 PKCE, one-time two-minute codes, hashed opaque access/refresh tokens and resource-bound grants. Access tokens last at most 15 minutes. With offline_access, refresh tokens rotate; reuse revokes the whole grant. Reconnect after 30 days or after revocation. This server supports DCR with public clients (none) and client_secret_post/client_secret_basic. CIMD and legacy HTTP+SSE are not advertised. POST /mcp handles requests; GET/DELETE return 405 because the server has no persistent transport sessions. Poll post tools or use publishing webhooks for asynchronous outcomes.

Use the **central** MCP URL above, including for branded Agencies. Tenant boundaries come from integration ownership and authorized scopes. Unknown hosts are rejected. OAuth tokens work only at /mcp; browser session cookies cannot authenticate tool calls and MCP tokens cannot authenticate the REST API. Existing API keys can authenticate both interfaces. Untrusted Origin headers are rejected.

OAuth access is tied to both the consenting user and the selected integration. Disabled users, lost management permission, removed business access, disabled integrations, grant expiry or revocation restrict future requests. Accounts are fixed to the authorized set at consent; newly created businesses require a new consent. Connection restrictions remain enforced. API keys retain their existing service-identity semantics.

Manage or revoke your connected clients at **[AI client access](https://usecloudconnect.com/mcp/access)**. An authorized integration administrator can disable the integration to stop all its API/MCP access. Revocation stops new requests; already accepted publishing jobs must be cancelled separately. The audit log records tool name, integration and the consenting user without credentials or content payloads. Webhook signing secrets are returned once and must stay in secure storage.

### Troubleshooting

- 401: reauthenticate or replace an expired/revoked API key. The WWW-Authenticate header links protected-resource discovery.
- No integration choices: create an integration or ask an administrator for integrations.manage access.
- Missing tools: grant the corresponding integration scope, then reconnect and approve it. Missing posts.publish blocks delivery even if draft tools are present.
- No businesses: check current memberships and the integration’s scope. OAuth cannot grant broader access than the user possesses.
- Readiness or approval errors: resolve them in the workspace; MCP cannot bypass them.
- 429: wait for Retry-After and reduce concurrency.
- Broken client setup: use Streamable HTTP and DCR OAuth, confirm the central URL, and check `/.well-known/oauth-authorization-server`. Actual client availability is controlled by the client vendor and workspace settings.


## Start here

API version: **1.2.0**. Base URL: **https://usecloudconnect.com/api/v1**.

This API connects a CRM, content generator, or AI agent to social Connections owned by business Accounts. An Account is a business; a Connection is one connected destination. All IDs in requests are this application's IDs, obtained through discovery. Example UUIDs below are placeholders.

1. An authorized administrator creates an integration in **API & integrations**, selects its scope and generates an API key.
2. Discover authorized Accounts and Connections. Inspect the target Connection's capabilities.
3. Validate a batch, then create drafts. Prepare and inspect any media.
4. Request immediate or scheduled delivery only when the operator intends to publish. Follow business approval policy and live readiness gates.
5. Store batch/post IDs, client references, versions and idempotency keys in the CRM. Poll status or receive signed webhooks.

**For AI agents:** use the documented public API only. Keep bearer keys in the caller's server-side secret store; never place them in prompts, client-side JavaScript or URLs. Do not invent Connection IDs, platform options or supported formats. Do not treat HTTP 202 as publication success. Never resubmit uncertain writes under a different key.

API customer payment is disabled during beta. Storage allowances and rate limits still apply. A connected channel does not imply that every publishing format is enabled or live-verified. The capability endpoint reports readiness; approval, feature pauses, platform consent and platform-specific restrictions still apply.

This reference covers publishing, advertising, analytics, Inbox conversations, media, local workspace records, connection management, usage and phone onboarding. Draft-only and interactive-only capabilities are explicitly identified in the Workspace API coverage section.

## Authentication and scope

Send these headers on JSON mutations:

```http
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Idempotency-Key: crm-article-847-v1
```

The documentation page, raw Markdown and OpenAPI document are public on verified hosts and need no API key. All other public API endpoints require bearer authentication; browser login cookies do not authenticate them. Use HTTPS on the verified application host. The central application host can serve the key's full authorized scope; an agency domain further limits business access to that agency's descendants.

| Key owner | Available business scope |
| --- | --- |
| Super Admin / platform | Explicit selected roots or opted-in descendants |
| Agency | Selected descendant Accounts or subtrees; optionally all current/future descendants |
| Group | Selected descendant Accounts; optionally all current/future descendants |
| Account | Permanently restricted to that one Account |

An explicit subtree includes future Accounts inside it; selecting an individual Account does not include new siblings. Integrations may also restrict exact Connection IDs. The `accountId` field is required even with an Account-owned key and must equal that key's Account. Keys cannot manage another integration's posts.

| Scope | Operations |
| --- | --- |
| `discovery.read` | Accounts, Connections and capabilities |
| `posts.read` | Post and batch status |
| `posts.write` | Validate, create and edit post inputs |
| `posts.publish` | Non-draft delivery, submit and unpublish; also required for retries and published edits |
| `posts.cancel` | Cancellation, including cancellation needed for external rescheduling |
| `posts.retry` | Retry confirmed failed deliveries |
| `media.read` | Read media readiness |
| `media.write` | Upload/import media, including URLs and uninspected attachments used by posts |
| `webhooks.manage` | Register, list, disable and replay outgoing webhooks |
| `connections.manage` | Create hosted connect links, cancel them and disconnect Connections |

Generate and manage keys through the authenticated administration UI; public bearer keys cannot grant themselves additional permissions. Secrets are displayed once and stored hashed. Rotate by creating a replacement key, updating the CRM, and revoking the old key. Expired/revoked keys cannot authenticate. Revocation does not cancel previously accepted work. Disabling the integration blocks pending execution, but cannot recall work already accepted by a platform.

Trusted publishing is an explicit administrator exception to independent human review. It does not bypass scope, connection health, media inspection or feature gates. Human edits remove the exception for that revision.

## Discover Accounts, Connections and capabilities

All paths below are relative to `https://usecloudconnect.com/api/v1`.

| Method | Path | Result |
| --- | --- | --- |
| GET | `/accounts` | `{data:[{id,name,timezone}],nextCursor}` |
| GET | `/accounts/{accountId}/connections` | `{data:[{id,name,platform,status}],nextCursor}` |
| GET | `/accounts/{accountId}/connections/{connectionId}/capabilities` | Platform, formats, limits, options schema, operation support and readiness |

List endpoints accept `limit` (1–100) and `cursor`. Send the returned `nextCursor` unchanged to retrieve the next page; null means the end. Removed/disconnecting Connections are excluded. Use healthy Connections for delivery.

Capabilities contain `platform`, `formats`, `textLimit`, `maxMedia`, `platformOptionsSchema`, `operations`, and `readiness`. A readiness entry is `{format,enabled,liveVerified}`; entries include lifecycle actions as well as formats. Supported formats and lifecycle actions are enabled by default for healthy connections. liveVerified reports recorded live acceptance evidence only; it is not a prerequisite for publishing. An explicit enabled=false pauses that format or action. A global publishing pause can still prevent execution. The platform schema constrains only that platform's options; wrap them inside `platformOptions[platform]` in a post.

## Create business accounts

An Agency- or Group-owned integration can create the business Accounts it manages, so a new customer can be onboarded without the portal. Requires the `accounts.create` scope on a key without a connection restriction. Account-owned keys cannot create businesses.

| Method | Path | Result |
| --- | --- | --- |
| GET | `/account-parents` | Agencies and Groups this key may create a business under: `{data:[{id,name,kind,parentId}]}` |
| POST | `/accounts` | 201 with the new business `{id,name,kind,parentId,timezone,createdAt}` |

Request body, with an **Idempotency-Key** header (8–200 characters):

```json
{
  "parentId": "66666666-6666-4666-8666-666666666666",
  "name": "Acme Plumbing",
  "timezone": "America/Denver"
}
```

- `parentId`: an ID from GET /account-parents. It must be inside the integration's owner and its business scope, so the same key can use the new business immediately, and the person who created the integration must still be allowed to create businesses there.
- `timezone` (optional): IANA timezone, default UTC.
- Repeating the request with the same key returns the business created the first time (HTTP 200) instead of creating another; the same key with a different name or parent returns 409 IDEMPOTENCY_CONFLICT.

The new business receives the standard starter allowances and appears in GET /accounts on the next request. People who belong to the parent Agency or Group get access through inheritance; invite others in the portal. Next, connect its channels and ad accounts with a hosted link (below).

## Connect social and advertising accounts with a hosted link

A business owner must approve access on the social platform themselves; an API key cannot do that for them. Create a connect session instead. You get back a link to a page carrying your agency's brand (or the business's name when there is no agency). The page is served on your verified custom domain when one is active, otherwise on `usecloudconnect.com`. The owner never signs in to the workspace portal.

Requires `connections.manage` on a business-wide key (keys restricted to specific Connection IDs cannot add connections). Advertising platforms also require `ads.write`, because the owner's choice binds the ad account to the business.

| Method | Path | Result |
| --- | --- | --- |
| POST | `/accounts/{accountId}/connect-sessions` | 201 with the session and a one-time `url` |
| GET | `/accounts/{accountId}/connect-sessions/{sessionId}` | Current session state |
| DELETE | `/accounts/{accountId}/connect-sessions/{sessionId}` | Cancel an unfinished session |

Request body:

```json
{
  "platform": "linkedin",
  "returnUrl": "https://app.example.com/integrations/done",
  "expiresInMinutes": 60
}
```

- `platform`: one of instagram, facebook, linkedin, tiktok, twitter, youtube, pinterest, threads, reddit, snapchat, googlebusiness, whatsapp, slack, or an advertising platform: ads-meta, ads-google, ads-linkedin, ads-tiktok, ads-pinterest, ads-x. Bluesky, Telegram, Discord, Shopify, OpenAI Ads and phone connections need portal-only inputs.
- `parentConnectionId`: **required for ads-x** (the business's healthy twitter connection). **Optional for ads-meta, ads-linkedin and ads-pinterest**: pass the business's facebook, linkedin or pinterest connection to link the ad account to it, or omit it for a business that only runs ads. Not accepted for other platforms. Meta's sign-in may still register a Facebook account with the integration when no posting connection is given.
- `returnUrl` (optional): HTTPS, or `http://localhost` for development. When setup ends the browser is sent here with `connect_session`, `status` and, on success, `connection_id` query parameters.
- `loginMethod` (optional, Instagram only): `instagram_login` (default) or `facebook_login`.
- `expiresInMinutes` (optional): 5–1440, default 60. This is how long the link can be opened.

Response:

```json
{
  "id": "55555555-5555-4555-8555-555555555555",
  "accountId": "11111111-1111-4111-8111-111111111111",
  "platform": "linkedin",
  "status": "pending",
  "connectionId": null,
  "failureCode": null,
  "returnUrl": "https://app.example.com/integrations/done",
  "expiresAt": "2026-09-24T18:00:00.000Z",
  "createdAt": "2026-09-24T17:00:00.000Z",
  "url": "https://social.youragency.com/connect/55555555-5555-4555-8555-555555555555?token=…"
}
```

The `url` is returned only once and is a secret; send it only to the person connecting the account. Open it in a new tab or a popup window. Social platforms refuse to load their sign-in pages inside iframes, so an in-page modal iframe will not work.

**The flow.** The owner opens the link and clicks Continue, which ties the session to that browser. Other browsers, and link-preview bots that only GET the page, cannot continue it. The owner approves access on the platform. Where the platform requires it, the owner then chooses which Page, organization, board, location or channel to connect. The session completes with a new `connectionId`, which is immediately usable in `/connections` and publishing.

**Ad accounts.** For an advertising platform, after approval the owner chooses the exact ad account from those the platform returns (the status is `selecting` meanwhile). The session completes with `connectionId` and `advertiserId`, the local advertiser ID used by the advertising and audience endpoints. Nothing is created or launched. If the link expires or the owner cancels at that step, the session completes with the connection only; bind the ad account later with GET `/accounts/{accountId}/advertising/discover` and POST `/accounts/{accountId}/advertising/advertisers`.

**Status values.** `pending` (link not opened yet), `authorizing` (the owner is at the platform), `selecting` (the owner is choosing a destination or ad account), `verifying` (the platform result is being confirmed), `completed` (includes `connectionId`), `failed` (approval was declined or interrupted; `failureCode` explains why, for example `oauth_denied`, `missing_google_permissions` (a permission box was left unticked on Google's screen), `access_denied`, `google_ads_*` or `tiktok_ads_*`, or `authorization_failed` when no documented reason was given; the page tells the owner what to fix, and they can retry from the same page until expiry), `cancelled`, `expired`.

**Finding out when it's done.** Use any combination of:

1. Webhooks: `connect_session.completed` (with `connectionId`), `connect_session.failed` (with `failureCode`; the session may still complete after a retry), `connect_session.cancelled` and `connect_session.expired`.
2. Polling `GET /connect-sessions/{sessionId}`.
3. From a popup: the page posts `{type:'connect_session', sessionId, status, connectionId}` to `window.opener` and then closes itself. `connectionId` is included, and the message is targeted, only when `returnUrl` was set; the message goes to `returnUrl`'s origin. Always check `event.origin` and confirm the result through the API.

```js
const s = await createConnectSession(); // your server calls POST /connect-sessions
const popup = window.open(s.url, 'connect', 'width=520,height=720');
window.addEventListener('message', (event) => {
  if (event.origin !== new URL(s.url).origin || event.data?.type !== 'connect_session') return;
  refreshConnections(event.data.sessionId); // confirm with GET /connect-sessions/{id}
});
```

**Rules and limits.** Each session reserves one connection slot while it is in progress. Cancelling or expiring the session releases the slot unless the platform has already connected the account; in that case the session completes. A new session for the same business and platform takes over an unfinished one, and the older session becomes `expired`. An administrator pause on a platform (`CONNECTION_PAUSED`) blocks new sessions. Disabling the integration, or removing its `connections.manage` scope, stops unfinished sessions at their next step. The platform's own approval screen shows the name of the app that owns the platform credentials; that screen cannot be rebranded.

## Batch publishing and validation

`POST /post-batches/validate` validates the batch without creating posts or importing URLs. No idempotency header is required. HTTP 200 can contain per-item errors; inspect every item. `mediaInspectionPending:true` means this is not a media inspection or live-publication check.

`POST /post-batches` accepts one business per request, up to **100 items**, and at most **2 MiB of JSON**. An `Idempotency-Key` of 8–200 characters is required. Each item targets one Connection and has its own content, media, options and delivery. Use multiple items for multiple Connections, or multiple posts on one Connection. Submit separate batches for different Accounts.

Example containing distinct Facebook and Instagram drafts (replace both destination IDs):

```json
{
  "accountId": "11111111-1111-4111-8111-111111111111",
  "externalReference": "crm-article-847",
  "items": [
    {
      "clientReference": "article-847-facebook",
      "connectionId": "22222222-2222-4222-8222-222222222222",
      "title": "Our latest article",
      "format": "text",
      "content": "A summary written for Facebook.",
      "delivery": {
        "mode": "draft"
      }
    },
    {
      "clientReference": "article-847-instagram",
      "connectionId": "33333333-3333-4333-8333-333333333333",
      "format": "image",
      "content": "An Instagram-specific caption.",
      "media": [
        {
          "url": "https://YOUR_MEDIA_HOST/article-847.jpg",
          "altText": "Describe the actual image."
        }
      ],
      "delivery": {
        "mode": "draft"
      }
    }
  ]
}
```

| Post field | Meaning |
| --- | --- |
| `clientReference` | Required, 1–200 characters, unique within this integration and Account |
| `connectionId` | Required application Connection UUID |
| `title` | Optional internal title, up to 200 characters; use required platform title options separately |
| `format` | Required supported format from capabilities |
| `content` | Caption/text, default empty; platform and format requirements apply |
| `linkUrl` | HTTPS link required for link format; appended to the caption |
| `media` | Array of `{id,altText?}` or `{url,altText?}`; exactly one of id/url per attachment |
| `delivery` | Required draft, now, or scheduled object |
| `platformOptions` | Optional object keyed by the Connection's exact platform identifier |

Text and link formats require nonempty content. Image, video, reel, story, document and GIF formats require exactly one attachment. Carousel requires at least two. Text/link/thread formats do not accept top-level attachments; thread media belongs in supported thread options. Media count, text and alt-text limits vary by platform. Unknown fields and mismatched platform options are rejected.

Valid items are accepted independently. If any succeeds the response is HTTP 202; if none succeeds it is HTTP 422. Authorization/business-scope failure accepts nothing. Example mixed result:

```json
{
  "id": "44444444-4444-4444-8444-444444444444",
  "items": [
    {
      "index": 0,
      "clientReference": "article-847-facebook",
      "postId": "55555555-5555-4555-8555-555555555555",
      "status": "draft"
    },
    {
      "index": 1,
      "clientReference": "article-847-instagram",
      "error": {
        "code": "INVALID_CONTENT",
        "message": "Media is required for this format."
      }
    }
  ]
}
```

Persist every accepted `postId`. Correct and resubmit only rejected items with a new request key. Do not resend accepted items in a fresh batch.

## Delivery, scheduling and approvals

Choose one delivery object:

```json
{
  "mode": "draft"
}
```
```json
{
  "mode": "now"
}
```
```json
{
  "mode": "scheduled",
  "scheduledAt": "2030-01-15T09:00:00-07:00"
}
```

Replace the example schedule with a future ISO 8601 timestamp including Z or an explicit UTC offset. A timezone name alone is insufficient; resolve the intended business-local time and daylight-saving offset in the CRM. UTC instants are stored for execution.

Drafts do not dispatch. `now` queues asynchronous delivery and may wait for media or approval; it does not promise publication before the HTTP response. Long-range schedules remain local and are submitted within a rolling 24-hour window. If a schedule passes before submission, execution blocks with `SCHEDULE_MISSED`; explicitly reschedule or request now.

Business approval policies require a different authorized reviewer. Reviews bind to content, media, destination, options and schedule; material edits require fresh review. Media inspection must finish before approval. Use Content in the business workspace for human review. There is no public approval-bypass endpoint.

## Post status and lifecycle endpoints

| Method | Path | Request / result |
| --- | --- | --- |
| GET | `/post-batches/{batchId}` | Original item outcomes plus current `posts` records |
| GET | `/accounts/{accountId}/posts` | `{data:[post],nextCursor}`; filters: `status`, `clientReference`; limit defaults to 50 |
| GET | `/posts/{postId}` | Current post record |
| PATCH | `/posts/{postId}` | `{version,post:completePostInput}` |
| POST | `/posts/{postId}/submit` | `{version}`; submit eligible draft/approved/blocked work |
| POST | `/posts/{postId}/cancel` | `{version}`; cancel eligible local or scheduled work |
| POST | `/posts/{postId}/retry` | `{version}`; retry eligible failed/blocked work |
| POST | `/posts/{postId}/unpublish` | `{version}`; remove published content where supported |

Every mutation above requires an idempotency key. Read the latest `version` first; stale versions return 409. Successful mutation responses are post records, and may describe queued lifecycle work rather than completed external actions.

A public post contains `id`, `accountId`, `connectionId`, `clientReference`, `status`, `version`, normalized `input`, nullable `platformPostUrl`, nullable `errorCode`, `createdAt`, and `updatedAt`. Imported URLs in top-level media become stored media IDs. GET a batch returns `{id,accountId,externalReference,items,posts}`.

PATCH replaces the full input; clientReference and connectionId must stay the same. Before submission, content and schedules can be changed. For an externally scheduled post, revision first confirms cancellation and then queues the replacement. That operation needs cancellation permission too. Published PATCH changes **content only** on supported platforms; media, title, schedule and other fields remain identical. It requires publishing permission and fresh approval unless trusted. Platform edit windows, account requirements and text limits still apply. A rejected edit preserves the previously published content and exposes its error.

Unpublishing and retry availability are platform-specific and independently gated. A retry requires a confirmed failed destination; it cannot bypass uncertain execution. Cancellation and unpublishing are distinct: deleting an already published post requires the unpublish endpoint.

| Status | Meaning / next action |
| --- | --- |
| draft | Editable, no dispatch until submitted |
| pending_approval | Await independent review in Content |
| processing | Waiting for media or a retryable preparation condition |
| queued / scheduled | Waiting for dispatch or scheduled time |
| publishing | External publication in flight; do not duplicate |
| published | Publication confirmed; inspect platformPostUrl if supplied |
| uncertain | Outcome unknown; reconcile by polling, never blindly resend |
| blocked | Resolve errorCode, then explicitly retry/reschedule as appropriate |
| failed | Confirmed failure; inspect errorCode before retrying |
| cancelled | Cancellation or supported unpublishing completed |
| revising / cancelling / retrying / unpublishing / editing | Lifecycle operation in progress |
| pending_edit_approval | Published-content revision awaits independent review |

A batch's accepted-item response is an immutable receipt. GET status is authoritative for later changes. Poll with reasonable backoff and respect rate limits.

## Media uploads and URL imports

Media stays within its Account. Use HTTPS URL imports or upload directly to the returned signed storage URLs. Do not place binary data or base64 files inside a JSON batch. Supported upload types: image/jpeg, image/png, image/webp, image/gif, video/mp4, video/quicktime, application/pdf. Maximum file size is **1 GiB**.

**Single upload**

1. POST `/accounts/{accountId}/media/uploads` with `{name,contentType,bytes}`. HTTP 201 returns `{id,url}`.
2. PUT exactly those bytes to the returned URL using matching Content-Type and Content-Length. Do not attach your API bearer key to storage requests. The signature lasts 10 minutes.
3. POST `/accounts/{accountId}/media/uploads/{mediaId}/complete` with `{}`.
4. Poll GET `/accounts/{accountId}/media/{mediaId}` until `status:ready`, then use its ID in post media.

**Multipart upload**

Set `multipart:true` on upload creation. The response is `{id,partSize,parts:[{partNumber,url}]}`, using 16 MiB parts with signatures valid for one hour. Upload each part and retain its ETag. Complete with:

```json
{
  "parts": [
    {
      "partNumber": 1,
      "etag": "ETAG_RETURNED_BY_STORAGE"
    }
  ]
}
```

**URL import**

POST `/accounts/{accountId}/media/imports` with an idempotency key and `{url,name?}`. HTTP 202 returns `{id,status:processing}`. A post can also use `media:[{url:...}]` directly; accepted URLs are imported asynchronously, even for drafts.

Source URLs must be public HTTPS, without embedded credentials, and return a valid Content-Length. Private/reserved IPs, unsafe redirects, files over 1 GiB, unsupported signatures and failed downloads are rejected. Downloads have a five-minute deadline. Some public URLs without Content-Length are therefore unsuitable; use direct upload instead.

GET media returns `{id,name,content_type,bytes,status,metadata}`; bytes may be serialized as a string. Metadata includes inspected dimensions/duration/codec, or PDF page information. Treat completion receipts as provisional and use GET for readiness. Failed or expired media cannot publish.

Files are inspected and copied to separate immutable publishing objects. An unexpired upload URL cannot replace approved media. Advanced platform media URLs are also captured. Storage allowance is reserved before ingestion; already stored files consume storage even if a post is cancelled. Temporary uploads and failed imports are cleaned up. Platform-specific dimensions, codecs, size limits and live acceptance still matter.

## Outgoing webhooks

All endpoint operations require `webhooks.manage`.

| Method | Path | Behavior |
| --- | --- | --- |
| POST | `/webhook-endpoints` | `{url}` registers public HTTPS endpoint; returns `{id,url,secret}` once |
| GET | `/webhook-endpoints` | Array of `{id,url,enabled,created_at}` |
| GET | `/webhook-endpoints/{endpointId}` | Up to 100 recent deliveries as an array |
| DELETE | `/webhook-endpoints/{endpointId}` | Disable endpoint; returns `{ok:true}` |
| POST | `/webhook-endpoints/{endpointId}` | `{deliveryId}` requests replay; returns `{ok:true}` |

Save the signing secret at creation. It is distinct from the API key. Delivery history exposes `id,event_id,status,attempts,last_status,available_at`. Use the delivery's `id` for replay, not its `event_id`. Replay does not create another social post.

Events have `id`, `createdAt`, and `type`:

- `post.accepted`: postId, batchId, clientReference, status.
- `post.status_changed`: a public `post` record.
- `batch.completed`: batchId, when all accepted items are in a terminal state. This can include failures or blocked items; it does not mean all items published.
- `ctv.request.succeeded`, `ctv.request.failed`, `ctv.request.uncertain`, `ctv.campaign.state_changed`, `ctv.creative.approval_changed`, `ctv.report.ready`: Connected TV outcomes, delivered to the integration that made the change. See [Connected TV](#ctv).
- `connect_session.completed`, `connect_session.failed`, `connect_session.cancelled`, `connect_session.expired`: sessionId, accountId, platform, plus connectionId (on completion) or failureCode (on failure). See [Connect social accounts](#connect-accounts).

Verify `X-Webhook-Signature` as `v1=` followed by hex HMAC-SHA256 over the exact bytes of `X-Webhook-Timestamp + '.' + rawRequestBody`. Use a constant-time comparison, reject timestamps outside five minutes, and persist/deduplicate `X-Webhook-Id` before acknowledging with 2xx. Do not parse and reserialize JSON before verifying its signature.

Events may repeat or arrive out of order. Retrieve current post state when needed. Delivery retries use exponential backoff for 72 hours, then mark the delivery failed; administrators may replay it. A disabled integration or removed scope prevents delivery outside its authorized businesses. Private-network URLs and redirects are not valid webhook destinations.

## Idempotency, rate limits and error handling

Keep a stable idempotency key for one logical batch, post mutation, or media import. Reuse that key with the identical payload after a timeout or lost HTTP response. Reusing it for different content returns `IDEMPOTENCY_CONFLICT` (409). A new key does not bypass clientReference uniqueness; an already accepted reference returns a per-item `REFERENCE_EXISTS` error. Keys are 8–200 characters.

Default limits: 120 requests/minute per integration and 600/minute per owning entity. Read `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` (Unix seconds), and `Retry-After` on 429. Limits are independent of free beta billing. `X-Request-Id` identifies requests for support.

Top-level errors use this envelope:

```json
{
  "error": {
    "code": "VERSION_CONFLICT",
    "message": "Post changed; reload its current version."
  },
  "requestId": "REQUEST_UUID"
}
```

Validation may additionally include `error.fields:[{path,message}]`. Batch item errors are nested inside `items[index].error` instead. Inspect both HTTP status and every item result.

| HTTP / code | Caller action |
| --- | --- |
| 401 UNAUTHENTICATED | Supply a valid, unexpired bearer key |
| 403 SCOPE_REQUIRED / INTEGRATION_DISABLED | Ask an authorized admin to review access |
| 404 NOT_FOUND | Rediscover IDs and scope; do not guess another business's IDs |
| 409 VERSION_CONFLICT | GET the current post before making a new decision |
| 409 IDEMPOTENCY_CONFLICT | Restore the original body/key pair; a new logical request needs a new key |
| 413 BODY_TOO_LARGE | Reduce JSON below 2 MiB; upload binary media separately |
| 415 CONTENT_TYPE_REQUIRED | Send application/json on JSON mutations |
| 422 INVALID_CONTENT / INVALID_PLATFORM_OPTIONS / VALIDATION_ERROR | Correct the indicated content or fields |
| 429 RATE_LIMITED | Wait for Retry-After; preserve the original mutation key and body |
| 500 INTERNAL_ERROR / transport timeout | Retry the same logical request with the same key, then inspect status |

Async post errorCode can include APPROVAL_REQUIRED, CONTRACT_UNVERIFIED, PUBLISHING_PAUSED, CONNECTION_UNHEALTHY, SCHEDULE_MISSED, MEDIA_PENDING, MEDIA_FAILED or PLATFORM_REJECTED. These are not proof of successful publication. An uncertain external operation must be reconciled rather than force-retried.

## cURL and agent integration example

Set `API_BASE` to the full base URL (including /api/v1) and `API_KEY` to a server-side secret. This example creates a draft only:

```bash
export API_BASE="https://usecloudconnect.com/api/v1"
# Load API_KEY from your secret store; do not commit it.
curl "$API_BASE/post-batches" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: article-847-facebook-v1" \
  --data '{"accountId":"11111111-1111-4111-8111-111111111111","items":[{"clientReference":"article-847-facebook","connectionId":"22222222-2222-4222-8222-222222222222","title":"Our latest article","format":"text","content":"A summary written for Facebook.","delivery":{"mode":"draft"}}]}'
```

Server-side TypeScript:

```typescript
const base = process.env.API_BASE!; // includes /api/v1
const key = process.env.API_KEY!;
// Persist this key and the exact payload before the first send.
const requestKey = "article-847-facebook-v1";
const payload = {
  "accountId": "11111111-1111-4111-8111-111111111111",
  "items": [
    {
      "clientReference": "article-847-facebook",
      "connectionId": "22222222-2222-4222-8222-222222222222",
      "title": "Our latest article",
      "format": "text",
      "content": "A summary written for Facebook.",
      "delivery": {
        "mode": "draft"
      }
    }
  ]
};
const response = await fetch(base + "/post-batches", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + key,
    "Content-Type": "application/json",
    "Idempotency-Key": requestKey,
  },
  body: JSON.stringify(payload),
});
const result = await response.json();
if (!response.ok && response.status !== 422) throw new Error(result.error?.message || "Request failed");
for (const item of result.items || []) {
  if (item.postId) {
    // Persist postId; GET /posts/{postId} for its current state.
  } else {
    // Store the per-item error; correct only the rejected item.
  }
}
```

Recommended CRM mapping: article ID → batch externalReference; article ID + destination + revision → clientReference; application Connection ID → destination; desired local business time → explicit-offset scheduledAt. Store each postId separately. An article destined for five Connections is five independent items with five client references.

## Platform formats and options

This is the implemented format catalog, not a claim of live readiness. Always query the Connection's capabilities at runtime.

| Platform identifier | Formats | Text limit | Maximum attachments |
| --- | --- | --- | --- |
| twitter | text, link, image, carousel, video, thread, poll, article, gif | 280 | 4 |
| threads | text, link, image, carousel, video, thread | 500 | 20 |
| facebook | text, link, image, carousel, video, reel, story | 63206 | 10 |
| instagram | image, carousel, video, reel, story | 2200 | 10 |
| linkedin | text, link, image, carousel, video, document, poll, reshare | 3000 | 20 |
| pinterest | image, video | 500 | 1 |
| youtube | video | 5000 | 1 |
| googlebusiness | text, link, image | 1500 | 1 |
| tiktok | video, carousel | 2200 | 35 |
| telegram | text, link, image, carousel, video | 4096 | 10 |
| snapchat | image, video, story | 5000 | 1 |
| reddit | text, link, image, carousel, video | 40000 | 1 |
| bluesky | text, link, image, carousel, video, thread | 300 | 4 |
| discord | text, link, image, carousel, video, poll | 2000 | 10 |
| slack | text, link, image, carousel, video | 4000 | 10 |

YouTube video options require title, visibility and madeForKids. TikTok requires privacyLevel and explicit contentPreviewConfirmed / expressConsentGiven values of true after the actual preview/consent step. Pinterest requires boardId. Reddit requires subreddit and title. Thread format requires threadItems. Poll, article and reshare formats require their matching options. Instagram placement must agree with the format. Account/profile/channel routing IDs cannot be overridden inside platform options.

Example YouTube options (alongside video format and one inspected video attachment):

```json
{
  "platformOptions": {
    "youtube": {
      "title": "Your video title",
      "visibility": "private",
      "madeForKids": false
    }
  }
}
```

The schema appendix below contains the exact supported option properties and enums. Resolve the schema name through its platforms map and the shared $defs. Do not send the catalog wrapper itself in a post.

## Platform option schemas

```json
{
  "platforms": {
    "twitter": "TwitterPlatformData",
    "threads": "ThreadsPlatformData",
    "facebook": "FacebookPlatformData",
    "instagram": "InstagramPlatformData",
    "linkedin": "LinkedInPlatformData",
    "pinterest": "PinterestPlatformData",
    "youtube": "YouTubePlatformData",
    "googlebusiness": "GoogleBusinessPlatformData",
    "tiktok": "TikTokPlatformData",
    "telegram": "TelegramPlatformData",
    "snapchat": "SnapchatPlatformData",
    "reddit": "RedditPlatformData",
    "bluesky": "BlueskyPlatformData",
    "discord": "DiscordPlatformData",
    "slack": "SlackPlatformData"
  },
  "$defs": {
    "TwitterPlatformData": {
      "type": "object",
      "properties": {
        "article": {
          "$ref": "#/$defs/XArticle"
        },
        "replyToTweetId": {
          "type": "string"
        },
        "quoteTweetId": {
          "type": "string"
        },
        "replySettings": {
          "type": "string",
          "enum": [
            "following",
            "mentionedUsers",
            "subscribers",
            "verified"
          ]
        },
        "threadItems": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "content": {
                "type": "string"
              },
              "mediaItems": {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/MediaItem"
                }
              }
            },
            "additionalProperties": false
          }
        },
        "poll": {
          "type": "object",
          "properties": {
            "options": {
              "type": "array",
              "minItems": 2,
              "maxItems": 4,
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 25
              }
            },
            "duration_minutes": {
              "type": "integer",
              "minimum": 5,
              "maximum": 10080
            }
          },
          "required": [
            "options",
            "duration_minutes"
          ],
          "additionalProperties": false
        },
        "longVideo": {
          "type": "boolean"
        },
        "geoRestriction": {
          "$ref": "#/$defs/GeoRestriction"
        },
        "paidPartnership": {
          "type": "boolean"
        },
        "madeWithAi": {
          "type": "boolean"
        },
        "sensitiveMedia": {
          "type": "object",
          "properties": {
            "adultContent": {
              "type": "boolean"
            },
            "graphicViolence": {
              "type": "boolean"
            },
            "other": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "XArticle": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "title",
        "content_state"
      ],
      "properties": {
        "title": {
          "type": "string",
          "minLength": 1
        },
        "content_state": {
          "$ref": "#/$defs/XArticleContentState"
        },
        "mode": {
          "type": "string",
          "enum": [
            "publish",
            "draft"
          ]
        },
        "cover": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri",
              "pattern": "^https?://.+\\.(?:[jJ][pP][eE]?[gG]|[pP][nN][gG]|[wW][eE][bB][pP])(?:[?#].*)?$"
            },
            "altText": {
              "type": "string",
              "maxLength": 1000
            }
          }
        }
      }
    },
    "XArticleContentState": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "blocks",
        "entities"
      ],
      "properties": {
        "blocks": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/XArticleBlock"
          }
        },
        "entities": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/XArticleEntity"
          }
        }
      }
    },
    "XArticleBlock": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "type",
        "text"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "unstyled",
            "header-one",
            "header-two",
            "header-three",
            "unordered-list-item",
            "ordered-list-item",
            "blockquote",
            "atomic"
          ]
        },
        "text": {
          "type": "string"
        },
        "key": {
          "type": "string",
          "minLength": 1
        },
        "data": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "cashtags": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/XArticleTextRange"
              }
            },
            "hashtags": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/XArticleTextRange"
              }
            },
            "mentions": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/XArticleTextRange"
              }
            },
            "urls": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/XArticleTextRange"
              }
            }
          }
        },
        "inline_style_ranges": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/XArticleInlineStyleRange"
          }
        },
        "entity_ranges": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/XArticleEntityRange"
          }
        }
      }
    },
    "XArticleTextRange": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "from_index",
        "to_index",
        "text"
      ],
      "properties": {
        "from_index": {
          "type": "integer",
          "minimum": 0
        },
        "to_index": {
          "type": "integer",
          "minimum": 0
        },
        "text": {
          "type": "string"
        }
      }
    },
    "XArticleInlineStyleRange": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "offset",
        "length",
        "style"
      ],
      "properties": {
        "offset": {
          "type": "integer",
          "minimum": 0
        },
        "length": {
          "type": "integer",
          "minimum": 0
        },
        "style": {
          "type": "string",
          "enum": [
            "bold",
            "italic",
            "strikethrough"
          ]
        }
      }
    },
    "XArticleEntityRange": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "key",
        "offset",
        "length"
      ],
      "properties": {
        "key": {
          "type": "integer",
          "minimum": 0
        },
        "offset": {
          "type": "integer",
          "minimum": 0
        },
        "length": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "XArticleEntity": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "key",
            "value"
          ],
          "properties": {
            "key": {
              "type": "string",
              "minLength": 1
            },
            "value": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "type",
                "mutability",
                "data"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "const": "post"
                },
                "mutability": {
                  "type": "string",
                  "enum": [
                    "immutable",
                    "mutable",
                    "segmented"
                  ]
                },
                "data": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "post_id"
                  ],
                  "properties": {
                    "post_id": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                }
              }
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "key",
            "value"
          ],
          "properties": {
            "key": {
              "type": "string",
              "minLength": 1
            },
            "value": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "type",
                "mutability",
                "data"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "const": "link"
                },
                "mutability": {
                  "type": "string",
                  "enum": [
                    "immutable",
                    "mutable",
                    "segmented"
                  ]
                },
                "data": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "url"
                  ],
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri"
                    }
                  }
                }
              }
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "key",
            "value"
          ],
          "properties": {
            "key": {
              "type": "string",
              "minLength": 1
            },
            "value": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "type",
                "mutability",
                "data"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "const": "image"
                },
                "mutability": {
                  "type": "string",
                  "enum": [
                    "immutable",
                    "mutable",
                    "segmented"
                  ]
                },
                "data": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "url"
                  ],
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "pattern": "^https?://.+\\.(?:[jJ][pP][eE]?[gG]|[pP][nN][gG]|[wW][eE][bB][pP]|[gG][iI][fF]|[mM][pP]4)(?:[?#].*)?$"
                    },
                    "caption": {
                      "type": "string"
                    },
                    "altText": {
                      "type": "string",
                      "maxLength": 1000
                    }
                  }
                }
              }
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "key",
            "value"
          ],
          "properties": {
            "key": {
              "type": "string",
              "minLength": 1
            },
            "value": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "type",
                "mutability",
                "data"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "const": "emoji"
                },
                "mutability": {
                  "type": "string",
                  "enum": [
                    "immutable",
                    "mutable",
                    "segmented"
                  ]
                },
                "data": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "entity_key"
                  ],
                  "properties": {
                    "entity_key": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                }
              }
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "key",
            "value"
          ],
          "properties": {
            "key": {
              "type": "string",
              "minLength": 1
            },
            "value": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "type",
                "mutability",
                "data"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "const": "markdown"
                },
                "mutability": {
                  "type": "string",
                  "enum": [
                    "immutable",
                    "mutable",
                    "segmented"
                  ]
                },
                "data": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "markdown"
                  ],
                  "properties": {
                    "markdown": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "key",
            "value"
          ],
          "properties": {
            "key": {
              "type": "string",
              "minLength": 1
            },
            "value": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "type",
                "mutability",
                "data"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "divider",
                    "latex"
                  ]
                },
                "mutability": {
                  "type": "string",
                  "enum": [
                    "immutable",
                    "mutable",
                    "segmented"
                  ]
                },
                "data": {
                  "type": "object",
                  "additionalProperties": false
                }
              }
            }
          }
        }
      ]
    },
    "MediaItem": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "image",
            "video",
            "gif",
            "document"
          ]
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "title": {
          "type": "string"
        },
        "altText": {
          "type": "string"
        },
        "filename": {
          "type": "string"
        },
        "size": {
          "type": "integer"
        },
        "mimeType": {
          "type": "string"
        },
        "thumbnail": {
          "type": "string",
          "format": "uri"
        },
        "instagramThumbnail": {
          "type": "string",
          "format": "uri"
        },
        "tiktokProcessed": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "GeoRestriction": {
      "type": "object",
      "properties": {
        "countries": {
          "type": "array",
          "minItems": 1,
          "maxItems": 25,
          "items": {
            "type": "string",
            "pattern": "^[A-Z]{2}$"
          }
        }
      },
      "required": [
        "countries"
      ],
      "additionalProperties": false
    },
    "ThreadsPlatformData": {
      "type": "object",
      "properties": {
        "topic_tag": {
          "type": "string",
          "minLength": 1,
          "maxLength": 50
        },
        "firstComment": {
          "type": "string",
          "maxLength": 500
        },
        "threadItems": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "content": {
                "type": "string"
              },
              "mediaItems": {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/MediaItem"
                }
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "FacebookPlatformData": {
      "type": "object",
      "properties": {
        "contentType": {
          "type": "string",
          "enum": [
            "story",
            "reel"
          ]
        },
        "title": {
          "type": "string"
        },
        "firstComment": {
          "type": "string"
        },
        "geoRestriction": {
          "$ref": "#/$defs/GeoRestriction"
        },
        "facebookSettings": {
          "$ref": "#/$defs/FacebookSettings"
        }
      },
      "additionalProperties": false
    },
    "FacebookSettings": {
      "type": "object",
      "properties": {
        "draft": {
          "type": "boolean"
        },
        "carouselCards": {
          "type": "array",
          "minItems": 2,
          "maxItems": 10,
          "items": {
            "type": "object",
            "required": [
              "link"
            ],
            "properties": {
              "link": {
                "type": "string",
                "format": "uri"
              },
              "name": {
                "type": "string",
                "maxLength": 255
              },
              "description": {
                "type": "string",
                "maxLength": 255
              }
            },
            "additionalProperties": false
          }
        },
        "carouselLink": {
          "type": "string",
          "format": "uri"
        },
        "textFormatPresetId": {
          "type": "string",
          "pattern": "^\\d+$"
        }
      },
      "additionalProperties": false
    },
    "InstagramPlatformData": {
      "type": "object",
      "properties": {
        "contentType": {
          "type": "string",
          "enum": [
            "story"
          ]
        },
        "shareToFeed": {
          "type": "boolean"
        },
        "collaborators": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "firstComment": {
          "type": "string"
        },
        "trialParams": {
          "type": "object",
          "properties": {
            "graduationStrategy": {
              "type": "string",
              "enum": [
                "MANUAL",
                "SS_PERFORMANCE"
              ]
            }
          },
          "additionalProperties": false
        },
        "userTags": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "username"
            ],
            "properties": {
              "username": {
                "type": "string"
              },
              "x": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "y": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "mediaIndex": {
                "type": "integer",
                "minimum": 0
              }
            },
            "additionalProperties": false
          }
        },
        "audioName": {
          "type": "string"
        },
        "audioConfiguration": {
          "type": "object",
          "required": [
            "audioId"
          ],
          "properties": {
            "audioId": {
              "type": "string"
            },
            "audioVolume": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100
            },
            "videoVolume": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100
            }
          },
          "additionalProperties": false
        },
        "muteAudio": {
          "type": "boolean"
        },
        "thumbOffset": {
          "type": "integer",
          "minimum": 0
        },
        "instagramThumbnail": {
          "type": "string",
          "format": "uri"
        },
        "reelCover": {
          "type": "string",
          "format": "uri"
        },
        "isAiGenerated": {
          "type": "boolean"
        },
        "isPaidPartnership": {
          "type": "boolean"
        },
        "brandedContentSponsors": {
          "type": "array",
          "maxItems": 2,
          "items": {
            "type": "string"
          }
        },
        "commentsEnabled": {
          "type": "boolean"
        },
        "locationId": {
          "type": "string",
          "pattern": "^[0-9]+$"
        },
        "placement": {
          "type": "string",
          "enum": [
            "feed",
            "reel",
            "story"
          ]
        }
      },
      "additionalProperties": false
    },
    "LinkedInPlatformData": {
      "type": "object",
      "properties": {
        "documentTitle": {
          "type": "string"
        },
        "firstComment": {
          "type": "string"
        },
        "disableLinkPreview": {
          "type": "boolean"
        },
        "reshareUrl": {
          "type": "string"
        },
        "geoRestriction": {
          "$ref": "#/$defs/GeoRestriction"
        },
        "poll": {
          "type": "object",
          "properties": {
            "question": {
              "type": "string",
              "minLength": 1,
              "maxLength": 140
            },
            "options": {
              "type": "array",
              "minItems": 2,
              "maxItems": 4,
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 30
              }
            },
            "duration": {
              "type": "string",
              "enum": [
                "ONE_DAY",
                "THREE_DAYS",
                "SEVEN_DAYS",
                "FOURTEEN_DAYS"
              ]
            }
          },
          "required": [
            "question",
            "options"
          ],
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "PinterestPlatformData": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 100
        },
        "boardId": {
          "type": "string"
        },
        "boardSectionId": {
          "type": "string"
        },
        "link": {
          "type": "string",
          "format": "uri"
        },
        "coverImageUrl": {
          "type": "string",
          "format": "uri"
        },
        "coverImageKeyFrameTime": {
          "type": "integer"
        },
        "isAiGenerated": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "YouTubePlatformData": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 100
        },
        "visibility": {
          "type": "string",
          "enum": [
            "public",
            "private",
            "unlisted"
          ]
        },
        "madeForKids": {
          "type": "boolean"
        },
        "firstComment": {
          "type": "string",
          "maxLength": 10000
        },
        "containsSyntheticMedia": {
          "type": "boolean"
        },
        "categoryId": {
          "type": "string"
        },
        "playlistId": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "GoogleBusinessPlatformData": {
      "type": "object",
      "properties": {
        "languageCode": {
          "type": "string"
        },
        "topicType": {
          "type": "string",
          "enum": [
            "STANDARD",
            "EVENT",
            "OFFER"
          ]
        },
        "callToAction": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "LEARN_MORE",
                "BOOK",
                "ORDER",
                "SHOP",
                "SIGN_UP",
                "CALL"
              ]
            },
            "url": {
              "type": "string",
              "format": "uri"
            }
          },
          "required": [
            "type",
            "url"
          ],
          "additionalProperties": false
        },
        "event": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string"
            },
            "schedule": {
              "type": "object",
              "properties": {
                "startDate": {
                  "type": "object",
                  "properties": {
                    "year": {
                      "type": "integer"
                    },
                    "month": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 12
                    },
                    "day": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 31
                    }
                  },
                  "required": [
                    "year",
                    "month",
                    "day"
                  ],
                  "additionalProperties": false
                },
                "startTime": {
                  "type": "object",
                  "properties": {
                    "hours": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 23
                    },
                    "minutes": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 59
                    }
                  },
                  "additionalProperties": false
                },
                "endDate": {
                  "type": "object",
                  "properties": {
                    "year": {
                      "type": "integer"
                    },
                    "month": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 12
                    },
                    "day": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 31
                    }
                  },
                  "required": [
                    "year",
                    "month",
                    "day"
                  ],
                  "additionalProperties": false
                },
                "endTime": {
                  "type": "object",
                  "properties": {
                    "hours": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 23
                    },
                    "minutes": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 59
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "startDate",
                "endDate"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "title",
            "schedule"
          ],
          "additionalProperties": false
        },
        "offer": {
          "type": "object",
          "properties": {
            "redeemOnlineUrl": {
              "type": "string",
              "format": "uri"
            },
            "termsConditions": {
              "type": "string"
            },
            "couponCode": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "TikTokPlatformData": {
      "type": "object",
      "properties": {
        "draft": {
          "type": "boolean"
        },
        "privacyLevel": {
          "type": "string"
        },
        "allowComment": {
          "type": "boolean"
        },
        "allowDuet": {
          "type": "boolean"
        },
        "allowStitch": {
          "type": "boolean"
        },
        "commercialContentType": {
          "type": "string",
          "enum": [
            "none",
            "brand_organic",
            "brand_content"
          ]
        },
        "brandPartnerPromote": {
          "type": "boolean"
        },
        "isBrandOrganicPost": {
          "type": "boolean"
        },
        "contentPreviewConfirmed": {
          "type": "boolean"
        },
        "expressConsentGiven": {
          "type": "boolean"
        },
        "mediaType": {
          "type": "string",
          "enum": [
            "video",
            "photo"
          ]
        },
        "videoCoverTimestampMs": {
          "type": "integer",
          "minimum": 0
        },
        "videoCoverImageUrl": {
          "type": "string",
          "format": "uri"
        },
        "photoCoverIndex": {
          "type": "integer",
          "minimum": 0
        },
        "autoAddMusic": {
          "type": "boolean"
        },
        "videoMadeWithAi": {
          "type": "boolean"
        },
        "description": {
          "type": "string",
          "maxLength": 4000
        }
      },
      "additionalProperties": false
    },
    "TelegramPlatformData": {
      "type": "object",
      "properties": {
        "parseMode": {
          "type": "string",
          "enum": [
            "HTML",
            "Markdown",
            "MarkdownV2"
          ]
        },
        "disableWebPagePreview": {
          "type": "boolean"
        },
        "disableNotification": {
          "type": "boolean"
        },
        "protectContent": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "SnapchatPlatformData": {
      "type": "object",
      "properties": {
        "contentType": {
          "type": "string",
          "enum": [
            "story",
            "saved_story",
            "spotlight"
          ]
        }
      },
      "additionalProperties": false
    },
    "RedditPlatformData": {
      "type": "object",
      "properties": {
        "subreddit": {
          "type": "string"
        },
        "title": {
          "type": "string",
          "maxLength": 300
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "forceSelf": {
          "type": "boolean"
        },
        "flairId": {
          "type": "string"
        },
        "flairText": {
          "type": "string"
        },
        "nsfw": {
          "type": "boolean"
        },
        "spoiler": {
          "type": "boolean"
        },
        "sendreplies": {
          "type": "boolean"
        },
        "nativeVideo": {
          "type": "boolean"
        },
        "videogif": {
          "type": "boolean"
        },
        "videoPosterUrl": {
          "type": "string",
          "format": "uri"
        }
      },
      "additionalProperties": false
    },
    "BlueskyPlatformData": {
      "type": "object",
      "properties": {
        "langs": {
          "type": "array",
          "minItems": 1,
          "maxItems": 3,
          "items": {
            "type": "string"
          }
        },
        "threadItems": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "content": {
                "type": "string"
              },
              "mediaItems": {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/MediaItem"
                }
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "DiscordPlatformData": {
      "type": "object",
      "required": [],
      "properties": {
        "embeds": {
          "type": "array",
          "maxItems": 10,
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "color": {
                "type": "integer"
              },
              "image": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              "thumbnail": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              "footer": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string"
                  },
                  "icon_url": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              "author": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  },
                  "icon_url": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              "fields": {
                "type": "array",
                "maxItems": 25,
                "items": {
                  "type": "object",
                  "required": [
                    "name",
                    "value"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    },
                    "inline": {
                      "type": "boolean"
                    }
                  },
                  "additionalProperties": false
                }
              }
            },
            "additionalProperties": false
          }
        },
        "poll": {
          "type": "object",
          "properties": {
            "question": {
              "type": "object",
              "required": [
                "text"
              ],
              "properties": {
                "text": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "answers": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "object",
                "properties": {
                  "poll_media": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            },
            "duration": {
              "type": "integer",
              "minimum": 1,
              "maximum": 768
            },
            "allow_multiselect": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "crosspost": {
          "type": "boolean"
        },
        "forumThreadName": {
          "type": "string"
        },
        "forumAppliedTags": {
          "type": "array",
          "maxItems": 5,
          "items": {
            "type": "string"
          }
        },
        "threadFromMessage": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "autoArchiveDuration": {
              "type": "integer",
              "enum": [
                60,
                1440,
                4320,
                10080
              ]
            },
            "rateLimitPerUser": {
              "type": "integer",
              "minimum": 0,
              "maximum": 21600
            }
          },
          "additionalProperties": false
        },
        "tts": {
          "type": "boolean"
        },
        "webhookUsername": {
          "type": "string"
        },
        "webhookAvatarUrl": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "SlackPlatformData": {
      "type": "object",
      "properties": {
        "threadTs": {
          "type": "string"
        },
        "unfurlLinks": {
          "type": "boolean"
        },
        "unfurlMedia": {
          "type": "boolean"
        },
        "username": {
          "type": "string"
        },
        "iconUrl": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  }
}
```

## Complete OpenAPI specification

Machine-readable download: [OpenAPI JSON](https://usecloudconnect.com/api/v1/openapi.json). Request schemas and endpoint definitions are included here so a copied guide remains self-contained. The operational sections above specify response shapes and runtime restrictions beyond the schema. The 440 channel operations are listed in their own section above; their full schemas are in the OpenAPI download and in GET /accounts/{accountId}/operations, and are left out here to keep this guide readable.

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "CloudConnect API",
    "version": "1.2.0",
    "description": "Scoped publishing, Inbox, analytics, advertising, media, CRM and phone onboarding for Agencies, Groups and business Accounts. Draft-only modules are explicitly labeled. No customer API payment is required during beta."
  },
  "servers": [
    {
      "url": "https://usecloudconnect.com/api/v1"
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "http",
        "scheme": "bearer"
      }
    },
    "schemas": {
      "PostInput": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "clientReference": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "connectionId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "title": {
            "type": "string",
            "maxLength": 200
          },
          "format": {
            "type": "string",
            "enum": [
              "text",
              "link",
              "image",
              "carousel",
              "video",
              "reel",
              "story",
              "thread",
              "document",
              "poll",
              "article",
              "reshare",
              "gif"
            ]
          },
          "content": {
            "default": "",
            "type": "string",
            "maxLength": 64000
          },
          "linkUrl": {
            "type": "string",
            "format": "starts_with",
            "pattern": "^https:\\/\\/.*"
          },
          "media": {
            "default": [],
            "maxItems": 35,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "url": {
                  "type": "string",
                  "maxLength": 4096,
                  "format": "starts_with",
                  "pattern": "^https:\\/\\/.*"
                },
                "altText": {
                  "type": "string",
                  "maxLength": 2000
                }
              },
              "additionalProperties": false
            }
          },
          "delivery": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "draft"
                  }
                },
                "required": [
                  "mode"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "now"
                  }
                },
                "required": [
                  "mode"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "scheduled"
                  },
                  "scheduledAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "mode",
                  "scheduledAt"
                ],
                "additionalProperties": false
              }
            ]
          },
          "platformOptions": {
            "default": {},
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          }
        },
        "required": [
          "clientReference",
          "connectionId",
          "format",
          "content",
          "media",
          "delivery",
          "platformOptions"
        ],
        "additionalProperties": false
      }
    }
  },
  "paths": {
    "/accounts/{accountId}": {
      "get": {
        "summary": "Read business identity and timezone.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_account",
        "x-required-scopes": [
          "discovery.read"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/features": {
      "get": {
        "summary": "Discover API operations, scopes and limitations. No feature flag or missing provider capability is bypassed.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_api_features",
        "x-required-scopes": [
          "discovery.read"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/connections/{connectionId}": {
      "get": {
        "summary": "Read connection health and last synchronization time.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_connection",
        "x-required-scopes": [
          "discovery.read"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "delete": {
        "summary": "Disconnect the explicitly selected connection. Stops eligible pending work; rejects in-flight publications and phone-number releases. Ads connections also require ads.write.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "disconnect_connection",
        "x-required-scopes": [
          "connections.manage"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "connectionId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/connect-sessions": {
      "post": {
        "summary": "Create a branded link the business owner opens to connect a social or advertising account without signing in. Open url in a new tab or popup (platforms refuse iframes); the owner approves on the platform, then chooses a Page, organization or board where needed, or for advertising platforms the exact ad account (needs ads.write too; X Ads needs parentConnectionId, which is optional for Meta, LinkedIn and Pinterest Ads). The link works once, in one browser, until expiresAt. Poll get_connect_session or subscribe to connect_session.completed webhooks. A new session for the same business and platform replaces an unfinished one.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "platform": {
                    "type": "string",
                    "enum": [
                      "instagram",
                      "facebook",
                      "linkedin",
                      "tiktok",
                      "twitter",
                      "youtube",
                      "pinterest",
                      "threads",
                      "reddit",
                      "snapchat",
                      "googlebusiness",
                      "whatsapp",
                      "slack",
                      "ads-meta",
                      "ads-google",
                      "ads-linkedin",
                      "ads-tiktok",
                      "ads-pinterest",
                      "ads-x"
                    ],
                    "description": "Platform to connect."
                  },
                  "returnUrl": {
                    "description": "Where the browser goes when setup ends. Receives connect_session, status and, when completed, connection_id query parameters.",
                    "type": "string",
                    "maxLength": 2048,
                    "format": "uri"
                  },
                  "parentConnectionId": {
                    "description": "Required for X Ads (the business’s twitter connection). Optional for Meta, LinkedIn and Pinterest Ads, to link the ad account to the business’s facebook, linkedin or pinterest connection; omit it for ads-only businesses. Not accepted for other platforms.",
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "loginMethod": {
                    "description": "Instagram only: sign in with Instagram (default) or through a linked Facebook Page.",
                    "type": "string",
                    "enum": [
                      "instagram_login",
                      "facebook_login"
                    ]
                  },
                  "expiresInMinutes": {
                    "default": 60,
                    "description": "How long the link can be opened. Defaults to 60 minutes.",
                    "type": "integer",
                    "minimum": 5,
                    "maximum": 1440
                  }
                },
                "required": [
                  "platform",
                  "expiresInMinutes"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "create_connect_session",
        "x-required-scopes": [
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/connect-sessions/{sessionId}": {
      "get": {
        "summary": "Read connect session progress: pending (link not opened), authorizing, selecting, verifying, completed (with connectionId), failed (owner may retry from the same link), cancelled or expired.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_connect_session",
        "x-required-scopes": [
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "delete": {
        "summary": "Cancel an unfinished connect session and release its reservation. If the platform already connected the account, the session completes instead.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "cancel_connect_session",
        "x-required-scopes": [
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "sessionId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/connection-setup": {
      "get": {
        "summary": "Get the portal onboarding URL for a signed-in workspace member. To connect without a portal sign-in, use create_connect_session.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_connection_setup_link",
        "x-required-scopes": [
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/inbox/conversations": {
      "get": {
        "summary": "Read synchronized conversations with keyset pagination. Use returned thread IDs; never guess platform IDs.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_inbox_conversations",
        "x-required-scopes": [
          "inbox.read"
        ],
        "x-account-wide": false,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": true,
            "schema": {
              "default": "open",
              "type": "string",
              "enum": [
                "open",
                "resolved",
                "all",
                "unassigned"
              ]
            }
          },
          {
            "in": "query",
            "name": "connectionId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/inbox/conversations/{threadId}": {
      "get": {
        "summary": "Read a conversation, its private notes, attachments and recent send operations. Fetch messages separately.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_inbox_conversation",
        "x-required-scopes": [
          "inbox.read"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "patch": {
        "summary": "Assign, resolve/reopen, or add a private note using the current version. This does not send a message.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "resolved"
                    ]
                  },
                  "assigneeId": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 5000
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "update_inbox_conversation",
        "x-required-scopes": [
          "inbox.write"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "threadId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/inbox/messages": {
      "get": {
        "summary": "Read message changes in ascending synchronization order. Save nextCursor and poll after it, even when hasMore=false. Deleted/edited records and delivery states are included. Attachment IDs use the attachment download endpoint.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_inbox_messages",
        "x-required-scopes": [
          "inbox.read"
        ],
        "x-account-wide": false,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "in": "query",
            "name": "threadId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          {
            "in": "query",
            "name": "connectionId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/inbox/sync": {
      "post": {
        "summary": "Queue a current-state sync or older conversation history. Returns before provider synchronization completes. Restricted keys must select an allowed connection or thread.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "connectionId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "threadId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "older": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "sync_inbox",
        "x-required-scopes": [
          "inbox.read"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/inbox/conversations/{threadId}/messages": {
      "post": {
        "summary": "Send a text reply to an existing conversation with explicit user intent. requestId is a stable UUID; reuse it on retry. Returns queued operation, not delivery confirmation. Platform reply windows and message allowances apply; X sending is not supported.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "requestId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "message": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  }
                },
                "required": [
                  "requestId",
                  "message"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "send_inbox_reply",
        "x-required-scopes": [
          "inbox.write"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "threadId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/inbox/attachments/{attachmentId}": {
      "get": {
        "summary": "Get a 60-second signed URL for a retained attachment. Unavailable or expired upstream content cannot be downloaded.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_inbox_attachment",
        "x-required-scopes": [
          "inbox.read"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "attachmentId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/analytics/refresh": {
      "post": {
        "summary": "Queue fresh social metrics. Poll analytics and the returned operation IDs; this does not fabricate missing metrics.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "from": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                  },
                  "to": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                  },
                  "connectionId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "required": [
                  "from",
                  "to"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "refresh_social_analytics",
        "x-required-scopes": [
          "analytics.read"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/analytics/export": {
      "get": {
        "summary": "Export stored metrics as CSV text with formula-injection escaping.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "export_social_analytics",
        "x-required-scopes": [
          "analytics.read",
          "analytics.export"
        ],
        "x-account-wide": false,
        "parameters": [
          {
            "in": "query",
            "name": "from",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            }
          },
          {
            "in": "query",
            "name": "connectionId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/media": {
      "get": {
        "summary": "Browse owned media and processing states, including portal uploads.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_media",
        "x-required-scopes": [
          "media.read"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/media/{mediaId}/download": {
      "get": {
        "summary": "Get a short-lived signed URL for owned media.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "download_media",
        "x-required-scopes": [
          "media.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "mediaId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/operations/{operationId}": {
      "get": {
        "summary": "Read the status and safe result of an operation created by this integration. Uncertain means inspect before retrying; accepted does not mean delivered.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_operation",
        "x-required-scopes": [
          "activity.read"
        ],
        "x-account-wide": false,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "operationId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/activity": {
      "get": {
        "summary": "Read recent operations created by this integration. Conversation changes are available through list_inbox_messages.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_activity",
        "x-required-scopes": [
          "activity.read"
        ],
        "x-account-wide": false,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/usage": {
      "get": {
        "summary": "Read allowance limits, reservations and consumed units. Customer payment remains controlled by platform policy.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_usage",
        "x-required-scopes": [
          "billing.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/contacts": {
      "get": {
        "summary": "List saved contact records. Contacts are local CRM records; they do not subscribe anyone or send messages.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_contact_records",
        "x-required-scopes": [
          "contacts.read"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ]
      },
      "post": {
        "summary": "Create a saved contact record. Contacts are local CRM records; they do not subscribe anyone or send messages.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "create_contact_record",
        "x-required-scopes": [
          "contacts.write"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/contacts/{recordId}": {
      "get": {
        "summary": "Read a saved contact record and its current version. Contacts are local CRM records; they do not subscribe anyone or send messages.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_contact_record",
        "x-required-scopes": [
          "contacts.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "patch": {
        "summary": "Replace a saved contact record using its current version. Contacts are local CRM records; they do not subscribe anyone or send messages.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data",
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "update_contact_record",
        "x-required-scopes": [
          "contacts.write"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "recordId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/messaging/drafts": {
      "get": {
        "summary": "List saved broadcast records. Broadcast drafting only. Campaign execution is not implemented by this module.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_broadcast_records",
        "x-required-scopes": [
          "messaging.read"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ]
      },
      "post": {
        "summary": "Create a saved broadcast record. Broadcast drafting only. Campaign execution is not implemented by this module.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "create_broadcast_record",
        "x-required-scopes": [
          "messaging.write"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/messaging/drafts/{recordId}": {
      "get": {
        "summary": "Read a saved broadcast record and its current version. Broadcast drafting only. Campaign execution is not implemented by this module.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_broadcast_record",
        "x-required-scopes": [
          "messaging.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "patch": {
        "summary": "Replace a saved broadcast record using its current version. Broadcast drafting only. Campaign execution is not implemented by this module.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data",
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "update_broadcast_record",
        "x-required-scopes": [
          "messaging.write"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "recordId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/workflows": {
      "get": {
        "summary": "List saved workflow records. Workflow graph drafting and versions only. Activation and executions are not implemented by this module.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_workflow_records",
        "x-required-scopes": [
          "workflows.read"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ]
      },
      "post": {
        "summary": "Create a saved workflow record. Workflow graph drafting and versions only. Activation and executions are not implemented by this module.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "create_workflow_record",
        "x-required-scopes": [
          "workflows.write"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/workflows/{recordId}": {
      "get": {
        "summary": "Read a saved workflow record and its current version. Workflow graph drafting and versions only. Activation and executions are not implemented by this module.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_workflow_record",
        "x-required-scopes": [
          "workflows.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "patch": {
        "summary": "Replace a saved workflow record using its current version. Workflow graph drafting and versions only. Activation and executions are not implemented by this module.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data",
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "update_workflow_record",
        "x-required-scopes": [
          "workflows.write"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "recordId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/articles": {
      "get": {
        "summary": "List saved article records. Article drafting only. Saving does not publish to Shopify or Google Business.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_article_records",
        "x-required-scopes": [
          "business.read"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ]
      },
      "post": {
        "summary": "Create a saved article record. Article drafting only. Saving does not publish to Shopify or Google Business.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "create_article_record",
        "x-required-scopes": [
          "business.write"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/articles/{recordId}": {
      "get": {
        "summary": "Read a saved article record and its current version. Article drafting only. Saving does not publish to Shopify or Google Business.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_article_record",
        "x-required-scopes": [
          "business.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "patch": {
        "summary": "Replace a saved article record using its current version. Article drafting only. Saving does not publish to Shopify or Google Business.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data",
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "update_article_record",
        "x-required-scopes": [
          "business.write"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "recordId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/reports": {
      "get": {
        "summary": "List saved report records. Saved report definitions only; use analytics or advertising reports for measured data.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_report_records",
        "x-required-scopes": [
          "analytics.read"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ]
      },
      "post": {
        "summary": "Create a saved report record. Saved report definitions only; use analytics or advertising reports for measured data.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "create_report_record",
        "x-required-scopes": [
          "reports.write"
        ],
        "x-account-wide": true,
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/reports/{recordId}": {
      "get": {
        "summary": "Read a saved report record and its current version. Saved report definitions only; use analytics or advertising reports for measured data.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_report_record",
        "x-required-scopes": [
          "analytics.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "patch": {
        "summary": "Replace a saved report record using its current version. Saved report definitions only; use analytics or advertising reports for measured data.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "data": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "scheduledAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "title",
                  "data",
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "update_report_record",
        "x-required-scopes": [
          "reports.write"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "recordId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/setups": {
      "get": {
        "summary": "List number provisioning and port requests owned by this business.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_phone_setups",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "post": {
        "summary": "Prepare a number order and receive requirements and a quote. This does not buy a number.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "country": {
                    "type": "string",
                    "pattern": "^[A-Z]{2}$"
                  },
                  "numberType": {
                    "type": "string",
                    "enum": [
                      "local",
                      "mobile",
                      "national",
                      "toll_free"
                    ]
                  },
                  "wantsSms": {
                    "default": false,
                    "type": "boolean"
                  },
                  "areaCode": {
                    "type": "string",
                    "pattern": "^\\d{1,8}$"
                  }
                },
                "required": [
                  "country",
                  "numberType",
                  "wantsSms"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "prepare_phone_setup",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/countries": {
      "get": {
        "summary": "Read current supported countries, number types and provider quotes. Availability can change.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "list_phone_countries",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/requirements": {
      "post": {
        "summary": "Read current availability and regulatory requirements before preparing a number.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "country": {
                    "type": "string",
                    "pattern": "^[A-Z]{2}$"
                  },
                  "numberType": {
                    "type": "string",
                    "enum": [
                      "local",
                      "mobile",
                      "national",
                      "toll_free"
                    ]
                  },
                  "wantsSms": {
                    "default": false,
                    "type": "boolean"
                  }
                },
                "required": [
                  "country",
                  "numberType",
                  "wantsSms"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_phone_requirements",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/setups/{setupId}": {
      "get": {
        "summary": "Refresh an existing number order, assignment and regulatory status.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_phone_setup",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "setupId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/ports/{portId}": {
      "get": {
        "summary": "Refresh an existing number port and carrier status.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "get_phone_port",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "portId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/ports": {
      "post": {
        "summary": "Check portability and prepare requirements and a quote for transferring a number. Does not submit a carrier order.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "phoneNumber": {
                    "type": "string",
                    "pattern": "^\\+[1-9]\\d{7,14}$"
                  }
                },
                "required": [
                  "phoneNumber"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "prepare_phone_port",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/setups/{setupId}/submit": {
      "post": {
        "summary": "Purchase/provision a number after explicit user approval. Requires confirmed=true and maxMonthlyCents at least the quoted recurring cost. May incur recurring provider charges. Do not retry an uncertain order; read its status.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "confirmed": {
                    "type": "boolean",
                    "const": true
                  },
                  "values": {
                    "default": {},
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "string",
                      "maxLength": 5000
                    }
                  },
                  "address": {
                    "type": "object",
                    "properties": {
                      "street_address": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 250
                      },
                      "extended_address": {
                        "type": "string",
                        "maxLength": 150
                      },
                      "locality": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "administrative_area": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "postal_code": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 30
                      }
                    },
                    "required": [
                      "street_address",
                      "locality",
                      "administrative_area",
                      "postal_code"
                    ],
                    "additionalProperties": false
                  },
                  "endUserFirstName": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "endUserLastName": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "maxMonthlyCents": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "confirmed",
                  "values",
                  "maxMonthlyCents"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "submit_phone_setup",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage",
          "voice.spend"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "setupId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/ports/{portId}/submit": {
      "post": {
        "summary": "Submit a carrier port after explicit user authorization. Requires current verification documents, confirmed=true and maxMonthlyCents. May incur recurring charges; poll the same order after uncertainty.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "confirmed": {
                    "type": "boolean",
                    "const": true
                  },
                  "endUser": {
                    "type": "object",
                    "properties": {
                      "entityName": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 200
                      },
                      "authPersonName": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 200
                      },
                      "accountNumber": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 150
                      },
                      "streetAddress": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 250
                      },
                      "locality": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "administrativeArea": {
                        "type": "string",
                        "maxLength": 100
                      },
                      "postalCode": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 30
                      },
                      "pinPasscode": {
                        "type": "string",
                        "maxLength": 100
                      },
                      "taxIdentifier": {
                        "type": "string",
                        "maxLength": 100
                      },
                      "businessIdentifier": {
                        "type": "string",
                        "maxLength": 100
                      }
                    },
                    "required": [
                      "entityName",
                      "authPersonName",
                      "accountNumber",
                      "streetAddress",
                      "locality",
                      "postalCode"
                    ],
                    "additionalProperties": false
                  },
                  "values": {
                    "default": {},
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "string",
                      "maxLength": 5000
                    }
                  },
                  "portType": {
                    "type": "string",
                    "enum": [
                      "full",
                      "partial"
                    ]
                  },
                  "maxMonthlyCents": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "confirmed",
                  "endUser",
                  "values",
                  "portType",
                  "maxMonthlyCents"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "submit_phone_port",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage",
          "voice.spend"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "portId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/setups/{setupId}/documents": {
      "post": {
        "summary": "Submit one owned, inspected media document to the carrier verification service. Explicitly approve sharing this document; maximum 4 MiB PDF/JPEG/PNG. Keep regulatory documents private.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "mediaId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "requirementId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "confirmDocumentTransfer": {
                    "type": "boolean",
                    "const": true
                  }
                },
                "required": [
                  "mediaId",
                  "requirementId",
                  "confirmDocumentTransfer"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "upload_phone_verification",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage",
          "media.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "setupId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/phone/ports/{portId}/documents": {
      "post": {
        "summary": "Submit one owned, inspected media document to the carrier verification service. Explicitly approve sharing this document; maximum 4 MiB PDF/JPEG/PNG. Keep regulatory documents private.",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "mediaId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "requirementId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "confirmDocumentTransfer": {
                    "type": "boolean",
                    "const": true
                  }
                },
                "required": [
                  "mediaId",
                  "requirementId",
                  "confirmDocumentTransfer"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "operationId": "upload_port_verification",
        "x-required-scopes": [
          "voice.manage",
          "connections.manage",
          "media.read"
        ],
        "x-account-wide": true,
        "parameters": []
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "portId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/analytics": {
      "get": {
        "summary": "Read stored social analytics",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "from",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "in": "query",
            "name": "connectionId",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/discover": {
      "get": {
        "summary": "Discover available advertisers for connectionId",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "connectionId",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers": {
      "get": {
        "summary": "List assigned advertisers",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Assign one explicitly selected advertiser",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "connectionId",
                  "providerAdvertiserId"
                ],
                "properties": {
                  "connectionId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "providerAdvertiserId": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/capabilities": {
      "get": {
        "summary": "Inspect supported operations and payload schemas",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/objects": {
      "get": {
        "summary": "Read cached campaign hierarchy with local IDs and versions",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/sync": {
      "post": {
        "summary": "Refresh campaign, ad-set and ad data",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/targeting": {
      "get": {
        "summary": "Resolve locations and interests",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "q",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "dimension",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "geoType",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "countryCode",
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/reports": {
      "get": {
        "summary": "List saved performance reports",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Retrieve hierarchical and daily advertising performance",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "fromDate",
                  "toDate"
                ],
                "properties": {
                  "fromDate": {
                    "type": "string",
                    "format": "date"
                  },
                  "toDate": {
                    "type": "string",
                    "format": "date"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/reports/{reportId}": {
      "get": {
        "summary": "Read saved report with currency, freshness and backfill status",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "reportId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/operations": {
      "get": {
        "summary": "List recent advertising operations",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Queue a typed advertising operation",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "enum": [
                      "campaign.create",
                      "ad.create",
                      "creative.create",
                      "campaign.update",
                      "adset.update",
                      "ad.update",
                      "campaign.status",
                      "adset.status",
                      "ad.status",
                      "sync",
                      "report",
                      "audience.create",
                      "audience.update",
                      "audience.delete",
                      "audience.users",
                      "audience.companies",
                      "audience.sync"
                    ]
                  },
                  "objectId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "payload": {
                    "default": {},
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "allowLiveCreation": {
                    "default": false,
                    "type": "boolean"
                  }
                },
                "required": [
                  "action",
                  "payload",
                  "allowLiveCreation"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/operations/{operationId}": {
      "get": {
        "summary": "Read operation status and outcome",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "operationId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/operations/{operationId}/approve": {
      "post": {
        "summary": "Approve the exact request as an independent reviewer; ads.approve required",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "inputHash"
                ],
                "additionalProperties": false,
                "properties": {
                  "inputHash": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "operationId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/operations/{operationId}/retry": {
      "post": {
        "summary": "Recover uncertain campaign/ad creation or an audience upload using its original request within 23 hours",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "operationId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/audiences": {
      "get": {
        "summary": "List audiences with local IDs, type, size and status",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create an audience; payload follows the audience.create schema",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "payload": {
                    "type": "object",
                    "title": "UploadedOrDerivedAudience",
                    "required": [
                      "accountId",
                      "adAccountId",
                      "name",
                      "type"
                    ],
                    "properties": {
                      "accountId": {
                        "type": "string"
                      },
                      "adAccountId": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string",
                        "maxLength": 255
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "customer_list",
                          "company_list",
                          "engagement",
                          "meta_engagement",
                          "website",
                          "website_retargeting",
                          "lookalike"
                        ]
                      },
                      "matchRules": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 50,
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "matchType",
                            "matchValue"
                          ],
                          "properties": {
                            "matchType": {
                              "type": "string",
                              "enum": [
                                "EXACT",
                                "STARTS_WITH",
                                "CONTAINS",
                                "ENDS_WITH"
                              ]
                            },
                            "matchValue": {
                              "type": "string"
                            }
                          }
                        }
                      },
                      "sourceType": {
                        "type": "string",
                        "enum": [
                          "VIDEO_ADS",
                          "LEAD_GEN_FORMS",
                          "ORGANIZATION_PAGES",
                          "EVENT_PAGES",
                          "SINGLE_IMAGE_ADS"
                        ]
                      },
                      "trigger": {
                        "type": "string"
                      },
                      "lookbackDays": {
                        "type": "integer",
                        "enum": [
                          30,
                          60,
                          90,
                          180,
                          365
                        ]
                      },
                      "engagementSources": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 50,
                        "items": {
                          "type": "string"
                        }
                      },
                      "companies": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 300000,
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "name": {
                              "type": "string",
                              "maxLength": 255
                            },
                            "domain": {
                              "type": "string",
                              "maxLength": 100
                            },
                            "website": {
                              "type": "string",
                              "maxLength": 100
                            },
                            "linkedinPageUrl": {
                              "type": "string"
                            }
                          }
                        }
                      },
                      "pixelId": {
                        "type": "string"
                      },
                      "retentionDays": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      "engagementSource": {
                        "type": "string",
                        "enum": [
                          "page",
                          "instagram",
                          "video"
                        ]
                      },
                      "sourceId": {
                        "type": "string"
                      },
                      "event": {
                        "type": "string"
                      },
                      "sourceAudienceId": {
                        "type": "string"
                      },
                      "country": {
                        "type": "string"
                      },
                      "ratio": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 0.2
                      },
                      "urlContains": {
                        "type": "string"
                      },
                      "rule": {
                        "type": "object"
                      },
                      "customerFileSource": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/audiences/sync": {
      "post": {
        "summary": "Refresh audiences from the platform",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/audiences/{audienceId}": {
      "get": {
        "summary": "Read one audience",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Rename an audience (Meta)",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "maxLength": 255
                      },
                      "spec": {
                        "allOf": [
                          {
                            "$ref": "#/$defs/TargetingSpec"
                          }
                        ]
                      }
                    },
                    "additionalProperties": false,
                    "$defs": {
                      "AdPromotedObject": {
                        "type": "object",
                        "properties": {
                          "pixelId": {
                            "type": "string"
                          },
                          "customEventType": {
                            "type": "string"
                          },
                          "customEventStr": {
                            "type": "string"
                          },
                          "pageId": {
                            "type": "string"
                          },
                          "applicationId": {
                            "type": "string"
                          },
                          "objectStoreUrl": {
                            "type": "string",
                            "format": "uri"
                          },
                          "customConversionId": {
                            "type": "string"
                          },
                          "productCatalogId": {
                            "type": "string"
                          },
                          "productSetId": {
                            "type": "string"
                          },
                          "offlineConversionDataSetId": {
                            "type": "string"
                          },
                          "whatsappPhoneNumber": {
                            "type": "string"
                          }
                        },
                        "additionalProperties": false
                      },
                      "GoogleLocationTargetingType": {
                        "type": "string",
                        "enum": [
                          "presence",
                          "presence_or_interest"
                        ]
                      },
                      "AdTracking": {
                        "type": "object",
                        "properties": {
                          "pixelId": {
                            "type": "string"
                          },
                          "urlTags": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "key",
                                "value"
                              ],
                              "properties": {
                                "key": {
                                  "type": "string"
                                },
                                "value": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          }
                        },
                        "additionalProperties": false
                      },
                      "MetaPromotion": {
                        "type": [
                          "object",
                          "null"
                        ]
                      },
                      "MetaCreativeFeatures": {
                        "type": "object",
                        "additionalProperties": {
                          "type": "string",
                          "enum": [
                            "OPT_IN",
                            "OPT_OUT"
                          ]
                        },
                        "propertyNames": {
                          "pattern": "^[a-z0-9_]+$"
                        }
                      },
                      "TargetingSpec": {
                        "type": "object",
                        "properties": {
                          "userOs": {
                            "type": "array",
                            "minItems": 1,
                            "items": {
                              "type": "string",
                              "minLength": 1
                            }
                          },
                          "userDevice": {
                            "type": "array",
                            "minItems": 1,
                            "items": {
                              "type": "string",
                              "minLength": 1
                            }
                          },
                          "countries": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "regions": {
                            "type": "array",
                            "items": {
                              "oneOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "object",
                                  "required": [
                                    "key"
                                  ],
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "name": {
                                      "type": "string"
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              ]
                            }
                          },
                          "cities": {
                            "type": "array",
                            "items": {
                              "oneOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "object",
                                  "required": [
                                    "key"
                                  ],
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "name": {
                                      "type": "string"
                                    },
                                    "radius": {
                                      "type": "number"
                                    },
                                    "distanceUnit": {
                                      "type": "string",
                                      "enum": [
                                        "mile",
                                        "kilometer"
                                      ]
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              ]
                            }
                          },
                          "zips": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "key"
                              ],
                              "properties": {
                                "key": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "metros": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "key"
                              ],
                              "properties": {
                                "key": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "countryGroups": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "africa",
                                "asia",
                                "europe",
                                "north_america",
                                "south_america",
                                "oceania",
                                "central_america",
                                "caribbean",
                                "eea",
                                "euro_area",
                                "nafta",
                                "mercosur",
                                "afta",
                                "apec",
                                "gcc",
                                "cisfta",
                                "emerging_markets",
                                "itunes_app_store",
                                "android_free_store",
                                "android_paid_store"
                              ]
                            }
                          },
                          "customLocations": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "latitude",
                                "longitude",
                                "radius",
                                "distanceUnit"
                              ],
                              "properties": {
                                "latitude": {
                                  "type": "number",
                                  "minimum": -90,
                                  "maximum": 90
                                },
                                "longitude": {
                                  "type": "number",
                                  "minimum": -180,
                                  "maximum": 180
                                },
                                "radius": {
                                  "type": "number"
                                },
                                "distanceUnit": {
                                  "type": "string",
                                  "enum": [
                                    "mile",
                                    "kilometer"
                                  ]
                                },
                                "name": {
                                  "type": "string"
                                },
                                "address": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "excludedLocations": {
                            "type": "object",
                            "properties": {
                              "countries": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "countryGroups": {
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "enum": [
                                    "africa",
                                    "asia",
                                    "europe",
                                    "north_america",
                                    "south_america",
                                    "oceania",
                                    "central_america",
                                    "caribbean",
                                    "eea",
                                    "euro_area",
                                    "nafta",
                                    "mercosur",
                                    "afta",
                                    "apec",
                                    "gcc",
                                    "cisfta",
                                    "emerging_markets",
                                    "itunes_app_store",
                                    "android_free_store",
                                    "android_paid_store"
                                  ]
                                }
                              },
                              "regions": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "key"
                                  ],
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "name": {
                                      "type": "string"
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "cities": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "key"
                                  ],
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "radius": {
                                      "type": "number"
                                    },
                                    "distanceUnit": {
                                      "type": "string",
                                      "enum": [
                                        "mile",
                                        "kilometer"
                                      ]
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "zips": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "key"
                                  ],
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "name": {
                                      "type": "string"
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "places": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "key"
                                  ],
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "neighborhoods": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "key"
                                  ],
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "customLocations": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "latitude",
                                    "longitude",
                                    "radius",
                                    "distanceUnit"
                                  ],
                                  "properties": {
                                    "latitude": {
                                      "type": "number",
                                      "minimum": -90,
                                      "maximum": 90
                                    },
                                    "longitude": {
                                      "type": "number",
                                      "minimum": -180,
                                      "maximum": 180
                                    },
                                    "radius": {
                                      "type": "number"
                                    },
                                    "distanceUnit": {
                                      "type": "string",
                                      "enum": [
                                        "mile",
                                        "kilometer"
                                      ]
                                    },
                                    "name": {
                                      "type": "string"
                                    },
                                    "address": {
                                      "type": "string"
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              }
                            },
                            "additionalProperties": false
                          },
                          "ageMin": {
                            "type": "integer",
                            "minimum": 13,
                            "maximum": 100
                          },
                          "ageMax": {
                            "type": "integer",
                            "minimum": 13,
                            "maximum": 100
                          },
                          "gender": {
                            "type": "string",
                            "enum": [
                              "all",
                              "male",
                              "female"
                            ]
                          },
                          "incomeTier": {
                            "type": "string",
                            "enum": [
                              "top_5",
                              "top_10",
                              "top_10_25",
                              "top_25_50"
                            ]
                          },
                          "languages": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "interests": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id"
                              ],
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "behaviors": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id"
                              ],
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "workPositions": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id"
                              ],
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "workEmployers": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id"
                              ],
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "workIndustries": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id"
                              ],
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "industries": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "companySizes": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "seniorities": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "jobFunctions": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "audienceInclude": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "audienceExclude": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": false
                      },
                      "MetaPlacementAssets": {
                        "type": "object",
                        "required": [
                          "rules"
                        ],
                        "properties": {
                          "defaultImageUrl": {
                            "type": "string",
                            "format": "uri"
                          },
                          "defaultVideoUrl": {
                            "type": "string",
                            "format": "uri"
                          },
                          "defaultThumbnailUrl": {
                            "type": "string",
                            "format": "uri"
                          },
                          "rules": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 10,
                            "items": {
                              "type": "object",
                              "required": [
                                "placements"
                              ],
                              "properties": {
                                "imageUrl": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "videoUrl": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "thumbnailUrl": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "headline": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 255
                                },
                                "body": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "placements": {
                                  "type": "object",
                                  "properties": {
                                    "publisherPlatforms": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "facebook",
                                          "instagram",
                                          "threads",
                                          "messenger",
                                          "audience_network",
                                          "whatsapp"
                                        ]
                                      }
                                    },
                                    "facebookPositions": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "feed",
                                          "right_hand_column",
                                          "marketplace",
                                          "video_feeds",
                                          "story",
                                          "search",
                                          "instream_video",
                                          "facebook_reels",
                                          "facebook_reels_overlay",
                                          "profile_feed",
                                          "notification"
                                        ]
                                      }
                                    },
                                    "instagramPositions": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "stream",
                                          "story",
                                          "explore",
                                          "explore_home",
                                          "reels",
                                          "profile_feed",
                                          "ig_search",
                                          "profile_reels"
                                        ]
                                      }
                                    },
                                    "messengerPositions": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "messenger_home",
                                          "sponsored_messages",
                                          "story"
                                        ]
                                      }
                                    },
                                    "audienceNetworkPositions": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "classic",
                                          "rewarded_video"
                                        ]
                                      }
                                    },
                                    "threadsPositions": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "threads_stream"
                                        ]
                                      }
                                    },
                                    "whatsappPositions": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "status"
                                        ]
                                      }
                                    },
                                    "devicePlatforms": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "mobile",
                                          "desktop"
                                        ]
                                      }
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "additionalProperties": false
                            }
                          }
                        },
                        "additionalProperties": false
                      },
                      "GooglePmaxAssetGroupInput": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "finalUrl",
                          "headlines",
                          "longHeadline",
                          "descriptions",
                          "businessName",
                          "images"
                        ],
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 128
                          },
                          "finalUrl": {
                            "type": "string",
                            "format": "uri",
                            "pattern": "^https?://"
                          },
                          "headlines": {
                            "type": "array",
                            "minItems": 3,
                            "maxItems": 15,
                            "uniqueItems": true,
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 30
                            }
                          },
                          "longHeadline": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 90
                          },
                          "descriptions": {
                            "type": "array",
                            "minItems": 2,
                            "maxItems": 5,
                            "uniqueItems": true,
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 90
                            }
                          },
                          "businessName": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 25
                          },
                          "images": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "landscape",
                              "square",
                              "logo"
                            ],
                            "properties": {
                              "landscape": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri",
                                  "pattern": "^https?://"
                                }
                              },
                              "square": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri",
                                  "pattern": "^https?://"
                                }
                              },
                              "logo": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "items": {
                                  "type": "string",
                                  "format": "uri",
                                  "pattern": "^https?://"
                                }
                              }
                            }
                          },
                          "youtubeVideoId": {
                            "type": "string",
                            "pattern": "^[A-Za-z0-9_-]{11}$"
                          }
                        }
                      },
                      "GoogleDemandGenInput": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "finalUrl",
                          "businessName",
                          "headlines",
                          "descriptions",
                          "images"
                        ],
                        "properties": {
                          "adGroupName": {
                            "type": "string",
                            "maxLength": 255
                          },
                          "finalUrl": {
                            "type": "string",
                            "format": "uri"
                          },
                          "businessName": {
                            "type": "string",
                            "maxLength": 25
                          },
                          "headlines": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "maxLength": 40
                            }
                          },
                          "longHeadlines": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "maxLength": 90
                            }
                          },
                          "descriptions": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "maxLength": 90
                            }
                          },
                          "callToAction": {
                            "type": "string",
                            "maxLength": 25
                          },
                          "images": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "logo"
                            ],
                            "properties": {
                              "landscape": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri"
                                }
                              },
                              "square": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri"
                                }
                              },
                              "portrait": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri"
                                }
                              },
                              "logo": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "items": {
                                  "type": "string",
                                  "format": "uri"
                                }
                              }
                            }
                          },
                          "youtubeVideoIds": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "pattern": "^[A-Za-z0-9_-]{11}$"
                            }
                          },
                          "carouselCards": {
                            "type": "array",
                            "minItems": 2,
                            "maxItems": 10,
                            "items": {
                              "type": "object",
                              "additionalProperties": false,
                              "required": [
                                "headline",
                                "images"
                              ],
                              "properties": {
                                "headline": {
                                  "type": "string",
                                  "maxLength": 40
                                },
                                "finalUrl": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "callToAction": {
                                  "type": "string",
                                  "maxLength": 25
                                },
                                "images": {
                                  "type": "object",
                                  "additionalProperties": false,
                                  "minProperties": 1,
                                  "properties": {
                                    "landscape": {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    "square": {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    "portrait": {
                                      "type": "string",
                                      "format": "uri"
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "channels": {
                            "type": "array",
                            "minItems": 1,
                            "items": {
                              "type": "string",
                              "enum": [
                                "youtube_in_stream",
                                "youtube_in_feed",
                                "youtube_shorts",
                                "discover",
                                "gmail",
                                "display"
                              ]
                            }
                          },
                          "audience": {
                            "$ref": "#/$defs/GoogleDemandGenAudience"
                          },
                          "audienceId": {
                            "type": "string"
                          }
                        }
                      },
                      "GoogleDemandGenAudience": {
                        "type": "object",
                        "additionalProperties": false,
                        "minProperties": 1,
                        "properties": {
                          "userLists": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 20,
                            "items": {
                              "type": "string"
                            }
                          },
                          "userInterests": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 20,
                            "items": {
                              "type": "string"
                            }
                          },
                          "customAudiences": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 20,
                            "items": {
                              "type": "string"
                            }
                          },
                          "ageRanges": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 6,
                            "items": {
                              "type": "object",
                              "required": [
                                "min"
                              ],
                              "properties": {
                                "min": {
                                  "type": "integer",
                                  "enum": [
                                    18,
                                    25,
                                    35,
                                    45,
                                    55,
                                    65
                                  ]
                                },
                                "max": {
                                  "type": "integer",
                                  "enum": [
                                    24,
                                    34,
                                    44,
                                    54,
                                    64
                                  ]
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "genders": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 3,
                            "items": {
                              "type": "string",
                              "enum": [
                                "male",
                                "female",
                                "undetermined"
                              ]
                            }
                          }
                        }
                      },
                      "KeywordEntry": {
                        "oneOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 80
                          },
                          {
                            "type": "object",
                            "required": [
                              "text"
                            ],
                            "properties": {
                              "text": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 80
                              },
                              "matchType": {
                                "type": "string",
                                "enum": [
                                  "exact",
                                  "phrase",
                                  "broad"
                                ]
                              }
                            },
                            "additionalProperties": false
                          }
                        ]
                      },
                      "GoogleRsaHeadline": {
                        "type": "object",
                        "required": [
                          "text"
                        ],
                        "properties": {
                          "text": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 30
                          },
                          "pinnedField": {
                            "type": "string",
                            "enum": [
                              "HEADLINE_1",
                              "HEADLINE_2",
                              "HEADLINE_3"
                            ]
                          }
                        },
                        "additionalProperties": false
                      },
                      "GoogleRsaDescription": {
                        "type": "object",
                        "required": [
                          "text"
                        ],
                        "properties": {
                          "text": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 90
                          },
                          "pinnedField": {
                            "type": "string",
                            "enum": [
                              "DESCRIPTION_1",
                              "DESCRIPTION_2"
                            ]
                          }
                        },
                        "additionalProperties": false
                      },
                      "BidStrategy": {
                        "type": "string",
                        "enum": [
                          "LOWEST_COST_WITHOUT_CAP",
                          "LOWEST_COST_WITH_BID_CAP",
                          "COST_CAP",
                          "LOWEST_COST_WITH_MIN_ROAS"
                        ]
                      },
                      "LinkedInAdsPlatformData": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "costType": {
                            "type": "string",
                            "enum": [
                              "CPM",
                              "CPC",
                              "CPV"
                            ]
                          },
                          "unitCost": {
                            "type": "number"
                          },
                          "optimizationTargetType": {
                            "type": "string"
                          },
                          "creativeSelection": {
                            "type": "string",
                            "enum": [
                              "OPTIMIZED",
                              "ROUND_ROBIN"
                            ]
                          },
                          "audienceExpansionEnabled": {
                            "type": "boolean"
                          },
                          "offsiteDeliveryEnabled": {
                            "type": "boolean"
                          },
                          "connectedTelevisionOnly": {
                            "type": "boolean"
                          },
                          "carousel": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "cards"
                            ],
                            "properties": {
                              "cards": {
                                "type": "array",
                                "minItems": 2,
                                "maxItems": 10,
                                "items": {
                                  "type": "object",
                                  "additionalProperties": false,
                                  "required": [
                                    "imageUrl"
                                  ],
                                  "properties": {
                                    "imageUrl": {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    "headline": {
                                      "type": "string"
                                    },
                                    "landingUrl": {
                                      "type": "string",
                                      "format": "uri"
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "document": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "url",
                              "title"
                            ],
                            "properties": {
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "title": {
                                "type": "string"
                              }
                            }
                          },
                          "spotlight": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "headline",
                              "callToAction",
                              "landingUrl"
                            ],
                            "properties": {
                              "headline": {
                                "type": "string"
                              },
                              "callToAction": {
                                "type": "string"
                              },
                              "landingUrl": {
                                "type": "string",
                                "format": "uri"
                              },
                              "logoUrl": {
                                "type": "string",
                                "format": "uri"
                              },
                              "organizationName": {
                                "type": "string"
                              },
                              "showMemberProfilePhoto": {
                                "type": "boolean"
                              },
                              "backgroundImageUrl": {
                                "type": "string",
                                "format": "uri"
                              }
                            }
                          },
                          "follower": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "headline",
                              "description",
                              "callToAction"
                            ],
                            "properties": {
                              "headline": {
                                "type": "object",
                                "additionalProperties": false,
                                "properties": {
                                  "preApproved": {
                                    "type": "string"
                                  },
                                  "custom": {
                                    "type": "string"
                                  }
                                }
                              },
                              "callToAction": {
                                "type": "string",
                                "enum": [
                                  "VISIT_ORGANIZATION_COMPANY_PAGE",
                                  "VISIT_ORGANIZATION_LIFE_PAGE",
                                  "VISIT_ORGANIZATION_JOBS_PAGE",
                                  "VISIT_ORGANIZATION_CAREERS_PAGE"
                                ]
                              },
                              "logoUrl": {
                                "type": "string",
                                "format": "uri"
                              },
                              "organizationName": {
                                "type": "string"
                              },
                              "showMemberProfilePhoto": {
                                "type": "boolean"
                              }
                            }
                          },
                          "jobs": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "headline",
                              "buttonLabel"
                            ],
                            "properties": {
                              "headline": {
                                "type": "object",
                                "additionalProperties": false,
                                "properties": {
                                  "preApproved": {
                                    "type": "string"
                                  },
                                  "custom": {
                                    "type": "string"
                                  }
                                }
                              },
                              "buttonLabel": {
                                "type": "object",
                                "additionalProperties": false,
                                "properties": {
                                  "preApproved": {
                                    "type": "string"
                                  },
                                  "custom": {
                                    "type": "string"
                                  }
                                }
                              },
                              "logoUrl": {
                                "type": "string",
                                "format": "uri"
                              },
                              "organizationName": {
                                "type": "string"
                              },
                              "showMemberProfilePhoto": {
                                "type": "boolean"
                              }
                            }
                          },
                          "textAd": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "headline",
                              "description",
                              "landingUrl"
                            ],
                            "properties": {
                              "headline": {
                                "type": "string",
                                "maxLength": 25
                              },
                              "landingUrl": {
                                "type": "string",
                                "format": "uri"
                              },
                              "imageUrl": {
                                "type": "string",
                                "format": "uri"
                              }
                            }
                          },
                          "conversation": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "subject",
                              "firstMessageId",
                              "messages"
                            ],
                            "properties": {
                              "subject": {
                                "type": "string"
                              },
                              "sender": {
                                "type": "string"
                              },
                              "body": {
                                "type": "string"
                              },
                              "footer": {
                                "type": "string"
                              },
                              "headline": {
                                "type": "string"
                              },
                              "firstMessageId": {
                                "type": "string"
                              },
                              "messages": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 25,
                                "items": {
                                  "type": "object",
                                  "additionalProperties": false,
                                  "required": [
                                    "id",
                                    "text"
                                  ],
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "text": {
                                      "type": "string",
                                      "maxLength": 500
                                    },
                                    "buttons": {
                                      "type": "array",
                                      "minItems": 1,
                                      "maxItems": 5,
                                      "items": {
                                        "type": "object",
                                        "additionalProperties": false,
                                        "required": [
                                          "text"
                                        ],
                                        "properties": {
                                          "text": {
                                            "type": "string",
                                            "maxLength": 35
                                          },
                                          "nextMessageId": {
                                            "type": "string"
                                          },
                                          "url": {
                                            "type": "string",
                                            "format": "uri"
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "event": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "urn"
                            ],
                            "properties": {
                              "urn": {
                                "type": "string",
                                "pattern": "^urn:li:event:\\d+$"
                              }
                            }
                          },
                          "thoughtLeader": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "postUrn"
                            ],
                            "properties": {
                              "postUrn": {
                                "type": "string",
                                "pattern": "^urn:li:(share|ugcPost):\\d+$"
                              }
                            }
                          }
                        }
                      },
                      "MetaAdsPlatformData": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "bidStrategy": {
                            "$ref": "#/$defs/BidStrategy"
                          },
                          "bidAmount": {
                            "type": "number"
                          },
                          "roasAverageFloor": {
                            "type": "number"
                          },
                          "dailyMinSpendTarget": {
                            "type": "number"
                          },
                          "lifetimeMinSpendTarget": {
                            "type": "number"
                          },
                          "customerLifecycle": {
                            "$ref": "#/$defs/MetaCustomerLifecycle"
                          }
                        }
                      },
                      "MetaCustomerLifecycle": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "strategy"
                        ],
                        "properties": {
                          "strategy": {
                            "type": "string",
                            "enum": [
                              "all_customers",
                              "new_customers",
                              "new_customers_excluding_engaged"
                            ]
                          },
                          "existingCustomerAudienceIds": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "engagedAudienceIds": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        }
                      },
                      "GooglePmaxAssetGroupUpdate": {
                        "type": "object",
                        "additionalProperties": false,
                        "minProperties": 1,
                        "properties": {
                          "finalUrl": {
                            "type": "string",
                            "format": "uri",
                            "pattern": "^https?://"
                          },
                          "headlines": {
                            "type": "array",
                            "minItems": 3,
                            "maxItems": 15,
                            "uniqueItems": true,
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 30
                            }
                          },
                          "longHeadline": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 90
                          },
                          "descriptions": {
                            "type": "array",
                            "minItems": 2,
                            "maxItems": 5,
                            "uniqueItems": true,
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 90
                            }
                          },
                          "businessName": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 25
                          },
                          "images": {
                            "type": "object",
                            "additionalProperties": false,
                            "minProperties": 1,
                            "properties": {
                              "landscape": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri",
                                  "pattern": "^https?://"
                                }
                              },
                              "square": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri",
                                  "pattern": "^https?://"
                                }
                              },
                              "logo": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "items": {
                                  "type": "string",
                                  "format": "uri",
                                  "pattern": "^https?://"
                                }
                              }
                            }
                          },
                          "youtubeVideoIds": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "pattern": "^[A-Za-z0-9_-]{11}$"
                            }
                          }
                        }
                      },
                      "GoogleDemandGenUpdate": {
                        "type": "object",
                        "additionalProperties": false,
                        "minProperties": 1,
                        "properties": {
                          "finalUrl": {
                            "type": "string",
                            "format": "uri"
                          },
                          "businessName": {
                            "type": "string",
                            "maxLength": 25
                          },
                          "headlines": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "maxLength": 40
                            }
                          },
                          "longHeadlines": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "maxLength": 90
                            }
                          },
                          "descriptions": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "maxLength": 90
                            }
                          },
                          "callToAction": {
                            "type": "string",
                            "maxLength": 25
                          },
                          "images": {
                            "type": "object",
                            "additionalProperties": false,
                            "minProperties": 1,
                            "properties": {
                              "landscape": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri"
                                }
                              },
                              "square": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri"
                                }
                              },
                              "portrait": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 20,
                                "items": {
                                  "type": "string",
                                  "format": "uri"
                                }
                              },
                              "logo": {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "items": {
                                  "type": "string",
                                  "format": "uri"
                                }
                              }
                            }
                          },
                          "youtubeVideoIds": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 5,
                            "items": {
                              "type": "string",
                              "pattern": "^[A-Za-z0-9_-]{11}$"
                            }
                          },
                          "channels": {
                            "type": "array",
                            "minItems": 1,
                            "items": {
                              "type": "string",
                              "enum": [
                                "youtube_in_stream",
                                "youtube_in_feed",
                                "youtube_shorts",
                                "discover",
                                "gmail",
                                "display"
                              ]
                            }
                          },
                          "audience": {
                            "$ref": "#/$defs/GoogleDemandGenAudience"
                          },
                          "audienceId": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "audienceId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/audiences/{audienceId}/members": {
      "post": {
        "summary": "Add people to a customer list from contacts or a supplied list",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "$schema": "https://json-schema.org/draft/2020-12/schema",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "source": {
                            "type": "string",
                            "const": "contacts"
                          },
                          "tags": {
                            "maxItems": 20,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100
                            }
                          },
                          "contactIds": {
                            "minItems": 1,
                            "maxItems": 100000,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            }
                          },
                          "lawfulBasisConfirmed": {
                            "type": "boolean",
                            "const": true
                          }
                        },
                        "required": [
                          "source",
                          "lawfulBasisConfirmed"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "source": {
                            "type": "string",
                            "const": "list"
                          },
                          "users": {
                            "minItems": 1,
                            "maxItems": 10000,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "email": {
                                  "type": "string",
                                  "maxLength": 320
                                },
                                "phone": {
                                  "type": "string",
                                  "maxLength": 40
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "lawfulBasisConfirmed": {
                            "type": "boolean",
                            "const": true
                          }
                        },
                        "required": [
                          "source",
                          "users",
                          "lawfulBasisConfirmed"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "audienceId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/audiences/{audienceId}/companies": {
      "post": {
        "summary": "Replace the companies in a LinkedIn company list",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "type": "object",
                    "required": [
                      "companies"
                    ],
                    "properties": {
                      "companies": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 300000,
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "name": {
                              "type": "string",
                              "maxLength": 255
                            },
                            "domain": {
                              "type": "string",
                              "maxLength": 100
                            },
                            "website": {
                              "type": "string",
                              "maxLength": 100
                            },
                            "linkedinPageUrl": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "audienceId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/audiences/{audienceId}/delete": {
      "post": {
        "summary": "Delete an audience from the platform",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "audienceId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/campaigns": {
      "get": {
        "summary": "List campaigns",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create campaigns",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "allowLiveCreation": {
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/campaigns/{objectId}": {
      "get": {
        "summary": "Read campaigns",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update campaigns",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "objectId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/campaigns/{objectId}/status": {
      "post": {
        "summary": "Launch or pause campaigns",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "objectId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/ad-sets": {
      "get": {
        "summary": "List ad-sets",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create ad-sets with the first ad",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "allowLiveCreation": {
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/ad-sets/{objectId}": {
      "get": {
        "summary": "Read ad-sets",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update ad-sets",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "objectId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/ad-sets/{objectId}/status": {
      "post": {
        "summary": "Launch or pause ad-sets",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "objectId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/ads": {
      "get": {
        "summary": "List ads",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create ads",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "allowLiveCreation": {
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/ads/{objectId}": {
      "get": {
        "summary": "Read ads",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update ads",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "objectId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/ads/{objectId}/status": {
      "post": {
        "summary": "Launch or pause ads",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "objectId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/creatives": {
      "get": {
        "summary": "List creatives",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create creatives",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "payload"
                ],
                "additionalProperties": false,
                "properties": {
                  "payload": {
                    "type": "object"
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "allowLiveCreation": {
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/advertising/advertisers/{advertiserId}/creatives/{objectId}": {
      "get": {
        "summary": "Read creatives",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "objectId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/ctv/advertisers": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "List connected TV advertisers assigned to this business",
        "operationId": "listCtvAdvertisers",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Request a new connected TV advertiser",
        "operationId": "createCtvAdvertiser",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "url": {
                    "type": "string",
                    "maxLength": 500,
                    "format": "uri"
                  },
                  "industry": {
                    "type": "string",
                    "enum": [
                      "AUTOMOTIVE",
                      "EDUCATION",
                      "FINANCIAL_SERVICES",
                      "FOOD_DRINK",
                      "FOOD_DRINK_WINE",
                      "GAMING",
                      "GAMING_GAMBLING",
                      "HEALTH_FITNESS",
                      "HEALTH_FITNESS_ALTERNATIVE",
                      "HUNTING_SHOOTING",
                      "LAW_LEGAL_PRACTICE",
                      "MEDIA_ENTERTAINMENT",
                      "OTHER",
                      "POLITICS",
                      "PROFESSIONAL_SERVICES",
                      "REAL_ESTATE",
                      "RELIGION_SPIRITUALITY",
                      "RETAIL",
                      "TECHNOLOGY_TELECOMMUNICATIONS",
                      "TOBACCO_SMOKING",
                      "TRAVEL_HOSPITALITY"
                    ]
                  }
                },
                "required": [
                  "name",
                  "url",
                  "industry"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/advertisers/{advertiserId}": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "advertiserId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Get a connected TV advertiser",
        "operationId": "getCtvAdvertiser",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/campaigns": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "List connected TV campaigns",
        "operationId": "listCtvCampaigns",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "advertiserId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a draft connected TV campaign",
        "operationId": "createCtvCampaign",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "advertiserId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 10,
                    "maxLength": 100
                  },
                  "goal": {
                    "type": "string",
                    "enum": [
                      "AWARENESS",
                      "INSTALL",
                      "TRAFFIC",
                      "RETARGETING",
                      "SALES",
                      "LEADS",
                      "ABM"
                    ]
                  },
                  "optimizationGoal": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": [
                          "COST_PER_SESSION",
                          "COST_PER_LEAD",
                          "COST_PER_CALL",
                          "COST_PER_PURCHASE",
                          "ROAS",
                          "CPM",
                          "COST_PER_INSTALL",
                          "COST_PER_UNIQUE_HOUSEHOLD",
                          "COST_PER_UNIQUE_COMPANY"
                        ]
                      },
                      "value": {
                        "type": "number",
                        "minimum": 1
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "additionalProperties": false
                  },
                  "attributionWindow": {
                    "type": "string",
                    "enum": [
                      "TWELVE_HOURS",
                      "ONE_DAY",
                      "FORTY_EIGHT_HOURS",
                      "SEVENTY_TWO_HOURS",
                      "SEVEN_DAYS",
                      "THIRTY_DAYS"
                    ]
                  },
                  "active": {
                    "default": true,
                    "type": "boolean"
                  }
                },
                "required": [
                  "advertiserId",
                  "name",
                  "goal",
                  "optimizationGoal"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/campaigns/{campaignId}": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "campaignId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Get a campaign with its strategies",
        "operationId": "getCtvCampaign",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Edit a draft campaign",
        "operationId": "updateCtvCampaign",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "name": {
                    "type": "string",
                    "minLength": 10,
                    "maxLength": 100
                  },
                  "goal": {
                    "type": "string",
                    "enum": [
                      "AWARENESS",
                      "INSTALL",
                      "TRAFFIC",
                      "RETARGETING",
                      "SALES",
                      "LEADS",
                      "ABM"
                    ]
                  },
                  "optimizationGoal": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": [
                          "COST_PER_SESSION",
                          "COST_PER_LEAD",
                          "COST_PER_CALL",
                          "COST_PER_PURCHASE",
                          "ROAS",
                          "CPM",
                          "COST_PER_INSTALL",
                          "COST_PER_UNIQUE_HOUSEHOLD",
                          "COST_PER_UNIQUE_COMPANY"
                        ]
                      },
                      "value": {
                        "type": "number",
                        "minimum": 1
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "additionalProperties": false
                  },
                  "attributionWindow": {
                    "type": "string",
                    "enum": [
                      "TWELVE_HOURS",
                      "ONE_DAY",
                      "FORTY_EIGHT_HOURS",
                      "SEVENTY_TWO_HOURS",
                      "SEVEN_DAYS",
                      "THIRTY_DAYS"
                    ]
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a draft campaign",
        "operationId": "deleteCtvCampaign",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          },
          {
            "in": "query",
            "name": "version",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/campaigns/{campaignId}/publish": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "campaignId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Publish a campaign (starts spend; checks the monthly budget and approvals)",
        "operationId": "publishCtvCampaign",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/campaigns/{campaignId}/pause": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "campaignId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Pause a published campaign",
        "operationId": "pauseCtvCampaign",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/campaigns/{campaignId}/activate": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "campaignId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Resume a paused campaign (checks the monthly budget and approvals)",
        "operationId": "activateCtvCampaign",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/campaigns/{campaignId}/duplicate": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "campaignId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Duplicate a campaign as a new draft",
        "operationId": "duplicateCtvCampaign",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/campaigns/{campaignId}/strategies": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "campaignId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "List a campaign's strategies",
        "operationId": "listCtvStrategies",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add a strategy (budget, schedule, targeting, creatives)",
        "operationId": "createCtvStrategy",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 100
                  },
                  "budget": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10000000
                  },
                  "budgetType": {
                    "type": "string",
                    "enum": [
                      "DAILY",
                      "GLOBAL"
                    ]
                  },
                  "startsAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      }
                    ]
                  },
                  "endsAt": {
                    "anyOf": [
                      {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                          }
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "active": {
                    "default": true,
                    "type": "boolean"
                  },
                  "targeting": {
                    "type": "object",
                    "properties": {
                      "geo": {
                        "type": "object",
                        "properties": {
                          "regions": {
                            "type": "object",
                            "properties": {
                              "include": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              },
                              "exclude": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              }
                            },
                            "additionalProperties": false
                          },
                          "cities": {
                            "type": "object",
                            "properties": {
                              "include": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              },
                              "exclude": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              }
                            },
                            "additionalProperties": false
                          },
                          "metroCodes": {
                            "type": "object",
                            "properties": {
                              "include": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              },
                              "exclude": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              }
                            },
                            "additionalProperties": false
                          },
                          "zipCodes": {
                            "type": "object",
                            "properties": {
                              "include": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              },
                              "exclude": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              }
                            },
                            "additionalProperties": false
                          }
                        },
                        "additionalProperties": false
                      },
                      "inventory": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "APPS_AND_CHANNELS",
                              "LIVE_SPORTS"
                            ]
                          },
                          "include": {
                            "default": [],
                            "maxItems": 5000,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100
                            }
                          },
                          "exclude": {
                            "default": [],
                            "maxItems": 5000,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100
                            }
                          }
                        },
                        "required": [
                          "type"
                        ],
                        "additionalProperties": false
                      },
                      "ageRanges": {
                        "maxItems": 7,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "RANGE_18_20",
                            "RANGE_21_24",
                            "RANGE_25_34",
                            "RANGE_35_44",
                            "RANGE_45_54",
                            "RANGE_55_64",
                            "RANGE_65_MORE"
                          ]
                        }
                      },
                      "genders": {
                        "maxItems": 2,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "MALE",
                            "FEMALE"
                          ]
                        }
                      },
                      "devices": {
                        "maxItems": 3,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "TV",
                            "TABLET",
                            "MOBILE"
                          ]
                        }
                      },
                      "interests": {
                        "maxItems": 500,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        }
                      },
                      "audiences": {
                        "type": "object",
                        "properties": {
                          "include": {
                            "default": [],
                            "maxItems": 100,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            }
                          },
                          "exclude": {
                            "default": [],
                            "maxItems": 100,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            }
                          }
                        },
                        "additionalProperties": false
                      },
                      "dayparting": {
                        "type": "object",
                        "properties": {
                          "preset": {
                            "type": "string",
                            "enum": [
                              "CUSTOM",
                              "ANY_TIME_ANY_DAY",
                              "PRIMETIME",
                              "AFTER_WORK",
                              "WORK_HOURS",
                              "SLEEPING_TIME",
                              "WEEKEND",
                              "WORK_DAYS"
                            ]
                          },
                          "customRanges": {
                            "maxItems": 200,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "start": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 10079
                                },
                                "end": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 10079
                                }
                              },
                              "required": [
                                "start",
                                "end"
                              ],
                              "additionalProperties": false
                            }
                          }
                        },
                        "required": [
                          "preset"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  },
                  "creativeIds": {
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "name",
                  "budget",
                  "budgetType",
                  "startsAt"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/strategies/{strategyId}": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "strategyId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Get a strategy",
        "operationId": "getCtvStrategy",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Edit a strategy",
        "operationId": "updateCtvStrategy",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 100
                  },
                  "budget": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10000000
                  },
                  "budgetType": {
                    "type": "string",
                    "enum": [
                      "DAILY",
                      "GLOBAL"
                    ]
                  },
                  "startsAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      }
                    ]
                  },
                  "endsAt": {
                    "anyOf": [
                      {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                          }
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "targeting": {
                    "type": "object",
                    "properties": {
                      "geo": {
                        "type": "object",
                        "properties": {
                          "regions": {
                            "type": "object",
                            "properties": {
                              "include": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              },
                              "exclude": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              }
                            },
                            "additionalProperties": false
                          },
                          "cities": {
                            "type": "object",
                            "properties": {
                              "include": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              },
                              "exclude": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              }
                            },
                            "additionalProperties": false
                          },
                          "metroCodes": {
                            "type": "object",
                            "properties": {
                              "include": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              },
                              "exclude": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              }
                            },
                            "additionalProperties": false
                          },
                          "zipCodes": {
                            "type": "object",
                            "properties": {
                              "include": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              },
                              "exclude": {
                                "default": [],
                                "maxItems": 5000,
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                }
                              }
                            },
                            "additionalProperties": false
                          }
                        },
                        "additionalProperties": false
                      },
                      "inventory": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "APPS_AND_CHANNELS",
                              "LIVE_SPORTS"
                            ]
                          },
                          "include": {
                            "default": [],
                            "maxItems": 5000,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100
                            }
                          },
                          "exclude": {
                            "default": [],
                            "maxItems": 5000,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100
                            }
                          }
                        },
                        "required": [
                          "type"
                        ],
                        "additionalProperties": false
                      },
                      "ageRanges": {
                        "maxItems": 7,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "RANGE_18_20",
                            "RANGE_21_24",
                            "RANGE_25_34",
                            "RANGE_35_44",
                            "RANGE_45_54",
                            "RANGE_55_64",
                            "RANGE_65_MORE"
                          ]
                        }
                      },
                      "genders": {
                        "maxItems": 2,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "MALE",
                            "FEMALE"
                          ]
                        }
                      },
                      "devices": {
                        "maxItems": 3,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "TV",
                            "TABLET",
                            "MOBILE"
                          ]
                        }
                      },
                      "interests": {
                        "maxItems": 500,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        }
                      },
                      "audiences": {
                        "type": "object",
                        "properties": {
                          "include": {
                            "default": [],
                            "maxItems": 100,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            }
                          },
                          "exclude": {
                            "default": [],
                            "maxItems": 100,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            }
                          }
                        },
                        "additionalProperties": false
                      },
                      "dayparting": {
                        "type": "object",
                        "properties": {
                          "preset": {
                            "type": "string",
                            "enum": [
                              "CUSTOM",
                              "ANY_TIME_ANY_DAY",
                              "PRIMETIME",
                              "AFTER_WORK",
                              "WORK_HOURS",
                              "SLEEPING_TIME",
                              "WEEKEND",
                              "WORK_DAYS"
                            ]
                          },
                          "customRanges": {
                            "maxItems": 200,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "start": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 10079
                                },
                                "end": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 10079
                                }
                              },
                              "required": [
                                "start",
                                "end"
                              ],
                              "additionalProperties": false
                            }
                          }
                        },
                        "required": [
                          "preset"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  },
                  "creativeIds": {
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  },
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a strategy of a draft campaign",
        "operationId": "deleteCtvStrategy",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          },
          {
            "in": "query",
            "name": "version",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/strategies/{strategyId}/pause": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "strategyId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Pause a strategy",
        "operationId": "pauseCtvStrategy",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/strategies/{strategyId}/activate": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "strategyId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Activate a strategy",
        "operationId": "activateCtvStrategy",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/strategies/{strategyId}/duplicate": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "strategyId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Duplicate a strategy",
        "operationId": "duplicateCtvStrategy",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "version"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/strategies/{strategyId}/creatives": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "strategyId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "summary": "Replace a strategy's creatives",
        "operationId": "setCtvStrategyCreatives",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "creativeIds": {
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "version",
                  "creativeIds"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/creatives": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "List video creatives",
        "operationId": "listCtvCreatives",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "advertiserId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a video creative from uploaded media",
        "operationId": "createCtvCreative",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "advertiserId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 150
                  },
                  "mediaId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "required": [
                  "advertiserId",
                  "name",
                  "mediaId"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/creatives/{creativeId}": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "creativeId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Get a creative and its review status",
        "operationId": "getCtvCreative",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a creative not used by a published campaign",
        "operationId": "deleteCtvCreative",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          },
          {
            "in": "query",
            "name": "version",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/audiences": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "List first-party audiences",
        "operationId": "listCtvAudiences",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "advertiserId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a first-party audience",
        "operationId": "createCtvAudience",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "advertiserId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "advertiserId",
                  "name"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/audiences/{audienceId}": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "audienceId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Get an audience, its match stats and last upload",
        "operationId": "getCtvAudience",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an audience not used by a campaign",
        "operationId": "deleteCtvAudience",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          },
          {
            "in": "query",
            "name": "version",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/audiences/{audienceId}/members": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "audienceId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Upload people to an audience (hashed before leaving the platform)",
        "operationId": "addCtvAudienceMembers",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "members": {
                    "minItems": 1,
                    "maxItems": 10000,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "email": {
                          "type": "string",
                          "maxLength": 320,
                          "format": "email",
                          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        "phone": {
                          "type": "string",
                          "pattern": "^\\+[1-9]\\d{6,14}$"
                        },
                        "hashedEmail": {
                          "type": "string",
                          "pattern": "^[a-f0-9]{64}$"
                        },
                        "hashedPhone": {
                          "type": "string",
                          "pattern": "^[a-f0-9]{64}$"
                        },
                        "externalId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "lawfulBasisConfirmed": {
                    "type": "boolean",
                    "const": true
                  }
                },
                "required": [
                  "version",
                  "members",
                  "lawfulBasisConfirmed"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/targeting/{list}": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "list",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Look up targeting options",
        "operationId": "getCtvTargeting",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/stats": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Daily delivery and spend, from the settled mirror",
        "operationId": "getCtvStats",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "from",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "in": "query",
            "name": "level",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "account",
                "advertiser",
                "campaign",
                "strategy"
              ]
            }
          },
          {
            "in": "query",
            "name": "granularity",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "day",
                "total"
              ]
            }
          },
          {
            "in": "query",
            "name": "advertiserId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "campaignId",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/reports": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Request a custom report (up to 45 days)",
        "operationId": "createCtvReport",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "advertiserIds": {
                    "minItems": 1,
                    "maxItems": 50,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  },
                  "from": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                  },
                  "to": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                  },
                  "metrics": {
                    "minItems": 1,
                    "maxItems": 22,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "spend",
                        "impressions",
                        "households",
                        "frequency",
                        "cpm",
                        "completed_views",
                        "cost_per_completed_view",
                        "view_through_rate",
                        "number_of_page_views",
                        "cost_per_page_view",
                        "number_of_sessions",
                        "cost_per_session",
                        "number_of_leads",
                        "cost_per_lead",
                        "installs",
                        "cost_per_install",
                        "number_of_purchases",
                        "cost_per_purchase",
                        "amount_of_purchases",
                        "number_of_signups",
                        "cost_per_signup",
                        "roas"
                      ]
                    }
                  },
                  "dimensions": {
                    "default": [
                      "impression_date"
                    ],
                    "maxItems": 6,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "impression_date",
                        "campaign_id",
                        "campaign_name",
                        "strategy_id",
                        "strategy_name",
                        "creative_id",
                        "creative_name",
                        "screen",
                        "channel_name",
                        "content_name",
                        "geo_region",
                        "geo_metro",
                        "geo_city",
                        "geo_zip",
                        "segment_ages",
                        "segment_genders",
                        "segment_interests",
                        "custom_audiences"
                      ]
                    }
                  },
                  "granularity": {
                    "default": "DAY",
                    "type": "string",
                    "enum": [
                      "HOUR",
                      "DAY",
                      "WEEK",
                      "MONTH"
                    ]
                  },
                  "timezone": {
                    "default": "UTC",
                    "type": "string",
                    "enum": [
                      "UTC",
                      "America/New_York",
                      "America/Denver",
                      "America/Los_Angeles",
                      "America/Phoenix",
                      "Europe/London"
                    ]
                  },
                  "campaignIds": {
                    "maxItems": 100,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "from",
                  "to",
                  "metrics"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/reports/{reportId}": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "reportId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Get a custom report and its rows when ready",
        "operationId": "getCtvReport",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/requests": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "List connected TV change requests",
        "operationId": "listCtvRequests",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/requests/{requestId}": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "requestId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Get a change request and its outcome",
        "operationId": "getCtvRequest",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/requests/{requestId}/approve": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "requestId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Independently approve a spend change",
        "operationId": "approveCtvRequest",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "inputHash"
                ],
                "properties": {
                  "inputHash": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/requests/{requestId}/reject": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "requestId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Decline a spend change",
        "operationId": "rejectCtvRequest",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/ctv/budget": {
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Monthly connected TV budget, spend and commitments",
        "operationId": "getCtvBudget",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Result. Changes are applied asynchronously; poll the returned request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts": {
      "get": {
        "summary": "List authorized businesses",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ]
      },
      "post": {
        "summary": "Create a business Account under an Agency or Group",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "parentId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Agency or Group that will contain the business. See GET /account-parents."
                  },
                  "name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 100,
                    "description": "Business name shown in the workspace."
                  },
                  "timezone": {
                    "default": "UTC",
                    "description": "IANA timezone for scheduling and reports.",
                    "type": "string"
                  }
                },
                "required": [
                  "parentId",
                  "name",
                  "timezone"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      }
    },
    "/account-parents": {
      "get": {
        "summary": "List Agencies and Groups where this key may create a business",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{accountId}/connections": {
      "get": {
        "summary": "List connected destinations",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/connections/{connectionId}/capabilities": {
      "get": {
        "summary": "Inspect supported formats and live readiness",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "connectionId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/post-batches": {
      "post": {
        "summary": "Submit up to 100 independent posts",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "accountId",
                  "items"
                ],
                "properties": {
                  "accountId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "externalReference": {
                    "type": "string"
                  },
                  "items": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 100,
                    "items": {
                      "$ref": "#/components/schemas/PostInput"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      }
    },
    "/post-batches/validate": {
      "post": {
        "summary": "Validate content without creating posts",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "accountId",
                  "items"
                ],
                "properties": {
                  "accountId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/PostInput"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/post-batches/{batchId}": {
      "get": {
        "summary": "Retrieve item outcomes and current post status",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "batchId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/posts": {
      "get": {
        "summary": "List posts with cursor, status and clientReference filters",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "clientReference",
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/posts/{postId}": {
      "get": {
        "summary": "Inspect a post",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Edit a post or supported published text with optimistic version",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version",
                  "post"
                ],
                "properties": {
                  "version": {
                    "type": "integer"
                  },
                  "post": {
                    "$ref": "#/components/schemas/PostInput"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "postId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/posts/{postId}/submit": {
      "post": {
        "summary": "submit a post where supported",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version"
                ],
                "properties": {
                  "version": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "postId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/posts/{postId}/cancel": {
      "post": {
        "summary": "cancel a post where supported",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version"
                ],
                "properties": {
                  "version": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "postId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/posts/{postId}/retry": {
      "post": {
        "summary": "retry a post where supported",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version"
                ],
                "properties": {
                  "version": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "postId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/posts/{postId}/unpublish": {
      "post": {
        "summary": "unpublish a post where supported",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "version"
                ],
                "properties": {
                  "version": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "postId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/media/uploads": {
      "post": {
        "summary": "Create signed upload or multipart session",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "contentType",
                  "bytes"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "contentType": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "multipart": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/media/uploads/{mediaId}/complete": {
      "post": {
        "summary": "Complete and inspect uploaded media",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "mediaId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/media/imports": {
      "post": {
        "summary": "Import a public HTTPS media URL",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "name": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 200
            }
          }
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/accounts/{accountId}/media/{mediaId}": {
      "get": {
        "summary": "Inspect media readiness",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "accountId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "in": "path",
          "name": "mediaId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    },
    "/webhook-endpoints": {
      "get": {
        "summary": "List webhook endpoints",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create endpoint and reveal signing secret once",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/webhook-endpoints/{endpointId}": {
      "get": {
        "summary": "Inspect latest deliveries",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Disable endpoint",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Replay a delivery",
        "security": [
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "deliveryId"
                ],
                "properties": {
                  "deliveryId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Operation result. Publication acceptance is asynchronous.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "endpointId",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ]
    }
  }
}
```
