ManyChat · AsyncAPI Specification

Manychat Dynamic Block Webhooks

Version

View Spec View on GitHub Chat MarketingMessenger MarketingConversational CommerceMarketing AutomationInstagramWhatsAppFacebook MessengerSMSChatbotsCustomer EngagementAutomationAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-13'
method: searched
source: https://manychat.github.io/dynamic_block_docs/
spec_type: none
asyncapi_published: false
note: >-
  ManyChat publishes no AsyncAPI document and no subscriber/event webhook catalogue — it does not push
  events to you. Its entire asynchronous surface runs the other way: the "External Request" flow step calls
  YOUR endpoint from inside a ManyChat automation, and expects a Dynamic Block JSON response back which
  ManyChat then renders into the conversation. That makes ManyChat the CALLER and the integrator the
  webhook receiver — the inverse of the usual provider webhook. The response contract is real, versioned
  (`"version": "v2"`) and first-party, published by the ManyChat GitHub organization at
  manychat.github.io/dynamic_block_docs, so it is captured here as the webhook surface. Nothing below is
  fabricated; the message/action/button type lists are read verbatim from that reference.
surface:
  direction: outbound
  mechanism: External Request flow step
  caller: ManyChat
  receiver: partner HTTP endpoint
  transport: HTTPS
  request_content_type: application/json
  response_content_type: application/json
  availability: Pro plan and above (the External Request block is a paid feature)
  docs:
    - https://manychat.github.io/dynamic_block_docs/
    - https://help.manychat.com/hc/en-us/articles/14281285374364-Dev-Tools-External-request
    - https://help.manychat.com/hc/en-us/articles/14281252007580-Dev-Tools-Basics
response_contract:
  name: Dynamic Block
  version: v2
  envelope:
    version: string, "v2"
    content.messages: array, required, max 10
    content.actions: array, optional, max 5
    content.quick_replies: array, optional, max 11
  limits:
    messages: 10
    quick_replies: 11
    actions: 5
message_types:
  - {type: text, note: 'supports url, flow and node buttons'}
  - {type: image, note: 'JPG, PNG, GIF on Messenger; supports url, call, buy, flow and node buttons'}
  - {type: video}
  - {type: audio}
  - {type: file}
  - {type: cards, note: gallery cards}
button_types:
  - {type: call}
  - {type: url}
  - {type: node, note: 'go to node — see the reference for channel caveats'}
  - {type: flow, note: go to Flow}
  - {type: buy}
  - {type: dynamic_block_callback, note: calls the External Request endpoint again}
action_types:
  - {action: add_tag, effect: applies a page tag to the contact}
  - {action: remove_tag, effect: removes a page tag from the contact}
  - {action: set_field_value, effect: writes a custom field value on the contact}
  - {action: unset_field_value, effect: clears a custom field value on the contact}
quick_reply_types:
  - {type: node}
  - {type: flow}
  - {type: dynamic_block_callback}
channel_variants:
  - {name: Response Reference for Facebook Automation, docs: 'https://manychat.github.io/dynamic_block_docs/'}
  - {name: Response Reference for Instagram, WhatsApp, and Telegram Automation, docs: 'https://manychat.github.io/dynamic_block_docs/'}
also_documented:
  - External Message Callback
  - Variables
signing:
  published: false
  note: >-
    No request-signing, shared-secret or verification contract is documented for the External Request call.
    A receiver has no published way to prove the call came from ManyChat.
retries:
  published: false
  note: No retry, backoff or delivery-guarantee contract is documented.
gaps:
  - No AsyncAPI document is published.
  - No inbound event webhooks (subscriber created, message received, tag applied) are offered by the API.
  - No request signing or replay protection is documented for the outbound call.
  - No delivery/retry semantics are documented.