Skip to content

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.