Skip to content
Back to Lacuna Music

Card snapshot

www.lacuna.fm · 2026-08-10 10:59:52 UTC · 67a97ef454e81752937e6c7e433ce529a9095dd2c5eb240ce6e0322643a9c1e3

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "name": "Lacuna Music",
  "description": "Generates original music from a style description and optional lyrics. Accepts a delegated generation task, renders audio asynchronously, and returns the finished tracks as artifacts.",
  "version": "1.0.0",
  "documentationUrl": "https://www.lacuna.fm/docs/api",
  "iconUrl": "https://www.lacuna.fm/favicon-192x192.png",
  "provider": {
    "organization": "JOYLINK LTD",
    "url": "https://www.lacuna.fm"
  },
  "protocolVersion": "0.3.0",
  "url": "https://www.lacuna.fm/a2a",
  "preferredTransport": "JSONRPC",
  "supportedInterfaces": [
    {
      "url": "https://www.lacuna.fm/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    },
    {
      "url": "https://www.lacuna.fm/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "0.3"
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "audio/mpeg",
    "text/plain",
    "image/jpeg"
  ],
  "skills": [
    {
      "id": "generate_music",
      "name": "Generate music",
      "description": "Create an original track from a style description. Send a data part with `{ style, title, lyrics?, instrumental?, model? }` for full control, or a plain text part \u2014 text-only requests are treated as a style description and rendered as an instrumental, since no lyrics are available. The task returns immediately in the `working` state; poll tasks/get with the returned task id until it reaches `completed` (audio artifacts attached) or `failed`. Each call spends credits from the authenticated Lacuna account.",
      "tags": [
        "music",
        "audio",
        "generation",
        "song",
        "instrumental",
        "soundtrack"
      ],
      "examples": [
        "lofi hip hop, mellow piano, rainy night, 70 bpm",
        "epic cinematic orchestral trailer music with taiko drums",
        "{\"style\":\"indie folk, female vocal, acoustic guitar\",\"title\":\"Paper Boats\",\"lyrics\":\"[Verse]\\nWe folded maps into paper boats...\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "audio/mpeg",
        "text/plain",
        "image/jpeg"
      ]
    }
  ],
  "securitySchemes": {
    "oauth2": {
      "type": "oauth2",
      "description": "OAuth 2.0 authorization code flow with PKCE. Discovery metadata lives at /.well-known/oauth-authorization-server.",
      "flows": {
        "authorizationCode": {
          "authorizationUrl": "https://www.lacuna.fm/oauth/authorize",
          "tokenUrl": "https://www.lacuna.fm/oauth/token",
          "scopes": {
            "profile": "Grants the profile scope.",
            "music:generate": "Grants the music:generate scope.",
            "livecoding:agent": "Grants the livecoding:agent scope.",
            "music:agent": "Grants the music:agent scope.",
            "lyrics:agent": "Grants the lyrics:agent scope."
          }
        }
      }
    },
    "apiKey": {
      "type": "http",
      "scheme": "bearer",
      "description": "A Lacuna developer API key, issued from the dashboard at /profile/api and sent as `Authorization: Bearer <key>`. Requires an active Pro plan or higher."
    }
  },
  "securityRequirements": [
    {
      "schemes": {
        "oauth2": {
          "list": [
            "music:generate"
          ]
        }
      }
    },
    {
      "schemes": {
        "apiKey": {
          "list": []
        }
      }
    }
  ]
}