List Conversations

Returns the host's conversations, most recently active first.

GET /v2/messaging/conversations

Request


Filters

ParameterValuesDescription
readStateAll, Unread, ReadUnread returns only conversations holding messages that hosts have not read. Read returns only conversations holding messages that host have read. All returns conversations holding messages that host have read and not read.
dateTypeMessageSent, MessageViewed, CheckIn, CheckOutWhich date dateFrom and dateTo apply to
dateFrom (optional)dateEarliest date to include. Needs dateType. Inclusive.
dateTo (optional)dateLatest date to include. Needs dateType. Inclusive.
listingIdintegerOnly conversations about this listing, which must be the owned by the host
bookingCodestringThe single conversation belonging to this booking
limitintegerHow many conversations to return
offsetintegerWhere in the match set to start

dateFrom and dateTo are only used when dateType is supplied, and without it no date filtering happens at all. Either bound can be left out on its own, and what it falls back to depends on the dateType:

DateTypedateFrom defaults todateTo defaults to
MessageSent30 days agonow
MessageViewed30 days agonow
CheckInnow12 months from now
CheckOutnow12 months from now

So the message dates look back, over the last 30 days of activity, while the stay dates look forward, over the next 12 months of arrivals or departures.

Both bounds are inclusive, but they are compared as moments rather than whole days. A bare date such as 2026-08-31 means midnight, so dateTo=2026-08-31 leaves out everything that happened during the 31st. Pass 2026-08-31T23:59:59 to take the whole day in.

MessageViewed leaves out conversations the host has never opened, because they have no viewed date to compare.


📘

🚧 Note: listingId and bookingCode cannot be combined with readState, dateType, dateFrom or dateTo. Sending them together returns 400. Filter by listing or booking, or filter by read state and date — not both in one request.


Response

On a success response, it's returned either a list of conversations or an empty list.


Conversation

FieldTypeDescription
converssationIdintegerUnique identifier for the conversation, and the id every other route uses
listingIdintegerThe listing the conversation is about
isEnquirybooleantrue when the guest has not booked yet
checkIndateTime (YYYY-MM-DDTHH:mm:ssZ)Check in date of the stay
checkOutdateTime (YYYY-MM-DDTHH:mm:ssZ)Check out date of the stay
guestsintegerNumber of guests the conversation is about
dateCreateddateTime (YYYY-MM-DDTHH:mm:ssZ)When the conversation was started
unreadMessagesintegerMessages addressed to the host that they have not read
lastMessageAtdateTime (YYYY-MM-DDTHH:mm:ssZ)When the most recent message was sent, whoever sent it

total is how many conversations matched, not how many this page returned. Page through the match set with limit and offSet.


Errors

StatusMeaning
200The request was valid. Nothing matching the filters is an empty data array with a total of 0, not an error
400A filter combination that is not allowed, a missing dateType, an empty message body, or a file that is too large or the wrong type. The body is a ValidationProblemDetails naming each field
401Missing or invalid token
403The listingId filter names a listing this host does not own
404No such conversation for this host, or no conversation for that bookingCode
5xxA transient failure reaching the messaging back end. Safe to retry, because this endpoint only reads

A 400 returns a problem details body whose errors object is keyed by the query parameter at fault, with a sentence explaining the conflict. 401, 403 and 404 have empty bodies, so branch on the status code rather than on anything in the response.

404 is specific to bookingCode. Every other way of matching nothing, such as a listing of your own that has no conversations or a date range that catches none, is a 200 with an empty data array.