Bluma · AsyncAPI Specification
Bluma Webhooks
Version
View Spec
View on GitHub
CompanyArtificial IntelligenceVideoVideo GenerationAdvertisingMarketingContent CreationShort-Form VideoSocial-MediaGenerative AICreative ToolsText-to-SpeechMediaAutomationWebhookAsyncAPIEvents
AsyncAPI Specification
generated: '2026-08-12'
method: searched
source: >-
https://docs.getbluma.com/concepts/webhooks , https://docs.getbluma.com/guides/webhooks-setup ,
https://docs.getbluma.com/errors
docs: https://docs.getbluma.com/concepts/webhooks
note: >-
Bluma documents a complete webhook surface — seven event types, a stable envelope,
HMAC signing, a published retry ladder, automatic disabling, and a delivery-log
endpoint — but ships NO AsyncAPI document. Nothing at /asyncapi.yaml, no event catalog
file, and no public GitHub organization (github.com/bluma returns 404). This artifact
captures the webhook catalog as published; no AsyncAPI has been authored on Bluma's
behalf.
asyncapi_published: false
asyncapi_probed:
- url: https://api.getbluma.com/asyncapi.yaml
status: 401
- url: https://docs.getbluma.com/asyncapi.yaml
status: 404
- url: https://api.github.com/orgs/bluma
status: 404
transport: HTTPS POST
delivery: at-least-once
envelope:
fields:
- name: id
description: Event id
prefix: evt_
- name: type
description: Event type string
- name: created_at
description: ISO 8601 timestamp
- name: data
description: Event-type-specific payload object
headers:
- name: X-Bluma-Signature
description: 'HMAC-SHA256 of the raw body, formatted sha256=<hex>'
- name: X-Bluma-Event-Id
description: Event id, mirrors body.id — the documented dedupe key
- name: X-Bluma-Event-Type
description: Event type, mirrors body.type
- name: User-Agent
description: Bluma-Webhooks/1.0
- name: Content-Type
description: application/json
security:
scheme: HMAC-SHA256
secret_prefix: whsec_
secret_issuance: returned once from POST /api/v1/webhooks
signed_payload: raw request body (not re-serialized JSON)
sdk_helper: Bluma.webhooks.verify(payload, signature, secret)
events:
- name: video.queued
category: video
description: Video generation started
fired_when: Immediately after creation
- name: video.processing
category: video
description: Video is being generated
fired_when: When rendering begins
- name: video.completed
category: video
description: Video is ready
fired_when: Generation successful
payload_fields:
- id
- status
- template_id
- url
- thumbnail_url
- duration
- size_bytes
- credits_consumed
- name: video.failed
category: video
description: Video generation failed
fired_when: If an error occurs during rendering
payload_fields:
- id
- status
- template_id
- error.type
- error.detail
- name: video.deleted
category: video
description: Video was deleted
fired_when: When a user deletes a video
- name: credits.low
category: credits
description: Credit balance running low
fired_when: Balance drops below 10
- name: credits.exhausted
category: credits
description: No credits remaining
fired_when: Balance reaches 0
subscription:
register:
operation: POST /api/v1/webhooks
body:
- url
- events[]
response_fields:
- id
- url
- events
- secret
- is_active
- created_at
list:
operation: GET /api/v1/webhooks
delete:
operation: DELETE /api/v1/webhooks/{id}
deliveries:
operation: GET /api/v1/webhooks/{id}/deliveries
response_fields:
- id
- event_id
- event_type
- attempt_number
- status_code
- duration_ms
- error_message
- created_at
delivery_policy:
success_criteria: 2xx response from the consumer endpoint
retries:
- attempt: 1
after: 3 seconds
- attempt: 2
after: 30 seconds
- attempt: 3
after: 5 minutes
- attempt: 4
after: 1 hour
max_attempts: 4
auto_disable_after_consecutive_failures: 10
rate_limited: false
rate_limit_note: Webhook deliveries are exempt from API rate limits (server-initiated).
consumer_idempotency:
required: true
key: event_id (body.id / X-Bluma-Event-Id)
guidance_published: true
note: >-
Bluma instructs consumers to dedupe on event_id and publishes a Redis-based example.
This is CONSUMER-side idempotency for duplicate webhook deliveries — it is NOT
request idempotency on the REST API, which Bluma does not support (no
Idempotency-Key header is documented anywhere).
testing:
tools_suggested:
- webhook.site
- ngrok
test_mode: Webhooks are fully functional with bluma_test_ keys.
event_count: 7
gaps:
- No AsyncAPI (or any machine-readable event schema) is published, so the seven event
payloads exist only as prose plus examples.
- No documented webhook signature timestamp or replay window — the signature covers the
body only, so a captured delivery can be replayed indefinitely unless the consumer
dedupes on event_id.
- No streaming or WebSocket surface; the rate-limits page states outright that Bluma
does not support WebSockets.
Work with this as data
Every AsyncAPI spec 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 asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec 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.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/bluma-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.