Démarrer
Réponses et erreurs
Toute réponse a l'une de deux formes. Testez `error.code`, jamais le texte.
Succès : data
HTTP/1.1 200 OK{ "data": { "items": [ { "id": "9c1f…", "status": "open", "unreadCount": 2 } ], "nextCursor": "MjAyNi0wOS0xOFQw…", "hasMore": true }}Refus : error
HTTP/1.1 409 Conflict{ "error": { "status": 409, "code": "window_closed", "message": "The 24-hour customer service window is closed: only an approved template can be sent.", "detail": "…", "requestId": "a1b2c3d4" }}codeest stable et documenté plus bas.messageest en anglais.detailporte la raison précise, parfois en français.requestIdidentifie l'appel dans nos journaux et dansGET /api-requests: donnez-le si vous avez besoin d'aide.- Certains refus portent
dataavec plus de faits —template_holes_unfilledliste les trous non remplis dansdata.issues.
Pagination
Les listes se paginent par curseur : passez limit, puis renvoyez nextCursor en cursor jusqu'à ce qu'il vaille null. Un curseur est opaque : ne le fabriquez pas.
let cursordo { const url = new URL('https://nodium.io/api/v1/inbox/conversations') url.searchParams.set('limit', '100') if (cursor) url.searchParams.set('cursor', cursor) const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.NODIUM_KEY}` } }) const body = await res.json() if (body.error) throw new Error(`${body.error.code}: ${body.error.message}`) for (const conversation of body.data.items) handle(conversation) cursor = body.data.nextCursor} while (cursor)