Inbox
Website leads, bookings and hand-offs.
/v1/inbox/items/{id}Get an inbox item
One lead, booking request or hand-off with the visitor's contact details. The visitor's own words (need, budget, timeline, the summary, a hand-off's reason, a lead's answers) come only to a key holding transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation.
Path parameters
idstringrequiredInbox item id (
inb_…); the id without its prefix is accepted too.
Returns
200 The item. data is InboxItem.
Fields of data
idstringrequiredinb_…: the visitor's conversation (webhooks'inboxItemId).pattern `^inb_.*`
sessionIdstringrequiredSession id (
sess_…).pattern `^sess_.*`
portalIdstring | nullrequiredThe portal the visitor came through, when known.
subjectIdstring | nullrequiredsubjectstring | nullrequiredThe subject's name when the request came in.
referencestring | nullrequiredThe reference the visitor was given.
receivedAtstring (date-time)requiredWhen the conversation's first request came in.
kinds("lead" | "booking" | "handoff")[]requiredprimary"lead" | "booking" | "handoff"requiredWhat the item is mainly about: a booking, else a lead, else a hand-off.
status"new" | "contacted" | "confirmed" | "closed"requiredstatusAtstring (date-time) | nullrequiredstatusByobject | nullrequiredWho moved it last: a member, or an API key (yours included, so a sync can ignore its own changes).
type"user" | "api_key"requiredidstringrequiredusr_…orkey_….
notestring | nullrequiredThe team's note with the latest status.
overduebooleanrequireddueAtstring (date-time) | nullrequiredWhen the visitor was promised an answer by.
promisestring | nullrequiredWhat the visitor was told about when they would hear back.
contactobject | nullrequiredThe details the visitor gave, with their consent, for this request; payment and identity numbers are masked. Never an under-18's.
namestring | nullrequiredemailstring | nullrequiredphonestring | nullrequiredcompanystring | nullrequiredrolestring | nullrequiredlocationstring | nullrequiredpreferredTimestring | nullrequiredreferencestring | nullrequired
teamstring | nullrequiredThe team it went to.
leadobject | nullrequiredbandstring | nullrequiredpointsnumber | nullrequired
bookingobject | nullrequiredA booking request: nothing is in a calendar until someone confirms it with the visitor.
servicestring | nullrequiredwhenstring | nullrequired
consentobject | nullrequiredWhat the visitor agreed to: to be contacted about this request, never marketing.
purposestring | nullrequiredmarketingfalserequiredversioninteger | nullrequiredatstring (date-time) | nullrequiredgivenboolean | nullrequired
verifiedboolean | nullrequiredfalse: some of the request was read only from the visitor's page (it could be made up); null: recorded before Zentiq checked.
removedFieldsstring[]requiredDetails the visitor had removed; delete them from your records too.
updatedAtstring (date-time)requiredISO 8601 UTC timestamp.
needstring | nullWhat they need, in their words. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).budgetstring | nullOnly for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).timelinestring | nullOnly for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).summarystring | nullThe conversation's summary. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).reasonstring | nullWhy they asked for a person. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).answersmap of string | nullA lead's answers to the qualification questions. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).
Errors
invalid_requestunauthorizedforbiddenupgrade_requirednot_foundrate_limitedserver_error
Request
curl "https://app.zentiqai.com/v1/inbox/items/inb_123" \
-H "Authorization: Bearer $ZENTIQ_API_KEY"import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const result = await zentiq.getInboxItem("inb_123");import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
result = zentiq.get_inbox_item("inb_123")Example answer
{
"data": {
"id": "inb_cmfq2b7x10000abcd1234",
"sessionId": "sess_cmfq2b7x10000abcd1234",
"portalId": "portal_cmfq2b7x10000abcd1234",
"subjectId": "sub_cmfq2b7x10000abcd1234",
"subject": "…",
"reference": "…"
},
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}/v1/inbox/items/{id}Move an inbox item on
Sets its status (new, contacted, confirmed, closed; any to any) with an optional note. With expectedStatus, nothing changes when someone moved it meanwhile (409). Records lead.updated (or booking.updated for a booking) with by = this key, so your sync can ignore its own changes. The same status again without a note changes nothing. The visitor's contact details, booking and consent come back only to a key that also holds inbox:read (else null).
Path parameters
idstringrequiredInbox item id (
inb_…); the id without its prefix is accepted too.
Body
status"new" | "contacted" | "confirmed" | "closed"requirednotestringThe team's note with the new status (at most 500 characters).
at most 500 characters
expectedStatus"new" | "contacted" | "confirmed" | "closed"The status you last saw: when it has changed since, nothing changes (409 conflict,
details.currentStatus).
Returns
200 The item as it is now. data is InboxItem.
Fields of data
idstringrequiredinb_…: the visitor's conversation (webhooks'inboxItemId).pattern `^inb_.*`
sessionIdstringrequiredSession id (
sess_…).pattern `^sess_.*`
portalIdstring | nullrequiredThe portal the visitor came through, when known.
subjectIdstring | nullrequiredsubjectstring | nullrequiredThe subject's name when the request came in.
referencestring | nullrequiredThe reference the visitor was given.
receivedAtstring (date-time)requiredWhen the conversation's first request came in.
kinds("lead" | "booking" | "handoff")[]requiredprimary"lead" | "booking" | "handoff"requiredWhat the item is mainly about: a booking, else a lead, else a hand-off.
status"new" | "contacted" | "confirmed" | "closed"requiredstatusAtstring (date-time) | nullrequiredstatusByobject | nullrequiredWho moved it last: a member, or an API key (yours included, so a sync can ignore its own changes).
type"user" | "api_key"requiredidstringrequiredusr_…orkey_….
notestring | nullrequiredThe team's note with the latest status.
overduebooleanrequireddueAtstring (date-time) | nullrequiredWhen the visitor was promised an answer by.
promisestring | nullrequiredWhat the visitor was told about when they would hear back.
contactobject | nullrequiredThe details the visitor gave, with their consent, for this request; payment and identity numbers are masked. Never an under-18's.
namestring | nullrequiredemailstring | nullrequiredphonestring | nullrequiredcompanystring | nullrequiredrolestring | nullrequiredlocationstring | nullrequiredpreferredTimestring | nullrequiredreferencestring | nullrequired
teamstring | nullrequiredThe team it went to.
leadobject | nullrequiredbandstring | nullrequiredpointsnumber | nullrequired
bookingobject | nullrequiredA booking request: nothing is in a calendar until someone confirms it with the visitor.
servicestring | nullrequiredwhenstring | nullrequired
consentobject | nullrequiredWhat the visitor agreed to: to be contacted about this request, never marketing.
purposestring | nullrequiredmarketingfalserequiredversioninteger | nullrequiredatstring (date-time) | nullrequiredgivenboolean | nullrequired
verifiedboolean | nullrequiredfalse: some of the request was read only from the visitor's page (it could be made up); null: recorded before Zentiq checked.
removedFieldsstring[]requiredDetails the visitor had removed; delete them from your records too.
updatedAtstring (date-time)requiredISO 8601 UTC timestamp.
needstring | nullWhat they need, in their words. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).budgetstring | nullOnly for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).timelinestring | nullOnly for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).summarystring | nullThe conversation's summary. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).reasonstring | nullWhy they asked for a person. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).answersmap of string | nullA lead's answers to the qualification questions. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).
Errors
invalid_requestunauthorizedforbiddenupgrade_requirednot_foundconflictrate_limitedserver_error
Events
Request
curl -X PATCH "https://app.zentiqai.com/v1/inbox/items/inb_123" \
-H "Authorization: Bearer $ZENTIQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "new"
}'import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const result = await zentiq.updateInboxItem("inb_123", {
status: "new",
});import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
result = zentiq.update_inbox_item("inb_123", {
"status": "new",
})Example answer
{
"data": {
"id": "inb_cmfq2b7x10000abcd1234",
"sessionId": "sess_cmfq2b7x10000abcd1234",
"portalId": "portal_cmfq2b7x10000abcd1234",
"subjectId": "sub_cmfq2b7x10000abcd1234",
"subject": "…",
"reference": "…"
},
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}/v1/inbox/itemsList the inbox
Website visitors' leads, booking requests and hand-offs, one item per conversation, newest first (or order=asc), placed by the conversation's first request. For syncing a CRM: updatedAfter with order=asc, then follow nextCursor. A filtered page may hold fewer than limit items and still have a nextCursor. The visitor's own words (need, budget, timeline, the summary, a hand-off's reason, a lead's answers) come only to a key holding transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation.
Query parameters
limitintegerPage size, 1-200 (default 50).
cursorstringThe
nextCursorof the previous page.portalIdstringOnly the requests behind this portal's subjects.
subjectIdstringSubject id (
sub_…).personaIdstringOnly the requests behind this persona's portals (its website widget's).
statusstringnew, contacted, confirmed or closed (comma-separated).
kindstringlead, booking or handoff (comma-separated): items with any of them.
overdue"true" | "false"true: still new past what the visitor was promised (or 24 hours).
createdAfterstringItems whose first request came in at or after this moment.
createdBeforestringISO 8601 date and time.
updatedAfterstringItems with anything new since (a request, a status change, a detail removed): for syncing, with
order=asc.order"asc" | "desc"desc (newest first, the default) or asc, by when the item's first request came in.
Returns
200 A page of items. A page: data is a list of InboxItem, and nextCursor fetches the next page.
Fields of data
idstringrequiredinb_…: the visitor's conversation (webhooks'inboxItemId).pattern `^inb_.*`
sessionIdstringrequiredSession id (
sess_…).pattern `^sess_.*`
portalIdstring | nullrequiredThe portal the visitor came through, when known.
subjectIdstring | nullrequiredsubjectstring | nullrequiredThe subject's name when the request came in.
referencestring | nullrequiredThe reference the visitor was given.
receivedAtstring (date-time)requiredWhen the conversation's first request came in.
kinds("lead" | "booking" | "handoff")[]requiredprimary"lead" | "booking" | "handoff"requiredWhat the item is mainly about: a booking, else a lead, else a hand-off.
status"new" | "contacted" | "confirmed" | "closed"requiredstatusAtstring (date-time) | nullrequiredstatusByobject | nullrequiredWho moved it last: a member, or an API key (yours included, so a sync can ignore its own changes).
type"user" | "api_key"requiredidstringrequiredusr_…orkey_….
notestring | nullrequiredThe team's note with the latest status.
overduebooleanrequireddueAtstring (date-time) | nullrequiredWhen the visitor was promised an answer by.
promisestring | nullrequiredWhat the visitor was told about when they would hear back.
contactobject | nullrequiredThe details the visitor gave, with their consent, for this request; payment and identity numbers are masked. Never an under-18's.
namestring | nullrequiredemailstring | nullrequiredphonestring | nullrequiredcompanystring | nullrequiredrolestring | nullrequiredlocationstring | nullrequiredpreferredTimestring | nullrequiredreferencestring | nullrequired
teamstring | nullrequiredThe team it went to.
leadobject | nullrequiredbandstring | nullrequiredpointsnumber | nullrequired
bookingobject | nullrequiredA booking request: nothing is in a calendar until someone confirms it with the visitor.
servicestring | nullrequiredwhenstring | nullrequired
consentobject | nullrequiredWhat the visitor agreed to: to be contacted about this request, never marketing.
purposestring | nullrequiredmarketingfalserequiredversioninteger | nullrequiredatstring (date-time) | nullrequiredgivenboolean | nullrequired
verifiedboolean | nullrequiredfalse: some of the request was read only from the visitor's page (it could be made up); null: recorded before Zentiq checked.
removedFieldsstring[]requiredDetails the visitor had removed; delete them from your records too.
updatedAtstring (date-time)requiredISO 8601 UTC timestamp.
needstring | nullWhat they need, in their words. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).budgetstring | nullOnly for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).timelinestring | nullOnly for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).summarystring | nullThe conversation's summary. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).reasonstring | nullWhy they asked for a person. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).answersmap of string | nullA lead's answers to the qualification questions. Only for a key holding
transcripts:read, and never from an under-18's, a candidate's or a safety-flagged conversation (absent otherwise).
Errors
invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error
Request
curl "https://app.zentiqai.com/v1/inbox/items?limit=20" \
-H "Authorization: Bearer $ZENTIQ_API_KEY"import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const page = await zentiq.listInboxItems({
limit: 20,
});import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
page = zentiq.list_inbox_items(limit=20)Example answer
{
"data": [
{
"id": "inb_cmfq2b7x10000abcd1234",
"sessionId": "sess_cmfq2b7x10000abcd1234",
"portalId": "portal_cmfq2b7x10000abcd1234",
"subjectId": "sub_cmfq2b7x10000abcd1234",
"subject": "…",
"reference": "…"
}
],
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d",
"nextCursor": null
}