Skip to navigation

Wat zijn veelgemaakte fouten met de API?

Een onbekend id geeft geen 404

Test je of een lijst of relatie bestaat door op een 404 te controleren, dan mis je elk onbekend id. De API geeft in dat geval een 400:

{ "error": { "type": "invalid_input", "message": "Unknown list", "code": 203, "parameter": "list_id" } }

Een 404 krijg je alleen bij een pad dat niet bestaat, bijvoorbeeld een typefout in de URL. Controleer dus op code 203 in plaats van op de statuscode.

Let daarbij op het verschil tussen twee codes: een id of e-mailadres dat niet in de lijst bestaat geeft 203, terwijl 202 (“Invalid member_id”) betekent dat de syntax van de parameter niet klopt.

Een leeg meerkeuzeveld wordt niet leeggemaakt

Stuur je voor een select_multiple-veld een lege lijst mee, dan verdwijnen de keuzes niet. De bestaande waarden blijven staan en je krijgt gewoon een 200 terug zonder foutmelding.

curl
curl https://api.laposta.nl/v2/member/relatie@example.net \
-u JOUW_API_SLEUTEL: \
-d list_id=BaImMu3JZA \
-d "custom_fields[interesses][]="
PHP
$laposta = new Laposta('JOUW_API_SLEUTEL');
$laposta->memberApi()->update('BaImMu3JZA', 'relatie@example.net', [
'custom_fields' => ['interesses' => ['']],
]);

Wil je zeker weten dat een selectie leeg is, controleer dan het antwoord en meld het via helpdesk@laposta.nl als er nog waarden in staan.

Labels meesturen zonder vierkante haken werkt niet

Een relatie kan meerdere labels hebben, dus het veld verwacht een reeks. Stuur je één waarde zonder haken, dan krijg je zonder foutmelding een 200 terug met de relatie erin, en is er niets veranderd.

curl
-d "custom_fields[labels]=Klant" # slaagt, maar doet niets
-d "custom_fields[labels][]=Klant" # zo hoort het
PHP
'custom_fields' => ['labels' => 'Klant'] // slaagt, maar doet niets
'custom_fields' => ['labels' => ['Klant']] // zo hoort het

Het veld labels bestaat pas zodra de lijst minstens één label heeft. Daarvoor zie je het niet terug bij de velden of bij de relatie. Je kunt er ook geen label mee aanmaken: een naam die de lijst niet kent geeft een 400.

{ "error": { "type": "invalid_input", "message": "Field labels: unknown option", "code": 203, "parameter": "labels" } }

Stuur altijd de naam en niet het id uit options_full. Een id geeft dezelfde melding.

Bij bulk stuur je JSON, dus geen haken maar een array. Stuur je daar een losse tekst mee, dan telt de API de relatie als gewijzigd zonder foutmelding, maar zijn de labels van die relatie daarna leeg.

"custom_fields": { "labels": "Klant" } // 200, edited_count 1, labels daarna leeg
"custom_fields": { "labels": ["Klant"] } // zo hoort het

Stuur je in bulk een onbekend label mee, dan komt die relatie in errors te staan met dezelfde code 203, en wordt die niet toegevoegd.

Bulk staat standaard uit

Het endpoint voor bulk-synchronisatie bestaat in elk account, maar geeft zonder toestemming een 401 terug:

{ "error": { "type": "invalid_request", "message": "Not permitted to issue bulk requests (1)" } }

Dat is geen fout in je code. Wie bulk kan gebruiken en hoe je het laat inschakelen, staat bij Relaties synchroniseren via de API.

Een campagne wordt dubbel verzonden bij een tweede aanroep

Roep je Campagne verzenden twee keer aan, dan krijg je beide keren een 200 en wordt de verzending opnieuw in gang gezet. Hoe je dat in je eigen code voorkomt, staat bij Campagne versturen via de API.

Ook het wijzigen van een al verzonden campagne wordt niet geblokkeerd.

Campagne-inhoud opvragen werkt niet bij elke campagne

Vraag je de inhoud op van een campagne die in de drag & drop-editor is gemaakt, dan krijg je:

{ "error": { "type": "invalid_input", "message": "Wrong campaign type", "code": 203, "parameter": "campaign_id" } }

Dat is geen storing. Bij welke campagnes het wel kan, staat bij Campagne versturen via de API.

Het _iso-veld kan ontbreken

Bij een leeg datumveld ontbreekt de _iso-variant soms helemaal in het antwoord, in plaats van dat hij null is. Controleer dus eerst of dit veld in het antwoord zit voordat je het uitleest, anders loopt je code vast op een ontbrekende sleutel. Zie: Datum- en tijdvelden in de API.

Je zit snel aan de limiet voor het aantal aanvragen

Op een gratis account mag je 30 aanvragen per minuut doen, op een betaald account 120. Een synchronisatie die per relatie een aanroep doet, zit daar bij een paar honderd relaties zo doorheen.

HTTP/1.1 429 Too Many Requests
Retry-After: 60

Wacht het aantal seconden uit de Retry-After-header af in plaats van meteen opnieuw te proberen, en gebruik voor grote aantallen de bulk-synchronisatie. Meer hierover lees je bij Limieten en foutmeldingen van de API.

Een onbekende veldnaam in een segment geeft geen foutmelding

Een segment maak je met een definitie in JSON. De API controleert de vorm en de vergelijkingen, maar niet of het veld waarop je selecteert bestaat. Een typefout in een veldnaam levert dus gewoon een 201 op, met een segment dat niemand selecteert.

Controleer de veldnamen in je definitie daarom aan de hand van de velden die je met Alle velden opvragen hebt opgehaald.

Gerelateerde artikelen