sk_live_…). Every request carries the key as a Bearer token:
OAuth 2.0 access tokens are not accepted on
/v2. OAuth is a v1 surface and stays on /v1. If you’re building a partner app that acts on behalf of individual PickFu users interactively, use v1 with OAuth.Minting a key
Create a v2 API key in Settings → API keys. A key belongs to exactly one team and is the unit of authorization — every resource the key can see or change belongs to that team. The create form has a scopes picker with all three scopes checked by default. Uncheck any scope the key doesn’t need; leave them all checked to mint an all-scopes key. Each existing key’s scopes are shown on the list; keys with no scopes are flagged as not working with v2 and need to be re-issued.Scopes
Every v2 key carries an explicit subset of three scopes.
A key with no scopes is rejected on every v2 route with
403 api_key_unscoped. Re-issue the key in Settings to fix it — pick the scopes you want, or leave all three checked.
Publishing a survey needs spend; a write-only key can draft and edit surveys but cannot spend money on them. A read-only key can watch progress and download results.
Older unscoped keys
Keys minted before the scope picker landed had no scopes attached, so they now fail every v2 call with403 api_key_unscoped. Those keys keep working on v1. To use v2, mint a new key with the scopes you need — the create form now defaults to all three scopes, so a key minted without touching the picker will accept every v2 call the caller is otherwise entitled to.
Identifying the team (optional)
The team is the key. You can optionally assert which team you think you’re calling by sending:403 team_mismatch. Use this as a defensive check in multi-tenant integrations where a key is loaded by ID and you want to guarantee the caller and the key agree on the team.
Who’s calling? GET /v2/me
GET /v2/me returns the calling key, the team it acts for, and (when known) the user who minted it.
livemode is true for sk_live_… keys.