Your AI Connector Docs

Erreurs et pagination

Cette page couvre deux aspects que toute intégration doit gérer : à quoi ressemble une requête ayant échoué et comment paginer les points de terminaison qui renvoient des listes.


L’enveloppe d’erreur

Lorsqu’une requête échoue, la réponse est toujours au format JSON avec la même structure : un indicateur success défini sur false, un message error lisible par l’homme et un error_code numérique qui correspond au code d’état HTTP :

{
  "success": false,
  "error": "Invalid cursor",
  "error_code": 400
}

Comme success et error_code sont toujours présents, vous pouvez baser votre logique dessus sans avoir à inspecter les codes d’état HTTP bruts si vous préférez. Une réponse réussie contient toujours success: true.


Codes d’état

Statut error_code Signification Que faire
200 — Succès Lire les données de réponse.
201 — Ressource créée Enregistrer l’ID renvoyé (par ex. campaign_id, contactId).
400 400 Requête incorrecte Un paramètre est manquant ou invalide. Lire le message error et corriger la requête.
401 401 Non autorisé Votre clé API est manquante ou invalide. Vérifiez la clé et la manière dont vous l’envoyez — voir Authentification.
403 403 Interdit Votre forfait n’inclut pas l’accès à l’API. Voir Accès API ou contactez hi@youraiconnector.com.
404 404 Non trouvé La ressource (par ex. un ID de contact, de campagne ou de tâche) n’existe pas sur votre compte.
409 409 Conflit La ressource existe déjà — par exemple, la création d’un contact dont le numéro de téléphone est déjà présent sur votre compte.
429 429 Limite de débit atteinte Vous avez dépassé 300 requêtes par minute (ou le plafond plus large de 1 200/minute par compte). Attendez un peu et réessayez.
500 500 Erreur serveur Quelque chose a mal tourné de notre côté. Réessayez après une courte attente ; envoyez un e-mail à hi@youraiconnector.com si le problème persiste.

Quelques exemples de ce à quoi cela ressemble en pratique :

{
  "success": false,
  "error_code": 401,
  "error": "Invalid API key"
}
{
  "success": false,
  "error": "A contact with this phone number already exists",
  "error_code": 409
}
{
  "success": false,
  "error_code": 429,
  "error": "Rate limit exceeded. Please try again later."
}

Bien gérer les erreurs

  • Vérifiez success (ou le code d’état) avant de lire les données. Ne supposez pas qu’un corps de réponse contient le champ que vous attendez.
  • Réessayez 429 et 500 avec un court délai d’attente — attendez, puis réessayez. Ne réessayez pas 400, 401, 403, 404 ou 409 ; ces requêtes continueront d’échouer tant que vous ne modifierez pas la requête.
  • Lisez le message error. Il vous indique généralement exactement quel champ est incorrect.

Pagination

Les points de terminaison de liste (tels que GET /contacts, GET /campaigns et GET /tasks) renvoient les résultats par pages afin qu’un seul appel n’ait jamais à charger l’intégralité de votre compte. La pagination utilise un curseur opaque.

Deux paramètres de requête la contrôlent :

Paramètre Description
limit Nombre d’éléments à renvoyer par page. Les valeurs par défaut varient selon le point de terminaison (souvent 50) ; le maximum est 100.
cursor Un pointeur opaque vers la page suivante. Laissez-le vide pour la première page.

Chaque page inclut un champ next_cursor dans la réponse :

  • Si next_cursor est une chaîne de caractères, il y a d’autres résultats — transmettez-la en tant que cursor lors de votre prochaine requête.
  • Si next_cursor est null, vous avez atteint la dernière page. Arrêtez.

Une page unique de contacts ressemble à ceci :

{
  "success": true,
  "contacts": [
    { "id": "abc123", "first_name": "Jane", "phone_number": "+15551234567" },
    { "id": "def456", "first_name": "John", "phone_number": "+15557654321" }
  ],
  "next_cursor": "eyJsYXN0IjoiZGVmNDU2In0"
}

Remarque : Un curseur est opaque — n’essayez pas de l’analyser, de le construire ou de le modifier. Ne renvoyez que la valeur next_cursor que vous avez reçue d’une réponse précédente.


Pagination de tous les contacts

Pour récupérer une liste complète, commencez sans curseur et continuez à effectuer des appels jusqu’à ce que next_cursor soit null.

cURL

Cet exemple parcourt manuellement les deux premières pages. Exécutez le premier appel, copiez le next_cursor de sa réponse dans CURSOR, puis exécutez le second appel. Répétez l’opération jusqu’à ce que next_cursor soit null.

# First page
curl "https://api.youraiconnector.com/v1/contacts?apiKey=YOUR_API_KEY&limit=100"

# Next page — paste the next_cursor from the previous response
CURSOR="eyJsYXN0IjoiZGVmNDU2In0"
curl "https://api.youraiconnector.com/v1/contacts?apiKey=YOUR_API_KEY&limit=100&cursor=$CURSOR"

JavaScript

async function getAllContacts() {
  const all = [];
  let cursor = null;

  do {
    const url = new URL("https://api.youraiconnector.com/v1/contacts");
    url.searchParams.set("limit", "100");
    if (cursor) url.searchParams.set("cursor", cursor);

    const res = await fetch(url, {
      headers: { "X-API-Key": "YOUR_API_KEY" },
    });
    const data = await res.json();

    if (!data.success) throw new Error(data.error);

    all.push(...data.contacts);
    cursor = data.next_cursor;
  } while (cursor);

  return all;
}

Python

import requests

def get_all_contacts():
    all_contacts = []
    cursor = None

    while True:
        params = {"limit": 100}
        if cursor:
            params["cursor"] = cursor

        res = requests.get(
            "https://api.youraiconnector.com/v1/contacts",
            params=params,
            headers={"X-API-Key": "YOUR_API_KEY"},
        )
        data = res.json()

        if not data["success"]:
            raise Exception(data["error"])

        all_contacts.extend(data["contacts"])
        cursor = data["next_cursor"]

        if not cursor:
            break

    return all_contacts

La même boucle fonctionne pour n’importe quel point de terminaison paginé — changez simplement le chemin et le champ que vous lisez dans la réponse (campaigns, tasks, etc.).


Étapes suivantes

  • Authentification — les quatre méthodes pour envoyer votre clé.
  • Contacts — les points de terminaison complets des contacts utilisés dans les exemples ci-dessus.
  • Clés API — vérifiez votre utilisation actuelle de la limite de débit pour éviter les 429.