Kartra · AsyncAPI Specification

Kartra Webhooks

Version

View Spec View on GitHub CompanyMarketing AutomationEmail MarketingCRMContactsE-CommercePaymentsSubscriptionMembershipLanding PagesWebhookSoftware-as-a-ServiceAsyncAPIEvents

AsyncAPI Specification

kartra-webhooks.yml Raw ↑
generated: '2026-08-12'
method: searched
source: https://support.kartra.com/en/collections/19655232-developers
spec_type: none
spec_note: >-
  Kartra publishes NO AsyncAPI document. It does publish a complete, per-event
  payload reference for two distinct callback surfaces, captured below as a
  webhook catalogue. Nothing here is generated: every event name, action value
  and payload key is transcribed from Kartra's own documentation.
surfaces:
- name: Outbound API
  kind: webhook
  direction: kartra-to-you
  transport: HTTP POST, raw body, JSON
  configuration: Account UI, Integrations > My API > Outbound API — one or more target URLs, each subscribed to one or more events
  docs: https://support.kartra.com/en/articles/15369054-activating-the-outbound-api
  envelope:
    lead: Full lead profile object (identical shape across every event) including custom_fields[] and the four gdpr_* consent fields
    action: String naming the event
    action_details: Event-specific object, shape varies per event
- name: IPN (Instant Payment Notification)
  kind: webhook
  direction: kartra-to-you
  transport: HTTP POST, form fields (not JSON)
  configuration: Per-product IPN URL; the docs recommend pointing it at a .php file on an https domain
  docs: https://support.kartra.com/en/articles/15369003-the-ipn-system
  envelope_note: >-
    Flat POST variables, not a nested object. "Any variable with an empty value
    will be posted as 'N/A.'" — consumers must string-compare against the
    literal "N/A" rather than testing for null or a missing key.
event_count: 30
outbound_api_events:
- action: "jv_signup"
  title: "If a JV signs up for a product"
  action_details_fields: [product, product_id, product_name, official_product_name]
  source: https://support.kartra.com/en/articles/15391959-if-a-jv-signs-up-for-a-product
- action: "cancel_subscription"
  title: "If a subscription is cancelled"
  action_details_fields: [transaction_details, transaction_id, lead_first_name, lead_last_name, lead_email, lead_username, lead_id, product_name, product_id, product_price_point, transaction_date, transaction_type]
  source: https://support.kartra.com/en/articles/15391960-if-a-subscription-is-cancelled
- action: null
  title: "If a transaction is refunded"
  action_details_fields: [transaction_details, transaction_id, lead_first_name, lead_last_name, lead_email, lead_username, lead_id, product_name, product_id, product_price_point, transaction_quantity, transaction_full_amount]
  source: https://support.kartra.com/en/articles/15391961-if-a-transaction-is-refunded
- action: "affiliate_signup"
  title: "If an affilate signs up for a product"
  action_details_fields: [product, product_id, product_name, official_product_name]
  source: https://support.kartra.com/en/articles/15391963-if-an-affilate-signs-up-for-a-product
- action: "buy_product"
  title: "If lead buys a product"
  action_details_fields: [transaction_details, transaction_id, lead_first_name, lead_last_name, lead_email, lead_username, lead_id, product_name, product_id, product_price_point, transaction_quantity, transaction_full_amount]
  source: https://support.kartra.com/en/articles/15391964-if-lead-buys-a-product
- action: "calendar_cancel"
  title: "If lead cancels a calendar"
  action_details_fields: [calendar, calendar_id, calendar_name, class_id, class_name, hosts, host_first_name, host_last_name, host_email_address, vendor_timezone, calendar_subscription_id, events]
  source: https://support.kartra.com/en/articles/15391965-if-lead-cancels-a-calendar
- action: "click_page_split_test_link"
  title: "If lead clicks on a page split test link"
  action_details_fields: [page_split_test_link, page_split_test_link_id, page_split_test_link_name]
  source: https://support.kartra.com/en/articles/15391966-if-lead-clicks-on-a-page-split-test-link
- action: "calendar_complete"
  title: "If lead completes a calendar"
  action_details_fields: [calendar, calendar_id, calendar_name, class_id, class_name, hosts, host_first_name, host_last_name, host_email_address, vendor_timezone, calendar_subscription_id, events]
  source: https://support.kartra.com/en/articles/15391967-if-lead-completes-a-calendar
- action: "sequence_completion"
  title: "If lead completes a sequence"
  action_details_fields: [sequence, sequence_id, sequence_name]
  source: https://support.kartra.com/en/articles/15391968-if-lead-completes-a-sequence
- action: "survey_complete"
  title: "If lead completes a survey"
  action_details_fields: [survey, survey_id, survey_name, survey_type, survey_score, survey_completion_time, questions, question_id, question_title, question_correct, answers, option_id]
  source: https://support.kartra.com/en/articles/15391969-if-lead-completes-a-survey
- action: "video_complete"
  title: "If lead completes video"
  action_details_fields: [video, video_id, video_name]
  source: https://support.kartra.com/en/articles/15391971-if-lead-completes-video
- action: "filled_form"
  title: "If lead fills in a form"
  action_details_fields: [tag, form_id, form_name]
  source: https://support.kartra.com/en/articles/15391972-if-lead-fills-in-a-form
- action: "assign_tag"
  title: "If lead is assigned a tag"
  action_details_fields: [tag, tag_id, tag_name]
  source: https://support.kartra.com/en/articles/15391973-if-lead-is-assigned-a-tag
- action: "membership_granted"
  title: "If lead is granted access to membership (Kartra or external)"
  action_details_fields: [membership, membership_id, membership_name, level_id, level_name]
  source: https://support.kartra.com/en/articles/15391974-if-lead-is-granted-access-to-membership-kartra-or-external
- action: "membership_revoked"
  title: "If lead is revoked access to membership (Kartra or external)"
  action_details_fields: [membership, membership_id, membership_name, level_id, level_name]
  source: https://support.kartra.com/en/articles/15391975-if-lead-is-revoked-access-to-membership-kartra-or-external
- action: "sequence_subscription"
  title: "If lead is subscribed to a sequence"
  action_details_fields: [sequence, sequence_id, sequence_name]
  source: https://support.kartra.com/en/articles/15391976-if-lead-is-subscribed-to-a-sequence
- action: "unassign_tag"
  title: "If lead is unassigned a tag"
  action_details_fields: [tag, tag_id, tag_name]
  source: https://support.kartra.com/en/articles/15391977-if-lead-is-unassigned-a-tag
- action: "sequence_unsubscription"
  title: "If lead is unsubscribed from a sequence"
  action_details_fields: [sequence, sequence_id, sequence_name]
  source: https://support.kartra.com/en/articles/15391978-if-lead-is-unsubscribed-from-a-sequence
- action: "video_play"
  title: "If lead plays video"
  action_details_fields: [video, video_id, video_name]
  source: https://support.kartra.com/en/articles/15391979-if-lead-plays-video
- action: "reaches_score"
  title: "If lead reaches score for the first time"
  action_details_fields: [points]
  source: https://support.kartra.com/en/articles/15391980-if-lead-reaches-score-for-the-first-time
- action: "calendar_subscribe"
  title: "If lead subscribes to a calendar"
  action_details_fields: [calendar, calendar_id, calendar_name, class_id, class_name, hosts, host_first_name, host_last_name, host_email_address, vendor_timezone, calendar_subscription_id, events]
  source: https://support.kartra.com/en/articles/15391981-if-lead-subscribes-to-a-calendar
- action: "list_subscription"
  title: "If lead subscribes to a list"
  action_details_fields: [list, list_id, list_name]
  source: https://support.kartra.com/en/articles/15391982-if-lead-subscribes-to-a-list
- action: "list_unsubscription"
  title: "If lead unsubscribes from a list"
  action_details_fields: [list, list_id, list_name]
  source: https://support.kartra.com/en/articles/15391983-if-lead-unsubscribes-from-a-list
- action: "kartra_page_visit"
  title: "If lead visits a Kartra page"
  action_details_fields: [kartra_page, kartra_page_id, kartra_page_name]
  source: https://support.kartra.com/en/articles/15391984-if-lead-visits-a-kartra-page
ipn_events:
- id: one-time-payment
  title: Sale, refund or chargeback for one-time payments without an initial payment (trial) enabled
  discriminator: transaction_type
  values: [sale, refund, partial_refund]
  source: https://support.kartra.com/en/articles/15369004-sale-refund-or-chargeback-for-one-time-payments-without-an-initial-payment-aka-trial-enabled
- id: trial-or-subscription-sale
  title: Sale for one-time payments with an initial payment (trial), or sale for a subscription
  source: https://support.kartra.com/en/articles/15369005-sale-for-one-time-payments-with-an-initial-payment-aka-trial-or-sale-for-a-subscription
- id: rebill
  title: Rebill for a subscription, or a follow up after a one-time payment initial payment (trial)
  source: https://support.kartra.com/en/articles/15369006-rebill-for-a-subscription-or-a-follow-up-after-a-one-time-payment-initial-payment-trial
- id: recurring-refund-or-failure
  title: Refund, failed rebill, or chargeback for a recurring subscription payment, or for a one time payment with a trial
  source: https://support.kartra.com/en/articles/15369007-refund-failed-rebill-or-chargeback-for-a-recurring-subscription-payment-or-for-a-one-time-payment-with-a-trial
- id: subscription-cancellation
  title: Cancelation of a recurring payment subscription
  source: https://support.kartra.com/en/articles/15369008-cancelation-of-a-recurring-payment-subscription
- id: ipn-system
  title: The IPN system (variable reference and configuration notes)
  source: https://support.kartra.com/en/articles/15369003-the-ipn-system
ipn_core_variables:
  transaction: [transaction_id, transaction_full_amount, transaction_base_amount, transaction_discount, transaction_shipping, transaction_tax, transaction_date, transaction_type, transaction_parent_id, transaction_affiliate, transaction_jv, transaction_quantity, transaction_subscription_id, transaction_internal_subscription_id, transaction_subscription_pay_number, transaction_last_4_card_digits, original_id]
  product: [product_name, product_id, product_price_point, trial, trial_amount, trial_period, payments_left]
  buyer: [lead_id, lead_first_name, lead_last_name, lead_email, lead_username, lead_phone_country_code, lead_phone_number, lead_address, lead_city, lead_zip, lead_state, lead_country, lead_country_code_2]
  refund_note: >-
    On refund or partial_refund the system additionally sends
    transaction_parent_id, the original sale's order id, so the consumer can
    match the reversal to the original transaction.
security:
  signing: none
  shared_secret: none
  replay_protection: none
  source_ip_allowlist: not published
  note: >-
    Kartra documents no HMAC signature, no timestamp header and no shared secret
    for either the Outbound API or IPN. A receiver cannot cryptographically
    verify that a callback came from Kartra. The documented consumption pattern
    is a bare file_get_contents("php://input") with no verification step. This
    is the most significant security gap on Kartra's event surface.
delivery:
  retries: not documented
  ordering: not documented
  at_least_once: not documented
gaps:
- No AsyncAPI or JSON Schema for any event payload.
- No signature verification on either callback surface.
- No delivery/retry semantics published, so consumers cannot reason about duplicates or gaps.
- The two surfaces overlap (buy_product on the Outbound API vs the IPN sale) with different encodings — JSON body vs form POST — and different field naming.

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