Fouten & Paginering
Deze pagina behandelt twee zaken die elke integratie moet afhandelen: hoe een mislukt verzoek eruitziet en hoe je door eindpunten bladert die lijsten retourneren.
De fouten-envelop
Wanneer een verzoek mislukt, is het antwoord altijd JSON met dezelfde vorm — een success-vlag ingesteld op false, een leesbaar error-bericht en een numerieke error_code die overeenkomt met de HTTP-status:
{
"success": false,
"error": "Invalid cursor",
"error_code": 400
}
Omdat success en error_code altijd aanwezig zijn, kun je hierop vertakken zonder de ruwe HTTP-statuscodes te hoeven inspecteren als je dat wilt. Een succesvol antwoord heeft altijd success: true.
Statuscodes
| Status | error_code |
Betekenis | Wat te doen |
|---|---|---|---|
200 |
— | Succes | Lees de responsgegevens. |
201 |
— | Resource aangemaakt | Sla het geretourneerde ID op (bijv. campaign_id, contactId). |
400 |
400 |
Ongeldig verzoek | Een parameter ontbreekt of is ongeldig. Lees het error bericht en corrigeer het verzoek. |
401 |
401 |
Niet geautoriseerd | Uw API-sleutel ontbreekt of is ongeldig. Controleer de sleutel en de manier waarop u deze verstuurt — zie Authenticatie. |
403 |
403 |
Verboden | Uw abonnement bevat geen API-toegang. Zie API-toegang of neem contact op met hi@youraiconnector.com. |
404 |
404 |
Niet gevonden | De resource (bijv. een contactpersoon, campagne of taak-ID) bestaat niet in uw account. |
409 |
409 |
Conflict | De resource bestaat al — bijvoorbeeld bij het aanmaken van een contactpersoon wiens telefoonnummer al aan uw account is gekoppeld. |
429 |
429 |
Snelheidslimiet bereikt | U heeft de limiet van 300 verzoeken per minuut (of het bredere accountplafond van 1.200 per minuut) overschreden. Wacht even en probeer het opnieuw. |
500 |
500 |
Serverfout | Er is iets misgegaan aan onze kant. Probeer het na een korte wachttijd opnieuw; stuur een e-mail naar hi@youraiconnector.com als het probleem aanhoudt. |
Een paar voorbeelden van hoe dit er in de praktijk uitziet:
{
"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."
}
Fouten goed afhandelen
- Controleer
success(of de statuscode) voordat je gegevens leest. Ga er niet vanuit dat een antwoordtekst het veld bevat dat je verwacht. - Probeer
429en500opnieuw met een korte wachttijd — wacht even en probeer het dan opnieuw. Probeer400,401,403,404of409niet opnieuw; deze zullen blijven mislukken totdat je het verzoek wijzigt. - Lees het
error-bericht. Dit vertelt je meestal precies welk veld onjuist is.
Paginering
Lijst-eindpunten (zoals GET /contacts, GET /campaigns en GET /tasks) retourneren resultaten in pagina’s, zodat een enkele aanroep nooit je hele account hoeft te laden. Paginering maakt gebruik van een ondoorzichtige cursor.
Twee queryparameters bepalen dit:
| Parameter | Beschrijving |
|---|---|
limit |
Hoeveel items per pagina moeten worden geretourneerd. Standaarden variëren per eindpunt (vaak 50); het maximum is 100. |
cursor |
Een ondoorzichtige aanwijzer naar de volgende pagina. Laat deze weg voor de eerste pagina. |
Elke pagina bevat een next_cursor-veld in het antwoord:
- Als
next_cursoreen string is, zijn er meer resultaten — geef deze door als decursorbij je volgende aanvraag. - Als
next_cursornullis, heb je de laatste pagina bereikt. Stop.
Een enkele pagina met contactpersonen ziet er als volgt uit:
{
"success": true,
"contacts": [
{ "id": "abc123", "first_name": "Jane", "phone_number": "+15551234567" },
{ "id": "def456", "first_name": "John", "phone_number": "+15557654321" }
],
"next_cursor": "eyJsYXN0IjoiZGVmNDU2In0"
}
Let op: Een cursor is ondoorzichtig — probeer deze niet te ontleden, op te bouwen of aan te passen. Geef alleen een next_cursor waarde terug die u heeft ontvangen van een vorig antwoord.
Door alle contactpersonen bladeren
Om een volledige lijst te verzamelen, begin je zonder cursor en blijf je aanroepen totdat next_cursor terugkomt als null.
cURL
Dit voorbeeld doorloopt handmatig de eerste twee pagina’s. Voer de eerste aanroep uit, kopieer de next_cursor uit de reactie naar CURSOR en voer vervolgens de tweede aanroep uit. Herhaal dit totdat next_cursor gelijk is aan 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
Dezelfde lus werkt voor elk gepagineerd eindpunt — verander simpelweg het pad en het veld dat je uit de reactie leest (campaigns, tasks, enzovoort).
Volgende stappen
- Authenticatie — de vier manieren om je sleutel te verzenden.
- Contactpersonen — de volledige contactpersoon-eindpunten die in de bovenstaande voorbeelden worden gebruikt.
- API-sleutels — controleer je actuele gebruik van de snelheidslimiet om
429s te voorkomen.