API & AI assistants

Run WeSay from Claude, ChatGPT and your own code.

Ask an assistant to draft a presentation, open a survey or summarise what an audience said, and it does it in your WeSay account. WeSay has an MCP server, the standard way AI assistants connect to apps, and a REST API with the same features. Both are part of WeSay Pro.

Get an API key Connect an assistant

MCP server

Address: https://wesay.live/mcp (Streamable HTTP; protocol versions 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26). If that address doesn't work from your network, use https://rynpprarirqbwqrzvvcr.supabase.co/functions/v1/api/mcp.

Authentication: send your key as Authorization: Bearer wsk_…. For assistants that only take an address, add the key to the end: https://wesay.live/mcp/wsk_…. Treat that link like a password.

Claude (claude.ai and the desktop app)

Settings → Connectors → Add custom connector. Name it WeSay and paste your personal connector link from API & AI in WeSay.

ChatGPT

Settings → Apps & Connectors → Advanced → turn on Developer mode (paid plans), then Create a connector with your personal connector link and “No authentication”.

Claude Code

claude mcp add --transport http wesay https://wesay.live/mcp --header "Authorization: Bearer YOUR_API_KEY"

Cursor, VS Code and other clients

{
  "mcpServers": {
    "wesay": {
      "url": "https://wesay.live/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Discovery: /.well-known/ai-catalog.json and the server card at /mcp/server-card.

Tools

get_accountThe connected WeSay account: its plan, limits, how many presentations it has, and links to the dashboard. Call this first if unsure what the account can do.
list_presentationsThe account's presentations, most recently updated first, with their ids, slide counts and editor links. Use the id with the other tools.
get_presentationOne presentation with every slide in order: type, title, options and settings, plus slide ids for update_slide.
create_presentationCreates a new draft presentation in WeSay with up to 50 slides, ready for the presenter to review and present. Good decks mix a content slide to open, then a few questions (word_cloud to warm up, multiple_choice or rating to measure, open_text to reflect), and keep each title short enough to read from the back of a room. Returns the id and an editor link to give the user. Nobody sees it until the presenter starts a session.
add_slidesAdds slides to an existing presentation, at the end or at a position (0 is the start). A presentation holds up to 200 slides.
update_slideChanges the title, options or settings of one slide (its type stays the same). Settings are merged with the slide's current settings.
list_sessionsSessions the account has run (live sessions and surveys), newest first, with how many people joined and answered.
get_session_resultsWhat the audience said in a session: per-slide vote counts and percentages, averages, word-cloud phrases, written answers, rankings, audience Q&A questions with upvotes, and recorded actions. Answers are anonymous. Leave out session_id for the latest session (of presentation_id, if given). Useful for summaries, reports and next steps.
open_surveyOpens a presentation as a survey: people answer from a link at their own pace until it is closed. Returns the link and six-digit code to share. If a survey is already open for it, returns that one.
close_surveyCloses an open survey so no more answers come in. The results stay available.
describe_slide_typesEvery WeSay slide type and the settings each one takes. Read this before create_presentation if unsure.

Things to ask

REST API

Base address: https://wesay.live/api (or https://rynpprarirqbwqrzvvcr.supabase.co/functions/v1/api). Every call takes Authorization: Bearer wsk_… and returns JSON. Up to 120 requests a minute per key. The full description is at https://wesay.live/api/v1/openapi.json.

GET /v1/meWeSay account
GET /v1/presentationsList presentations (?search, ?include_archived, ?limit)
POST /v1/presentationsCreate a presentation
GET /v1/presentations/{presentation_id}Get a presentation
POST /v1/presentations/{presentation_id}/slidesAdd slides
POST /v1/presentations/{presentation_id}/surveyOpen a survey
PATCH /v1/slides/{slide_id}Change a slide
GET /v1/sessionsList sessions (?presentation_id, ?limit)
GET /v1/sessions/latest/resultsSession results (?presentation_id)
GET /v1/sessions/{session_id}/resultsSession results
POST /v1/sessions/{session_id}/closeClose a survey
GET /v1/slide-typesSlide types
curl -X POST https://wesay.live/api/v1/presentations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Team check-in","slides":[
        {"type":"word_cloud","title":"One word for this week?"},
        {"type":"rating","title":"How is your energy?","settings":{"scale":5}}]}'

Errors come back as {"error": "…"} with a status: 400 (fix the request; the message says what), 401 (missing or revoked key), 402 (the account's Pro has ended), 404 (not in this account), 429 (slow down).

Slide types

multiple_choiceA poll with 2–12 options. settings: allow_multiple, quiz_mode + correct_option (an option), ask_confidence, ask_prediction.
word_cloudShort answers shown as a word cloud. settings: moderation_enabled, profanity_filter.
open_textLonger written answers. settings: moderation_enabled, profanity_filter; quiz_mode + accepted_answers (list) for a typed-answer quiz.
ratingA 1–5 or 1–10 rating. settings: scale (5 or 10).
scalesA labelled scale. settings: scale (5 or 10), min_label, max_label.
rankingPeople put 2–12 options in order.
allocationPeople share 100 points across 2–12 options.
image_choicePick one of 2–12 options, each with a picture. settings: option_images ({ option: https image URL }).
pin_imagePeople tap a spot on a picture. settings: image_url (https, required).
guess_numberEveryone guesses a number. settings: number_min, number_max, optional correct_number.
grid_2x2Place each of 2–12 items on two axes. settings: x_label, y_label, scale (5 or 10).
contentAn information slide with no question. settings: body (text), image_url, video_url (YouTube, Vimeo or an https video), embed_url (an https page).

Safe by design

Give your audience a way in.

Free for up to 75 people in every session. No credit card, and nothing for your audience to install.

Start free, upgrade when you need the API →