> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Оголошення

> Керуйте просуваними оголошеннями через Ayrshare GraphQL API за допомогою єдиного набору операцій, які приймають рекламну платформу як аргумент.

Операції з оголошеннями приймають рекламну платформу як аргумент, тому та сама операція працює на кожній рекламній платформі, яку підтримує Ayrshare. Наразі це `FACEBOOK` та `INSTAGRAM`.

Кожна операція викликає відповідний [REST-ендпоінт оголошень](/docs/apis/ads/overview) і повертає його відповідь без змін. Автентифікація та ліміти такі самі, як у REST. Невдалий виклик повертає помилку GraphQL: `extensions.status` містить статус REST, а `extensions.code` — код помилки Ayrshare, якщо помилка REST його має. Див. [Помилки](/docs/apis/graphql/errors). Операції з оголошеннями потребують доповнення Ads. Без нього кожен виклик повертає помилку з `extensions.status` `403` і `extensions.code` `399`.

## Операції

| Операція | Тип | REST-ендпоінт |
| - | - | - |
| `adAccounts` | Query | `GET /ads/{platform}/accounts` |
| `adTargetingSearch` | Query | `GET /ads/{platform}/interests`, `/regions` або `/cities` |
| `ads` | Query | `GET /ads/{platform}/ads` |
| `adHistory` | Query | `GET /ads/{platform}/history` |
| `updateAd` | Mutation | `PUT /ads/{platform}/ads` |
| `boostPost` | Mutation | `POST /ads/{platform}/boost` |

Кожна операція також приймає необов'язковий `profileKey`, щоб діяти від імені User Profile (профілю користувача). Усі вони повертають відповідь REST як JSON, тому не приймають вибірки полів.

## Список рекламних акаунтів

Почніть звідси. Використовуйте значення `accountId` з відповіді всюди, де операція запитує `accountId`.

```graphql theme={"system"}
query {
  adAccounts(platform: FACEBOOK, limit: 10)
}
```

## Пошук параметрів таргетингу

`kind` визначає тип пошуку: `INTERESTS` для таргетингу аудиторії, `REGIONS` або `CITIES` для місцеположень. Кожен тип приймає лише власні аргументи. Наприклад, `countryCode` і `regionId` працюють лише з `CITIES`, а `INTERESTS` потребує `search`.

```graphql theme={"system"}
query {
  adTargetingSearch(platform: INSTAGRAM, kind: INTERESTS, search: "running")
}
```

```graphql theme={"system"}
query {
  adTargetingSearch(platform: FACEBOOK, kind: CITIES, search: "Austin", countryCode: "US")
}
```

## Список оголошень

Передайте принаймні один із параметрів `campaignId`, `accountId`, `adId`, `postId` або `socialPostId`. `socialPostId` — це власний id публікації в соцмережі, для публікацій, опублікованих не через Ayrshare.

```graphql theme={"system"}
query {
  ads(platform: FACEBOOK, accountId: "act_1234567890")
}
```

## Перегляд витрат на оголошення

```graphql theme={"system"}
query {
  adHistory(platform: FACEBOOK, startDate: "2026-09-01", endDate: "2026-09-30")
}
```

## Призупинення або відновлення оголошення

`updateAd` змінює реальні рекламні витрати. `PAUSED` зупиняє витрати, `ACTIVE` відновлює їх, а `DELETED` або `ARCHIVED` виводить оголошення з обігу. Той самий статус також встановлюється для набору оголошень і кампанії цього оголошення, тому всі інші оголошення в цьому наборі оголошень або кампанії змінюються разом із ним. Кампанія або набір оголошень, до яких просування було приєднано через `attachTo`, зберігають власний статус, а оголошення показується лише тоді, коли кампанія та набір оголошень над ним активні.

```graphql theme={"system"}
mutation {
  updateAd(platform: FACEBOOK, adId: "120210000000000000", status: PAUSED)
}
```

<h2 id="boost-a-post">
  Просування публікації
</h2>

`boostPost` витрачає реальні гроші з рекламного акаунта. Він перетворює опубліковану публікацію на оголошення.

* Передайте `postId` (id публікації в Ayrshare) або `socialPostId` (власний id публікації в соцмережі).
* Отримайте `accountId` з `adAccounts`.
* `budget.amount` вказується у валюті рекламного акаунта. Не передавайте `budget` лише тоді, коли `attachTo.adSetId` додає оголошення до набору оголошень, який ви вже ведете і який зберігає власний бюджет. У такому разі не передавайте й `targeting`: набір оголошень зберігає власний. Див. [Просування в наявну кампанію або набір оголошень](/docs/apis/ads/facebook/boost-post#attach-to).
* `schedule`, `targeting`, `callToAction`, `attachTo` і `status` необов'язкові. Якщо не вказати `status` і `schedule`, оголошення буде **активним, почне показуватися одразу й не матиме дати завершення**, тому воно витрачатиме кошти, доки ви його не призупините. Щоб обмежити його, встановіть `status: PAUSED` або `schedule.end`.
* Налаштування, які має лише одна платформа, розміщуйте в `platformOptions` з ключем за платформою. На Facebook та Instagram `adName` і `bidAmount` там **обов'язкові**, наприклад `platformOptions: { facebook: { adName: "Autumn sale", bidAmount: 2 } }`. Без них просування повертає помилку про відсутні поля. З `attachTo.adSetId` не передавайте `bidAmount`: набір оголошень зберігає власну ставку.

```graphql theme={"system"}
mutation {
  boostPost(
    platform: FACEBOOK
    accountId: "act_1234567890"
    postId: "RNlSOkyxl9G3EDhlPuCK"
    goal: "engagement"
    budget: { amount: 20, type: DAILY }
    schedule: { start: "2026-10-10T09:00:00Z", end: "2026-10-17T09:00:00Z" }
    targeting: { ageMin: 25, ageMax: 45, locations: { countries: ["US"] } }
    platformOptions: { facebook: { adName: "Autumn sale", bidAmount: 2 } }
    idempotencyKey: "4f9c2a7e-1b3d-4c8e-9a6f-2d5b7e0c1a34"
  )
}
```

Деякі аргументи приймають більше ніж одну форму, тому вони використовують тип `JSON`:

* `accountId` приймає рядок або число.
* Дати в `schedule` приймають дату або дату й час у форматі ISO 8601, наприклад `"2026-10-10T09:00:00Z"`. Використовуйте цю форму, а не число. `schedule.end` також приймає `0`, що означає відсутність дати завершення.
* Ключі місцеположень приймають одне значення або список.
* `targeting.interests` приймає id у вигляді рядків або чисел.
* `platformOptions` приймає об'єкт.

<Tip>
  Надсилайте новий `idempotencyKey`, наприклад UUID, з кожним просуванням. Якщо виклик перевищив час очікування або завершився помилкою, повторіть його з тим самим ключем і тими самими аргументами.

  * Якщо перше просування завершилося, повторний виклик повертає його відповідь, а не створює й оплачує друге оголошення.
  * Якщо перше просування ще виконується, повторний виклик повертає помилку з `extensions.status` `409`. Зачекайте, а потім повторіть виклик із тим самим ключем. Не переходьте на новий ключ.
  * Повторне використання ключа з іншими аргументами також повертає `409`.
</Tip>

Щоб зупинити витрати на оголошення, викличте `updateAd` зі `status: PAUSED`. `boostFacebookPost` та `instagramBoostPost` і далі працюють.

Операції для окремих платформ, як-от `facebookAdAccounts` та `instagramAds`, і далі працюють без змін.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.