Verwerk API-fouten, snelheidslimieten en herhaalpogingen voor Notiondesk.

Notiondesk API-foutcodes en envelop, snelheidslimieten van 120 lees- en 20 schrijfbewerkingen per minuut, Retry-After en veilige herhaalpogingen met Idempotency-Key.

6 min lezen

De Notiondesk API beantwoordt elke fout met dezelfde JSON-envelop en een machineleesbare code, beperkt elke sleutel tot 120 lees- en 20 schrijfbewerkingen per minuut en stelt u in staat elke wijziging veilig opnieuw uit te voeren met een Idempotency-Key header. Dit artikel bevat een lijst van alle Notiondesk API-foutcodes, legt de snelheidslimieten en hun headers uit en laat zien hoe u herhaalpogingen kunt bouwen die nooit iets twee keer wijzigen.

De Notiondesk API-foutomhulsel

Elke foutmelding heeft dezelfde vorm en elk veld is altijd aanwezig:

{
  "object": "error",
  "code": "validation_error",
  "message": "The request parameters are invalid.",
  "request_id": "0f2c1e94-7a1b-4c2d-9e3f-5a6b7c8d9e0f",
  "errors": [
    {"field": "page_size", "message": "This value should be between 1 and 100."}
  ]
}
Veld Betekenis
objectAltijd __GEVOORBEHOUDEN_78__
codeDe machineleesbare fout. Splits je code alleen op dit veld.
messageEen voor mensen leesbare uitleg. Deze kan veranderen, dus probeer hem nooit te ontleden.
request_idGeeft de aanvraag weer wanneer u contact opneemt met de supportafdeling. null wanneer de aanvraag is mislukt voordat een route werd bereikt, bijvoorbeeld op een onbekend pad.
errorsProblemen op veldniveau, elk met een field en een message. Leeg wanneer de fout geen betrekking heeft op een specifieke invoer.

Hoe field een waarde benoemt

  • Een veld op het hoogste niveau is de naam: page_size.
  • Een veld binnen een lijst geeft de naam van de lijst, het item tussen haakjes, en vervolgens het veld: items[fr].page_title.
  • De haakjes bevatten de identificatiecode van de vermelding zoals u die hebt verzonden (de locale in items, de category_id in changelog_categories) wanneer elke vermelding een unieke identificatiecode heeft. Anders bevatten ze de nulgebaseerde positie van de vermelding: items[0].locale.
  • Er is een probleem met het verzoek als geheel, "field": null.

Notiondesk API-foutcodes

codeHTTP-status Betekenis Wat te doen
authentication_error401 De sleutel of het toegangstoken ontbreekt of kan niet worden gebruikt. Controleer de sleutel, de vervaldatum en het abonnement. Zie Authenticeren met de Notiondesk API.
insufficient_scope403 De kwalificatie dekt niet de reikwijdte die de opleiding vereist. Gebruik een sleutel met het bereik dat is benoemd in WWW-Authenticate
permission_denied402, 403 De referenties kunnen deze actie niet uitvoeren op deze bron, bijvoorbeeld omdat het abonnement de betreffende functie niet ondersteunt. Controleer het abonnement en de instellingen van het helpcentrum. Probeer het niet opnieuw zonder wijzigingen aan te brengen.
invalid_version400 De header nd-version verwijst naar een onbekende versie. Stuur 2026-10-16 of laat de header weg.
validation_error400, 422 Een parameter of veld in de body is ongeldig, onbekend of ligt buiten het bereik. Corrigeer de velden die worden vermeld in errors
not_found404, 405 Het pad, de bron of de methode bestaat niet. Controleer de ID's en de methode.
conflict_error409 Het verzoek conflicteert met de huidige status; er is bijvoorbeeld al een synchronisatie actief. Wacht even en probeer het dan opnieuw.
idempotency_key_invalid400 De header Idempotency-Key is leeg of langer dan 255 tekens. Verzend 1 tot 255 tekens
idempotency_key_reused422 De Idempotency-Key is al gebruikt voor een ander verzoek. Gebruik een nieuwe sleutel voor een nieuw verzoek.
request_in_progress409 Een verzoek met dezelfde Idempotency-Key wordt nog steeds verwerkt. Wacht even en probeer het dan opnieuw met dezelfde sleutel.
rate_limited429 Te veel verzoeken Wacht __GEVESTIGD_42__ seconden
internal_error500 en hoger Notiondesk mislukt Probeer het later opnieuw en vermeld request_id als u contact opneemt met de supportafdeling.

Een verzoek om een ​​helpcentrum of bron buiten uw werkruimte resulteert in de foutmelding 404 not_found, waardoor de API nooit onthult of deze bestaat.

Notiondesk API-snelheidslimieten

Elke API-sleutel en elke OAuth-toekenning heeft twee aanvraagbudgetten, geteld over een verschuivend venster van één minuut:

Begroting Routes Verzoeken per minuut
Leest __GERESERVEERD_38__ routes 120
Schrijft routes POST, PATCH en DELETE 20

Analyserapporten tellen ook mee voor een budget van 30 aanvragen per minuut per helpcentrum , dat wordt gedeeld door elke sleutel en OAuth-app in de werkruimte.

De antwoorden bevatten drie kopteksten:

Koptekst Betekenis
X-RateLimit-LimitVerzoeken toegestaan ​​in het huidige venster
X-RateLimit-RemainingVerzoeken die in het huidige venster zijn achtergelaten
Retry-AfterSeconden tot het volgende verzoek wordt geaccepteerd; __GEVESTIGD_31__ zolang er nog verzoeken zijn

Een verzoek over het budget beantwoordt met 429 rate_limited. Wacht het aantal seconden in Retry-After voordat u het volgende verzoek verzendt.

Let op: Snelheidslimieten worden per sleutel of per OAuth-toekenning geteld, niet per werkruimte. Twee integraties met afzonderlijke sleutels vertragen elkaar niet, behalve wat betreft het gedeelde analysebudget.

Probeer het opnieuw met Idempotency-Key

Een netwerktime-out geeft geen zekerheid of een wijziging is doorgevoerd. De header Idempotency-Key zorgt ervoor dat je hetzelfde verzoek opnieuw kunt verzenden zonder dat er twee keer iets wordt gewijzigd.

Elke route die iets wijzigt, accepteert die wijziging: wijzigingen in paginadirecties, updates van instellingen en branding, integratiewijzigingen en synchronisatietriggers. Stuur bij de eerste poging een unieke waarde van 1 tot 255 tekens, zoals een UUID, en dezelfde waarde bij elke nieuwe poging.

Wat gebeurt er bij een nieuwe poging?

curl -X POST "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/page-redirects" \
  -H "Authorization: Bearer $NOTIONDESK_API_KEY" \
  -H "nd-version: 2026-10-16" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f0d6b1e-create-getting-started" \
  -d '{"type": "article", "source_path": "/legacy/getting-started", "target_id": "1761580412", "locale": "en"}'
Opnieuw proberen Resultaat
Dezelfde sleutel, dezelfde body, dezelfde route, nadat het eerste verzoek is voltooid. Het eerste antwoord, inclusief status en inhoud, met X-Idempotent-Replay: true. Niets verandert.
Dezelfde sleutel terwijl het eerste verzoek nog steeds actief is. 409 __GEVOORBEHOUDEN_25__. Wacht en probeer het opnieuw.
Dezelfde sleutel met een andere body-, route- of pad-ID. 422 __GEVESTIGD_24__
Dezelfde sleutel en dezelfde body, maar na het eerste verzoek werd een foutmelding weergegeven. Het verzoek wordt opnieuw uitgevoerd.

Een succesvolle reactie bevat de eerste keer X-Idempotent-Replay: false en bij een herhaling true. Notiondesk bewaart een sleutel minimaal 24 uur. Een sleutel behoort tot de API-sleutel of OAuth-grant die deze heeft verzonden, en een OAuth-grant bewaart zijn sleutels ook na het vernieuwen van tokens.

Zonder de header wordt een verzoek eenmaal uitgevoerd en een nieuwe poging nogmaals.

Een herhaalstrategie die werkt

  1. Genereer één Idempotency-Key per logische wijziging en hergebruik deze voor elke herhaling van die wijziging.
  1. Wacht bij 429 rate_limited Retry-After seconden en probeer het dan opnieuw.
  1. Bij 409 request_in_progress, wacht een paar seconden en probeer het dan opnieuw met dezelfde sleutel. Bij 409 conflict_error is er al een synchronisatie van het helpcentrum bezig: wacht een paar minuten voordat u het opnieuw probeert, of sla deze synchronisatie over.
  1. Bij 500 en hoger, of bij een netwerkfout, probeer het opnieuw met exponentiële backoff, bijvoorbeeld na 1, 2, 4 en 8 seconden.
  1. Probeer 400, 401, 403, 404 of 422 nooit ongewijzigd opnieuw. Corrigeer eerst het verzoek.

In JavaScript geldt dit voor elke route die iets verandert. Het stopt bij conflict_error en laat die beslissing over aan je code:

Veelgestelde vragen

import { randomUUID } from "node:crypto";

const sleep = (seconds) => new Promise((resolve) => setTimeout(resolve, seconds * 1000));

async function notiondeskRequest(method, path, body, attempts = 5) {
  const idempotencyKey = randomUUID();

  for (let attempt = 0; attempt < attempts; attempt++) {
    let response;
    try {
      response = await fetch(`https://api.notiondesk.so${path}`, {
        method,
        headers: {
          Authorization: `Bearer ${process.env.NOTIONDESK_API_KEY}`,
          "nd-version": "2026-10-16",
          "Content-Type": "application/json",
          "Idempotency-Key": idempotencyKey,
        },
        body: body ? JSON.stringify(body) : undefined,
      });
    } catch {
      await sleep(2 ** attempt);
      continue;
    }

    if (response.ok) {
      return response.status === 204 ? null : response.json();
    }

    const error = await response.json().catch(() => ({}));
    const retryable = response.status === 429 || response.status >= 500 || error.code === "request_in_progress";
    if (!retryable) {
      throw new Error(`${response.status} ${error.code}: ${error.message}`);
    }

    const retryAfter = Number(response.headers.get("Retry-After"));
    await sleep(retryAfter > 0 ? retryAfter : 2 ** attempt);
  }

  throw new Error(`Notiondesk request failed after ${attempts} attempts`);
}

Wat zijn de API-snelheidslimieten voor Notiondesk?

120 leesverzoeken en 20 schrijfverzoeken per minuut voor elke API-sleutel of OAuth-grant, plus 30 analyseverzoeken per minuut voor elk helpcentrum. Een verzoek dat het budget overschrijdt, beantwoordt met foutcode 429 met een Retry-After-header.

Welk veld moet mijn code controleren bij een fout?

code. Het is de enige stabiele, machineleesbare classificator. De message is voor mensen en kan veranderen.

Wat moet ik naar de supportafdeling sturen als een verzoek mislukt?

De request_id uit het foutantwoord, de route die u hebt aangeroepen en het tijdstip van het verzoek.

Is het veilig om een ​​synchronisatietrigger opnieuw te proberen?

Ja, met een Idempotency-Key. Een nieuwe poging met dezelfde sleutel geeft opnieuw het eerste resultaat en plaatst niets in de wachtrij. Zonder sleutel geeft een tweede sitesynchronisatietrigger, terwijl de eerste actief is, de foutmelding 409 conflict_error.

Wat volgt?

Gerelateerde artikelen

Was deze pagina nuttig?

Still need help? Ask us