Sandbox: have a buyer write to you
POST/v1/sandbox/messages
scope messages.writesandbox only — 404 in production
Sandbox only. Buyers are the ones who START conversations and the sandbox has none, so without this your inbox is permanently empty. A synthetic buyer opens (or continues) a conversation about one of your own listings, through the same write path a real buyer uses.
Request body#
| Field | Type | Required | Description |
|---|---|---|---|
product_id | integer | optional | Which of your listings the buyer writes about. Send this or external_id; one that is not yours gives product_not_found (404). Writing about the same listing again CONTINUES the existing conversation rather than opening a second one. |
external_id | string | optional | The same choice by your own product id. |
body | string | optional | What the buyer says. Defaults to "Hello — is this still available?" if omitted or blank. The message goes through the same write path a real buyer uses, so it appears in GET /v1/threads exactly as a real one would. |
Example
{
"product_id": 237233,
"body": "Is this still available?"
}Response#
| Field | Type | Description |
|---|---|---|
data | object | What the synthetic buyer sent. |
data. | integer | The conversation it landed in — a new one, or the existing one for that listing. Use it with GET /v1/threads/{id}/messages. |
data. | integer | The message id. |
data. | integer | Which of your listings it is about. |
data. | string | Always buyer — that is the point of this endpoint. |
data. | string | What was sent, after the same chat-protection scan a real buyer's message gets. |
Example
{
"data": {
"thread_id": 107373,
"message_id": 174420,
"product_id": 237233,
"from": "buyer",
"body": "Is this still available?"
}
}