Bluma · Authentication Profile

Bluma Authentication

Authentication

Bluma declares 3 security scheme(s) across its OpenAPI definitions.

CompanyArtificial IntelligenceVideoVideo GenerationAdvertisingMarketingContent CreationShort-Form VideoSocial-MediaGenerative AICreative ToolsText-to-SpeechMediaAutomationWebhook
Methods: Schemes: 3 OAuth flows: API key in:

Security Schemes

http
scheme: bearer
oauth2
· flows:
http
scheme: bearer

Source

Authentication Profile

bluma-authentication.yml Raw ↑
generated: '2026-08-12'
method: searched
source: >-
  https://docs.getbluma.com/authentication ,
  https://docs.getbluma.com/api-reference/overview ,
  https://api.getbluma.com/.well-known/oauth-protected-resource ,
  https://clerk.getbluma.com/.well-known/oauth-authorization-server
docs: https://docs.getbluma.com/authentication
note: >-
  Bluma runs two independent authentication models against the same API host. The REST
  API at /api/v1 uses long-lived prefixed API keys presented as HTTP bearer tokens; the
  MCP server at /api/mcp uses OAuth 2.1 delegated to Clerk. There is no published
  OpenAPI securitySchemes block to derive from — the advertised spec at
  /api/v1/openapi.json returns 401 — so this profile is read from the documentation and
  from live anonymous metadata probes.
schemes:
- id: api_key_bearer
  type: http
  scheme: bearer
  applies_to: REST API (https://api.getbluma.com/api/v1)
  header: Authorization
  format: 'Bearer <api_key>'
  key_prefixes:
  - prefix: bluma_test_
    environment: test
    behavior: >-
      Watermarked, lower-quality (720p max, 24fps) renders; consumes no credits;
      unlimited keys; same rate limit as the account tier.
  - prefix: bluma_live_
    environment: production
    behavior: Full-quality renders up to 4K, no watermark, credits charged, priority processing.
  scoped: true
  scopes_source: scopes/bluma-scopes.yml
  issuance:
  - channel: dashboard
    url: https://app.getbluma.com/settings?tab=api
    note: Create API Key; the secret is displayed exactly once.
  - channel: api
    operation: POST /api/v1/api-keys
    note: >-
      Requires an existing session token, not an API key. Accepts name, environment
      (test|production) and rate_limit_per_hour.
  rotation:
    supported: true
    operation: POST /api/v1/api-keys/{id}/rotate
    behavior: >-
      Issues a new key and schedules the old key to expire in 30 days, enabling
      zero-downtime rotation.
    recommended_interval: 90 days
  revocation:
    supported: true
    operation: DELETE /api/v1/api-keys/{id}
    behavior: Immediate; all requests using that key stop.
  listing:
    supported: true
    operation: GET /api/v1/api-keys
    behavior: Returns keys with a truncated prefix; never re-exposes the full secret.
  failure_modes:
  - status: 401
    type: authentication_error
    title: Authentication Required
    cause: Missing API key
  - status: 401
    type: authentication_error
    title: Invalid API Key
    cause: Key is invalid or revoked; response metadata echoes the key_prefix
  - status: 403
    type: permission_denied
    title: Insufficient Permissions
    cause: >-
      Key lacks the required scope; response metadata names required_scope and
      available_scopes
- id: oauth2_clerk
  type: oauth2
  applies_to: MCP server (https://api.getbluma.com/api/mcp)
  flows:
    authorizationCode:
      authorizationUrl: https://clerk.getbluma.com/oauth/authorize
      tokenUrl: https://clerk.getbluma.com/oauth/token
      refreshUrl: https://clerk.getbluma.com/oauth/token
      scopes:
        email: Access the user's email address
        profile: Access the user's basic profile
        offline_access: Issue a refresh token for long-lived agent sessions
  issuer: https://clerk.getbluma.com
  identity_provider: Clerk
  pkce_required_methods:
  - S256
  dynamic_client_registration:
    supported: true
    endpoint: https://clerk.getbluma.com/oauth/register
  revocation_endpoint: https://clerk.getbluma.com/oauth/token/revoke
  jwks_uri: https://clerk.getbluma.com/.well-known/jwks.json
  id_token_signing_alg_values_supported:
  - RS256
  token_endpoint_auth_methods_supported:
  - client_secret_basic
  - client_secret_post
  - none
  discovery:
  - spec: RFC 9728 Protected Resource Metadata
    url: https://api.getbluma.com/.well-known/oauth-protected-resource
    status: 200
  - spec: RFC 8414 Authorization Server Metadata
    url: https://clerk.getbluma.com/.well-known/oauth-authorization-server
    status: 200
  - spec: OpenID Connect Discovery 1.0
    url: https://clerk.getbluma.com/.well-known/openid-configuration
    status: 200
  documented_in_provider_docs: false
- id: session_token
  type: http
  scheme: bearer
  applies_to: API key management operations (POST/GET/DELETE /api/v1/api-keys)
  note: >-
    The docs show these operations authenticated with "YOUR_SESSION_TOKEN" rather than an
    API key, implying a dashboard session credential. The docs never define how a session
    token is obtained outside the dashboard, which makes fully programmatic key
    provisioning undocumented.
  documented_issuance: false
webhook_authentication:
  direction: inbound-to-consumer
  scheme: HMAC-SHA256
  header: X-Bluma-Signature
  format: 'sha256=<hex digest>'
  signed_payload: raw request body
  secret_issuance: >-
    Returned once in the POST /api/v1/webhooks response as a whsec_-prefixed secret.
  helper: Bluma.webhooks.verify() in both the TypeScript and Python SDKs
  additional_headers:
  - X-Bluma-Event-Id
  - X-Bluma-Event-Type
  - 'User-Agent: Bluma-Webhooks/1.0'
transport_security:
  https_required: true
  hsts: true
  hsts_max_age: 31536000
  hsts_preload: true
gaps:
- No mTLS, no openIdConnect scheme on the REST surface, no short-lived token exchange —
  the REST API is long-lived-static-secret only.
- The OAuth scopes exposed to MCP clients are identity scopes (email, profile,
  offline_access) and do not correspond to the REST product scopes, so what an MCP token
  is authorized to do inside Bluma is not stated anywhere public.
- Session-token issuance is referenced but never documented, so API key lifecycle cannot
  be fully automated from the published material.

Work with this as data

Every security artifact here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for security posture

4 MCP tools reach this
  • find_securityBrowse and filter every security artifact in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/bluma-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.