Create a key under API keys and send it in the Authorization header. Keys can be limited to one form and to these scopes:
forms:read: forms, actions, domains and your plansubmissions:read: submissions (andintake-cli listen)forms:write: create and change forms, actions and domains; send test submissions
BASE=https://intake.starstorm.dev/public/v1 curl -H "Authorization: <key>" "$BASE/form?limit=10" curl -H "Authorization: <key>" \ "$BASE/form/<form id>/submission?getSpam=true"
The full reference is an OpenAPI 3.1 description at /public/v1/openapi.json; import it into Postman, Insomnia or your code generator. Errors use the same {"message", "name"} shape as above.
AI agents (MCP)
Intake is also an MCP server, so an agent such as Claude can set up forms and actions for you:
claude mcp add --transport http intake \ https://intake.starstorm.dev/mcp \ --header "Authorization: Bearer <key>"
Give the agent a key with forms:write. Add submissions:read only if it should read what visitors typed: that text is untrusted and could try to instruct the agent. Encrypted forms cannot be read by agents at all.