Kartra · AsyncAPI Specification

Kartra Webhooks

Version

View Spec View on GitHub CompanyMarketing AutomationEmail MarketingCRMContactsE-CommercePaymentsSubscriptionsMembershipLanding PagesWebhooksSaaSAsyncAPIWebhooksEvents

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.