QuestionPunk for developers

Work with surveys, questions, responses and webhooks from your own code, or connect an AI assistant to your account over MCP. It is all self-serve: sign up, create a key, and make your first call.

Quickstart

  1. Create a free account. Any signed-up account can create API keys.
  2. In the app, go to Settings > Developer > API Keys and click + Create API Key. Name it, choose its scopes, and copy the key. It is shown only once.
  3. Send the key as a Bearer token. The REST base URL is https://app.questionpunk.com/api/public/v1.
curl -H "Authorization: Bearer $QUESTIONPUNK_API_KEY" \
  https://app.questionpunk.com/api/public/v1/me

REST API

The OpenAPI specification lists every operation, request body and response schema, and the scopes each operation needs. You can generate a client library from it.

It covers surveys (list, create, generate from a brief, create from a template, publish, unpublish), questions, responses and exports, templates, and webhooks.

There is no separate sandbox. A survey stays a private draft until you publish it, so you can test against a draft. More in the API access guide.

Authentication and scopes

Send an API key or an OAuth 2.0 access token as Authorization: Bearer <token>. Keep keys out of URLs and chat messages. You can rotate and revoke keys on the Developer settings page.

OAuth clients registered to your account use the authorization code flow with PKCE and request both read and write. The authorization server metadata lists the endpoints and scopes. The REST API checks these OAuth scopes:

  • read: read surveys, questions and responses.
  • write: create and change surveys, questions, responses and webhooks.
  • panel:respondents:read, panel:respondents:write, panel:recruitment:read, panel:recruitment:write: the panel API, on a Pro or Enterprise plan.

MCP server

QuestionPunk runs a hosted MCP server at https://app.questionpunk.com/api/v1 (Streamable HTTP). Add it as a custom connector in Claude, ChatGPT, Cursor, VS Code or Gemini CLI, then sign in to QuestionPunk and approve the connection. The client discovers OAuth from the endpoint and registers itself.

Reading studies, writing to them, reading responses and using QuestionPunk’s own AI features are separate permissions. You approve the ones your assistant asks for.

In Claude Code:

claude mcp add --transport http questionpunk https://app.questionpunk.com/api/v1
claude mcp login questionpunk

Rate limits

The REST API allows 100 requests per fixed 60-second window per client IP. Keys used from the same IP share the window.

Responses carry RateLimit-Policy and RateLimit (IETF draft format) as well as X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. A request over the limit gets 429 with Retry-After.

Webhooks

Get an event when a response starts or completes, when a survey is published or unpublished, or when a response limit is reached. Create webhooks through the API or under Settings > Developer > Webhooks. See Set up webhooks.

Machine-readable docs