Lacuna · AsyncAPI Specification
Lacuna Webhooks
Version
View Spec
View on GitHub
AI MusicMusic GenerationAI Song GeneratorAI Lyrics GeneratorAudioMIDISongwritingGenerative AIMCP ServerAgent SkillA2ADeveloper ToolsAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-09'
method: derived
source: openapi/lacuna-music-openapi-original.json
spec_type: Webhooks
note: >-
Lacuna publishes no AsyncAPI document (/asyncapi.yaml and /api/asyncapi.json both 404, and nothing in
the GitHub org). It does, however, describe its event surface natively in the OpenAPI 3.1 `webhooks`
block with full JSON Schema payloads — four outbound events, a shared envelope, and a documented HMAC
signature scheme. This artifact is the derived catalog of that surface; it is NOT an AsyncAPI and is
not offered as one.
transport: HTTPS POST to a subscriber-configured endpoint
subscribe_at: https://www.lacuna.fm/profile/api
envelope:
schema: '#/components/schemas/WebhookEnvelope'
required: [id, type, created, data]
fields:
- {name: id, type: string, example: evt_abc123}
- {name: type, type: string, description: Event name.}
- {name: created, type: integer, description: Unix timestamp in seconds.}
- {name: data, type: object, description: Event-specific payload.}
security:
signature_header: X-Lacuna-Signature
format: 't=<unix-seconds>,v1=<hex>'
algorithm: HMAC-SHA256
signed_payload: '`${timestamp}.${rawBody}`'
verification: >-
Recompute the HMAC with the endpoint secret and compare; reject if the timestamp is more than five
minutes old or the signatures do not match.
helpers: 'lacuna-sdk ships packages/sdk/src/webhooks.ts'
delivery:
ack: Any 2xx response prevents retry.
retry_policy: not published
events:
- name: job.completed
summary: Music generation completed
description: Sent when a task transitions to `ready`. `tracks` carries the final hosted audio URLs.
schema: '#/components/schemas/JobCompletedEvent'
data_fields: [task_id, status, tracks, credits_used, created_at]
related_operation: openapi/lacuna-music-openapi-original.json#getGeneration
- name: job.failed
summary: Music generation failed
description: Sent when the task transitions to `failed`. Credits are refunded automatically.
schema: '#/components/schemas/JobFailedEvent'
data_fields: [task_id, status, error, credits_refunded, created_at]
- name: credits.low
summary: Credit balance dropped below threshold
description: >-
Edge-triggered — fires once when the balance crosses below `creditAlertThreshold` and will not
re-fire until the balance rises above the threshold and crosses again.
schema: '#/components/schemas/CreditsLowEvent'
data_fields: [threshold, balance, subscription_credits, onetime_credits]
- name: key.expiring
summary: API key expiring within 24 hours
description: Sent once per key, 24 hours before expiry.
schema: '#/components/schemas/KeyExpiringEvent'
data_fields: [api_key_id, prefix, name, expires_at, days_until_expiry]
ui_events_not_webhooks:
note: >-
The August 9 2026 changelog adds in-product completion notifications for stem splits, mastering,
artwork and mixdowns. Those are product notifications, not documented webhook event types — only the
four events above appear in the OpenAPI webhooks block.
gaps:
- No AsyncAPI document is published for this event surface.
- No retry/backoff policy is documented for failed deliveries.
- Event types are limited to the music-generation product; the other tools emit no webhooks.