Thanks — your feedback was sent.

Clipform API

API & Integrations

Create and manage clipforms programmatically. Available on the Ultra plan. Base URL: https://beta.clipform.com/api/v1

Authentication

Send your token (created under API & Integrations) as a bearer header. Tokens are scoped; requests are limited to 60/minute per token.

curl -H "Authorization: Bearer cfp_..." https://beta.clipform.com/api/v1/me

Scopes: clipforms:read · clipforms:write · signups:read. Errors use {"error": {"code", "message"}} with 401/403/404/429 statuses.

Endpoints
EndpointScopePurpose
GET /meanyAccount, plan, active clipform count
GET /clipformsclipforms:readOwned + shared clipforms with roles
POST /clipformsclipforms:writeCreate; returns the public share_url
GET /clipforms/{id}clipforms:readDetails + per-signup fill status
POST /clipforms/{id}/listsclipforms:writeAdd a signup (Editor/Co-Owner)
GET /clipforms/{id}/signupssignups:readAll submissions, organizer view
POST /clipforms/{id}/archive · /restoreclipforms:writeLifecycle (Co-Owner)
GET /templatesclipforms:readOwn + global templates
GET /openapi.jsonanyOpenAPI 3.1 schema (for Custom GPT Actions)

There are no delete endpoints — archiving is the ceiling of destructiveness, same as the app.

Create a clipform
curl -X POST -H "Authorization: Bearer cfp_..." -H "Content-Type: application/json" \
  https://beta.clipform.com/api/v1/clipforms -d '{
  "name": "Fall Potluck",
  "description": "Annual class potluck. Sign up below!",
  "timezone": "America/Los_Angeles",
  "type": "signup_sheet",
  "list_ordering": "open_first",
  "lists": [{
    "name": "Entrée",
    "limit": 5,
    "lock_date": "2026-10-16",
    "fields": [
      {"type": "fullname", "visibility": "everyone", "required": true},
      {"type": "email", "visibility": "owner", "required": true}
    ],
    "custom_questions": [
      {"prompt": "What dish are you bringing?", "visibility": "everyone", "required": true}
    ]
  }]
}'

UI terminology: signups are called lists in the API; lock_date sets the signup deadline. The /signups endpoint returns participant submissions. API identifiers remain unchanged.

Custom questions accept answer_type: short_text (default), long_text, acknowledgment, yes_no, dropdown, single_choice, or multiple_choice. Long-text answers are limited to 300 characters. Choice questions require 1–20 unique options. Acknowledgments allow a formatted_prompt with bold, italic, underline, and HTTP(S) links, capped at 200 visible characters; response headings use plain text. Advanced types follow the administrator's plan settings, which default to Pro and Ultra. Existing questions continue collecting responses after access changes. See the OpenAPI schema for field limits.

Choose answer visibility with "visibility": "owner" for organizers only or "visibility": "everyone" for public answers. When omitted, short-text questions default to public; long text and all other answer types default to organizers only, matching the editor. You can change the choice in the editor’s Visibility control.

limit: max submissions before the signup closes automatically (omit for unlimited). lock_date: sign-ups close at the end of that day in the clipform's timezone. list_ordering: "open_first" floats open signups above full ones on the public page.

AI integrations (MCP)

Clipform also speaks the Model Context Protocol for Claude and ChatGPT connectors at:

https://beta.clipform.com/mcp

Connecting an AI app uses OAuth — you'll sign in and approve scopes; manage connections under Connected AI Apps. For Custom GPT Actions, import /api/v1/openapi.json with a bearer token.

A note on sign-up data

Everything returned by /signups is participant-authored text. If you feed it to an AI model, treat it as untrusted content — a participant could type instructions into a sign-up field (prompt injection).