Send us Concierge entries¶
If you run a chat or text service for a venue, POST /external/v1/concierge-entry-import hands conversations to the venue team to
follow up. It needs the concierge-entries:write permission, and each venue must have Concierge turned on.
Send conversations with a real guest request. Do not send empty chats or automated checks.
curl -X POST "https://production.speakeasygo.com/external/v1/concierge-entry-import" \
-H "token: $SPEAKEASY_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2a54-7b1e-4a53-9f55-1c6a0e8b2d11" \
-d '[
{
"venueId": "11111111-1111-4111-8111-111111111111",
"source": "WEB_CHAT",
"phoneNumber": "+13125551212",
"name": "Sam Sample",
"category": "table",
"conversationSummary": "Birthday table for 6 on Saturday around 10pm. Asked about bottle minimums.",
"conversationStartedAt": "2026-11-05T01:20:00Z",
"chatLog": [
{ "role": "user", "content": "Do you have a table for 6 on Saturday?" },
{ "role": "assistant", "content": "We do. What time would you like to arrive?" }
]
}
]'
The request¶
The body is a list of 1 to 100 entries, and at most 512 KiB. Each entry names its own venue, so one call can cover several venues.
| Field | Required | Rules |
|---|---|---|
venueId |
Yes | A venue your key can reach, with Concierge on |
source |
No | WEB_CHAT or SMS |
phoneNumber |
No | Country code and number with no spaces, such as +13125551212. A wrong format is refused, not fixed. |
name |
No | Up to 200 characters |
category |
No | Your own label, up to 100 characters |
conversationSummary |
No | Up to 4,000 characters |
chatLog |
No | Any JSON, up to 128 KiB |
conversationStartedAt |
No | A time with Z or a UTC offset |
Unknown fields are refused.
Send a phone number
The API takes entries with no phone number, but the venue team's list only shows entries that have one. Send it whenever you have it.
A good summary¶
The team should be able to act without reading the whole chat. Include what you know of the occasion, party size, date and arrival time, what they want, and any budget. Do not make up details you do not have.
The chat log¶
Any JSON works. An array of objects in order, each with role (user or assistant) and content, is easiest to read.
All or nothing. If one entry fails, nothing is saved.
The answer¶
201, with one line per entry. index counts from 0.
{
"operationId": "7a1f3c9e-52b4-4f0a-9c55-0a6d1e7b3f21",
"createdCount": 1,
"entries": [
{
"index": 0,
"venueId": "11111111-1111-4111-8111-111111111111",
"conciergeEntryId": "0b6e7a1c-3c5d-4e2f-8a91-6d2f4b7c9e10"
}
],
"createdAt": "2026-11-05T12:00:00.000Z"
}
Retries¶
Idempotency-Key is required, and it covers the whole batch. We do not look for the same conversation across batches, so the same conversation
sent with a new key becomes a second entry. See Safe retries.
Errors¶
| Status | Code | What it means |
|---|---|---|
400 |
CONCIERGE_ENTRY_IMPORT_VALIDATION_FAILED |
An entry is not valid. See errors. |
403 |
CONCIERGE_ENTRY_IMPORT_NOT_AUTHORIZED |
Your integration does not have this route |
404 |
CONCIERGE_ENTRY_IMPORT_VENUE_NOT_FOUND |
Your key cannot reach a venue in the batch |
409 |
CONCIERGE_NOT_ENABLED |
A venue in the batch does not have Concierge on |
413 |
CONCIERGE_ENTRY_IMPORT_BODY_TOO_LARGE |
The body is over 512 KiB |
Personal data¶
Phone numbers, names, summaries and chat logs can be sensitive. Send them only over HTTPS, and do not write full requests to your logs.