Your AI Connector Docs

Erori și paginare

Această pagină acoperă două aspecte pe care orice integrare trebuie să le gestioneze: cum arată o cerere eșuată și cum se poate naviga prin paginile punctelor terminale (endpoints) care returnează liste.


Anvelopa de eroare

Când o cerere eșuează, răspunsul este întotdeauna un JSON cu aceeași formă — un indicator success setat pe false, un mesaj error lizibil pentru oameni și un error_code numeric care corespunde codului de stare HTTP:

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

Deoarece success și error_code sunt întotdeauna prezente, puteți crea ramificații pe baza lor fără a inspecta codurile de stare HTTP brute, dacă preferați. Un răspuns reușit are întotdeauna success: true.


Coduri de stare

Status error_code Meaning What to do
200 Success Read the response data.
201 Resource created Save the returned ID (e.g. campaign_id, contactId).
400 400 Bad request A parameter is missing or invalid. Read the error message and fix the request.
401 401 Unauthorized Your API key is missing or invalid. Check the key and how you are sending it — see Authentication.
403 403 Forbidden Your plan does not include API access. See API Access or contact hi@youraiconnector.com.
404 404 Not found The resource (e.g. a contact, campaign, or task ID) does not exist on your account.
409 409 Conflict The resource already exists — for example, creating a contact whose phone number is already on your account.
429 429 Rate limited You have exceeded 300 requests per minute (or the wider 1,200/minute account ceiling). Back off and retry shortly.
500 500 Server error Something went wrong on our side. Retry after a short wait; email hi@youraiconnector.com if it persists.

Câteva exemple despre cum arată acestea în practică:

{
  "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."
}

Gestionarea corectă a erorilor

  • Verificați success (sau codul de stare) înainte de a citi datele. Nu presupuneți că un corp de răspuns conține câmpul pe care îl așteptați.
  • Reîncercați 429 și 500 cu o scurtă pauză — așteptați, apoi încercați din nou. Nu reîncercați 400, 401, 403, 404 sau 409; acestea vor continua să eșueze până când modificați cererea.
  • Citiți mesajul error. Acesta vă spune de obicei exact care câmp este greșit.

Paginare

Punctele terminale de listare (cum ar fi GET /contacts, GET /campaigns și GET /tasks) returnează rezultatele în pagini, astfel încât un singur apel să nu fie nevoit să încarce întregul cont. Paginarea utilizează un cursor opac.

Doi parametri de interogare o controlează:

Parametru Descriere
limit Câte elemente să fie returnate pe pagină. Valorile implicite variază în funcție de punctul terminal (adesea 50); maximul este 100.
cursor Un pointer opac către pagina următoare. Lăsați-l necompletat pentru prima pagină.

Fiecare pagină include un câmp next_cursor în răspuns:

  • Dacă next_cursor este un șir de caractere, există mai multe rezultate — transmite-l ca cursor în următoarea ta solicitare.
  • Dacă next_cursor este null, ai ajuns la ultima pagină. Oprește-te.

O singură pagină de contacte arată astfel:

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

Notă: Un cursor este opac — nu încercați să îl analizați, să îl construiți sau să îl modificați. Transmiteți înapoi doar o valoare next_cursor pe care ați primit-o dintr-un răspuns anterior.


Paginarea prin toate contactele

Pentru a colecta o listă întreagă, începe fără cursor și continuă să apelezi până când next_cursor revine ca null.

cURL

Acest exemplu parcurge manual primele două pagini. Rulează primul apel, copiază next_cursor din răspunsul său în CURSOR, apoi rulează al doilea apel. Repetă până când next_cursor este 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

Aceeași buclă funcționează pentru orice endpoint paginat — doar schimbă calea și câmpul pe care îl citești din răspuns (campaigns, tasks și așa mai departe).


Pașii următori

  • Autentificare — cele patru modalități de a trimite cheia ta.
  • Contacte — endpoint-urile complete pentru contacte utilizate în exemplele de mai sus.
  • Chei API — verifică utilizarea curentă a limitei de rată pentru a evita 429.