Lacuna · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Lacuna Music API

8 actions 8 updates documentation extends openapi/_original/lacuna-music-openapi-original.json
Generated by API Evangelist Written by API Evangelist tooling for Lacuna's API. It is a proposal applied on top of the contract, not a document Lacuna publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-agentic-accessx-mcp-toolx-billingx-apievangelist-profilex-apievangelist-artifactsx-agent-surfacestagsdescription

Targets 8

$.info
$
$.components.securitySchemes.bearerAuth
$.paths['/v1/music/generations'].post
$.paths['/v1/me'].get
$.paths['/v1/music/generations/{id}'].get
$.webhooks
$.components.schemas.GenerateRequest.properties.model

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Lacuna Music API
  version: 1.0.0
extends: openapi/_original/lacuna-music-openapi-original.json
x-provenance:
  generated: '2026-09-11'
  method: generated
  source: openapi/_original/lacuna-music-openapi-original.json (re-harvested 2026-09-11)
  note: >-
    Captures API Evangelist's enrichment as an Overlay so the harvested spec is never mutated. Everything
    added below is either a link to an artifact in this repo or a restatement of something the provider
    already publishes elsewhere (the api-catalog, the MCP server card, the agent card, auth.md).
actions:
  - target: $.info
    update:
      x-apievangelist-profile: https://lacuna.apievangelist.com/
      x-apievangelist-artifacts:
        authentication: authentication/lacuna-authentication.yml
        scopes: scopes/lacuna-scopes.yml
        errors: errors/lacuna-problem-types.yml
        conventions: conventions/lacuna-conventions.yml
        webhooks: asyncapi/lacuna-webhooks.yml
        rate_limits: rate-limits/lacuna-rate-limits.yml
        data_model: data-model/lacuna-data-model.yml
        lifecycle: lifecycle/lacuna-lifecycle.yml
        conformance: conformance/lacuna-conformance.yml
        mcp: mcp/lacuna-mcp.yml
        tool_crosswalk: mcp/lacuna-tool-crosswalk.yml
        agent_card: a2a/lacuna-a2a.yml
        skills: skills/_index.yml
      x-agent-surfaces:
        mcp: https://www.lacuna.fm/mcp
        a2a: https://www.lacuna.fm/a2a
        api_catalog: https://www.lacuna.fm/.well-known/api-catalog
        agent_auth: https://www.lacuna.fm/auth.md
        llms_txt: https://www.lacuna.fm/llms.txt
  - target: $
    update:
      tags:
        - name: Music
          description: >-
            Asynchronous music generation. Submit a task, poll it or receive the job.completed webhook,
            then read the hosted audio URLs off the returned tracks.
        - name: Account
          description: >-
            Free introspection of the calling credential — identity, plan, credit balance, effective
            rate limits, auth kind, scopes and key expiry.
  - target: $.components.securitySchemes.bearerAuth
    update:
      description: >-
        Lacuna developer API key, prefix `lyr_live_`, issued at https://www.lacuna.fm/profile/api and
        sent as `Authorization: Bearer <key>`. Requires an active Pro plan or above; the tier check runs
        on every request. An OAuth 2.0 authorization-code + PKCE alternative exists for manually
        registered first-party clients — see /.well-known/oauth-authorization-server.
      x-key-prefix: lyr_live_
      x-registration-url: https://www.lacuna.fm/profile/api
      x-oauth-metadata: https://www.lacuna.fm/.well-known/oauth-authorization-server
  - target: $.paths['/v1/music/generations'].post
    update:
      x-agentic-access:
        action-class: acting
        consequence: write
        subject: required
        token:
          max-ttl: 900
        escalation:
          human-in-the-loop: conditional
          triggers: [abnormal, high-value]
        audit: required
      x-billing:
        unit: credits
        charged: on-submit
        refunded-on: provider-failure
        cost-by-model: {aether: 50, echo: 80, nocturne: 180}
      x-idempotency:
        supported: false
        coverage: none
        note: >-
          No idempotency key is offered on an operation that spends credits synchronously. A retried
          submit charges twice.
      x-reversibility:
        grade: none
        reversal-operation: null
        reversal-window: null
        dry-run: false
        precondition-check: getMe
        note: >-
          Nothing can take a submitted generation back. Credits are refunded automatically when the task
          fails, but that is provider-initiated compensation, not an operation a caller can invoke. The
          free GET /v1/me is the only way to establish preconditions before spending.
      x-mcp-tool: generate_music
      x-a2a-skill: generate_music
  - target: $.paths['/v1/me'].get
    update:
      x-agentic-access:
        action-class: connected
        consequence: read
        subject: required
        token:
          max-ttl: 3600
        audit: none
      x-billing:
        unit: credits
        charged: never
        note: The spec states explicitly that no credits are consumed.
      x-precondition-check:
        covers: [credential-validity, key-expiry, oauth-scopes, plan-eligibility, credit-balance, effective-rate-limits]
        note: >-
          The documented connection test, and the cheapest way for an agent to avoid a 401, 402 or 403
          on a billable call. Added to the published contract between 2026-08-09 and 2026-09-11 with no
          changelog entry.
      x-mcp-tool: null
      x-mcp-note: No hosted MCP tool exposes this operation — see mcp/lacuna-tool-crosswalk.yml rest_only[].
  - target: $.paths['/v1/music/generations/{id}'].get
    update:
      x-agentic-access:
        action-class: connected
        consequence: read
        subject: optional
        token:
          max-ttl: 3600
        audit: none
      x-polling:
        recommended-interval-seconds: 5
        typical-completion-seconds: [60, 120]
        terminal-states: [ready, failed]
        prefer: 'job.completed webhook over polling in production'
      x-mcp-tool: get_generation
  - target: $.webhooks
    update:
      x-signature:
        header: X-Lacuna-Signature
        format: 't=<unix-seconds>,v1=<hex>'
        algorithm: HMAC-SHA256
        signed-payload: '${timestamp}.${rawBody}'
        replay-window-seconds: 300
      x-catalog: asyncapi/lacuna-webhooks.yml
  - target: $.components.schemas.GenerateRequest.properties.model
    update:
      x-catalog-drift:
        api-enum: [aether, echo, nocturne]
        mcp-enum: [aether, echo]
        product-changelog: [reverie, aether, echo]
        note: >-
          Observed 2026-09-11. The contract, the hosted MCP tool schema and the user-facing changelog
          each publish a different model catalog. `reverie` is reachable from the product but not from
          this enum; `nocturne` is in this enum but has disappeared from the product narrative while
          still carrying no removal date. See lifecycle/lacuna-lifecycle.yml model_catalog_drift.