Direct naar inhoud

Aan de slag

Fouten en statuscodes

Welke HTTP-statuscodes de API gebruikt, hoe een foutantwoord eruitziet en hoe je ermee omgaat.

Statuscodes

CodeBetekenisWat te doen
200Gelukt—
201AangemaaktBewaar het id uit data
401Sleutel ontbreekt, is ongeldig, ingetrokken of verlopenControleer de header; maak zo nodig een nieuwe sleutel
402Organisatie niet geactiveerd of abonnement verlopenDe organisatie moet haar betaling afronden
403Organisatie inactief, functie niet in het pakket of geen rechtLees error.code; niet automatisch herhalen
404Bestaat niet binnen deze organisatieControleer het ID en de organisatie van de sleutel
409De boekhouding is nog niet ingericht (alleen /accounting)Richt de Administratie eerst in de webapp in
422Validatiefout, ongeldige statusovergang of pakketlimiet bereiktToon message en errors; pas het verzoek aan
429Te veel verzoekenWacht Retry-After seconden en probeer opnieuw
500ServerfoutProbeer later opnieuw met oplopende wachttijd
503Tijdelijk niet beschikbaar (onderhoud)Probeer later opnieuw

Validatiefouten

Bij 422 door validatie bevat het antwoord een message en per veld een lijst meldingen in errors. Velden in lijsten krijgen hun positie mee, zoals lines.0.unit_price. Validatiemeldingen zijn Engelstalig; meldingen over bedrijfsregels zijn Nederlands.

{
    "message": "The lines.0.unit_price field must be at least 0. (and 1 more error)",
    "errors": {
        "lines.0.unit_price": [
            "The lines.0.unit_price field must be at least 0."
        ],
        "customer_id": [
            "The selected customer id is invalid."
        ]
    }
}

Bedrijfsregels

Een verzoek dat technisch klopt maar niet mag, geeft 422 met alleen een message. Voorbeelden:

  • Alleen conceptfacturen kunnen bewerkt worden.
  • Alleen verzonden of verlopen offertes kunnen geaccepteerd worden.
  • Deze statusovergang is niet toegestaan. (abonnementen)
  • Een klant verwijderen met open documenten geeft ook blockers, bijvoorbeeld ["2 open facturen", "actieve klantenportaaltoegang"].

Pakket- en limietfouten

Zit een functie niet in het pakket, dan krijg je 403 met package_feature_unavailable. Is een limiet van het pakket bereikt (bijvoorbeeld het maximum aantal klanten), dan krijg je 422 met subscription_limit_reached.

{
    "message": "De limiet van je huidige pakket is bereikt. Upgrade je pakket om meer toe te voegen.",
    "error": {
        "code": "subscription_limit_reached",
        "feature": "customers",
        "resource": "customers",
        "current_usage": 50,
        "limit": 50,
        "upgrade_url": "https://factora.one/subscription"
    }
}

De message is bedoeld voor mensen en kan veranderen. Bouw je logica op error.code en de HTTP-status.

Wanneer opnieuw proberen

  • Wel herhalen: 429, 500, 502, 503, 504 en netwerkfouten, met oplopende wachttijd (bijvoorbeeld 1, 2, 4, 8 seconden).
  • Niet herhalen: 400–422; het verzoek moet eerst anders.
  • Let op bij `POST`: na een time-out weet je niet zeker of het object is aangemaakt. Zoek het eerst op voordat je opnieuw verstuurt. Memoriaalboekingen ondersteunen idempotency_key.