Moonscale · AsyncAPI Specification

Moonscale Webhooks

Version

View Spec View on GitHub CompanyArtificial IntelligenceSalesSales AutomationLead GenerationAI AgentsConversational AICRMVideo GenerationAvatarsSpeechGermanyAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-14'
method: derived
source: openapi/moonscale-openapi-original.json
docs: https://vidlab7-d7584a5d.mintlify.app/api-reference/openapi.json
spec_type: none
asyncapi_published: false
note: >-
  Moonscale publishes no AsyncAPI document and no event-catalog page. It does ship a real,
  caller-registered webhook: VideoGenerationRequest.webhookUrl is an optional callback URL
  on POST /api/studio-avatar/generate-video, and the OpenAPI states plainly that the
  payload delivered to it is the same document returned by GET
  /api/studio-avatar/generated-video/{correlationId} ("Get generated video (same as webhook
  payload) by correlation ID"). That is enough to describe the event surface faithfully
  without inventing anything, so the webhook catalog below is derived from the spec's own
  schemas. No AsyncAPI pointer is emitted, because no AsyncAPI document exists.
registration:
  model: per-request
  where: VideoGenerationRequest.webhookUrl
  scope: one callback URL supplied on each individual generation request
  note: >-
    There is no webhook-endpoint management API and no dashboard-registered global endpoint
    documented. A caller that omits webhookUrl gets no callback and must poll.
  management_api: false
webhooks:
- event: video-generation.completed
  trigger: an asynchronous studio-avatar video generation reaches a terminal state
  delivery: HTTP POST to the caller-supplied webhookUrl
  payload_schema: openapi/moonscale-openapi-original.json#/components/schemas/GetGeneratedVideoByCorrelationIdResponse
  payload_fields:
  - {name: id, type: string, description: Unique identifier for the generated video}
  - {name: correlationId, type: string, description: The caller's own external reference, echoed back}
  - {name: status, type: string, enum: [PENDING, PROCESSING, COMPLETED, FAILED]}
  - {name: videoUrl, type: string, description: URL where the generated video can be accessed}
  - {name: avatarId, type: string}
  - {name: voiceId, type: string}
  - {name: script, type: string, description: The script content used for the video}
  correlation: correlationId — caller-supplied on the request, echoed on the callback
  polling_equivalent: 'GET /api/studio-avatar/generated-video/{correlationId}'
gaps:
  signature_verification: >-
    UNDOCUMENTED. No signing secret, HMAC header, or timestamp header is published, so a
    receiver has no published way to verify a callback genuinely came from Moonscale. This
    is the most consequential gap in the event surface.
  retry_policy: UNDOCUMENTED. No retry count, backoff schedule, or dead-letter behaviour is published.
  delivery_guarantee: UNDOCUMENTED. At-least-once versus at-most-once is not stated.
  expected_response: UNDOCUMENTED. No required receiver status code or acknowledgement contract is published.
  source_ips: UNDOCUMENTED. No egress IP range is published for allowlisting.
  event_types: >-
    Only one payload shape is documented. Whether a FAILED generation is delivered to the
    webhook at all — or only surfaces on a poll — is not stated.
  observed_client_behaviour: >-
    The third-party Activepieces connector does not rely on the webhook; when asked to wait
    for completion it polls GET /api/studio-avatar/generated-video/{correlationId} every 5
    seconds and times out after 300 seconds. That is a third party's choice, not a
    Moonscale-published SLA, and is recorded only as an observed integration pattern.