Unqork · AsyncAPI Specification

Unqork Webhooks

Version

View Spec View on GitHub CompanyNo-CodeLow-CodeApplication DevelopmentEnterprise SoftwarePlatform as a ServiceWorkflowFinancial ServicesInsuranceGovernmentApplication ModernizationAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-07-31'
method: searched
source: >-
  https://docs.unqork.io/docs/consuming-payloads-using-webhooks,
  https://docs.unqork.io/docs/webhook-api-snippet,
  openapi/unqork-customer-api-openapi.yml
spec_type: none
asyncapi_published: false
description: >-
  Unqork publishes NO AsyncAPI document and NO outbound event catalog. Its event
  surface runs in the opposite direction from most API providers: Unqork does not
  emit webhooks to you — it RECEIVES them. A Creator turns an Unqork module into a
  webhook endpoint, hands that module URL to an external service (DocuSign,
  Stripe, …), and the module executes when the external service posts to it. This
  is a real, documented, first-class event surface with dedicated API operations,
  so it is captured here as a Webhooks artifact — but the direction is recorded
  explicitly so nobody mistakes it for a subscribe-to-Unqork-events product.

direction: inbound
direction_note: >-
  Unqork is the LISTENER. There is no event catalog to subscribe to, no event
  types enumerated, no signature-verification scheme, no delivery-retry policy
  and no webhook-management API — because Unqork is not the producer.

surface:
  mechanism: Unqork module acting as a webhook receiver
  endpoint_shape: >-
    The receiving module's own URL in the customer's environment. The generic
    "Execute via Proxy" operations on the Customer API are what accept the
    inbound call.
  operations:
    - operationId: apiProxySSEPost
      method: POST
      path: /modules/{moduleId}/api
      note: >-
        The primary webhook receiver. Webhooks usually arrive as POST. "SSE" in
        the operationId is Server-Side Execution, not Server-Sent Events.
    - operationId: apiProxySSEGet
      method: GET
      path: /modules/{moduleId}/api
    - operationId: apiProxySSEPut
      method: PUT
      path: /modules/{moduleId}/api
    - operationId: apiProxySSEPatch
      method: PATCH
      path: /modules/{moduleId}/api
    - operationId: apiProxySSEDelete
      method: DELETE
      path: /modules/{moduleId}/api
  content_types:
    inbound: >-
      Any. Execute via Proxy accepts arbitrary request formats including XML,
      which is why it exists — the rest of the Unqork API is JSON-only.
    outbound: >-
      Always JSON, sourced from `data.resolved`. An external service that
      requires an XML response cannot be served by an Unqork webhook module; that
      integration must be built as an outbound API call instead.
  failure_response: >-
    412 with a FailedExecuteResponse envelope (validationErrors[],
    invalidNavigationPanels, executionError) when the module runs but fails
    validation or execution. API modules with server-side execution may also
    return Creator-defined 4XX/5XX statuses.

security:
  model: >-
    An external service is an anonymous user to Unqork. To receive a webhook the
    Creator must grant anonymous-user RBAC permissions on the receiving module,
    which makes the module URL publicly callable.
  signature_verification: null
  shared_secret: null
  risk_note: >-
    Unqork documents this openly: "sharing a URL will make it publicly
    accessible. While discovering the URL and using it maliciously is unlikely,
    the risk does exist." Unqork's own recommended mitigation is to use an
    outbound API call instead of a webhook. There is no built-in HMAC signature
    check, timestamp/replay window, or allow-list documented for the receiver.
  conventions:
    naming: >-
      Unqork's best practice is to include `postback` in the receiving module's
      ID and title, e.g. `postbackDocuSign`.

documented_integrations:
  - {partner: DocuSign, use_case: 'DocuSign Connect envelope-status callback',
     docs: 'https://docs.unqork.io/docs/how-to-consume-a-docusign-connect-webhook'}
  - {partner: Stripe, use_case: 'invoice payment failures, payments needing further authorization, subscription status and changes'}

other_event_mechanisms:
  - name: Workflow timer-start nodes
    kind: scheduled trigger
    description: >-
      Time-based workflow triggers the Customer API can list, start, stop and
      test-run. The nearest thing Unqork has to an internal event producer.
    operations: [listTimerStartNodes, startTimerStartNode, stopTimerStartNode, runTimerStartNodeOnce]
  - name: Timed events
    kind: scheduled per-submission event
    description: Pending timed events attached to a workflow submission.
    operations: [listTimedEventsBySubmissionId]
  - name: Email notifications
    kind: outbound email (not webhooks)
    description: >-
      `shouldNotify` query parameters on createUser / updateUser control
      "New Account (Token Invitation)" and "User Changed" emails. This is the only
      outbound notification the Customer API triggers.
  - name: Audit logs
    kind: pull-based event log
    description: Environment audit trail, polled rather than pushed.
    operations: [listAuditLogs]

gaps:
  - No AsyncAPI document — nothing to harvest, nothing fabricated.
  - >-
    No outbound event catalog: an integrator cannot subscribe to
    "submission.created" or "workflow.completed". Change detection requires
    polling getAllSubmissions or listAuditLogs.
  - >-
    No signature verification on the inbound receiver, and receiving a webhook
    requires opening the module to anonymous users.
  - No webhook delivery/retry semantics, because Unqork is not the sender.