Kajabi Webhooks API

The Webhooks API from Kajabi — 8 operation(s) for webhooks.

Operations 10

GET /v1/hooks List hooks
POST /v1/hooks Create hook
GET /v1/hooks/{id} Hook details
DELETE /v1/hooks/{id} Delete hook
GET /v1/hooks/tag_added_sample Tag added sample
GET /v1/hooks/tag_removed_sample Tag removed sample
GET /v1/hooks/form_submission_sample Form submission sample
GET /v1/hooks/purchase_sample Purchase sample
GET /v1/hooks/payment_succeeded_sample Payment succeeded sample
GET /v1/hooks/order_created_sample Order created sample

Documentation

Specifications

Schemas & Data

Other Resources

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/kajabi-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?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.

OpenAPI Specification

kajabi-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Kajabi API V1 Authentication Webhooks API
  version: 1.1.0
  description: "## Public API\n* Server URL `https://api.kajabi.com`\n* Endpoint paths are prefixed with `/v1`\n* Version endpoint `GET https://api.kajabi.com/v1/version`\n* See the [Developers Site](https://developers.kajabi.com) for documentation and examples.\n* Try the demo [Postman collection](https://www.postman.com/kajabi-apis/beta-public-api-demo/collection/fg4iyaz/kajabi-public-api-v1)\n## API Keys\n* Your API `client_id` and `client_secret` are available on the [User API Keys](https://app.kajabi.com/admin/settings/security) section of the Kajabi Admin Portal.\n  * Custom API Keys can be created with specific permissions.\n  * Click the \"Create User API Key\" button, enter a name (e.g. \"My project\"), select the user and permissions, and click \"Create\".\n  * For security purposes, you may \"Delete\" or \"Rotate\" the api credentials at any time; which will invalidate any access tokens granted with the credentials.\n## Video Walkthroughs\n* [Capabilities](https://drive.google.com/file/d/1Puc9B2sSdA-RQb7YMxmUXg4FVoEXytoc/view?usp=sharing)\n* [Getting Started](https://drive.google.com/file/d/1hbGRShkxven_QMWvgYrerHKURbcZrnvJ/view?usp=sharing)\n* [Error Examples](https://drive.google.com/file/d/1i0wQK71I1jpaZVsxYwsn62gVj40S_E7Y/view?usp=sharing)\n* [External Contact Form](https://drive.google.com/file/d/1HqpULXvan5TOK3LvM7nILCuCkCaX0kFT/view?usp=sharing)\n"
  contact:
    email: support@kajabi.com
    name: Support
    url: https://help.kajabi.com/hc/en-us/articles/4404549690523-How-to-Get-Help-From-Kajabi-Live-Agents
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: https://api.kajabi.com
  description: Production
tags:
- name: Webhooks
paths:
  /v1/hooks:
    get:
      summary: List hooks
      description: "Lists webhooks for a site\n\n## Pagination\nUse `page[number]` and `page[size]` parameters to paginate results:\n### Get first page of 10 items\n* `GET /v1/hooks?page[number]=1&page[size]=10`\n### Get second page of 25 items\n* `GET /v1/hooks?page[number]=2&page[size]=25`\n\nThe response includes pagination links and meta data:\n```json\n{\n  \"links\": {\n    \"self\": \"https://api.kajabi.com/v1/hooks?page[number]=2&page[size]=10\",\n    \"first\": \"https://api.kajabi.com/v1/hooks?page[number]=1&page[size]=10\",\n    \"prev\": \"https://api.kajabi.com/v1/hooks?page[number]=1&page[size]=10\",\n    \"next\": \"https://api.kajabi.com/v1/hooks?page[number]=3&page[size]=10\",\n    \"last\": \"https://api.kajabi.com/v1/hooks?page[number]=5&page[size]=10\"\n  },\n  \"meta\": {\n    \"total_pages\": 5,\n    \"total_count\": 50,\n    \"current_page\": 2\n  }\n}\n```\n## Filtering\nUse `filter[event_eq]` parameter to filter webhooks by event type:\n### Get webhooks for purchase events only\n* `GET /v1/hooks?filter[event_eq]=purchase`\n"
      tags:
      - Webhooks
      security:
      - Bearer: []
      parameters:
      - name: page[number]
        in: query
        required: false
        schema:
          type: integer
      - name: page[size]
        in: query
        required: false
        description: Number of documents
        schema:
          type: integer
      - name: filter[event_eq]
        in: query
        required: false
        schema:
          type: string
          enum:
          - purchase
          - form_submission
          - tag_added
          - tag_removed
          - payment_succeeded
          - order_created
        description: Filter by event type, for example ?filter[event_eq]=purchase
      responses:
        '200':
          description: Success, list of hooks which the current user may access
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/hooks_index_response'
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
    post:
      summary: Create hook
      description: "Creates a new webhook subscription\n\n## Request Body\nThe request must include:\n* `data` - parent object which includes the children/nested attributes:\n* `target_url` - The URL where webhook events will be sent\n* `event` - The type of event to subscribe to (see available events below), for example \"tag_added\"\n* `resource_id` (optional) - Specific resource ID to filter events for, for example the id of the Contact Tag. When the property is omitted, the webhook will be triggered for all events of the specified type, as a wildcard webhook.\n\n## Available Event Types\n\n| Event | Description | Required API Scopes |\n|-------|-------------|-------------------|\n| `purchase` | Customer makes a purchase | `view:purchases` |\n| `payment_succeeded` | Payment transaction completes successfully | `view:transactions` |\n| `order_created` | New order is created | `view:transactions`, `view:orders` |\n| `form_submission` | Someone submits a form | `view:form_submissions` |\n| `tag_added` | Tag is added to a contact | `view:contacts` |\n| `tag_removed` | Tag is removed from a contact | `view:contacts` |\n\n**Note**: You can only create webhooks for events you have permission to access based on your API key scopes. For example to use tags you need the `view:contacts` scope, which is included in the account owner api key scope.\n\n## Sample Payloads\nYou can view sample webhook payloads for each event type:\n* `GET /v1/hooks/purchase_sample`\n* `GET /v1/hooks/payment_succeeded_sample`\n* `GET /v1/hooks/order_created_sample`\n* `GET /v1/hooks/form_submission_sample`\n* `GET /v1/hooks/tag_added_sample`\n* `GET /v1/hooks/tag_removed_sample`\n\nExample request targeting a specific tag:\n```json\n{\n  \"data\": {\n    \"type\": \"hooks\",\n    \"attributes\": {\n      \"target_url\": \"https://example.com/webhook\",\n      \"event\": \"tag_added\",\n      \"resource_id\": \"123\"\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"456\",\n          \"type\": \"sites\"\n        }\n      }\n    }\n  }\n}\n```\n\nExample request using a wildcard webhook:\n```json\n{\n  \"data\": {\n    \"type\": \"hooks\",\n    \"attributes\": {\n      \"target_url\": \"https://example.com/webhook\",\n      \"event\": \"tag_added\"\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"456\",\n          \"type\": \"sites\"\n        }\n      }\n    }\n  }\n}\n```\n\n## Actual Payloads\nThe actual payloads are sent to the `target_url` as a POST request with the following JSON body:\n```json\n{\n  \"id\": \"hash_id\",\n  \"event\": \"tag_added\",\n  \"payload\": [],\n}\n```\nThe `id` is the ID of the resource that triggered the event.\nThe `event` is the type of event that triggered the webhook.\nThe `payload` is the actual payload of the event and the content will be similar to the sample payloads above.\n"
      tags:
      - Webhooks
      security:
      - Bearer: []
      parameters: []
      responses:
        '201':
          description: Success, webhook created
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/hooks_show_response'
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
        '422':
          description: Unprocessable Entity, invalid parameters
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unprocessable'
      requestBody:
        content:
          application/vnd.api+json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  properties:
                    type:
                      type: string
                      enum:
                      - hooks
                    attributes:
                      $ref: '#/components/schemas/hooks_attributes'
                    relationships:
                      type: object
                      properties:
                        site:
                          type: object
                          properties:
                            data:
                              $ref: '#/components/schemas/resource_identifier'
                      required:
                      - site
                  required:
                  - type
                  - attributes
                  - relationships
              required:
              - data
  /v1/hooks/{id}:
    get:
      summary: Hook details
      description: Returns specific hook based on it ID
      tags:
      - Webhooks
      security:
      - Bearer: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success, webhook retrieved
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/hooks_show_response'
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
        '404':
          description: Not Found, webhook does not exist
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_not_found'
    delete:
      summary: Delete hook
      description: Deletes a webhook subscription
      tags:
      - Webhooks
      security:
      - Bearer: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Success, webhook deleted
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
        '404':
          description: Not Found, webhook does not exist
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_not_found'
  /v1/hooks/tag_added_sample:
    get:
      summary: Tag added sample
      description: "Returns sample webhook payload for the `tag_added` event:\n```\n[\n  {\n    \"id\": \"0\",\n    \"type\": \"contacts\",\n    \"attributes\": {\n      \"name\": \"Sample Recipient\",\n      \"email\": \"sample@example.com\",\n      \"address_line_1\": \"123 Kajabi Ln\",\n      \"address_line_2\": \"Kajabi Suite 4\",\n      \"address_city\": \"Kajabiwood\",\n      \"address_country\": \"United Sites of Kajabi\",\n      \"address_state\": \"Kajabifornia\",\n      \"address_zip\": \"99999\",\n      \"phone_number\": \"5555555555\",\n      \"business_number\": null,\n      \"subscribed\": false,\n      \"external_user_id\": null,\n      \"created_at\": \"2025-07-31T16:51:04.010Z\",\n      \"updated_at\": \"2025-07-31T16:51:04.010Z\"\n    },\n    \"links\": {\n      \"customer\": \"\"\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      }\n    }\n  },\n  {\n    \"id\": \"0\",\n    \"type\": \"contact_tags\",\n    \"attributes\": {\n      \"name\": \"Tag\"\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      }\n    }\n  }\n]\n```\n## Actual Payloads\nThe actual payloads are sent to the `target_url` as a POST request with the following JSON body:\n```json\n{\n  \"id\": \"hash_id\",\n  \"event\": \"tag_added\",\n  \"payload\": [],\n}\n```\nThe `payload` array is the sample response above\n"
      tags:
      - Webhooks
      security:
      - Bearer: []
      responses:
        '200':
          description: Success, returns sample webhook payload
          content:
            application/vnd.api+json:
              schema:
                type: array
                items:
                  anyOf:
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - contacts
                      attributes:
                        $ref: '#/components/schemas/contacts_attributes'
                      relationships:
                        type: object
                        properties:
                          tags:
                            type: object
                            properties:
                              data:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                      enum:
                                      - contact_tags
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - contact_tags
                      attributes:
                        $ref: '#/components/schemas/contact_tags_attributes'
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
  /v1/hooks/tag_removed_sample:
    get:
      summary: Tag removed sample
      description: "Returns sample webhook payload for the `tag_removed` event:\n```\n[\n  {\n    \"id\": \"0\",\n    \"type\": \"contacts\",\n    \"attributes\": {\n      \"name\": \"Sample Recipient\",\n      \"email\": \"sample@example.com\",\n      \"address_line_1\": \"123 Kajabi Ln\",\n      \"address_line_2\": \"Kajabi Suite 4\",\n      \"address_city\": \"Kajabiwood\",\n      \"address_country\": \"United Sites of Kajabi\",\n      \"address_state\": \"Kajabifornia\",\n      \"address_zip\": \"99999\",\n      \"phone_number\": \"5555555555\",\n      \"business_number\": null,\n      \"subscribed\": false,\n      \"external_user_id\": null,\n      \"created_at\": \"2025-07-31T16:51:04.010Z\",\n      \"updated_at\": \"2025-07-31T16:51:04.010Z\"\n    },\n    \"links\": {\n      \"customer\": \"\"\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      }\n    }\n  },\n  {\n    \"id\": \"0\",\n    \"type\": \"contact_tags\",\n    \"attributes\": {\n      \"name\": \"Tag\"\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      }\n    }\n  }\n]\n```\n## Actual Payloads\nThe actual payloads are sent to the `target_url` as a POST request with the following JSON body:\n```json\n{\n  \"id\": \"hash_id\",\n  \"event\": \"tag_removed\",\n  \"payload\": [],\n}\n```\nThe `payload` array is the sample response above\n"
      tags:
      - Webhooks
      security:
      - Bearer: []
      responses:
        '200':
          description: Success, returns sample webhook payload
          content:
            application/vnd.api+json:
              schema:
                type: array
                items:
                  anyOf:
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - contacts
                      attributes:
                        $ref: '#/components/schemas/contacts_attributes'
                      relationships:
                        type: object
                        properties:
                          tags:
                            type: object
                            properties:
                              data:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                      enum:
                                      - contact_tags
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - contact_tags
                      attributes:
                        $ref: '#/components/schemas/contact_tags_attributes'
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
  /v1/hooks/form_submission_sample:
    get:
      summary: Form submission sample
      description: "Returns sample webhook payload for the `form_submission` event:\n```\n[\n  {\n    \"id\": \"0\",\n    \"type\": \"form_submissions\",\n    \"attributes\": {\n      \"name\": \"John Doe\",\n      \"email\": \"john.doe@example.com\",\n      \"address_line_1\": null,\n      \"address_line_2\": null,\n      \"address_city\": null,\n      \"address_country\": null,\n      \"address_state\": null,\n      \"address_zip\": null,\n      \"phone_number\": null,\n      \"business_number\": null,\n      \"mobile_phone_number\": null\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      },\n      \"form\": {\n        \"data\": {\n          \"id\": \"0\",\n          \"type\": \"forms\"\n        }\n      }\n    }\n  },\n  {\n    \"id\": \"0\",\n    \"type\": \"forms\",\n    \"attributes\": {\n      \"url\": \"https://bill-heaton.kajabi-products.test/forms/0\",\n      \"title\": \"Sample Form\",\n      \"default\": false,\n      \"webhook_url\": null,\n      \"created_at\": null,\n      \"updated_at\": null\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      },\n      \"fields\": {\n        \"data\": []\n      },\n      \"contact_tags\": {\n        \"data\": []\n      }\n    }\n  }\n]\n```\n## Actual Payloads\nThe actual payloads are sent to the `target_url` as a POST request with the following JSON body:\n```json\n{\n  \"id\": \"hash_id\",\n  \"event\": \"form_submission\",\n  \"payload\": [],\n}\n```\nThe `payload` array is the sample response above\n"
      tags:
      - Webhooks
      security:
      - Bearer: []
      responses:
        '200':
          description: Success, returns sample webhook payload
          content:
            application/vnd.api+json:
              schema:
                type: array
                items:
                  anyOf:
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - form_submissions
                      attributes:
                        $ref: '#/components/schemas/form_submission_attributes'
                      relationships:
                        type: object
                        properties:
                          tags:
                            type: object
                            properties:
                              data:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                      enum:
                                      - forms
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - forms
                      attributes:
                        $ref: '#/components/schemas/form_attributes'
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
  /v1/hooks/purchase_sample:
    get:
      summary: Purchase sample
      description: "Returns sample webhook payload for the `purchase` event:\n```\n[\n  {\n    \"id\": \"0\",\n    \"type\": \"purchases\",\n    \"attributes\": {\n      \"amount_in_cents\": 1000,\n      \"payment_type\": \"single\",\n      \"multipay_payments_made\": null,\n      \"opt_in\": false,\n      \"raw_extra_contact_information\": {},\n      \"currency\": \"USD\",\n      \"effective_start_at\": null,\n      \"cardholder_name\": null,\n      \"billing_address_zip\": null,\n      \"deactivated_at\": null,\n      \"deactivation_reason\": null,\n      \"coupon_code\": null,\n      \"source\": null,\n      \"referrer\": null,\n      \"quantity\": 1,\n      \"created_at\": \"2025-07-31T16:59:27.580Z\",\n      \"updated_at\": \"2025-07-31T16:59:27.580Z\"\n    },\n    \"relationships\": {\n      \"customer\": {\n        \"data\": {\n          \"id\": \"0\",\n          \"type\": \"customers\"\n        }\n      },\n      \"offer\": {\n        \"data\": {\n          \"id\": \"0\",\n          \"type\": \"offers\"\n        }\n      },\n      \"products\": {\n        \"data\": []\n      }\n    }\n  },\n  {\n    \"id\": \"0\",\n    \"type\": \"offers\",\n    \"attributes\": {\n      \"title\": \"Kajabi Test Offer\",\n      \"description\": null,\n      \"internal_title\": null,\n      \"currency\": \"USD\",\n      \"price_in_cents\": 1000,\n      \"payment_type\": \"single\",\n      \"token\": \"n8NtoHUZ\",\n      \"image_url\": null,\n      \"payment_method\": \"stripe_and_paypal\",\n      \"price_description\": \"$10.00 USD\",\n      \"checkout_url\": \"https://bill-heaton.kajabi-products.test/offers/n8NtoHUZ\",\n      \"recurring_offer\": false,\n      \"subscription\": false,\n      \"one_time\": true,\n      \"single\": true,\n      \"free\": false\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      },\n      \"products\": {\n        \"data\": []\n      },\n      \"forms\": {\n        \"data\": []\n      }\n    }\n  },\n  {\n    \"id\": \"0\",\n    \"type\": \"customers\",\n    \"attributes\": {\n      \"name\": \"John Doe\",\n      \"email\": \"john.doe@example.com\",\n      \"avatar\": null,\n      \"external_user_id\": null,\n      \"public_bio\": null,\n      \"public_location\": null,\n      \"public_website\": null,\n      \"socials\": null,\n      \"net_revenue\": \"0.0\",\n      \"sign_in_count\": 0,\n      \"last_request_at\": null,\n      \"bounced_at\": null,\n      \"created_at\": \"2025-07-31T16:59:27.552Z\",\n      \"updated_at\": \"2025-07-31T16:59:27.552Z\"\n    },\n    \"links\": {\n      \"contact\": \"https://www.kajabi.test/api/v1/contacts/0\"\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      },\n      \"contact\": {\n        \"data\": {\n          \"id\": \"0\",\n          \"type\": \"contacts\"\n        }\n      },\n      \"offers\": {\n        \"data\": [],\n        \"links\": {\n          \"self\": \"https://www.kajabi.test/api/v1/customers/0/relationships/offers\"\n        }\n      },\n      \"products\": {\n        \"data\": []\n      }\n    }\n  }\n]\n```\n## Actual Payloads\nThe actual payloads are sent to the `target_url` as a POST request with the following JSON body:\n```json\n{\n  \"id\": \"hash_id\",\n  \"event\": \"purchase\",\n  \"payload\": [],\n}\n```\nThe `payload` array is the sample response above\n"
      tags:
      - Webhooks
      security:
      - Bearer: []
      responses:
        '200':
          description: Success, returns sample webhook payload
          content:
            application/vnd.api+json:
              schema:
                type: array
                items:
                  anyOf:
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - purchases
                      attributes:
                        $ref: '#/components/schemas/purchases_attributes'
                      relationships:
                        type: object
                        properties:
                          customer:
                            type: object
                            properties:
                              data:
                                type: object
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - customers
                          offers:
                            type: object
                            properties:
                              data:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                      enum:
                                      - offers
                          products:
                            type: object
                            properties:
                              data:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                      enum:
                                      - offers
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - customers
                      attributes:
                        $ref: '#/components/schemas/customers_attributes'
                  - type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - offers
                      attributes:
                        $ref: '#/components/schemas/offers_attributes'
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
  /v1/hooks/payment_succeeded_sample:
    get:
      summary: Payment succeeded sample
      description: "Returns sample webhook payload for the `payment_succeeded` event:\n```\n[\n  {\n    \"id\": \"0\",\n    \"type\": \"transactions\",\n    \"attributes\": {\n      \"action\": \"charge\",\n      \"state\": \"succeeded\",\n      \"payment_type\": \"charge\",\n      \"amount_in_cents\": 1000,\n      \"sales_tax_in_cents\": 0,\n      \"currency\": \"USD\",\n      \"currency_symbol\": \"$\",\n      \"formatted_amount\": \"$10.00\",\n      \"created_at\": \"2025-07-31T17:10:19.285Z\"\n    },\n    \"relationships\": {\n      \"customer\": {\n        \"data\": {\n          \"id\": \"0\",\n          \"type\": \"customers\"\n        }\n      },\n      \"offer\": {\n        \"data\": null\n      }\n    }\n  },\n  {\n    \"id\": \"0\",\n    \"type\": \"customers\",\n    \"attributes\": {\n      \"name\": \"John Doe\",\n      \"email\": \"john.doe@example.com\",\n      \"avatar\": null,\n      \"external_user_id\": null,\n      \"public_bio\": null,\n      \"public_location\": null,\n      \"public_website\": null,\n      \"socials\": null,\n      \"net_revenue\": \"0.0\",\n      \"sign_in_count\": 0,\n      \"last_request_at\": null,\n      \"bounced_at\": null,\n      \"created_at\": \"2025-07-31T17:10:19.243Z\",\n      \"updated_at\": \"2025-07-31T17:10:19.243Z\"\n    },\n    \"links\": {\n      \"contact\": \"https://www.kajabi.test/api/v1/contacts/0\"\n    },\n    \"relationships\": {\n      \"site\": {\n        \"data\": {\n          \"id\": \"2\",\n          \"type\": \"sites\"\n        }\n      },\n      \"contact\": {\n        \"data\": {\n          \"id\": \"0\",\n          \"type\": \"contacts\"\n        }\n      },\n      \"offers\": {\n        \"data\": [],\n        \"links\": {\n          \"self\": \"https://www.kajabi.test/api/v1/customers/0/relationships/offers\"\n        }\n      },\n      \"products\": {\n        \"data\": []\n      }\n    }\n  }\n]\n```\n## Actual Payloads\nThe actual payloads are sent to the `target_url` as a POST request with the following JSON body:\n```json\n{\n  \"id\": \"hash_id\",\n  \"event\": \"payment_succeeded\",\n  \"payload\": [],\n}\n```\nThe `payload` array is the sample

# --- truncated at 32 KB (58 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kajabi/refs/heads/main/openapi/kajabi-webhooks-api-openapi.yml