Cardlytics · AsyncAPI Specification

Cardlytics Publisher Webhooks

Version

View Spec View on GitHub CompanyAdvertisingCommerce MediaCard-Linked OffersPurchase IntelligenceFinancial-ServicesLoyalty and RewardsMarketingBankingRetail MediaAttributionOffersAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-12'
method: searched
source:
- https://docs.cardlytics.com/ads/v2/developer-tools/notifications-webhook.html
- https://docs.cardlytics.com/ads/v2/developer-tools/rtm.html
- https://docs.cardlytics.com/poweredby/api-reference-notify-transaction.html
- https://docs.cardlytics.com/poweredby/api-reference-notify-reward.html
- https://docs.cardlytics.com/poweredby/api-reference-notify-enrollment.html
- https://docs.cardlytics.com/poweredby/api-reference-notify-transaction-ach.html
spec_type: Webhooks
asyncapi: false
asyncapi_note: >-
  Cardlytics publishes NO AsyncAPI document. Searched the developer hub
  (platform.cardlytics.com, both child projects), the legacy docs snapshot
  (docs.cardlytics.com), /asyncapi.yaml and /asyncapi.json on every host, and
  there is no public GitHub organization to search. The event surface below is
  documented in prose only. Nothing here is fabricated — it is transcribed from
  the provider's own webhook and real-time-messaging pages.
summary: >-
  Cardlytics has a genuine event surface, but it is inverted relative to most
  API providers: Cardlytics does not host webhook subscriptions. The PARTNER
  builds and hosts an endpoint, and Cardlytics posts to it. Endpoint URLs are
  configured out-of-band with an implementation consultant — there is no
  self-service subscription API, no signing-secret rotation endpoint, no
  delivery-retry policy, and no replay or dead-letter surface published.
direction: cardlytics -> partner (provider-initiated, partner-hosted receiver)
delivery:
  transport: HTTPS POST, application/json
  configuration: >-
    Out-of-band. "Contact your designated Cardlytics implementation consultant"
    to have events routed to your endpoint.
  authentication:
    scheme: HS256 JWT bearer
    detail: >-
      Powered by Cardlytics webhooks are authenticated with an Authorization
      Bearer JWT signed with the shared secretKey, where sub is the hex-encoded
      MD5 digest of the JSON request body and exp is at most 60 minutes out.
      Each configured webhook gets its own applicationId.
    source: https://docs.cardlytics.com/poweredby/api-reference-authentication.html
  retries:
    documented: false
  signature_header:
    documented: false
    note: Body integrity is bound into the JWT sub claim rather than a separate signature header.
  status_codes: Standard HTTP; receivers are expected to honor the same code table as the REST APIs.
channels:
- name: publisher-notification-webhook
  description: >-
    Redemption close-the-loop and activity-based notifications. Cardlytics
    ingests authorization data through the Transaction API, matches it to a
    merchant and one or more valid offers, determines the qualifying event, and
    posts the result to the publisher-managed webhook so the publisher can
    message the customer.
  payload_fields:
  - {field: transactionIdentifier, type: string, description: Unique id for the authorization transaction record. Must not be the account number.}
  - {field: transactionType, type: integer, description: '0 = Auth, 1 = Cleared'}
  - {field: externalAccountIdentifier, type: string(120), description: Unique id for the account. Must not be the account number.}
  - {field: notificationType, type: EventType, description: Type of notification}
  - {field: merchantName, type: string(350), description: Transaction description as it appears on the customer statement.}
  - {field: brandingURL, type: string, description: Name of the merchant logo associated with an offer.}
  - {field: brandingURLFileTypeName, type: string(4), description: File extension of the offer logo.}
  - {field: sourceCustomerID, type: string, description: Unique id for the customer. Must not be the account number.}
  caveat: >-
    The sourceAccountId Cardlytics returns is the id received during transaction
    import, which is not necessarily the account id used elsewhere in publisher
    systems.
  source: https://docs.cardlytics.com/ads/v2/developer-tools/notifications-webhook.html
- name: real-time-messaging
  description: >-
    Real-Time Messaging (RTM) posts certain platform events to a
    publisher-hosted endpoint as soon as they become available, to drive
    marketing workflows.
  events:
  - name: Redemption Notification
    example_event_type: REDEMPTION_CONFIRMED
    payload_fields:
    - {field: event, type: RealtimeMessagingEventType, description: Type of RTM event}
    - {field: eventId, type: string, description: Unique uuid for the RTM event}
    - {field: eventTimestamp, type: string, description: ISO 8601 timestamp of the redemption event}
    - {field: redemptions, type: 'Redemption[]', description: List of redemptions}
    redemption_fields:
    - redemptionId
    - adId
    - amount
    - redemptionDate
    - sourceCustomerId
    - sourceAccountId
    - redeemingTransactionAmount
    - transactionId
    - rewardSettlementRunDate
  enumeration_reference: https://docs.cardlytics.com/ads/v2/objects/enumerations/realtime-messaging-event-type.html
  source: https://docs.cardlytics.com/ads/v2/developer-tools/rtm.html
- name: powered-by-notify-endpoints
  description: >-
    The Powered by Cardlytics marketplace integration defines a matching set of
    partner-hosted notify endpoints Cardlytics calls.
  endpoints:
  - {name: notify-transaction, source: https://docs.cardlytics.com/poweredby/api-reference-notify-transaction.html}
  - {name: notify-transaction-ach, source: https://docs.cardlytics.com/poweredby/api-reference-notify-transaction-ach.html}
  - {name: notify-reward, source: https://docs.cardlytics.com/poweredby/api-reference-notify-reward.html}
  - {name: notify-enrollment, source: https://docs.cardlytics.com/poweredby/api-reference-notify-enrollment.html}
  - {name: sandbox-notify-transactions, source: https://docs.cardlytics.com/poweredby/api-reference-sandbox-notify-transactions.html}
  - {name: test-sandbox-notify-reward, source: https://docs.cardlytics.com/poweredby/api-reference-test-sandbox-notify-reward.html}
  - {name: test-sandbox-notify-enrollment, source: https://docs.cardlytics.com/poweredby/api-reference-test-sandbox-notify-enrollment.html}
- name: client-events
  description: >-
    The inbound complement to the outbound events: publishers POST customer
    activity (impressions, offer activation, redemption-history browsing) back to
    Cardlytics through the Events API so the platform can model interactions.
  direction: partner -> cardlytics
  enumeration_reference: https://docs.cardlytics.com/ads/v2/objects/enumerations/client-event-type.html
  source: https://docs.cardlytics.com/ads/v2/api/data/post-customer-event.html
gaps:
- No AsyncAPI, no event schema registry, and no machine-readable event catalog.
- No published subscription/registration API; endpoints are configured by a human.
- No documented retry, backoff, replay or dead-letter behavior for failed deliveries.
- Event type enumerations are documented on the legacy docs host only.

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/cardlytics-publisher-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 email required.

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