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

# Limites et facturation GraphQL

> Comment Ayrshare décompte les requêtes GraphQL sur votre quota d'API, ainsi que les limites de profondeur, de champs, d'alias et de taille des requêtes.

<h2 id="how-requests-are-counted">
  Mode de décompte des requêtes
</h2>

**Chaque champ d'opération racine exécuté correspond à un appel API.** Une requête GraphQL qui demande quatre champs racine est facturée comme quatre appels API, exactement comme si vous aviez effectué quatre requêtes REST. Les alias à la racine sont comptés séparément, car chacun déclenche une opération. Les champs imbriqués sélectionnés dans une réponse typée n'ajoutent pas d'appels API.

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

Une requête HTTP, **quatre appels API** décomptés du quota et de la limite de débit de votre plan.

C'est intentionnel, et c'est le modèle le plus honnête : chaque champ racine effectue de notre côté le même travail que l'appel REST équivalent, il coûte donc la même chose. GraphQL vous épargne des allers-retours et vous permet de récupérer exactement ce dont vous avez besoin en un seul endroit ; ce n'est pas un moyen d'obtenir plus d'appels API que ce que votre plan inclut.

Les conséquences pratiques :

<ul class="custom-bullets">
  <li>Les limites de votre plan actuel s'appliquent sans changement. Consultez les <a href="/docs/apis/overview">limites de l'API</a> pour connaître l'allocation de votre plan.</li>
  <li>Demander une opération racine dont vous n'avez pas besoin coûte autant que de l'appeler via REST. Sélectionner les champs de réponse imbriqués dont vous avez besoin n'ajoute pas d'appels.</li>
  <li>Une requête peut être soumise à une limite de débit <em>en cours de route</em>. Les champs racine terminés conservent leurs données, et seuls les champs racine limités renvoient des erreurs : consultez <a href="/docs/apis/graphql/errors#partial-success">Succès partiel</a>.</li>
</ul>

<h2 id="query-limits">
  Limites de requête
</h2>

Le point de terminaison applique quelques limites à la forme et à la taille d'une query. Elles existent pour qu'une seule requête ne puisse pas consommer une part déraisonnable de notre capacité, et elles sont fixées bien au-dessus de ce qu'exige un usage ordinaire : si vous en atteignez une, c'est généralement le signe d'une query générée par accident plutôt que d'un besoin réel.

| Limite | Valeur | Comment vous le savez |
| - | - | - |
| Appels API par requête | 5 | `extensions.status` 429 sur chaque champ racine supplémentaire |
| Profondeur d'imbrication de la query | 15 | Query rejetée avant son exécution |
| Champs par requête | 300 | Query rejetée avant son exécution |
| Alias par requête | 25 | Query rejetée avant son exécution |
| Taille du corps de la requête | 64 Ko | HTTP 413 |

Une query rejetée renvoie HTTP 400 si vous envoyez `Accept: application/graphql-response+json`, et HTTP 200 sinon, avec un tableau `errors` et pas de `data` dans les deux cas. Consultez [Erreurs](/docs/apis/graphql/errors).

<h3 id="api-calls-per-request">
  Appels API par requête
</h3>

La plus importante. Une seule requête peut déclencher au maximum **5** appels API ; l'exemple ci-dessus à quatre champs racine est donc acceptable, mais pas un exemple à vingt champs racine. Une fois cinq dispatchs démarrés, les champs racine supplémentaires renvoient un 429 expliquant la limite ; les champs déjà dispatchés peuvent tout de même renvoyer leurs données.

Si vous avez besoin de plus, répartissez la query sur plusieurs requêtes. Si vous le faites régulièrement pour une charge de travail légitime, [contactez-nous](/docs/help-center/overview) : la limite est volontairement prudente pour le lancement et l'augmenter est simple, alors que la réduire plus tard casserait des intégrations ; c'est pourquoi elle commence bas.

<h3 id="depth-fields-and-aliases">
  Profondeur, champs et alias
</h3>

Ces limites sont vérifiées avant toute exécution ; en dépasser une ne vous coûte donc aucun appel API.

Elles laissent également une marge confortable pour une query d'introspection complète, qui représente environ 180 champs et 12 niveaux de profondeur sans alias ; un client qui récupère l'intégralité du schéma au démarrage fonctionne donc normalement.

<h3 id="request-body-size">
  Taille du corps de la requête
</h3>

64 Ko, ce qui est généreux pour une query et bien trop petit pour un fichier. C'est pourquoi les médias ne peuvent pas être téléversés via GraphQL : consultez [Téléverser des médias](/docs/apis/graphql/using-the-api#uploading-media) pour la méthode prise en charge.

<h2 id="timeouts">
  Délais d'expiration
</h2>

Une requête dispose de 120 secondes au total. Les champs racine d'une **query peuvent s'exécuter en parallèle** ; sa durée dépend donc généralement de sa dépendance la plus lente. Les champs racine d'une **mutation s'exécutent en série** ; plusieurs mutations lentes peuvent donc s'additionner jusqu'au délai d'expiration. Dans les deux cas, une requête peut tout de même imposer au backend la charge de cinq dispatchs simultanés ou séquentiels ; répartissez les traitements connus pour être lents lorsque c'est approprié.

<h2 id="what-is-not-limited">
  Ce qui n'est pas limité
</h2>

<ul class="custom-bullets">
  <li><strong>La lecture du schéma.</strong> L'introspection ne nécessite pas d'authentification et n'est pas décomptée. Parcourir ce qui existe est gratuit ; exécuter une opération ne l'est pas.</li>
  <li><strong>Les queries mal formées.</strong> Une query rejetée par GraphQL (champ inconnu, mauvais type, valeur d'enum invalide) n'atteint jamais notre API et n'est jamais facturée.</li>
</ul>

Ces limites sont réévaluées au regard de l'usage réel. Si l'une d'elles est inadaptée à une intégration légitime, dites-le-nous : ce retour est plus utile qu'un contournement.
