Messages
/v1/conversationsYour conversations about members' listings — items you asked about, and your own items people asked you about — newest first.
curl -X GET https://api.tbbnetwork.com/v1/conversations \
-H "Authorization: Bearer <session access token>" \Response (200)
[
{
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"role": "BUYER",
"listing": {
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"title": "title",
"image": null,
"status": "status"
},
"counterpart": {
"name": null
},
"lastMessageAt": "2026-07-01T12:00:00Z",
"lastMessagePreview": "lastMessagePreview",
"unread": false
}
]Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/inboxEvery conversation you're in — about items, on your trades, and with Spaces, as a guest or a host — newest first, with what's unread in each.
curl -X GET https://api.tbbnetwork.com/v1/inbox \
-H "Authorization: Bearer <session access token>" \Response (200)
[
{
"kind": "ITEM",
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"title": "title",
"withName": null,
"preview": "preview",
"lastMessageAt": "2026-07-01T12:00:00Z",
"unread": 1,
"href": "href"
}
]Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/inbox/summaryHow many messages you haven't read, in total and by kind
curl -X GET https://api.tbbnetwork.com/v1/inbox/summary \
-H "Authorization: Bearer <session access token>" \Response (200)
| Field | Type | Required |
|---|---|---|
| unread | integer | — |
| unreadThreads | integer | — |
| items | integer | — |
| trades | integer | — |
| spaces | integer | — |
{
"unread": 1,
"unreadThreads": 1,
"items": 1,
"trades": 1,
"spaces": 1
}Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/conversations/unread-countHow many of your conversations have messages you haven't read
curl -X GET https://api.tbbnetwork.com/v1/conversations/unread-count \
-H "Authorization: Bearer <session access token>" \Response (200)
| Field | Type | Required |
|---|---|---|
| total | integer | — |
{
"total": 1
}Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/conversations/listings/{listingId}Your conversation about a listing, if you've started one
curl -X GET https://api.tbbnetwork.com/v1/conversations/listings/{listingId} \
-H "Authorization: Bearer <session access token>" \Parameters
| listingId | path | required |
Response (200)
| Field | Type | Required |
|---|---|---|
| conversationId | string,null (uuid) | — |
{
"conversationId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
}Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/conversations/listings/{listingId}Ask the person who listed an item about it. Carries on your conversation about it if you have one. A member's own listing only — not a store's.
curl -X POST https://api.tbbnetwork.com/v1/conversations/listings/{listingId} \
-H "Authorization: Bearer <session access token>" \
-H "Idempotency-Key: 5f2f...b91" \
-H "Content-Type: application/json" \
-d '{
"body": "body"
}'Parameters
| listingId | path | required |
Request body
| Field | Type | Required |
|---|---|---|
| body | string | yes |
Response (201)
| Field | Type | Required |
|---|---|---|
| conversationId | string (uuid) | — |
| message | ListingConversationMessage | — |
{
"conversationId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"message": {
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"mine": false,
"body": null,
"hidden": false,
"createdAt": "2026-07-01T12:00:00Z"
}
}Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/conversations/{id}A conversation and its messages, oldest first. Reading it marks it read for you.
curl -X GET https://api.tbbnetwork.com/v1/conversations/{id} \
-H "Authorization: Bearer <session access token>" \Parameters
| id | path | required |
Response (200)
| Field | Type | Required |
|---|---|---|
| id | string (uuid) | — |
| role | BUYER | SELLER | — |
| listing | object | — |
| counterpart | object | — |
| messages | object[] | — |
{
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"role": "BUYER",
"listing": {
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"title": "title",
"image": null,
"status": "status",
"listingType": "listingType",
"currency": "USD",
"originalPrice": 1,
"sellerId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"country": null
},
"counterpart": {
"name": null
},
"messages": [
{
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"mine": false,
"body": null,
"hidden": false,
"createdAt": "2026-07-01T12:00:00Z"
}
]
}Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/conversations/{id}/messagesReply in a conversation about a listing
curl -X POST https://api.tbbnetwork.com/v1/conversations/{id}/messages \
-H "Authorization: Bearer <session access token>" \
-H "Idempotency-Key: 5f2f...b91" \
-H "Content-Type: application/json" \
-d '{
"body": "body"
}'Parameters
| id | path | required |
Request body
| Field | Type | Required |
|---|---|---|
| body | string | yes |
Response (201)
| Field | Type | Required |
|---|---|---|
| id | string (uuid) | — |
| mine | boolean | — |
| body | stringnull | — |
| hidden | boolean | — |
| createdAt | string (date-time) | — |
{
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"mine": false,
"body": null,
"hidden": false,
"createdAt": "2026-07-01T12:00:00Z"
}Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/messagesSend a message on a trade — the sender is derived from the caller's own session
curl -X POST https://api.tbbnetwork.com/v1/messages \
-H "Authorization: Bearer <session access token>" \
-H "Idempotency-Key: 5f2f...b91" \
-H "Content-Type: application/json" \
-d '{
"tradeSessionId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"body": "body"
}'Parameters
Request body
| Field | Type | Required |
|---|---|---|
| tradeSessionId | string (uuid) | yes |
| body | string | yes |
Response (201)
| Field | Type | Required |
|---|---|---|
| id | string (uuid) | — |
| tradeSessionId | string (uuid) | — |
| senderSellerId | string (uuid) | — |
| body | string | — |
| status | VISIBLE | HIDDEN | REMOVED | — |
| createdAt | string (date-time) | — |
{
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"tradeSessionId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"senderSellerId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"body": "body",
"status": "VISIBLE",
"createdAt": "2026-07-01T12:00:00Z"
}Possible errors
| 422 | Rejected — the message body appears to contain contact/off-platform information |
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/messages/{tradeSessionId}List a trade's visible messages, oldest first — caller must be one of its two sellers
curl -X GET https://api.tbbnetwork.com/v1/messages/{tradeSessionId} \
-H "Authorization: Bearer <session access token>" \Parameters
| tradeSessionId | path | required |
Response (200)
[
{
"id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"tradeSessionId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"senderSellerId": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"body": "body",
"status": "VISIBLE",
"createdAt": "2026-07-01T12:00:00Z"
}
]Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}/v1/messages/{id}/reportReport a message. It is hidden while TBBN reviews it. Caller must be a party to the message's trade.
curl -X POST https://api.tbbnetwork.com/v1/messages/{id}/report \
-H "Authorization: Bearer <session access token>" \
-H "Idempotency-Key: 5f2f...b91" \
-H "Content-Type: application/json" \
-d '{
"reason": "Customer requested cancellation."
}'Parameters
| id | path | required |
Request body
| Field | Type | Required |
|---|---|---|
| reason | string | yes |
Possible errors
Any other failure (validation, auth, rate limiting, a resource that doesn't exist) returns this same envelope with a non-2xx status — error.code is stable and safe to branch on; error.requestId is worth logging and including in a support request.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "A human-readable description of what went wrong.",
"requestId": "req_01hxyz..."
}
}