fluo API.
Set up auth over HTTP.
Everything the dashboard does, as a plain REST API: create an account, spin up apps, fetch API keys, and configure providers. Pair it with the MCP server to drive it from an agent.
https://api.fluo.dev Authorization: Bearer pat_your_token Get a token by calling POST /api/v2/accounts (no auth), or from the dashboard. Every other endpoint expects it as a Bearer token.
Create an account and return its first personal access token. Save the token — it is shown only once.
curl -X POST https://api.fluo.dev/api/v2/accounts \
-H "Content-Type: application/json" \
-d '{ "email": "you@example.com" }' {
"account": {
"id": "rec_3f2a8c1d0e5b4a9",
"email": "you@example.com",
"firstName": "Fluo",
"lastName": "User"
},
"accessToken": "pat_8Kf3mZ9qWx7Lp2Rn..."
} Issue an additional access token for the authenticated account.
curl -X POST https://api.fluo.dev/api/v2/accounts/tokens \
-H "Authorization: Bearer pat_..." \
-H "Content-Type: application/json" \
-d '{ "name": "ci" }' { "accessToken": "pat_Qf1a...Zr9" } Return the authenticated account.
{
"account": {
"id": "rec_3f2a8c1d0e5b4a9",
"email": "you@example.com",
"firstName": "Fluo",
"lastName": "User"
}
} List every app in the account, each including its API key.
{ "apps": [ { "id": "yd0783cvv19mnaa", "name": "Acme Mobile", "apiKey": "Ucem...3W", "backendType": "" } ] } Create an app. The API key and signing secrets are generated automatically.
curl -X POST https://api.fluo.dev/api/v2/apps \
-H "Authorization: Bearer pat_..." \
-H "Content-Type: application/json" \
-d '{ "name": "Acme Mobile" }' {
"app": {
"id": "yd0783cvv19mnaa",
"name": "Acme Mobile",
"apiKey": "UcemRroBiOJKLXvGr1E5N0BSPKOpjU3W...",
"backendType": "",
"authMethods": [ { "id": "email", "selected": true } ],
"registrationSteps": [ { "id": "firstName", "selected": true } ]
}
} Full configuration for a single app, including its API key and JWT secret.
{ "app": { "id": "yd0783cvv19mnaa", "name": "Acme Mobile", "apiKey": "Ucem...3W", "jwtSecret": "...", "authMethods": [ ... ] } } Update name, auth methods, registration steps, backend, terms & privacy URLs, or the Prelude key. Only the fields you send change.
curl -X PATCH https://api.fluo.dev/api/v2/apps/yd0783cvv19mnaa \
-H "Authorization: Bearer pat_..." \
-H "Content-Type: application/json" \
-d '{
"authMethods": [
{ "id": "email", "selected": true },
{ "id": "google", "selected": true,
"googleClientId": { "web": "....apps.googleusercontent.com" } }
]
}' { "app": { "id": "yd0783cvv19mnaa", "authMethods": [ ... ] } } Recent authentication sessions for an app. Verification codes and refresh tokens are never returned.
{
"sessions": [
{
"id": "3fwj5bo8wn0z813",
"method": "email",
"email": "user@example.com",
"userId": "fj9z...zdg",
"verifiedAt": "2026-06-11 17:32:48.012Z",
"created": "2026-06-11 17:32:47.621Z"
}
]
} End users of an app. Custom backend only — Firebase and Supabase manage their own users.
{ "users": [ { "id": "u_1a2b", "email": "user@example.com", "firstName": "Ada", "lastName": "L." } ] }