Bluma · AsyncAPI Specification

Bluma Webhooks

Version

View Spec View on GitHub CompanyArtificial IntelligenceVideoVideo GenerationAdvertisingMarketingContent CreationShort-Form VideoSocial-MediaGenerative AICreative ToolsText-to-SpeechMediaAutomationWebhookAsyncAPIEvents

AsyncAPI Specification

bluma-webhooks.yml Raw ↑
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.
All 92 tools →

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.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.