Base URL
All API requests should be made to:Authentication
All endpoints require a Bearer token in the Authorization header — either an API key or an OAuth access token:Request Format
- All request bodies must be JSON
- Set the
Content-Type: application/jsonheader for POST/PUT/PATCH requests - All responses are returned as JSON
Response Format
Successful responses include the requested data:Error Handling
Error responses include anerror type and human-readable message:
HTTP Status Codes
Validation Errors
When request validation fails, the response includes details about what went wrong:Rate Limits
API requests are rate-limited to 100 requests per minute per access token. When you exceed the rate limit, you’ll receive a429 Too Many Requests response:
Pagination
Endpoints that return lists support pagination usingpage and limit query parameters:
Available Endpoints
Surveys
Create, retrieve, publish, and manage surveys.
Responses
Read responses, send follow-up questions, and rate or pin responses.
Tags
Organize surveys with tags.
Projects
Group related surveys into projects.
Traits
Audience targeting and reporting demographics.
Media
Generate images from prompts and upload media to the CDN.
Playbooks
Step-by-step research guides.
Building surveys programmatically
Don’t add a separate “explain your reasoning” question. Every PickFu response already includes a required written explanation — respondents have to type why they picked, ranked, or rated something before they can submit. When you
POST /surveys, just write your real question (e.g. “Which product image makes you more likely to click?”) and the qualitative explanation field comes back on the response automatically. Adding a second question to capture reasoning duplicates data and, in multi-question surveys, costs an extra question slot.Screen-recording surveys are the one exception — the recording itself is the answer, and the spoken response is returned as mediaTranscription rather than explanation. For every other question type the explanation field is populated on each response.GET /surveys/{id}/responses as the explanation field. If you need to dig deeper on a specific respondent’s answer after the survey completes, use POST /surveys/{id}/responses/{responseId}/followup to send them a follow-up question through their PickFu inbox.
Correlate surveys with your own system
Pass an optionalexternalId string when creating a survey to tag it with a correlation key from your own system, such as an experiment ID, a ticket number, or a database key. PickFu stores the value as-is, never interprets it, and returns it on GET /surveys/{id} and GET /surveys. The field is omitted when unset.
externalId query parameter on GET /surveys:
externalId behaves:
- Exact match only. The list filter is account-scoped, case-sensitive, and byte-exact. It is not a text search, so send the identical string every time.
- Not unique. Several surveys can share one
externalId, for example every poll in one experiment. The list filter returns all of them. - 1-255 characters after trimming whitespace. Control characters are rejected with
400 Bad Request. - Set-once. You can claim an
externalIdon an existing draft viaPATCH /surveys/{id}, but once set it cannot be changed, and it cannot be added after the survey is published. Either attempt returns409 Conflict. Re-sending the same value succeeds (idempotent). - Not copied on clone. Duplicating a survey leaves
externalIdunset on the new draft. - Not available on mini-polls. Setting
externalIdtogether withisMiniPollreturns400 Bad Request.
