HTTP API
Create surveys, publish them, and pull answers from your own apps with a workspace API key.
The public API is for the same work you do in the dashboard: surveys, publishing, and responses. Create a key under Account → API, then send it as a Bearer token.
Authentication
Every request except GET /api/v1 needs an Authorization header. Keys are shown once when you create them. Revoke a key at any time from the dashboard.
Authorization: Bearer nf_live_…
What you can call
/api/v1API catalog (no key required)
/api/v1/meWorkspace and key metadata
/api/v1/surveysList surveys (?status=draft|published|closed)
/api/v1/surveysCreate a survey with title, questions, theme
/api/v1/surveys/:idGet one survey
/api/v1/surveys/:idUpdate survey fields or questions
/api/v1/surveys/:idDelete a survey and its responses
/api/v1/surveys/:id/publishSet status to published
/api/v1/surveys/:id/closeStop accepting responses
/api/v1/surveys/:id/duplicateCopy as a new draft
/api/v1/surveys/:id/responsesList responses (cursor pagination)
/api/v1/surveys/:id/responsesSubmit a response from your app
/api/v1/surveys/:id/responses/:responseIdGet one response
/api/v1/surveys/:id/resultsAggregated counts, views, drop-offs, completions
Quick start
curl https://your-domain/api/v1/surveys \
-H "Authorization: Bearer nf_live_…" \
-H "Content-Type: application/json" \
-d '{
"title": "Launch feedback",
"questions": [
{
"type": "multiple_choice",
"title": "Would you use this again?",
"options": [{ "label": "Yes" }, { "label": "Not yet" }]
}
]
}'Pagination
List responses with ?limit=50 (max 100). If pagination.hasMore is true, pass pagination.nextCursor as ?cursor= on the next request.
Errors
Failed calls return { error, code } with HTTP 400, 401, 403, 404. 401 means the key is missing or invalid.
Limits
API keys are workspace-scoped. Basic workspaces still cap free responses at 50 per survey. Pro question types, custom logos, and hidden branding follow your plan, same as the builder.