Authorization header on every request:
401 Unauthorized.
Who pays: OAuth connections are account-bound: by default they act in and bill your personal account wallet, and can act in any workspace you can manage by passing workspace_id (see List workspaces). Dashboard API keys belong to the workspace they were created in and bill that workspace by default.
Secret vs publishable keys
Publishable keys are coming soon. Today every key you create is a secret key: the publishable column below previews what’s next.
Create a key
1
Open API keys settings
In the app, go to Settings → API keys. You’ll need to be a workspace owner or editor.
2
Choose the key's shape
Pick an owner (You or Machine) and a permission level (All, Read-only, or Restricted). Optionally set a daily spend cap and rate limit under advanced options.
3
Copy it now
Your key (
flowy_…) is shown once. Copy it and store it in a secrets manager or server environment variable. You won’t be able to see it again.Key owner: You vs Machine
When you create a key you choose who owns it:- You: the key is tied to your user account.
- Machine: the key is owned by a workspace service account. It keeps working even if you later leave the workspace, and runs are attributed to the service account rather than to you. The service account takes no seat and never appears in your members list.
Authenticate a request
Using a publishable key in the browser
Publishable keys aren’t available to create yet. This section previews how they’ll work.
Authorization: Bearer flowy_pk_…, but the request must come from one of the key’s allowed domains (matched on the Origin, falling back to the Referer). Add example.com for an exact host, or *.example.com to allow any subdomain. A request from a domain that isn’t allowlisted returns 403 Forbidden.
Browser
Protecting your keys
Because a leaked key spends your workspace credits, every key has several safeguards. Set them when you create or edit a key:Your workspace’s available credit balance is always the final backstop: when it reaches zero, runs stop regardless of any cap.