Vyond · AsyncAPI Specification

Vyond Webhooks

Version

View Spec View on GitHub VideoAnimationVideo GenerationArtificial IntelligenceeLearningLearning and DevelopmentContent GenerationSCIMIdentity ProvisioningWebhooksEnterpriseMediaAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-05'
method: derived
source: openapi/vyond-openapi-original.json
docs: https://api.vyond.com/doc/#tag/Webhook
spec_type: Webhooks
asyncapi_published: false
asyncapi_note: >-
  Vyond publishes no AsyncAPI document. Probed https://api.vyond.com/asyncapi.yaml,
  /asyncapi.json and the GitHub organizations — nothing. The event surface below is
  derived from the Webhook and Turbo tag descriptions and the Webhook component
  schema in the published OpenAPI, which is where Vyond actually documents it.
transport: HTTPS POST to a consumer-supplied URL (https required)
delivery:
  modes:
  - name: subscription
    description: >-
      A persistent webhook registered through the Webhook management API. Owner type
      must be `user`.
    operations:
    - WebhookController.getWebhooks
    - WebhookController.createWebhook
    - WebhookController.updateWebhook
    - WebhookController.deleteWebhook
  - name: one-off callbackWebhook
    description: >-
      A url+secret supplied inline on the create request, scoped to that single
      task.
    accepted_by:
    - TurboController.createTurbo
    - ContentGenerationV2Controller.createGeneration
    - VideoController.exportVideo
  - name: zapier
    description: >-
      A ZapierCallbackInfo callback type restricted to URLs beginning
      https://hooks.zapier.com/
  always_emitted: >-
    Vyond states webhook events are always emitted for every task, so a subscription
    registered before completion will receive the event regardless of polling.
security:
  signature:
    algorithm: HMAC-SHA256
    encoding: hex
    message: '{x-vyond-request-timestamp}:{raw request body}'
    headers:
      signature: x-vyond-signature
      timestamp: x-vyond-request-timestamp
    secret:
      supplied_by: consumer
      pattern: '^[0-9A-Za-z]{64}$'
      length: 64
    optional: >-
      If no secret is supplied on a one-off callbackWebhook, the request is
      delivered without a signature.
    replay_protection: >-
      Recommended (not enforced by Vyond): reject timestamps older than a tolerance
      such as ten minutes.
subscription_model:
  resource: Webhook
  fields: [webhookId, name, url, events, status]
  status_values: [enabled, disabled]
  url_constraint: https only
events:
- name: video_generation.succeeded
  description: A Vyond Go or AI-avatar content generation completed successfully.
  data: [type, id, videoId, status, name, url, downloadUrl, expiredAt]
  notes: >-
    `type` is vyondGo or aiAvatar. `expiredAt` is when downloadUrl stops working.
- name: video_generation.failed
  description: A content generation failed.
  data: [type, id, videoId, status, name, url]
  error_codes: [UNSUITABLE_CONTENT]
- name: video_export.succeeded
  description: A video export conversion completed successfully.
  source: Webhook.events enum in the OpenAPI
- name: video_export.failed
  description: A video export conversion failed.
  source: Webhook.events enum in the OpenAPI
- name: turbo_generation.succeeded
  description: A Turbo text-prompt video generation completed successfully.
  data: [id, status, turboThreadUrl, downloadUrl, creditConsumed, expiredAt]
- name: turbo_generation.failed
  description: A Turbo generation failed or timed out.
  data: [id, status, turboThreadUrl]
  error_codes: [TIMEOUT, GENERATION_FAILED]
- name: turbo_generation.cancelled
  description: A Turbo generation was cancelled.
  data: [id, status, turboThreadUrl]
  error_codes: [CANCELLED]
  note: >-
    Documented in the Turbo tag with a sample payload, but NOT present in the
    Webhook.events enum a subscription can subscribe to — it appears to be
    deliverable only to a one-off callbackWebhook. Recorded as published; the
    divergence is Vyond's.
envelope:
  typescript: |
    type WebhookEventBody = {
        event: string;
        data?: Record<string, unknown>;
        error?: { code: string };
    };
  fields:
  - {name: event, required: true}
  - {name: data, required: false, description: shape differs per event type}
  - {name: error, required: false, description: present on failure events, carries code}
gaps:
- No AsyncAPI document, so the event payloads are not machine-readable — they exist
  only as sample JSON inside a markdown tag description.
- No delivery-retry policy, no dead-letter behaviour and no delivery-log endpoint
  is documented.
- turbo_generation.cancelled is documented as an event but is absent from the
  subscribable Webhook.events enum.
- No webhook test/ping operation; a consumer cannot verify an endpoint without
  running a real credit-consuming generation.
counts:
  events_documented: 6
  events_subscribable: 6
  management_operations: 4