One conversation and its messages
- Credentials
- OAuth access token
- Scopes
messages:read
Access: OAuth scope messages:read (a grant with messages:send passes too); not write-gated.
merchantOAuth messages:readAuthorizationBearer <token>OAuth 2.1 (authorization code + PKCE S256, public clients, dynamic registration) for connected AI apps. Effective power is scopes granted AND the person's role today AND the plan. orders:refund, billing:write and team:write are opt-in on the consent screen. Write implies read for marketing:read and messages:read, so a grant holding marketing:write passes a marketing:read check, and messages:send passes messages:read.
Scope: messages:read
storeId*stringA store the person can reach. Any other id answers 404, never 403.
threadId*stringThe customer's WhatsApp id (phone digits).
limit?integerDefault 100, max 200.
1 <= value <= 200100OK
application/json- response
data*curl -X GET 'https://api.shopeazy.co/v1/merchant/stores/<storeId>/whatsapp/threads/<threadId>' \ -H 'Authorization: Bearer <access_token>'{ "data": { "thread": { "id": "string", "name": "string", "phone": "string", "preview": "string", "lastMessageAt": 0, "lastDirection": "in", "unread": 0, "needsAttention": true, "canReply": true, "replyWindowEndsAt": 0 }, "messages": [ { "id": "string", "direction": "in", "type": "string", "body": "string", "at": 0, "status": "string", "automated": true, "actorName": "string", "error": "string" } ] }}Recent conversations GET
Needs `messages:read`. Access: OAuth scope `messages:read` (a grant with `messages:send` passes too); not write-gated. Paged: `{ items, nextCursor }`, `limit` (default 50, at most 100) and an opaque `cursor`. It pages through the newest 100.
Reply in a conversation POST
Access: OAuth scope `messages:send`; write-gated by the subscription.