Replicate · AsyncAPI Specification

Replicate Streaming and Webhooks API

Version 1.0.0

AsyncAPI definition for Replicate's event-driven surfaces: - Server-Sent Events (SSE) stream returned for predictions where the model supports streaming output. The stream URL is published by the Predictions API as `urls.stream` on the prediction object and is served from `https://stream.replicate.com`. - Outbound webhook callbacks delivered to a customer-controlled URL when a prediction (or training) changes state. Replicate signs each webhook with HMAC-SHA256 using a per-account signing secret. Every event, header, payload field, and status value in this document is taken directly from the official Replicate documentation: - https://replicate.com/docs/topics/predictions/streaming - https://replicate.com/docs/topics/webhooks - https://replicate.com/docs/topics/webhooks/setup-webhook - https://replicate.com/docs/topics/webhooks/receive-webhook - https://replicate.com/docs/topics/webhooks/verify-webhook - https://replicate.com/docs/reference/http

View Spec View on GitHub Artificial IntelligenceMachine-LearningImage-GenerationLanguage ModelsModel DeploymentAsyncAPIEventsWebhooks

Channels

predictions.stream
subscribe subscribePredictionStream
Consume prediction SSE stream
SSE stream of a single prediction's output. Returned per-prediction at `urls.stream` when the model supports streaming. Three event types are emitted: `output` (plain text, token/chunk-by-chunk), `error` (JSON with `detail`), and `done` (JSON, optionally including `reason`).
webhooks.prediction
publish receivePredictionWebhook
Receive prediction webhook callbacks
Outbound webhook callbacks for a prediction. Which of the four event types fire is controlled by the prediction's `webhook_events_filter` array (`start`, `output`, `logs`, `completed`). Default behavior (without filters) fires whenever there are new outputs or the prediction has finished. `output` and `logs` are throttled to at most once per 500ms; `start` and `completed` always send.

Messages

SseOutputEvent
SSE output event
Emitted when the prediction returns new output. Streaming text models emit one `output` event per token / chunk.
SseErrorEvent
SSE error event
Emitted when the prediction returns an error.
SseDoneEvent
SSE done event
Emitted when the prediction finishes. The payload is an empty object `{}` on success, or contains a `reason` of `canceled` or `error` for non-success terminations.
WebhookPredictionStart
Prediction start webhook
Sent immediately on prediction start. Corresponds to the `start` value of `webhook_events_filter`. Not throttled.
WebhookPredictionOutput
Prediction output webhook
Sent each time a prediction generates an output (predictions can generate multiple outputs). Corresponds to the `output` value of `webhook_events_filter`. Throttled to at most once per 500ms.
WebhookPredictionLogs
Prediction logs webhook
Sent each time log output is generated by a prediction. Corresponds to the `logs` value of `webhook_events_filter`. Throttled to at most once per 500ms.
WebhookPredictionCompleted
Prediction completed webhook
Sent when the prediction reaches a terminal state. The `status` field will be one of `succeeded`, `failed`, or `canceled`. Corresponds to the `completed` value of `webhook_events_filter`. Not throttled. Retried with exponential backoff on non-2xx responses, with final retry approximately 1 minute after completion. Intermediate-state webhooks are not retried.

Servers

https
api https://api.replicate.com/v1
Replicate REST API base. Predictions are created against this server via `POST /predictions` (or `POST /models/{owner}/{name}/predictions`). Streaming-capable predictions return a `urls.stream` value pointing at the `stream.replicate.com` SSE endpoint.
https
stream stream.replicate.com
Server-Sent Events host for prediction output streams. The full stream URL (including the unique file identifier path) is provided per prediction at `urls.stream`. There is a 30 second timeout on the event stream endpoint; on timeout an empty `:408: 408 Request Timeout` comment is emitted.
https
webhookReceiver {webhookUrl}
Customer-controlled HTTPS endpoint that Replicate POSTs prediction events to. The URL is specified per-prediction via the `webhook` parameter and may include arbitrary query parameters for correlation.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Replicate Streaming and Webhooks API
  version: 1.0.0
  description: |
    AsyncAPI definition for Replicate's event-driven surfaces:

      - Server-Sent Events (SSE) stream returned for predictions where the
        model supports streaming output. The stream URL is published by the
        Predictions API as `urls.stream` on the prediction object and is
        served from `https://stream.replicate.com`.
      - Outbound webhook callbacks delivered to a customer-controlled URL
        when a prediction (or training) changes state. Replicate signs each
        webhook with HMAC-SHA256 using a per-account signing secret.

    Every event, header, payload field, and status value in this document is
    taken directly from the official Replicate documentation:

      - https://replicate.com/docs/topics/predictions/streaming
      - https://replicate.com/docs/topics/webhooks
      - https://replicate.com/docs/topics/webhooks/setup-webhook
      - https://replicate.com/docs/topics/webhooks/receive-webhook
      - https://replicate.com/docs/topics/webhooks/verify-webhook
      - https://replicate.com/docs/reference/http
  contact:
    name: Replicate Support
    url: https://replicate.com/docs
  license:
    name: Replicate Terms of Service
    url: https://replicate.com/terms

defaultContentType: application/json

servers:
  api:
    url: https://api.replicate.com/v1
    protocol: https
    description: |
      Replicate REST API base. Predictions are created against this server
      via `POST /predictions` (or `POST /models/{owner}/{name}/predictions`).
      Streaming-capable predictions return a `urls.stream` value pointing at
      the `stream.replicate.com` SSE endpoint.
    security:
      - bearerToken: []
  stream:
    url: stream.replicate.com
    protocol: https
    description: |
      Server-Sent Events host for prediction output streams. The full stream
      URL (including the unique file identifier path) is provided per
      prediction at `urls.stream`. There is a 30 second timeout on the event
      stream endpoint; on timeout an empty `:408: 408 Request Timeout`
      comment is emitted.
    bindings:
      http:
        headers:
          type: object
          properties:
            Accept:
              type: string
              const: text/event-stream
            Authorization:
              type: string
              description: Bearer token, e.g. `Bearer $REPLICATE_API_TOKEN`.
    security:
      - bearerToken: []
  webhookReceiver:
    url: '{webhookUrl}'
    protocol: https
    description: |
      Customer-controlled HTTPS endpoint that Replicate POSTs prediction
      events to. The URL is specified per-prediction via the `webhook`
      parameter and may include arbitrary query parameters for correlation.
    variables:
      webhookUrl:
        default: https://example.com/replicate/webhook
        description: HTTPS URL configured on the prediction's `webhook` field.

channels:
  predictions.stream:
    description: |
      SSE stream of a single prediction's output. Returned per-prediction at
      `urls.stream` when the model supports streaming. Three event types are
      emitted: `output` (plain text, token/chunk-by-chunk), `error` (JSON
      with `detail`), and `done` (JSON, optionally including `reason`).
    bindings:
      http:
        method: GET
        bindingVersion: '0.3.0'
    subscribe:
      summary: Consume prediction SSE stream
      operationId: subscribePredictionStream
      message:
        oneOf:
          - $ref: '#/components/messages/SseOutputEvent'
          - $ref: '#/components/messages/SseErrorEvent'
          - $ref: '#/components/messages/SseDoneEvent'

  webhooks.prediction:
    description: |
      Outbound webhook callbacks for a prediction. Which of the four event
      types fire is controlled by the prediction's `webhook_events_filter`
      array (`start`, `output`, `logs`, `completed`). Default behavior
      (without filters) fires whenever there are new outputs or the
      prediction has finished. `output` and `logs` are throttled to at most
      once per 500ms; `start` and `completed` always send.
    bindings:
      http:
        method: POST
        bindingVersion: '0.3.0'
    publish:
      summary: Receive prediction webhook callbacks
      operationId: receivePredictionWebhook
      message:
        oneOf:
          - $ref: '#/components/messages/WebhookPredictionStart'
          - $ref: '#/components/messages/WebhookPredictionOutput'
          - $ref: '#/components/messages/WebhookPredictionLogs'
          - $ref: '#/components/messages/WebhookPredictionCompleted'

components:
  securitySchemes:
    bearerToken:
      type: http
      scheme: bearer
      description: |
        Replicate API token sent as `Authorization: Bearer $REPLICATE_API_TOKEN`.
        Required to open the SSE stream URL.

  messages:
    # --------------------------------------------------------------
    # SSE messages (stream.replicate.com)
    # --------------------------------------------------------------
    SseOutputEvent:
      name: output
      title: SSE output event
      summary: |
        Emitted when the prediction returns new output. Streaming text
        models emit one `output` event per token / chunk.
      contentType: text/plain
      bindings:
        http:
          headers:
            type: object
            properties:
              event:
                type: string
                const: output
              id:
                type: string
                description: 'Event id in the form `[timestamp]:[sequence]`.'
      payload:
        type: string
        description: |
          Raw text chunk emitted by the model. Concatenating the `data`
          fields of consecutive `output` events reconstructs the full
          model output.
      examples:
        - name: tokenChunk
          summary: A single streamed token from a text model
          payload: "Hello"

    SseErrorEvent:
      name: error
      title: SSE error event
      summary: Emitted when the prediction returns an error.
      contentType: application/json
      bindings:
        http:
          headers:
            type: object
            properties:
              event:
                type: string
                const: error
      payload:
        $ref: '#/components/schemas/SseErrorPayload'
      examples:
        - name: modelError
          payload:
            detail: "Prediction failed: out of memory"

    SseDoneEvent:
      name: done
      title: SSE done event
      summary: |
        Emitted when the prediction finishes. The payload is an empty
        object `{}` on success, or contains a `reason` of `canceled` or
        `error` for non-success terminations.
      contentType: application/json
      bindings:
        http:
          headers:
            type: object
            properties:
              event:
                type: string
                const: done
      payload:
        $ref: '#/components/schemas/SseDonePayload'
      examples:
        - name: success
          payload: {}
        - name: canceled
          payload:
            reason: canceled
        - name: errored
          payload:
            reason: error

    # --------------------------------------------------------------
    # Webhook messages (POSTed to customer URL)
    # --------------------------------------------------------------
    WebhookPredictionStart:
      name: prediction.start
      title: Prediction start webhook
      summary: |
        Sent immediately on prediction start. Corresponds to the `start`
        value of `webhook_events_filter`. Not throttled.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/Prediction'

    WebhookPredictionOutput:
      name: prediction.output
      title: Prediction output webhook
      summary: |
        Sent each time a prediction generates an output (predictions can
        generate multiple outputs). Corresponds to the `output` value of
        `webhook_events_filter`. Throttled to at most once per 500ms.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/Prediction'

    WebhookPredictionLogs:
      name: prediction.logs
      title: Prediction logs webhook
      summary: |
        Sent each time log output is generated by a prediction.
        Corresponds to the `logs` value of `webhook_events_filter`.
        Throttled to at most once per 500ms.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/Prediction'

    WebhookPredictionCompleted:
      name: prediction.completed
      title: Prediction completed webhook
      summary: |
        Sent when the prediction reaches a terminal state. The `status`
        field will be one of `succeeded`, `failed`, or `canceled`.
        Corresponds to the `completed` value of `webhook_events_filter`.
        Not throttled. Retried with exponential backoff on non-2xx
        responses, with final retry approximately 1 minute after
        completion. Intermediate-state webhooks are not retried.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/PredictionTerminal'

  schemas:
    # --------------------------------------------------------------
    # SSE payload schemas
    # --------------------------------------------------------------
    SseErrorPayload:
      type: object
      required: [detail]
      properties:
        detail:
          type: string
          description: Human-readable error message.

    SseDonePayload:
      type: object
      description: |
        Empty object on success; includes `reason` when the prediction
        ended in a non-success terminal state.
      properties:
        reason:
          type: string
          enum: [canceled, error]
          description: |
            Present when the prediction did not succeed. `canceled` if the
            prediction was canceled; `error` if it failed.

    # --------------------------------------------------------------
    # Webhook signature headers
    # --------------------------------------------------------------
    WebhookHeaders:
      type: object
      description: |
        Replicate signs each webhook with HMAC-SHA256 using the account's
        signing secret (retrievable via `GET /v1/webhooks/default/secret`).
        Verification: concatenate `webhook-id.webhook-timestamp.<raw body>`,
        HMAC-SHA256 with the portion of the secret following the `whsec_`
        prefix, base64-encode the result, and compare (constant-time)
        against the value(s) in `webhook-signature` after stripping the
        `v1,` version prefix. Validate `webhook-timestamp` against
        wall-clock time to prevent replay.
      required:
        - webhook-id
        - webhook-timestamp
        - webhook-signature
      properties:
        webhook-id:
          type: string
          description: |
            Unique identifier for the webhook message. Stable across
            retries of the same delivery.
        webhook-timestamp:
          type: string
          description: Unix epoch timestamp in seconds.
        webhook-signature:
          type: string
          description: |
            Space-delimited list of base64-encoded signatures, each
            prefixed with a version identifier (e.g. `v1,`).

    # --------------------------------------------------------------
    # Prediction object (shared between webhook payloads)
    # --------------------------------------------------------------
    Prediction:
      type: object
      description: |
        Replicate prediction object as delivered in the webhook body.
        Mirrors the response from `GET /v1/predictions/{prediction_id}`.
      required:
        - id
        - model
        - version
        - input
        - status
        - created_at
        - urls
      properties:
        id:
          type: string
          description: Unique prediction identifier.
        model:
          type: string
          description: Model identifier in the form `{owner}/{name}`.
        version:
          type: string
          description: 64-character model version ID.
        input:
          type: object
          description: Model inputs as JSON. Schema varies by model.
          additionalProperties: true
        output:
          description: |
            Model output as HTTPS URL(s), string, or arbitrary JSON value.
            Null until output is generated, and null again after data
            removal.
          nullable: true
        status:
          type: string
          enum: [starting, processing, succeeded, failed, canceled]
          description: Current prediction state.
        error:
          type: string
          nullable: true
          description: Error message when `status` is `failed`.
        logs:
          type: string
          description: Standard output / error captured from the prediction.
        created_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the prediction was created.
        started_at:
          type: string
          format: date-time
          nullable: true
          description: ISO 8601 timestamp when processing began.
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: ISO 8601 timestamp when the prediction finished.
        urls:
          $ref: '#/components/schemas/PredictionUrls'
        metrics:
          $ref: '#/components/schemas/PredictionMetrics'
        webhook:
          type: string
          format: uri
          description: HTTPS endpoint receiving these callbacks.
        webhook_events_filter:
          type: array
          description: Events that trigger webhook delivery for this prediction.
          items:
            type: string
            enum: [start, output, logs, completed]
        source:
          type: string
          enum: [web, api]
          description: How the prediction was created.
        data_removed:
          type: boolean
          description: Whether input/output have been deleted after expiration.

    PredictionTerminal:
      allOf:
        - $ref: '#/components/schemas/Prediction'
        - type: object
          description: |
            Prediction payload as delivered in the `completed` webhook;
            `status` is always one of the terminal values.
          properties:
            status:
              type: string
              enum: [succeeded, failed, canceled]

    PredictionUrls:
      type: object
      description: Convenience URLs associated with a prediction.
      properties:
        web:
          type: string
          format: uri
          description: Prediction webpage on replicate.com.
        get:
          type: string
          format: uri
          description: API endpoint to retrieve this prediction.
        cancel:
          type: string
          format: uri
          description: API endpoint to cancel this prediction.
        stream:
          type: string
          format: uri
          description: |
            Server-sent events URL for this prediction (present only when
            the model supports streaming). Served from
            `stream.replicate.com`.

    PredictionMetrics:
      type: object
      description: |
        Performance metrics. Populated only on terminated predictions.
      properties:
        predict_time:
          type: number
          description: Prediction execution time, in seconds.
        total_time:
          type: number
          description: Total wall-clock time, in seconds.

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/replicate-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.