Conversations
5 endpoints in this family.
List conversations
GET/api/v1/conversations
Returns conversations, most recently active first, with a cursor for the next page. Each row carries its last message and the state of the 24-hour service window.
Query parameters
limitintegerHow many to return. Defaults to a sensible page size.
cursorstringOpaque cursor from the previous page. Omit for the first page.
channelIdstringOnly conversations on this channel.
contactIdstringOnly conversations of this contact.
phonestringOnly conversations of the contact who has this phone number, in any writing (
+33 6 12 34 56 78,0033612345678,33612345678). At least 6 digits; the whole number, not a part of it.
Response
A page of conversations and the cursor for the next one.
data.itemsConversation[]The conversations, most recent inbound first.
data.nextCursorstringPass it as
cursorfor the next page;nullat the end.data.hasMorebooleanWhether another page exists.
data.totalintegerHow many match, on the first page only;
nullafter.
Refusals
- 422
invalid_request`phone` has fewer than 6 digits, or `channelId` / `contactId` is not an id.
curl https://nodium.io/api/v1/conversations \ -H "Authorization: Bearer $NODIUM_KEY"{ "data": { "items": [ {} ], "nextCursor": "…", "hasMore": true, "total": 0 }}Get one conversation
GET/api/v1/conversations/{id}
Returns the conversation with its contact, its channel and the state of the 24-hour service window.
Path parameters
idstringThe conversation id.
Response
The conversation.
data.idstringThe conversation id.
data.channelIdstringThe channel it lives on.
data.channelTypestringThe kind of channel.
whatsappdata.channelNamestringThe channel's name in Nodium.
data.contactobjectWho you are talking to.
Show fields
idstringThe contact id.
displayNamestringTheir name, or
null.identitystringTheir phone number, or their WhatsApp user id when the number is hidden.
identityKindstringWhat
identityis.phoneemailexternalblockedbooleanBlocked contacts are kept out of the inbox.
data.windowobjectThe WhatsApp 24-hour customer service window.
Show fields
appliesbooleanfalseoutside WhatsApp.openbooleanWhether free text can be sent now. Always
truewhen the rule does not apply.expiresAtstringWhen it closes, ISO 8601, or
null.minutesLeftintegerMinutes left,
0when closed,nullwhen the rule does not apply.
data.lastInboundAtstringWhen the contact last wrote, ISO 8601. This opens the 24-hour window.
data.createdAtstringISO 8601.
data.lastMessageobjectThe latest message, or
null.Show fields
idstringThe message id.
directionstringFrom the contact, or to them.
inboundoutboundtextContentstringIts text.
statusstringIts delivery status.
createdAtstringISO 8601.
curl https://nodium.io/api/v1/conversations/<id> \ -H "Authorization: Bearer $NODIUM_KEY"{ "data": { "id": "…", "channelId": "…", "channelType": "whatsapp", "channelName": "…", "contact": { "id": "…", "displayName": "…", "identity": "…", "identityKind": "phone", "blocked": true }, "window": { "applies": true, "open": true, "expiresAt": "…", "minutesLeft": 0 }, "lastInboundAt": "…", "createdAt": "…", "lastMessage": { "id": "…", "direction": "inbound", "textContent": "…", "status": "…", "createdAt": "…" } }}List the messages of a conversation
GET/api/v1/conversations/{id}/messages
Returns messages oldest first; paging walks back into the past.
Path parameters
idstringThe conversation id.
Query parameters
limitintegerHow many messages to return.
cursorstringOpaque cursor from the previous page; walks back into the past.
Response
A page of messages.
data.itemsMessage[]The messages, oldest first.
data.nextCursorstringPass it as
cursorto go further back;nullat the start of the thread.data.hasMorebooleanWhether older messages exist.
curl https://nodium.io/api/v1/conversations/<id>/messages \ -H "Authorization: Bearer $NODIUM_KEY"{ "data": { "items": [ {} ], "nextCursor": "…", "hasMore": true }}Send a read receipt
POST/api/v1/conversations/{id}/read
Sends a read receipt to the customer — their two ticks turn blue — for the last message they sent. Nothing changes on the Nodium side.
Path parameters
idstringThe conversation id.
Response
An acknowledgement.
data.okbooleanThe receipt was queued.
curl -X POST https://nodium.io/api/v1/conversations/<id>/read \ -H "Authorization: Bearer $NODIUM_KEY"{ "data": { "ok": true }}Show "typing…" to the customer
POST/api/v1/conversations/{id}/typing
Shows the typing indicator in the customer's WhatsApp while your software prepares the answer. It disappears when your message arrives, or after 25 seconds — call it again for a longer wait.
WhatsApp ties it to the read receipt: the customer's last message also turns blue. Nothing changes in Nodium.
Path parameters
idstringThe conversation id.
Response
Whether the indicator was shown.
data.shownbooleanfalsewhen the customer has not written yet: there is nothing to attach it to.
Refusals
- 422
not_whatsappOnly WhatsApp has a typing indicator. - 502
upstream_errorWhatsApp refused it; `detail` carries its reason.
curl -X POST https://nodium.io/api/v1/conversations/<id>/typing \ -H "Authorization: Bearer $NODIUM_KEY"{ "data": { "shown": true }}