ComplyAdvantage · AsyncAPI Specification

Complyadvantage Webhooks

Version

View Spec View on GitHub Anti-Money LaunderingAMLFraud DetectionSanctions ScreeningCompliancePEP ScreeningAdverse MediaKYCWatchlistTransaction MonitoringFinancial CrimeRegTechAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-27'
method: searched
source: >-
  https://docs.mesh.complyadvantage.com/docs/webhooks.md,
  https://docs.mesh.complyadvantage.com/reference/notificationcreatewebhookconfiguration.md,
  ns_WebhookConfigurationPayload in openapi/complyadvantage-mesh-api-openapi.json,
  https://docs.complyadvantage.com/api-docs
provider: ComplyAdvantage
providerId: complyadvantage
asyncapi_published: false
description: >-
  ComplyAdvantage publishes no AsyncAPI document, but it does publish a genuinely
  substantial webhook contract - ten event types on Mesh with full payload examples, source
  IP allowlists per region, an at-least-once delivery guarantee with a stated retry
  schedule, and Standard Webhooks v1 HMAC-SHA256 signing documented down to the canonical
  string and the base64 alphabet. Three further events exist on the legacy REST API. This
  is the event surface an AsyncAPI would describe; it is captured here as a webhook catalog
  because authoring an AsyncAPI on the provider's behalf would misrepresent what they ship.
transport: HTTP POST to a subscriber-configured URL
management:
  configure: POST /v2/notifications/configurations/webhook (notificationCreateWebhookConfiguration)
  list: GET /v2/notifications/configurations/webhook (notificationGetWebhookConfigurations)
  update: PATCH /v2/notifications/configurations/webhook/{identifier} (notificationPatchWebhookConfiguration)
  test: POST /v2/notifications/configurations/webhook/test (notificationTestWebhookConfiguration)
  permission: Create and update webhooks
  note: >-
    One event type per configuration - the `type` field on the configuration payload takes
    a single enum value, so subscribing to all ten events means ten configurations.
    is_active toggles delivery without deleting the configuration. There is no delete
    operation for a webhook configuration in the contract (email configurations do have one).
delivery:
  guarantee: at-least-once
  duplicates: expected; the docs instruct receivers to be idempotent
  retries: 3
  retry_schedule:
  - after: 1s
  - after: 5s
  - after: 10s
  response_timeout_seconds: 5
  timeout_note: An attempt not completed within 5 seconds is recorded as failed and retried, so a slow endpoint sees duplicates just like an unavailable one.
  idempotency_key: webhook-id header, stable across all attempts of the same message
security:
  signing:
    standard: Standard Webhooks v1
    standard_url: https://www.standardwebhooks.com/
    enabled_by_default: false
    enablement: opt-in per account, via support; ComplyAdvantage generates a 256-bit secret
    algorithm: HMAC-SHA256
    canonical_string: '{webhook-id}.{webhook-timestamp}.{body}'
    encoding: base64 of the HMAC, prefixed "v1,"
    secret_format: standard-alphabet base64 (not URL-safe), decodes to 32 raw bytes, no whsec_ prefix
    rotation: zero-downtime - both secrets active, every message signed with both, header carries space-separated signatures, accept if any matches
    replay_protection: reject when webhook-timestamp is outside a +/-5 minute window
    headers:
    - webhook-id
    - webhook-timestamp
    - webhook-signature
  source_ips:
  - server: https://api.eu.mesh.complyadvantage.com/
    addresses: [99.81.100.211, 99.81.116.122, 99.81.123.126]
  - server: https://api.eu3.mesh.complyadvantage.com/
    addresses: [34.159.166.146, 34.159.147.62, 34.89.250.171]
  - server: https://api.us.mesh.complyadvantage.com/
    addresses: [34.67.184.6, 35.225.126.158, 34.70.66.162]
  - server: https://api.us2.mesh.complyadvantage.com/
    addresses: [3.129.172.188, 3.134.73.120, 52.14.135.67]
  - server: https://api.ca.mesh.complyadvantage.com/
    addresses: [34.47.8.155, 34.47.17.48, 34.95.18.164]
  - server: https://api.au.mesh.complyadvantage.com/
    addresses: [34.151.112.133, 35.201.15.175, 35.201.23.82]
events:
- name: CASE_CREATED
  api: Mesh
  payload_versions: [v1, v2]
  recommended_version: v2
  description: A new case is created.
  key_fields: [api_version, webhook_type, case_identifier, case_stage, case_type, customer.identifier, customer.external_identifier, subjects]
- name: CASE_TRANSITIONED
  api: Mesh
  payload_versions: [v1, v2]
  recommended_version: v2
  description: A case changes stage, e.g. from "Not Started" to "In Progress".
  replaces: CASE_STATE_UPDATED
  key_fields: [case_identifier, case_stage, note.contents, subjects]
- name: CASE_STATE_UPDATED
  api: Mesh
  deprecated: true
  replaced_by: CASE_TRANSITIONED
  description: Legacy case-state change event. Existing subscriptions continue to function; no cutoff date published.
- name: CASE_ALERT_LIST_UPDATED
  api: Mesh
  payload_versions: [v2]
  description: The alert list associated with a case is updated, such as when new alerts are added.
- name: WORKFLOW_COMPLETED
  api: Mesh
  description: >-
    An asynchronous create-and-screen workflow finishes. The primary completion signal for
    createCustomerAndScreenAsync - the alternative is polling GET /v2/workflows/{id}.
  key_fields: [workflow_instance_identifier, status, steps, step_details, workflow_type]
  screening_result_vocabulary: [SANCTION, WARNING, PEP_CLASS_1, PEP_CLASS_2, ADVERSE_MEDIA, ADVERSE_MEDIA_V2_CYBERCRIME]
- name: TRANSACTION_REVIEWED
  api: Mesh
  payload_versions: [v3]
  description: A transaction has been reviewed and either released or rejected.
  key_fields: [transaction_identifier, transaction_external_identifier, evaluation_outcome, review_decision]
- name: TRANSACTION_MONITORING_ASYNC_COMPLETED
  api: Mesh
  payload_versions: [v2]
  description: An asynchronous transaction-monitoring evaluation has completed.
  key_fields: [transaction_external_id, transaction_version, monitoring_outcome, scenario_evaluations]
- name: CUSTOMER_RISK_SCORE_CHANGED
  api: Mesh
  payload_versions: [v3]
  description: A customer's risk score value changes.
  key_fields: [customer_external_identifier, risk_score, previous_risk_score]
- name: CUSTOMER_RISK_LEVEL_INCREASED
  api: Mesh
  payload_versions: [v3]
  description: A customer's risk level increases, e.g. MEDIUM to HIGH.
- name: CUSTOMER_RISK_LEVEL_DECREASED
  api: Mesh
  payload_versions: [v3]
  description: A customer's risk level decreases, e.g. HIGH to MEDIUM.
- name: match_status_updated
  api: legacy REST
  description: The match status of an entity in a search changes.
  docs: https://docs.complyadvantage.com/api-docs
- name: search_status_updated
  api: legacy REST
  description: The status of a search changes.
- name: monitored_search_updated
  api: legacy REST
  description: A monitored search picks up a change against the underlying data.
legacy_api_note: >-
  Legacy webhook URLs are configured in the web application's account settings rather than
  through an API, and every configured URL receives every event - the docs tell you to
  differentiate in your own handler.
gaps:
- No AsyncAPI or CloudEvents description of this surface.
- Payload schemas are published as JSON examples in prose, not as components in the OpenAPI - a receiver cannot generate types from the contract.
- Signing is off unless the account asks for it.
- No delete operation for a webhook configuration; is_active=false is the only off switch.

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/complyadvantage-webhooks"
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.