Skip to content
ShopAssist Docs
APIAPI referenceConversations

List Handoffs

Page<HandoffAdmin & { conversation_id }> (newest first).

GET/v1/stores/{store_id}/handoffsScope conversations:read

`Page<HandoffAdmin & { conversation_id }>` (newest first).

Parameters

Parameters of List Handoffs
NameInTypeDescription
store_idrequiredpathstring
limitqueryintegerPage size
cursorquerystring | nullCursor from the previous page

Example request

curl -X GET "https://api.shopassist.coec.dk/v1/stores/sto_01j8000000e008000000000000/handoffs" \
  -H "Authorization: Bearer $SHOPASSIST_API_KEY"

Response 200 (Page_HandoffAdminListItem_)

Response of List Handoffs
FieldTypeDescription
datarequiredHandoffAdminListItem[]
data[].accepted_atrequiredstring | nullformat date-time
data[].agentrequiredAgentRef | null
data[].agent.display_namerequiredstring
data[].conversation_idrequiredstringpattern `^conv_[0-9a-hjkmnp-tv-z]{26}$`
data[].delivered_atrequiredstring | nullformat date-time
data[].expected_wait_secondsrequiredinteger | null
data[].idrequiredstringpattern `^hof_[0-9a-hjkmnp-tv-z]{26}$`
data[].messagerequiredstringLocalized shopper-facing status text
data[].reasonrequiredstring (enum)one of shopper_request, ai_escalation, action_request, policy, repeated_failure, error, outside_hours, quota_block, limit_reached
data[].requested_atrequiredstringformat date-time
data[].requested_byrequired"shopper" | "ai" | "agent" | "system"
data[].shopperrequiredHandoffShopper`HandoffAdmin.shopper` (`platform_customer_id` only for `identity_level = customer`).
data[].shopper.emailrequiredstring | null
data[].shopper.email_verifiedrequiredboolean
data[].shopper.identity_levelrequired"guest" | "order_lookup" | "order_otp" | "customer"
data[].shopper.namerequiredstring | null
data[].shopper.platform_customer_idrequiredstring | null
data[].staterequired"requested" | "waiting_for_agent" | "live" | "delivered_offline" | "failed" | "resolved"
data[].statusrequiredstring (enum)one of requested, waiting_for_agent, live, delivering, delivered, failed, resolved, cancelled
data[].summaryrequiredstring | null
data[].targetrequired"live_chat" | "email" | "helpdesk" | null
data[].targetsrequiredHandoffTargetView[]
data[].targets[].external_urlrequiredstring | nullformat uri · ≤ 2048 characters
data[].targets[].integration_idrequiredstring | nullpattern `^int_[0-9a-hjkmnp-tv-z]{26}$`
data[].targets[].last_errorrequiredstring | null
data[].targets[].statusrequired"pending" | "delivered" | "failed" | "skipped"
data[].targets[].typerequiredstring
has_morerequiredboolean
next_cursorrequiredstring | nullOpaque cursor for the next page; null on the last page
{
  "data": [
    {
      "expected_wait_seconds": 120,
      "id": "hof_01j8000000e008000000000001",
      "message": "We've let the team know. Someone will be with you shortly.",
      "state": "waiting_for_agent",
      "target": "live_chat"
    }
  ],
  "has_more": true,
  "next_cursor": "string"
}

Errors

Every error uses the error envelope; the code field is stable.

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 422 Unprocessable Content
  • 429 Too Many Requests

Last updated on