{"openapi":"3.1.0","info":{"title":"Crisp (BYOK) API","version":"0.1.0","description":"Crisp (BYOK) lets an AI assistant read your own Crisp data through the Crisp API with a key you supply (Crisp token identifier). Read-only: 9 tools (get_website, get_availability, list_operators, list_operator_availabilities, list_conversations, get_conversation, list_messages, list_people_profiles, get_people_profile). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-crisp.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-crisp/docs"},"termsOfService":"https://connectorbay.com/byok-crisp/terms"},"servers":[{"url":"https://byok-crisp.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-crisp/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_website":{"post":{"operationId":"get_website","summary":"Get a Crisp website (workspace): name, domain, logo and verification status. Use for \"What is the name and domain of my ","description":"Get a Crisp website (workspace): name, domain, logo and verification status. Use for \"What is the name and domain of my Crisp website\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"}},"required":["website_id"],"title":"get_websiteArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_availability":{"post":{"operationId":"get_availability","summary":"Show whether the Crisp chatbox currently appears online, away or offline to visitors. Use for \"Is my Crisp chat online r","description":"Show whether the Crisp chatbox currently appears online, away or offline to visitors. Use for \"Is my Crisp chat online right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"}},"required":["website_id"],"title":"get_availabilityArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_operators":{"post":{"operationId":"list_operators","summary":"List the operator members of a Crisp website with name, email, role and availability. Invite keys are never returned. Us","description":"List the operator members of a Crisp website with name, email, role and availability. Invite keys are never returned. Use for \"Who are the operators on my Crisp website\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"}},"required":["website_id"],"title":"list_operatorsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_operator_availabilities":{"post":{"operationId":"list_operator_availabilities","summary":"List each Crisp operator's current availability (online, away or offline). Use for \"Which Crisp operators are online\".","description":"List each Crisp operator's current availability (online, away or offline). Use for \"Which Crisp operators are online\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"}},"required":["website_id"],"title":"list_operator_availabilitiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_conversations":{"post":{"operationId":"list_conversations","summary":"List Crisp conversations, 20 to 50 per page, with state, visitor contact, last message, topic and times. Filter by unrea","description":"List Crisp conversations, 20 to 50 per page, with state, visitor contact, last message, topic and times. Filter by unread, resolved, assignment, inbox or date; or search. Use for \"Show my unresolved Crisp conversations\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"},"page_number":{"description":"Page number, starting at 1.","maximum":100000,"minimum":1,"title":"Page Number","type":"integer"},"per_page":{"anyOf":[{"maximum":50,"minimum":20,"type":"integer"},{"type":"null"}],"default":20,"description":"Page size (20 to 50; the API default is 20).","title":"Per Page"},"search_query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text to search for in all conversations.","title":"Search Query"},"search_type":{"anyOf":[{"enum":["text","segment","filter"],"type":"string"},{"type":"null"}],"default":null,"description":"How to read search_query: text, segment or filter.","title":"Search Type"},"filter_unread":{"anyOf":[{"enum":["0","1"],"type":"string"},{"type":"null"}],"default":null,"description":"1 to return only conversations with unread messages.","title":"Filter Unread"},"filter_resolved":{"anyOf":[{"enum":["0","1"],"type":"string"},{"type":"null"}],"default":null,"description":"1 to return only resolved conversations.","title":"Filter Resolved"},"filter_not_resolved":{"anyOf":[{"enum":["0","1"],"type":"string"},{"type":"null"}],"default":null,"description":"1 to return only conversations that are not resolved.","title":"Filter Not Resolved"},"filter_unassigned":{"anyOf":[{"enum":["0","1"],"type":"string"},{"type":"null"}],"default":null,"description":"1 to return only conversations assigned to nobody.","title":"Filter Unassigned"},"filter_inbox_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations of this inbox id (use 'all' for every inbox).","title":"Filter Inbox Id"},"filter_date_start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations updated after this ISO 8601 time, for example 2026-01-01T00:00:00.000Z.","title":"Filter Date Start"},"filter_date_end":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations updated before this ISO 8601 time.","title":"Filter Date End"},"order_date_updated":{"anyOf":[{"enum":["0","1"],"type":"string"},{"type":"null"}],"default":null,"description":"1 to order by last update.","title":"Order Date Updated"}},"required":["website_id","page_number"],"title":"list_conversationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_conversation":{"post":{"operationId":"get_conversation","summary":"Get one Crisp conversation by session id: state, assignee, unread counters, visitor nickname and email, topic and times.","description":"Get one Crisp conversation by session id: state, assignee, unread counters, visitor nickname and email, topic and times. Use for \"Show Crisp conversation session_8c842203-7ed8-4e24-a2d1-3f52ba9d4b6e\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"},"session_id":{"description":"Conversation session id, for example 'session_...'. List conversations returns it.","maxLength":200,"title":"Session Id","type":"string"}},"required":["website_id","session_id"],"title":"get_conversationArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_messages":{"post":{"operationId":"list_messages","summary":"List the latest messages of a Crisp conversation (the most recent batch), with sender, type, text or file content and ti","description":"List the latest messages of a Crisp conversation (the most recent batch), with sender, type, text or file content and time. Page towards older messages with timestamp_before. Use for \"What was said in Crisp conversation session_8c842203-7ed8-4e24-a2d1-3f52ba9d4b6e\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"},"session_id":{"description":"Conversation session id, for example 'session_...'. List conversations returns it.","maxLength":200,"title":"Session Id","type":"string"},"timestamp_before":{"anyOf":[{"maximum":9999999999999,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only messages before this timestamp (the same number as the timestamp field of a message).","title":"Timestamp Before"},"timestamp_after":{"anyOf":[{"maximum":9999999999999,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only messages after this timestamp (the same number as the timestamp field).","title":"Timestamp After"}},"required":["website_id","session_id"],"title":"list_messagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_people_profiles":{"post":{"operationId":"list_people_profiles","summary":"List Crisp customer (people) profiles, 20 to 50 per page, with email, name, phone, company, segments and activity. Suppo","description":"List Crisp customer (people) profiles, 20 to 50 per page, with email, name, phone, company, segments and activity. Supports a quick text search. Use for \"Find Crisp customers matching 'acme'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"},"page_number":{"description":"Page number, starting at 1.","maximum":100000,"minimum":1,"title":"Page Number","type":"integer"},"per_page":{"anyOf":[{"maximum":50,"minimum":20,"type":"integer"},{"type":"null"}],"default":20,"description":"Page size (20 to 50; the API default is 20).","title":"Per Page"},"search_text":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Quick search text matched against profile fields.","title":"Search Text"},"sort_field":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Field to sort by, for example nickname.","title":"Sort Field"},"sort_order":{"anyOf":[{"enum":["ascending","descending"],"type":"string"},{"type":"null"}],"default":null,"description":"ascending or descending.","title":"Sort Order"},"filter_date_start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only profiles created after this ISO 8601 time.","title":"Filter Date Start"},"filter_date_end":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only profiles created before this ISO 8601 time.","title":"Filter Date End"}},"required":["website_id","page_number"],"title":"list_people_profilesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_people_profile":{"post":{"operationId":"get_people_profile","summary":"Get one Crisp customer profile by people id or email address. Use for \"Show the Crisp profile of jane@example.com\".","description":"Get one Crisp customer profile by people id or email address. Use for \"Show the Crisp profile of jane@example.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"website_id":{"description":"Crisp website (workspace) id, a UUID shown in the Crisp app URL and settings.","maxLength":200,"title":"Website Id","type":"string"},"people_id":{"description":"People id, or the customer's email address.","maxLength":200,"title":"People Id","type":"string"}},"required":["website_id","people_id"],"title":"get_people_profileArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}