Create an API key pair in the Crisp dashboard under Settings > Website > API Keys or at the account level; authenticate all requests using HTTP Basic auth with the identifier as username and key as password.
Retrieve conversations for a website by GETting https://api.crisp.chat/v1/website/{website_id}/conversations/1 (page-based) with Basic auth; increment the page number to paginate.
Retrieve a specific conversation's messages via GET https://api.crisp.chat/v1/website/{website_id}/conversation/{session_id}/messages.
Send an operator message into a conversation by POSTing to https://api.crisp.chat/v1/website/{website_id}/conversation/{session_id}/message with a JSON body containing type (text, file, etc.), content, and from set to operator.
Subscribe to real-time conversation events using Crisp's RTM (real-time messaging) layer via their Node.js SDK or by connecting to the WebSocket endpoint — webhooks are available as an alternative for server-side integrations.
Known gotchas
Crisp's REST API is rate-limited per API key; sending many messages in rapid succession (e.g., bulk responses) will result in 429 errors, and the rate limit resets on a rolling basis that is not prominently documented.
The website_id and session_id (conversation session identifier) are distinct from each other and from the user ID; confusing these in URL path construction leads to 404 errors that suggest non-existent resources.
File messages require the file to already be hosted at a publicly accessible URL; Crisp does not provide a file upload endpoint for the REST API in the same call — files must be uploaded to external storage first.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp