SpAItial · AsyncAPI Specification

SpAItial Developer API Webhooks

Version 1.0.0

Webhook event surface for the SpAItial Developer API. Set webhook.url on POST /v1/worlds to receive an HTTPS callback when a world-generation job (or a mesh export) reaches a terminal state. Deliveries are signed with HMAC-SHA256 (X-Spaitial-Signature: sha256=...) using the webhook_secret from the API key's settings, retried up to 5 times with backoff, and are idempotent on X-Spaitial-Delivery-ID. Modeled from https://docs.spaitial.ai/api/llm-skills#webhooks (searched, not fabricated).

View Spec View on GitHub CompanySpatial AIWorld Models3DGaussian SplattingGenerative AIDeveloper APIMCPAsyncAPIEventsWebhooks

Channels

webhook
The consumer HTTPS endpoint that receives SpAItial world/export event deliveries.

Messages

✉
worldCompleted
World generation completed
✉
worldFailed
World generation failed
✉
worldCancelled
World generation cancelled
✉
exportCompleted
Mesh export completed
✉
exportFailed
Mesh export failed

Servers

https
consumer
Your HTTPS endpoint registered via webhook.url on POST /v1/worlds. Private/loopback hosts are rejected (SSRF).

AsyncAPI Specification

Raw ↑
asyncapi: 3.0.0
info:
  title: SpAItial Developer API Webhooks
  version: 1.0.0
  description: >-
    Webhook event surface for the SpAItial Developer API. Set webhook.url on
    POST /v1/worlds to receive an HTTPS callback when a world-generation job (or
    a mesh export) reaches a terminal state. Deliveries are signed with
    HMAC-SHA256 (X-Spaitial-Signature: sha256=...) using the webhook_secret from
    the API key's settings, retried up to 5 times with backoff, and are
    idempotent on X-Spaitial-Delivery-ID. Modeled from
    https://docs.spaitial.ai/api/llm-skills#webhooks (searched, not fabricated).
  contact:
    name: SpAItial
    url: https://docs.spaitial.ai/api/llm-skills
defaultContentType: application/json
servers:
  consumer:
    host: your-host.example.com
    protocol: https
    description: Your HTTPS endpoint registered via webhook.url on POST /v1/worlds. Private/loopback hosts are rejected (SSRF).
channels:
  webhook:
    address: /
    description: The consumer HTTPS endpoint that receives SpAItial world/export event deliveries.
    messages:
      worldCompleted:
        $ref: '#/components/messages/worldCompleted'
      worldFailed:
        $ref: '#/components/messages/worldFailed'
      worldCancelled:
        $ref: '#/components/messages/worldCancelled'
      exportCompleted:
        $ref: '#/components/messages/exportCompleted'
      exportFailed:
        $ref: '#/components/messages/exportFailed'
operations:
  receiveWorldEvent:
    action: receive
    channel:
      $ref: '#/channels/webhook'
    messages:
      - $ref: '#/channels/webhook/messages/worldCompleted'
      - $ref: '#/channels/webhook/messages/worldFailed'
      - $ref: '#/channels/webhook/messages/worldCancelled'
      - $ref: '#/channels/webhook/messages/exportCompleted'
      - $ref: '#/channels/webhook/messages/exportFailed'
components:
  messages:
    worldCompleted:
      name: world.completed
      title: World generation completed
      headers:
        $ref: '#/components/schemas/deliveryHeaders'
      payload:
        $ref: '#/components/schemas/worldEvent'
    worldFailed:
      name: world.failed
      title: World generation failed
      headers:
        $ref: '#/components/schemas/deliveryHeaders'
      payload:
        $ref: '#/components/schemas/worldFailedEvent'
    worldCancelled:
      name: world.cancelled
      title: World generation cancelled
      headers:
        $ref: '#/components/schemas/deliveryHeaders'
      payload:
        $ref: '#/components/schemas/worldEvent'
    exportCompleted:
      name: world.export.completed
      title: Mesh export completed
      headers:
        $ref: '#/components/schemas/deliveryHeaders'
      payload:
        $ref: '#/components/schemas/exportEvent'
    exportFailed:
      name: world.export.failed
      title: Mesh export failed
      headers:
        $ref: '#/components/schemas/deliveryHeaders'
      payload:
        $ref: '#/components/schemas/exportEvent'
  schemas:
    deliveryHeaders:
      type: object
      properties:
        User-Agent:
          type: string
          const: SpaitialWebhook/1.0
        X-Spaitial-Event:
          type: string
          enum: [world.completed, world.failed, world.cancelled, world.export.completed, world.export.failed]
        X-Spaitial-Request-ID:
          type: string
          example: req_abc123
        X-Spaitial-Delivery-ID:
          type: string
          example: wd_...
        X-Spaitial-Delivery-Attempt:
          type: integer
          example: 1
        X-Spaitial-Signature:
          type: string
          description: sha256=HMAC-SHA256(rawBody, webhook_secret)
    worldEvent:
      type: object
      properties:
        event: {type: string, example: world.completed}
        delivery_id: {type: string, example: wd_uuid}
        timestamp: {type: string, format: date-time}
        request_id: {type: string, example: req_...}
        status: {type: string, enum: [COMPLETED, CANCELLED]}
        created_at: {type: string, format: date-time}
        updated_at: {type: string, format: date-time}
        completed_at: {type: [string, 'null'], format: date-time}
        validation: {type: object}
        data:
          type: [object, 'null']
          description: Same shape as the `world` object in the GET result envelope; null for cancelled.
    worldFailedEvent:
      type: object
      properties:
        event: {type: string, const: world.failed}
        delivery_id: {type: string}
        timestamp: {type: string, format: date-time}
        request_id: {type: string}
        status: {type: string, const: FAILED}
        data: {type: 'null'}
        error:
          type: object
          properties:
            code: {type: string}
            message: {type: string}
    exportEvent:
      type: object
      properties:
        event: {type: string, enum: [world.export.completed, world.export.failed]}
        delivery_id: {type: string}
        timestamp: {type: string, format: date-time}
        request_id: {type: string}
        status: {type: string}
        data: {type: 'null'}
        export:
          type: object
          properties:
            type: {type: string, enum: [mesh, mesh-simplified]}
            status: {type: string, enum: [READY, FAILED]}
            error:
              type: object
              properties:
                code: {type: string}
                message: {type: string}

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/spaitial-webhooks-asyncapi"
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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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