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 |
|---|---|
object | Altijd __GEVOORBEHOUDEN_78__ |
code | De machineleesbare fout. Splits je code alleen op dit veld. |
message | Een voor mensen leesbare uitleg. Deze kan veranderen, dus probeer hem nooit te ontleden. |
request_id | Geeft 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. |
errors | Problemen 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
localeinitems, decategory_idinchangelog_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
code | HTTP-status | Betekenis | Wat te doen |
|---|---|---|---|
authentication_error | 401 | 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_scope | 403 | De kwalificatie dekt niet de reikwijdte die de opleiding vereist. | Gebruik een sleutel met het bereik dat is benoemd in WWW-Authenticate |
permission_denied | 402, 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_version | 400 | De header nd-version verwijst naar een onbekende versie. | Stuur 2026-10-16 of laat de header weg. |
validation_error | 400, 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_found | 404, 405 | Het pad, de bron of de methode bestaat niet. | Controleer de ID's en de methode. |
conflict_error | 409 | Het verzoek conflicteert met de huidige status; er is bijvoorbeeld al een synchronisatie actief. | Wacht even en probeer het dan opnieuw. |
idempotency_key_invalid | 400 | De header Idempotency-Key is leeg of langer dan 255 tekens. | Verzend 1 tot 255 tekens |
idempotency_key_reused | 422 | De Idempotency-Key is al gebruikt voor een ander verzoek. | Gebruik een nieuwe sleutel voor een nieuw verzoek. |
request_in_progress | 409 | Een verzoek met dezelfde Idempotency-Key wordt nog steeds verwerkt. | Wacht even en probeer het dan opnieuw met dezelfde sleutel. |
rate_limited | 429 | Te veel verzoeken | Wacht __GEVESTIGD_42__ seconden |
internal_error | 500 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-Limit | Verzoeken toegestaan in het huidige venster |
X-RateLimit-Remaining | Verzoeken die in het huidige venster zijn achtergelaten |
Retry-After | Seconden 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.
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
- Genereer één
Idempotency-Keyper logische wijziging en hergebruik deze voor elke herhaling van die wijziging.
- Wacht bij
429 rate_limitedRetry-Afterseconden en probeer het dan opnieuw.
- Bij
409 request_in_progress, wacht een paar seconden en probeer het dan opnieuw met dezelfde sleutel. Bij409 conflict_erroris er al een synchronisatie van het helpcentrum bezig: wacht een paar minuten voordat u het opnieuw probeert, of sla deze synchronisatie over.
- Bij
500en hoger, of bij een netwerkfout, probeer het opnieuw met exponentiële backoff, bijvoorbeeld na 1, 2, 4 en 8 seconden.
- Probeer
400,401,403,404of422nooit 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.