Tackle.io Webhooks API

Operations for Webhooks

OpenAPI Specification

tackleio-webhooks-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Tackle Public Contracts Authentication Webhooks API
  description: "Customer-facing read API for cloud marketplace contracts that Tackle has\ningested for your Tackle account.\n\nThe response shape is a stable projection of the underlying\ncontract document. It is intended to be safe to consume long-term: fields\nwill be added over time, but documented fields will not be removed without\ndeprecation notice.\n\n## Authentication\n\nEvery request must include a valid Tackle JWT in the `Authorization`\nheader (`Authorization: Bearer <token>`). Machine-to-machine (MTM) tokens\nissued for your Tackle account are accepted. The token scopes every\nresponse to the account it represents.\n\n## Pagination\n\n`GET /api/contracts` is the only paginated endpoint. Pagination uses an\nopaque `cursor` query parameter:\n\n1. The first request omits `cursor`.\n2. If more pages exist, the response includes a `next` field. Pass that\n   value verbatim back as `cursor` on the next request.\n3. The last page omits `next`.\n\nCursors are opaque tokens. Do not parse, modify, or persist them across\nschema changes — request a fresh page from the start instead.\n"
  version: 1.0.0
servers:
- url: https://contracts.tackle.io
  description: Production
security:
- tackleJwt: []
tags:
- name: Webhooks
  description: Operations for Webhooks
paths:
  /v1/webhooks:
    parameters: []
    post:
      tags:
      - Webhooks
      summary: Create or Update a Webhook
      description: Create or update an existing webhook to receive order, private offer, and metering events as they happen
      operationId: v1-create-or-update-webhook
      responses:
        '200':
          $ref: '#/components/responses/Webhooks_200-OK-Webhooks'
        '400':
          $ref: '#/components/responses/400-Bad-Request'
        '401':
          $ref: '#/components/responses/401-Unauthorized'
        '403':
          $ref: '#/components/responses/403-Forbidden'
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhooksRequest'
            examples:
              example-1-header_api_key_clouds:
                value:
                  url: http://example.com
                  auth:
                    auth_type: header_api_key
                    auth_header_name: header_api_key_authorization
                    api_key: s0m3-3x4mp1e-4p1-k3y
                  filters:
                    supported_clouds:
                    - aws
                  private_offer_events_enabled: false
              example-2-basic_auth_product_id:
                value:
                  url: http://example.com
                  auth:
                    auth_type: basic
                    username: exampleUsername12345
                    password: securePassword67890
                  filters:
                    productid: 12345-abcdef-67890
                  private_offer_events_enabled: false
              example-3-oauth2-auth:
                value:
                  url: http://example.com
                  auth:
                    auth_type: oauth2
                    oauth2:
                      client_id: client-id-example
                      client_secret: client-secret-example
                      token_url: https://www.example.com/oauth-token
                  filters:
                    supported_clouds:
                    - aws
                    - azure
                    - gcp
                    private_offer_events_enabled: false
      security:
      - BearerAuth: []
      callbacks:
        onEvent:
          '{$request.body#/url}':
            post:
              requestBody:
                description: Webhook information; to receive order and private offer events as they happen
                content:
                  application/json:
                    schema:
                      oneOf:
                      - $ref: '#/components/schemas/AWSPrivateOfferCallback'
                      - $ref: '#/components/schemas/AzurePrivateOfferCallback'
                      - $ref: '#/components/schemas/GCPPrivateOfferCallback'
                      - $ref: '#/components/schemas/RedhatPrivateOfferCallback'
                      - $ref: '#/components/schemas/AWSNewOrderCallback'
                      - $ref: '#/components/schemas/AzureNewOrderCallback'
                      - $ref: '#/components/schemas/GCPNewOrderCallback'
                      - $ref: '#/components/schemas/RedhatNewOrderCallback'
              security:
              - BasicAuthCallback: []
              - HeaderApiKeyAuthCallback: []
              - Oauth2AuthCallback: []
              responses:
                '200':
                  description: Returns a `200` code if it accepts the callback
                  content:
                    application/json:
                      schema:
                        $ref: '#/components/schemas/ResponseStatusCode'
                        properties:
                          id:
                            type: string
                '400':
                  description: Returns a `400` code if there is an error. Provide error information
                  content:
                    application/json:
                      schema:
                        $ref: '#/components/schemas/ResponseStatusCode'
                        properties:
                          id:
                            type: string
    get:
      tags:
      - Webhooks
      summary: Get All Webhooks for Vendor
      description: Get all webhook configurations for a vendor including vendor-level and product-level webhooks
      operationId: v1-get-all-webhooks
      responses:
        '200':
          $ref: '#/components/responses/Webhooks_200-OK-Webhooks-GET-All'
        '400':
          $ref: '#/components/responses/400-Bad-Request'
        '401':
          $ref: '#/components/responses/401-Unauthorized'
        '403':
          $ref: '#/components/responses/403-Forbidden'
      parameters: []
      security:
      - BearerAuth: []
  /v1/webhooks/test:
    post:
      tags:
      - Webhooks
      summary: Test a Webhook
      description: Verify your webhooks by sending a test payload to the configured webhook URL
      operationId: v1-test-webhook
      security:
      - BearerAuth: []
      responses:
        '200':
          $ref: '#/components/responses/Webhooks_200-OK-Webhooks-Test'
        '400':
          $ref: '#/components/responses/400-Bad-Request'
        '401':
          $ref: '#/components/responses/401-Unauthorized-MTM'
        '403':
          $ref: '#/components/responses/403-Forbidden'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhooksTestRequest'
            examples:
              example-test-request-with-forward-to-url:
                value:
                  forward_to_url: http://example.com
                  event_type: order_modified
                  productid: 12345-abcdef-67890
              example-test-request:
                value:
                  event_type: order_modified
                  productid: 12345-abcdef-67890
  /v1/webhooks/vendor:
    delete:
      tags:
      - Webhooks
      summary: Delete a Vendor-Level Webhook
      description: Delete an existing vendor-level webhook
      operationId: v1-delete-webhook
      responses:
        '200':
          $ref: '#/components/responses/Webhooks_200-OK-Webhooks-Deleted-Vendor'
        '400':
          $ref: '#/components/responses/400-Bad-Request'
        '401':
          $ref: '#/components/responses/401-Unauthorized'
        '403':
          $ref: '#/components/responses/403-Forbidden'
        '404':
          $ref: '#/components/responses/Webhooks_404-Not-Found-Webhooks'
      security:
      - BearerAuth: []
    get:
      tags:
      - Webhooks
      summary: Get a Vendor-Level Webhook
      operationId: v1-get-vendor-webhook
      responses:
        '200':
          $ref: '#/components/responses/Webhooks_200-OK-Webhooks-GET'
        '400':
          $ref: '#/components/responses/400-Bad-Request'
        '401':
          $ref: '#/components/responses/401-Unauthorized'
        '403':
          $ref: '#/components/responses/403-Forbidden'
        '404':
          $ref: '#/components/responses/Webhooks_404-Not-Found-Webhooks'
      description: Get your current vendor-level webhook configuration
      security:
      - BearerAuth: []
  /v1/webhooks/product/{productid}:
    parameters:
    - $ref: '#/components/parameters/productid_path'
    delete:
      tags:
      - Webhooks
      summary: Delete a Product-Level Webhook
      description: Delete an existing webhook for a given product
      operationId: v1-delete-product-webhook
      responses:
        '200':
          $ref: '#/components/responses/Webhooks_200-OK-Webhooks-Deleted-Product'
        '400':
          $ref: '#/components/responses/400-Bad-Request'
        '401':
          $ref: '#/components/responses/401-Unauthorized'
        '403':
          $ref: '#/components/responses/403-Forbidden'
        '404':
          $ref: '#/components/responses/Webhooks_404-Not-Found-Webhooks'
      security:
      - BearerAuth: []
    get:
      tags:
      - Webhooks
      summary: Get a Product-Level Webhook
      operationId: v1-get-product-webhook
      responses:
        '200':
          $ref: '#/components/responses/Webhooks_200-OK-Webhooks-GET'
        '400':
          $ref: '#/components/responses/400-Bad-Request'
        '401':
          $ref: '#/components/responses/401-Unauthorized'
        '403':
          $ref: '#/components/responses/403-Forbidden'
        '404':
          $ref: '#/components/responses/Webhooks_404-Not-Found-Webhooks'
      description: Get your current webhook configuration for a given product
      security:
      - BearerAuth: []
components:
  schemas:
    AwsProductId:
      type: string
      description: AWS Product Code
      example: 1test1a2b3c4d5e6f7g8h9ijk
      minLength: 0
    WebhookTestExecutionResponseRequestPO:
      title: WebhookTestExecutionResponseRequestPO
      type: object
      properties:
        test:
          type: boolean
        destination:
          type: string
          enum:
          - callback
        private_offer_metadata:
          $ref: '#/components/schemas/PrivateOfferMetadata'
        extra_data:
          type: object
        source:
          type: string
        offerid:
          $ref: '#/components/schemas/OfferId'
        group_id:
          $ref: '#/components/schemas/GroupId'
        po_id:
          $ref: '#/components/schemas/PrivateOfferId'
        actor:
          $ref: '#/components/schemas/Actor'
        customerid:
          $ref: '#/components/schemas/CustomerId'
        event_type:
          $ref: '#/components/schemas/EventType'
        vendorid:
          $ref: '#/components/schemas/VendorId'
        productid:
          $ref: '#/components/schemas/ProductId'
        marketplace:
          $ref: '#/components/schemas/Clouds'
        created_at:
          $ref: '#/components/schemas/CreatedAt'
        tackle_subscription_id:
          $ref: '#/components/schemas/SubscriptionId'
        is_free_trial:
          $ref: '#/components/schemas/IsFreeTrial'
    Error:
      title: ErrorResponse
      type: object
      properties:
        code:
          type: string
          description: Error code
          minLength: 0
        error:
          type: string
          description: Error response
          minLength: 0
        errors:
          description: Error details
          type: array
          items: {}
        error_type:
          type: string
          enum:
          - service_exception
          - client_exception
      required:
      - code
      - error
      - errors
    RedHatCustomerId:
      type: string
      description: Red Hat Customer Id
      example: 615334398743ac63d55cc4db
      minLength: 0
    WebhooksUpsertResponse:
      title: WebhooksUpsertResponse
      type: object
      properties:
        data:
          type: object
          properties:
            url:
              $ref: '#/components/schemas/WebhookUrl'
            auth_type:
              $ref: '#/components/schemas/AuthType'
            filters:
              $ref: '#/components/schemas/WebhooksRequestFilters'
            private_offer_events_enabled:
              $ref: '#/components/schemas/PrivateOfferEventsEnabled'
            metering_events_enabled:
              $ref: '#/components/schemas/MeteringEventsEnabled'
          required:
          - url
          - auth_type
          - filters
        metadata:
          $ref: '#/components/schemas/Metadata'
      required:
      - metadata
    VendorId:
      type: string
      description: Tackle issued identifier for the Vendor
    AwsCloud:
      type: string
      description: AWS Cloud
      default: aws
      enum:
      - aws
      example: aws
    WebhooksRequestFilters:
      description: An object with either a valid `productid` or `supported_clouds`
      oneOf:
      - $ref: '#/components/schemas/ProductIdFilter'
      - $ref: '#/components/schemas/SupportedCloudsFilter'
    WebhooksGetAllResponseObject:
      title: WebhooksGetAllResponse
      type: object
      properties:
        url:
          $ref: '#/components/schemas/WebhookUrl'
        auth_type:
          $ref: '#/components/schemas/AuthType'
        productid:
          type: string
          nullable: true
          description: Product ID for product-level webhook, null if not product-level
        type:
          type: string
          description: Either 'product' or 'vendor' type
          enum:
          - product
          - vendor
    AzureCloud:
      type: string
      description: Azure Cloud
      default: azure
      enum:
      - azure
      example: azure
    WebhooksDeleteResponseProduct:
      title: WebhooksDeleteResponseProduct
      type: object
      properties:
        data:
          $ref: '#/components/schemas/DeleteWebhookResponse'
        metadata:
          $ref: '#/components/schemas/Metadata'
      required:
      - data
      - metadata
    RedHatSubscriptionType:
      type: string
      description: Type of the subscription
      enum:
      - TRIAL
      - FREE
      - PURCHASE
      example: TRIAL
    AwsCustomerId:
      type: string
      description: AWS Account Reference ID
      example: ij3sXMkN3or
      minLength: 0
    WebhookTestExecutionResponseRequestOrder:
      title: WebhookTestExecutionResponseRequestOrder
      type: object
      properties:
        vendorid:
          $ref: '#/components/schemas/VendorId'
        productid:
          $ref: '#/components/schemas/ProductId'
        customerid:
          $ref: '#/components/schemas/CustomerId'
        offerid:
          $ref: '#/components/schemas/OfferId'
        entitlements:
          $ref: '#/components/schemas/Entitlements'
        properties:
          $ref: '#/components/schemas/RegistrationDetails'
        marketplace:
          $ref: '#/components/schemas/Clouds'
        event_type:
          $ref: '#/components/schemas/EventType'
        tackle_subscription_id:
          $ref: '#/components/schemas/SubscriptionId'
        is_free_trial:
          $ref: '#/components/schemas/IsFreeTrial'
      required:
      - vendorid
      - productid
      - customerid
      - marketplace
      - event_type
    AuthPayload:
      oneOf:
      - $ref: '#/components/schemas/BasicAuth'
      - $ref: '#/components/schemas/HeaderApiKeyAuth'
      - $ref: '#/components/schemas/Oauth2'
      description: An object describing the type of authentication used by your Webhook URL
    HeaderApiKeyAuth:
      title: HeaderApiKeyAuth
      type: object
      properties:
        api_key:
          type: string
          description: A string containing the API key
          minLength: 1
        auth_header_name:
          type: string
          description: A string containing the auth header name
          minLength: 1
        auth_type:
          type: string
          default: header_api_key
          description: Use `header_api_key` to specify a custom HTTP request header for authentication. Requests from Tackle will use the specified HTTP header for outbound requests to your Webhook URL.
          enum:
          - header_api_key
      required:
      - api_key
      - auth_header_name
      - auth_type
    Clouds:
      anyOf:
      - $ref: '#/components/schemas/AwsCloud'
      - $ref: '#/components/schemas/GcpCloud'
      - $ref: '#/components/schemas/AzureCloud'
      - $ref: '#/components/schemas/RedHatCloud'
      description: A string identifying a cloud marketplace
    SubscriptionId:
      type: string
      description: Subscription Id
      example: 5fd2a7e8908e88888c7f0e71
      minLength: 0
      nullable: true
    PrivateOfferMetadata:
      type: object
      description: Contains information for a private offer associated with the subscription
      properties:
        renewal:
          type: boolean
          description: Whether the private offer has a renewal
        offer_expiration_at:
          type: string
          description: When the private offer expires.
        pricing:
          description: Pricing information for private offer.
          oneOf:
          - $ref: '#/components/schemas/AwsPricing'
          - $ref: '#/components/schemas/AzureGcpPricing'
    PrivateOfferEventsEnabled:
      type: boolean
      title: PrivateOfferEventsEnabled
      description: 'This setting registers webhooks for private offer events. Note: This setting can only be configured on a vendor level webhook but applies to all webhooks, including the vendor level webhook and all product level webhooks'
      default: false
    AwsMarketplaceData:
      type: object
      properties:
        data:
          type: object
          properties:
            CustomerAWSAccountId:
              title: CustomerAWSAccountId
              type: string
              description: AWS account ID associated to the customerid for the individual customer
              example: example-account-id
      description: Marketplace data specific to AWS
      title: AWS
    Entitlement:
      description: A purchase entitlement for a given cloud marketplace
      oneOf:
      - $ref: '#/components/schemas/AwsEntitlement'
      - $ref: '#/components/schemas/GcpEntitlement'
      - $ref: '#/components/schemas/AzureEntitlement'
      - $ref: '#/components/schemas/RedHatEntitlement'
      type: object
    AuthType:
      type: string
      title: AuthType
      enum:
      - basic
      - header_api_key
      - oauth2
      description: The type of authentication used. Supported types are 'basic', 'header_api_key', and 'oauth2'
    AzureNewOrderCallback:
      description: Link to New Offer payload variables https://developers.tackle.io/reference/payload-variables
      type: object
      properties:
        event_type:
          type: string
          example: order_created
        vendorid:
          type: string
          example: U9T21A
        productid:
          type: string
          example: tackle-azure-platform
        customerid:
          type: string
          example: 1b3gs3f4-2794-abcd-3fa3-062fa0s3t3re
        marketplace:
          type: string
          example: azure
        entitlements:
          type: array
          items:
            type: object
            properties:
              plan:
                type: string
                example: tackleazureplatform_azurelisting
              quantity:
                type: integer
                format: int32
                example: 1
              subscription_id:
                type: string
                example: 1b3gs3f4-2794-abcd-3fa3-062fa0s3t3re
              subscription_name:
                type: string
                example: Tackle Azure Platform
              offer_id:
                type: string
                example: tackle-azure-platform
        properties:
          type: object
          properties:
            Company:
              type: string
              example: Tackle
            Company Address:
              type: string
              example: 104 S. Capitol Blvd.
            Company Website:
              type: string
              example: https://tackle.io
            Email Address:
              type: string
              example: support@tackle.io
            Full Name:
              type: string
              example: Jane Doe
            Phone Number:
              type: string
              example: 1234567890
        offerid:
          type: string
          example: sample_azure_offer_id1
        contract_metadata:
          type: object
          properties:
            key:
              type: string
              example: value
        private_offer_metadata:
          type: object
          properties:
            buyers:
              type: array
              items:
                type: object
                properties:
                  full_name:
                    type: string
                    example: Example Person
                  email_address:
                    type: string
                    example: example-email@example.com
                  title:
                    type: string
                    example: CEO
            offer_metadata:
              type: object
            renewal:
              type: boolean
            eula:
              type: object
              properties:
                files:
                  type: array
                  items:
                    type: string
            enable_zero_dollar_prices:
              type: boolean
            offer_expiration_at:
              type: string
              format: date-time
              example: '2022-08-12T12:00:00+00:00'
            pricing:
              type: object
            pre_registration_details:
              type: object
              properties:
                Company:
                  type: string
                  example: Example Company
        is_free_trial:
          $ref: '#/components/schemas/IsFreeTrial'
        tackle_subscription_id:
          type: string
          example: 52fZSV7JbMI
        marketplace_data:
          $ref: '#/components/schemas/OtherMarketplaceData'
    RedHatSubscriptionRenewType:
      type: string
      description: Renew Type
      enum:
      - ORIGINAL_TERM
      - TERMINATE
      example: ORIGINAL_TERM
    ProductId:
      description: Cloud Marketplace issued ID for a product
      example: abcd-1234-efgh-5678
      anyOf:
      - $ref: '#/components/schemas/AwsProductId'
      - $ref: '#/components/schemas/GcpProductId'
      - $ref: '#/components/schemas/AzureProductId'
      - $ref: '#/components/schemas/RedHatProductId'
    DeleteWebhookResponse:
      title: DeleteWebhookResponse
      type: object
      properties:
        deleted:
          type: boolean
      required:
      - deleted
    BasicAuth:
      title: BasicAuth
      type: object
      example:
        username: authentication username
        password: authentication password
        auth_type: basic
      properties:
        username:
          type: string
          description: A string containing the username
          minLength: 1
        password:
          type: string
          description: A string containing the password
          format: password
        auth_type:
          type: string
          default: basic
          description: Use `basic` for [basic HTTP authentication](https://en.wikipedia.org/wiki/Basic_access_authentication)
          enum:
          - basic
      required:
      - username
      - password
      - auth_type
    AwsEntitlement:
      properties:
        dimension:
          type: string
        skuid:
          type: string
        expiration:
          type: string
          format: date-time
          example: '2019-04-24T12:23:03.048000+00:00'
        value:
          type: integer
      required:
      - dimension
      - skuid
      - expiration
      - value
      example:
        dimension: example_dimension_name
        expiration: '2019-04-24T12:23:03.048000+00:00'
        skuid: example_awsdimension_apiname_1
        value: 1
      description: 'A purchase entitlement from AWS Marketplace '
    WebhookUrl:
      type: string
      description: A valid URL for the endpoint you created to receive Tackle events
      format: uri
      example: https://www.example.com
    Entitlements:
      type: array
      description: A list of Entitlement objects
      uniqueItems: true
      minItems: 0
      example:
      - dimension: example_dimension_name
        expiration: '2019-04-24T12:23:03.048000+00:00'
        skuid: example_awsdimension_apiname_1
        value: 1
      - dimension: example_dimension_name2
        expiration: '2019-04-24T12:23:03.048000+00:00'
        value: 5
        skuid: example_awsdimension_apiname_1
      items:
        $ref: '#/components/schemas/Entitlement'
      readOnly: true
    GCPNewOrderCallback:
      description: Link to New Offer payload variables https://developers.tackle.io/reference/payload-variables
      type: object
      properties:
        event_type:
          type: string
          example: order_created
        vendorid:
          type: string
          example: U9T21A
        productid:
          type: string
          example: tackle-on-gcp
        customerid:
          type: string
          example: E-ABC2-D530-E2FG-H2Q2
        marketplace:
          type: string
          example: gcp
        entitlements:
          type: array
          items:
            type: object
            properties:
              account:
                type: string
                example: providers/tackle-public/accounts/E-ABC2-D530-E2FG-H2Q2
              createTime:
                type: string
                example: '2019-10-25T21:38:20.865Z'
              name:
                type: string
                example: providers/tackle-public/entitlements/416bacaa-94b6-4701-911bf945aab9
              plan:
                type: string
                example: tkl-tier-1
              product:
                type: string
                example: tackle-on-gcp
              state:
                type: string
                example: ENTITLEMENT_ACTIVE
              usage_reporting_id:
                type: string
                example: project_number:1234567890
        properties:
          type: object
          properties:
            Company:
              type: string
              example: Tackle
            Company Address:
              type: string
              example: 104 S. Capitol Blvd.
            Company Website:
              type: string
              example: https://tackle.io
            Email Address:
              type: string
              example: support@tackle.io
            Full Name:
              type: string
              example: Jane Doe
            Phone Number:
              type: string
              example: 1234567890
        offerid:
          type: string
          example: a1b2c3e4-a1b2-a1b2-a1b2-a1b2c3d4e5f6
        contract_metadata:
          type: object
          properties:
            key:
              type: string
              example: value
        private_offer_metadata:
          type: object
          properties:
            buyers:
              type: array
              items:
                type: object
                properties:
                  full_name:
                    type: string
                    example: Example Person
                  email_address:
                    type: string
                    example: example-email@example.com
                  title:
                    type: string
                    example: CEO
            offer_metadata:
              type: object
            renewal:
              type: boolean
            eula:
              type: object
              properties:
                files:
                  type: array
                  items:
                    type: string
            enable_zero_dollar_prices:
              type: boolean
            offer_expiration_at:
              type: string
              format: date-time
              example: '2022-08-12T12:00:00+00:00'
            pricing:
              type: object
            pre_registration_details:
              type: object
              properties:
                Company:
                  type: string
                  example: Example Company
        is_free_trial:
          $ref: '#/components/schemas/IsFreeTrial'
        tackle_subscription_id:
          type: string
          example: 52fZSV7JbMI
        marketplace_data:
          $ref: '#/components/schemas/OtherMarketplaceData'
    WebhookUrlResponse:
      type: string
      nullable: true
      description: A valid URL for the endpoint you created to receive Tackle events
      format: uri
      example: https://www.example.com
    CreatedAt:
      type: string
      description: Creation timestamp, UTC ISO format
      minLength: 1
      format: date-time
    PrivateOfferId:
      type: string
    GetWebhooksResponse:
      title: GetWebhooksResponse
      type: object
      properties:
        data:
          $ref: '#/components/schemas/GetWebhooksResponseList'
        metadata:
          $ref: '#/components/schemas/Metadata'
      required:
      - data
      - metadata
    EventType:
      type: string
      description: Type of event
      enum:
      - order_created
      - order_modified
      - order_cancelled
      - private_offer_invitation_opened
      - private_offer_created
      - private_offer_viewed
      - private_offer_purchase_instructions_sent
      - private_offer_accepted
      example: order_modified
    OtherMarketplaceData:
      description: GCP, Azure, and Red Hat do not currently have marketplace specific data
      type: object
      title: GCP, Azure, or Red Hat
    AzureCustomerId:
      type: string
      description: Azure Subscription ID
      example: 1b3gs3f4-2794-abcd-3fa3-063ga0s3t3re
      minLength: 0
    AzureProductId:
      type: string
      description: Azure Offer ID
      example: tackle-azure-platform
      minLength: 0
    WebhooksGetResponse:
      title: WebhooksGetResponse
      type: object
      properties:
        data:
          type: object
          required:
          - url
          - auth_type
          - filters
          properties:
            url:
              $ref: '#/components/schemas/WebhookUrl'
            auth_type:
              $ref: '#/components/schemas/AuthType'
            filters:
              $ref: '#/components/schemas/WebhooksRequestFilters'
            private_offer_events_enabled:
              $ref: '#/components/schemas/PrivateOfferEventsEnabled'
            metering_events_enabled:
              $ref: '#/components/schemas/MeteringEventsEnabled'
        metadata:
          $ref: '#/components/schemas/Metadata'
      required:
      - data
      - metadata
    Metadata:
      title: Metadata
      type: object
      description: Metadata for a given request
      properties:
        link:
          type: string
          format: uri
          example: https://api.tackle.io
      required:
      - link
    GcpCustomerId:
      type: string
      description: GCP External Account ID
      example: E-ABC2-D330-E2FG-H2Q2
      minLength: 0
    AzureEntitlement:
      type: object
      description: A purchase entitlement from Azure Marketplace
      properties:
        plan:
          type: string
        quantity:
          type: integer
        subscription_id:
          type: string
        subscription_name:
          type: string
        offer_id:
          type: string
      required:
      - plan
      - quantity
      - subscription_id
      - subscription_name
      - offer_id
    GcpEntitlement:
      type: object
      description: A purchase entitlement from GCP Marketplace
      properties:
        account:
          type: string
          description: The resource name of the account that this entitlement is based on, if any
        consumers:
          type: array
          description: The resources using this entitlement, if applicable
          items:
            type: string
        createTime:
          type: string
          format: date-time
          example: '2020-10-02T15:01:23.045123456Z'
        messageToUser:
          type: string
          description: Provider-supplied message that is displayed to the end user
        name:
          type: string
          description: 

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