Lacuna · Authentication Profile

Lacuna Authentication

Authentication

Lacuna secures its APIs with http and oauth2 across 2 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode flow(s).

AI MusicMusic GenerationAI Song GeneratorAI Lyrics GeneratorAudioMIDISongwritingGenerative AIMCP ServerAgent SkillA2ADeveloper Tools
Methods: http, oauth2 Schemes: 2 OAuth flows: authorizationCode API key in: header

Security Schemes

bearerAuth http
scheme: bearer
oauth2 oauth2
· flows: authorizationCode

Source

Authentication Profile

Raw ↑
generated: '2026-08-09'
method: searched
source: openapi/lacuna-music-openapi-original.json
docs: https://www.lacuna.fm/auth.md
discovery:
  authorization_server_metadata: https://www.lacuna.fm/.well-known/oauth-authorization-server
  protected_resource_metadata: https://www.lacuna.fm/.well-known/oauth-protected-resource
  jwks_uri: https://www.lacuna.fm/.well-known/jwks.json
  agent_auth_guide: https://www.lacuna.fm/auth.md
summary:
  types:
    - http
    - oauth2
  api_key_in:
    - header
  oauth2_flows:
    - authorizationCode
  anonymous_tier: false
  notes: >-
    Two credential paths, both requiring a human account holder at some point: a developer API key
    (recommended for autonomous agents, the only browser-free path) or OAuth 2.0 authorization code
    with PKCE for manually-registered first-party clients. Dynamic client registration (RFC 7591) is
    explicitly NOT supported. The same Authorization: Bearer header is used across REST, MCP and A2A.
schemes:
  - name: bearerAuth
    type: http
    scheme: bearer
    description: >-
      Lacuna developer API key issued from the dashboard at /profile/api and sent as
      `Authorization: Bearer lyr_live_...`. Shown once at creation. Keys carry scopes and an optional
      expiry set at creation time; revocation at the same URL takes effect immediately. Requires an
      active Pro plan or above — the tier check runs on every request, so a downgrade invalidates
      live keys without revoking them (403 permission_error / tier_insufficient).
    key_prefix: lyr_live_
    registration_url: https://www.lacuna.fm/profile/api
    requires_human_interaction: true
    sources:
      - openapi/lacuna-music-openapi-original.json
      - well-known/lacuna-auth.md
      - a2a/lacuna-agent-card.json
      - mcp/lacuna-mcp-server-card.json
  - name: oauth2
    type: oauth2
    description: >-
      OAuth 2.0 authorization code flow with PKCE (S256 required) for first-party clients registered
      manually with Lacuna. Public clients — token_endpoint_auth_method is `none`. Access tokens live
      15 minutes; refresh tokens are issued to the iOS client only.
    flows:
      - flow: authorizationCode
        authorizationUrl: https://www.lacuna.fm/oauth/authorize
        tokenUrl: https://www.lacuna.fm/oauth/token
        revocationUrl: https://www.lacuna.fm/oauth/revoke
        code_challenge_methods_supported:
          - S256
        scopes: 5
    dynamic_client_registration: false
    sources:
      - well-known/lacuna-oauth-authorization-server.json
      - well-known/lacuna-auth.md
      - a2a/lacuna-agent-card.json
surfaces:
  - surface: REST
    endpoint: https://www.lacuna.fm/api/v1/music/generations
    auth_required: true
  - surface: MCP (Streamable HTTP)
    endpoint: https://www.lacuna.fm/mcp
    auth_required: partial
    note: initialize and tools/list answer anonymously; tools/call requires a credential.
  - surface: A2A (JSON-RPC)
    endpoint: https://www.lacuna.fm/a2a
    auth_required: true
    note: Anonymous POST observed returning 401 authentication_error / invalid_api_key.
x-evidence:
  fetched: '2026-08-09'
  urls:
    - url: https://www.lacuna.fm/auth.md
      http_status: 200
    - url: https://www.lacuna.fm/.well-known/oauth-authorization-server
      http_status: 200
    - url: https://www.lacuna.fm/.well-known/oauth-protected-resource
      http_status: 200
    - url: https://www.lacuna.fm/api/openapi.json
      http_status: 200