> ## 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.

# Ліміти та білінг GraphQL

> Як Ayrshare зараховує GraphQL-запити до вашої квоти API, а також ліміти глибини запиту, кількості полів, аліасів, директив і розміру запиту.

<h2 id="how-requests-are-counted">
  Як рахуються запити
</h2>

**Кожне виконане кореневе поле операції — це один виклик API.** GraphQL-запит, що запитує чотири кореневі поля, тарифікується як чотири виклики API, так само як якби ви зробили чотири REST-запити. Аліаси на кореневому рівні рахуються окремо, тому що кожен із них запускає операцію. Вкладені поля, вибрані з типізованої відповіді, не додають викликів API.

```graphql theme={"system"}
{
  history: postHistory(lastDays: 7)
  accounts: user
  comments: comments(id: "abc123")
  analytics: socialAnalytics(platforms: [INSTAGRAM])
}
```

Один HTTP-запит, **чотири виклики API** з квоти та rate limit вашого плану.

Це зроблено навмисно, і це чесна модель: кожне кореневе поле виконує на нашому боці ту саму роботу, що й відповідний REST-виклик, тому й коштує так само. GraphQL заощаджує вам обміни запитами й відповідями та дає змогу отримати саме те, що потрібно, в одному місці; це не спосіб отримати більше викликів API, ніж передбачає ваш план.

Практичні наслідки:

<ul class="custom-bullets">
  <li>Наявні ліміти вашого плану застосовуються без змін. Див. <a href="/docs/apis/overview">ліміти API</a>, щоб дізнатися, що передбачає ваш план.</li>
  <li>Запит кореневої операції, яка вам не потрібна, коштує стільки ж, скільки її виклик через REST. Вибір потрібних вам вкладених полів відповіді не додає викликів.</li>
  <li>Запит може потрапити під rate limit <em>посеред виконання</em>. Кореневі поля, які завершилися, зберігають свої дані, і лише обмежені кореневі поля повертають помилки — див. <a href="/docs/apis/graphql/errors#partial-success">Частковий успіх</a>.</li>
</ul>

<h2 id="query-limits">
  Ліміти запитів
</h2>

Ендпоінт застосовує кілька лімітів до структури та розміру запиту. Вони існують для того, щоб один запит не міг споживати надмірну частку наших ресурсів, і встановлені значно вище, ніж потрібно для звичайного використання: якщо ви впираєтеся в один із них, зазвичай це ознака випадково згенерованого запиту, а не реальної потреби.

| Ліміт | Значення | Як ви про це дізнаєтеся |
| - | - | - |
| Викликів API на запит | 5 | `extensions.status` 429 для кожного зайвого кореневого поля |
| Глибина вкладеності запиту | 15 | Запит відхиляється до виконання |
| Полів на запит | 300 | Запит відхиляється до виконання |
| Аліасів на запит | 25 | Запит відхиляється до виконання |
| Директив на запит | 50 | Запит відхиляється до виконання |
| Розмір тіла запиту | 64 KB | HTTP 413 |

Відхилений запит повертає HTTP 400, якщо ви надсилаєте `Accept: application/graphql-response+json`, і HTTP 200 в іншому разі; в обох випадках із масивом `errors` і без `data`. Див. [Помилки](/docs/apis/graphql/errors).

<h3 id="api-calls-per-request">
  Викликів API на запит
</h3>

Найважливіший ліміт. Один запит може ініціювати щонайбільше **5** викликів API, тож наведений вище приклад із чотирма кореневими полями підходить, а приклад із двадцятьма — ні. Щойно запущено п'ять викликів, додаткові кореневі поля повертають 429 з поясненням ліміту; поля, які вже було запущено, все одно можуть повернути свої дані.

Якщо вам потрібно більше, розділіть запит на кілька запитів. Якщо ви регулярно робите це для легітимного навантаження, [зв'яжіться з нами](/docs/help-center/overview): ліміт навмисно консервативний для запуску, і підвищити його просто, тоді як зниження згодом зламало б інтеграції, тому він починається з малого.

<h3 id="depth-fields-and-aliases">
  Глибина, поля, аліаси та директиви
</h3>

Вони перевіряються ще до виконання, тож перевищення будь-якого з них не коштує вам жодного виклику API.

Вони також із запасом покривають повний запит інтроспекції, який має близько 180 полів і 12 рівнів глибини без аліасів і директив, тож клієнт, що отримує всю схему під час запуску, працює нормально.

<h3 id="request-body-size">
  Розмір тіла запиту
</h3>

64 KB — це щедро для запиту і занадто мало для файлу. Саме тому медіа не можна завантажувати через GraphQL — підтримуваний спосіб описано в розділі [Завантаження медіа](/docs/apis/graphql/using-the-api#uploading-media).

<h2 id="timeouts">
  Тайм-аути
</h2>

Загалом на запит відводиться до 120 секунд. Кореневі поля в **query можуть виконуватися паралельно**, тож його тривалість зазвичай визначається найповільнішою залежністю. Кореневі поля в **mutation виконуються послідовно**, тож кілька повільних mutations можуть у сумі наблизитися до тайм-ауту. Будь-яка з форм усе одно може створити на бекенді навантаження до п'яти паралельних або послідовних викликів; за потреби розділяйте відомо повільну роботу.

<h2 id="what-is-not-limited">
  Що не обмежується
</h2>

<ul class="custom-bullets">
  <li><strong>Читання схеми.</strong> Інтроспекція не потребує автентифікації та не тарифікується. Переглядати, що є в API, безкоштовно; виконання операції — ні.</li>
  <li><strong>Некоректні запити.</strong> Запит, який GraphQL відхиляє (невідоме поле, неправильний тип, некоректне значення enum), ніколи не доходить до нашого API і ніколи не тарифікується.</li>
</ul>

Ці ліміти переглядаються з урахуванням реального використання. Якщо якийсь із них не підходить для легітимної інтеграції, повідомте нам: такий відгук корисніший, ніж обхідний шлях.


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