FLORA · Authentication Profile

Flora Fauna Authentication

Authentication

FLORA runs two independent authentication paths against the same workspace and the same billing. The REST API takes a bearer API key; the MCP server takes OAuth 2.1 with PKCE and will NOT accept the API key. The docs state plainly that they can be used in parallel, and that the audit trail differs — an API key attributes an action to a service account, OAuth attributes it to a named human in a named client.

FLORA secures its APIs with http and oauth2 across 3 declared security schemes, as derived from its OpenAPI definitions.

Creative AIGenerative AIInfinite CanvasNode-Based WorkflowsCreative WorkspaceImage GenerationVideo GenerationText-to-ImageText-to-VideoAI AgentsMultimodal AIDesign ToolsCreative ProfessionalsAdvertisingFilmFashionBrandingVFXPhotographyArchitectureMotion DesignFAUNAMCPAgent ToolsWorkflow Automation
Methods: http, oauth2 Schemes: 3 OAuth flows: API key in:

Security Schemes

bearerAuth http
scheme: bearer
mcp-oauth oauth2
clerk-application-oidc openIdConnect

Source

Authentication Profile

Raw ↑
generated: '2026-08-12'
method: searched
source: >-
  Baseline derived from openapi/flora-fauna-flora-api-openapi.yml
  (components.securitySchemes), then upgraded from FLORA's own documentation:
  https://developer.flora.ai/platform/authentication and
  https://developer.flora.ai/mcp/authentication, plus live probes of the OAuth
  discovery documents in well-known/.
docs:
  - https://developer.flora.ai/platform/authentication
  - https://developer.flora.ai/mcp/authentication
description: >-
  FLORA runs two independent authentication paths against the same workspace and
  the same billing. The REST API takes a bearer API key; the MCP server takes
  OAuth 2.1 with PKCE and will NOT accept the API key. The docs state plainly
  that they can be used in parallel, and that the audit trail differs — an API key
  attributes an action to a service account, OAuth attributes it to a named human
  in a named client.
summary:
  types: [http, oauth2]
  primary: http-bearer
  mfa_or_delegated: oauth2 (MCP only)
schemes:
  - name: bearerAuth
    type: http
    scheme: bearer
    surface: REST API (https://app.flora.ai/api/v1)
    header: 'Authorization: Bearer sk_live_XXXX'
    key_prefixes:
      production: sk_live_
      sandbox: sk_test_
    sandbox_caveat: >-
      The docs qualify sk_test_ as "sandbox, when available" — no separate sandbox
      base URL or test-mode environment is published, so treat test keys as not
      generally available.
    creation: FLORA app > Settings > API Keys (https://app.flora.ai/projects?openSettings=true&initialTab=apiKeys)
    secret_visibility: shown once at creation
    keys_per_workspace: 1
    rotation:
      overlap_window: false
      procedure: create the new key, cut applications over, then revoke the old one
      note: >-
        A hard operational constraint worth flagging: exactly one active key per
        workspace with NO overlap window means every production rotation is a
        cutover, not a drain. The docs offer to enable a hot-swap window per
        workspace on request to support.
    revocation: immediate; subsequent requests return 401 invalid_api_key
    permissions_model: >-
      Inherits the permissions of the workspace the key was created in. Read
      everything, create runs (billed), upload assets, create/modify projects if
      the workspace allows. Never billing or member management.
    scopes: null
    scopes_note: The REST API publishes no scope vocabulary; a key is workspace-wide.
    sources:
      - openapi/flora-fauna-flora-api-openapi.yml
      - https://developer.flora.ai/platform/authentication
  - name: mcp-oauth
    type: oauth2
    surface: MCP server (https://agents.flora.ai/mcp)
    version: OAuth 2.1
    grant_types: [authorization_code, refresh_token]
    pkce: [S256, plain]
    dynamic_client_registration: true
    authorization_server: https://agents.flora.ai
    authorization_endpoint: https://agents.flora.ai/authorize
    token_endpoint: https://agents.flora.ai/token
    registration_endpoint: https://agents.flora.ai/register
    revocation_endpoint: https://agents.flora.ai/token
    discovery:
      rfc8414: well-known/flora-fauna-agents-oauth-authorization-server.json
      rfc9728: well-known/flora-fauna-agents-oauth-protected-resource-mcp.json
    scopes: null
    scopes_note: >-
      scopes_supported is absent from the authorization-server metadata. Access is
      described in role terms instead: the connection gets exactly what the
      signed-in FLORA user has in the connected workspace, and never billing or
      member management.
    token_storage: in the MCP client; FLORA does not hold client tokens
    revocation: FLORA app > Settings > Connected apps, per client
    error_on_expiry: 401 invalid_token
    sources:
      - https://developer.flora.ai/mcp/authentication
      - well-known/flora-fauna-well-known.yml
  - name: clerk-application-oidc
    type: openIdConnect
    surface: FLORA application sign-in (https://app.florafauna.ai)
    issuer: https://clerk.flora.ai
    discovery: well-known/flora-fauna-app-openid-configuration.json
    scopes: [openid, profile, email, public_metadata, private_metadata, offline_access]
    id_token_signing_alg: RS256
    pkce: [S256]
    note: >-
      Clerk-hosted end-user identity for the product itself. Recorded because it is
      genuinely served from a FLORA host and enumerates scopes, but it is NOT the
      API's authentication and an integrator should not build against it.
    sources:
      - well-known/flora-fauna-app-openid-configuration.json
transport_security:
  https_required: true
  webhook_callback_https_required: true
  note: >-
    Webhook callback_url values must be HTTPS and are rejected if they resolve to
    localhost, *.local/*.internal, cloud-metadata hostnames, or private/loopback/
    link-local IPs; FLORA does not follow 3xx on delivery.
secret_handling_guidance:
  server_side_only: true
  env_var: FLORA_API_KEY
  webhook_secret_env: FLORA_WEBHOOK_SECRET
  rotation_cadence_recommended: 90 days
  published_at: https://developer.flora.ai/platform/authentication