Sample Agreement (AWS) Payloads

Sample webhook payloads for AWS Marketplace agreement events


Agreement webhooks provide near real-time notifications for events related to your customers' AWS Marketplace agreements. Use these notifications to trigger provisioning workflows, update customer records, or adjust entitlement status in your systems.

AWS Only — Agreement webhooks are for AWS Marketplace only.

Subscribing to Agreement Webhooks

Agreement webhooks are delivered to the endpoint configured for your vendor account (or a product-level endpoint if one is set). See Create or Update Webhook to configure your endpoint.

Your endpoint must:

  • Accept POST requests with Content-Type: application/json
  • Return a 2xx HTTP status code (e.g., 200 OK) to acknowledge receipt
  • Respond within 10 seconds — offload long-running work to an async process

Event Types

Event TypeDescription
agreement_registeredA customer's agreement has been successfully registered (Tackle-hosted or ISV-hosted). Use this to kick off provisioning and create customer records.
agreement_changedAn agreement's status or terms have changed — for example, it was renewed, cancelled, or expired. Use this to keep your system in sync with the agreement lifecycle.
agreement_license_updatedThe License ARN associated with an agreement has been updated or deprovisioned. Use this to track license entitlement changes.

Agreement Registered

Sent when a customer completes registration after accepting an AWS Marketplace offer.

Fields

FieldTypeDescription
event_idStringUnique identifier for this event notification.
event_typeStringagreement_registered
cloudStringaws
agreement.idStringThe unique identifier for the agreement.
agreement.typeStringThe type of agreement (e.g., PurchaseAgreement, VendorInsightsAgreement).
agreement.statusStringThe current status of the agreement (e.g., ACTIVE, ARCHIVED, CANCELLED, EXPIRED, RENEWED, REPLACED, ROLLED_BACK, SUPERSEDED, TERMINATED).
agreement.start_timeStringThe agreement's start timestamp in ISO 8601 format.
agreement.end_timeStringThe agreement's end timestamp in ISO 8601 format. Can be an empty string.
agreement.acceptance_timeStringTimestamp when the customer accepted the offer in ISO 8601 format.
agreement.acceptor_account_idStringThe AWS Account ID of the customer who accepted the agreement.
agreement.proposer_account_idStringThe AWS Account ID of the vendor who proposed the agreement.
agreement.product_idStringThe product's unique identifier.
agreement.product_typeStringThe type of product (e.g., SaaSProduct, AmiProduct, ContainerProduct, ProfessionalServicesProduct, MachineLearningProduct, DataProduct).
agreement.offer_idStringIdentifier for the offer that created the agreement.
agreement.offer_visibilityStringThe visibility of the offer (e.g., Private).
agreement.estimated_charges.total_amountStringThe total estimated monetary value of the agreement.
agreement.estimated_charges.currency_codeStringThree-letter ISO currency code for the estimated charges.
agreement.license_arnString or nullThe License ARN for the agreement's license entitlements.
tackle.vendor_idStringThe vendor identifier for the seller account in the Tackle Platform.
tackle.registration.customer_idStringThe CustomerIdentifier from the ResolveCustomer API. Use this as the customer_id in the Tackle Metering API.
tackle.registration.product_codeStringThe ProductCode from the ResolveCustomer API. Use this as the product_id in the Tackle Metering API.
tackle.registration.timestampStringTimestamp when registration occurred in ISO 8601 format.
tackle.registration.detailsObjectKey-value pairs of information collected from the buyer during registration.

Example Payload

{
  "event_id": "4e7b8c2d-9a0f-4b1e-8c3d-5f6a7b8c9d0e",
  "event_type": "agreement_registered",
  "cloud": "aws",
  "agreement": {
    "id": "agmt-4n5p6q7r8s9t0u1v",
    "type": "PurchaseAgreement",
    "status": "ACTIVE",
    "start_time": "2023-01-01T12:00:00Z",
    "end_time": "2024-01-01T11:59:59Z",
    "acceptance_time": "2023-01-01T12:00:00Z",
    "acceptor_account_id": "582039471625",
    "proposer_account_id": "847201938475",
    "product_id": "prod-k9l8m7n6p5q4",
    "product_type": "SaaSProduct",
    "offer_id": "offer-z1y2x3w4v5u6",
    "offer_visibility": "Private",
    "estimated_charges": {
      "total_amount": "23456.78",
      "currency_code": "USD"
    },
    "license_arn": "arn:aws:licensemanager::123456789012:license:l076072f4d3ad437EXAMPLE"
  },
  "tackle": {
    "vendor_id": "6A1I4NB",
    "registration": {
      "customer_id": "91xM5j8zac1",
      "product_code": "abc49bmwqw7js58uaw11dpxyz",
      "timestamp": "2023-01-01T12:04:05Z",
      "details": {
        "Company": "ACME Corp",
        "Email Address": "[email protected]",
        "Full Name": "Steve Jones"
      }
    }
  }
}

Agreement Changed

Sent when an agreement's status or terms change. This covers updates, expirations, cancellations, renewals, and other lifecycle transitions.

Fields

FieldTypeDescription
event_idStringUnique identifier for this event notification.
event_typeStringagreement_changed
cloudStringaws
detected_atStringTimestamp of when Tackle detected the change in ISO 8601 format.
vendor_idStringThe vendor identifier for the seller account in the Tackle Platform.
agreement.idStringThe unique identifier for the agreement.
agreement.typeStringThe type of agreement (e.g., PurchaseAgreement, VendorInsightsAgreement).
agreement.statusStringThe current status of the agreement (e.g., ACTIVE, ARCHIVED, CANCELLED, EXPIRED, RENEWED, REPLACED, ROLLED_BACK, SUPERSEDED, TERMINATED).
agreement.start_timeStringThe agreement's start timestamp in ISO 8601 format.
agreement.end_timeStringThe agreement's end timestamp in ISO 8601 format.
agreement.acceptance_timeStringTimestamp when the customer accepted the offer in ISO 8601 format.
agreement.acceptor_account_idStringThe AWS Account ID of the customer who accepted the agreement.
agreement.proposer_account_idStringThe AWS Account ID of the vendor who proposed the agreement.
agreement.product_idStringThe product's unique identifier.
agreement.product_typeStringThe type of product (e.g., SaaSProduct, AmiProduct, ContainerProduct, ProfessionalServicesProduct, MachineLearningProduct, DataProduct).
agreement.offer_idStringIdentifier for the offer that created the agreement.
agreement.offer_visibilityStringThe visibility of the offer (e.g., Private).
agreement.estimated_charges.total_amountStringThe total estimated monetary value of the agreement.
agreement.estimated_charges.currency_codeStringThree-letter ISO currency code for the estimated charges.
agreement.license_arnString or nullThe License ARN for the agreement's license entitlements.
agreement.terms.validity.durationStringDuration of the agreement in ISO 8601 format (e.g., P24M).
agreement.terms.payment_scheduleObject or nullScheduled payment details. null if not applicable.
agreement.terms.payment_schedule.currency_codeStringThree-letter ISO currency code for the payment schedule.
agreement.terms.payment_schedule.schedule[]ArrayArray of scheduled charge objects.
agreement.terms.payment_schedule.schedule[].charge_dateStringThe date a payment is scheduled.
agreement.terms.payment_schedule.schedule[].amountStringThe amount for the scheduled charge.
agreement.terms.upfront_paymentObject or nullOne-time upfront payment details. null if not applicable.
agreement.terms.upfront_payment.currency_codeStringThree-letter ISO currency code for the upfront payment.
agreement.terms.upfront_payment.amountStringThe total upfront payment amount.
agreement.terms.upfront_payment.grants[]ArrayEntitlements granted with the upfront payment.
agreement.terms.upfront_payment.grants[].dimension_keyStringThe key for the granted entitlement.
agreement.terms.upfront_payment.grants[].max_quantityIntegerThe maximum quantity for the granted entitlement.
agreement.terms.usage_basedObject or nullUsage-based pricing details. null if not applicable.
agreement.terms.usage_based.currency_codeStringThree-letter ISO currency code for usage-based rates.
agreement.terms.usage_based.rates[]ArrayArray of usage dimension rate objects.
agreement.terms.usage_based.rates[].dimension_keyStringThe key for the usage dimension.
agreement.terms.usage_based.rates[].priceStringThe price per unit for the dimension.
agreement.terms.recurring_paymentObject or nullRecurring payment details. null if not applicable.
agreement.terms.recurring_payment.currency_codeStringThree-letter ISO currency code for the recurring payment.
agreement.terms.recurring_payment.billing_periodStringBilling frequency (e.g., Monthly).
agreement.terms.recurring_payment.priceStringThe price per billing period.
agreement.terms.configurable_upfront_paymentObject or nullConfigurable upfront payment details. null if not applicable.
agreement.terms.configurable_upfront_payment.currency_codeStringThree-letter ISO currency code.
agreement.terms.configurable_upfront_payment.selection.durationStringDuration selected by the customer in ISO 8601 format.
agreement.terms.configurable_upfront_payment.selection.dimensions[]ArrayDimensions chosen by the customer.
agreement.terms.configurable_upfront_payment.selection.dimensions[].keyStringThe dimension key.
agreement.terms.configurable_upfront_payment.selection.dimensions[].quantityIntegerThe quantity chosen for the dimension.
agreement.terms.free_trialObject or nullFree trial terms. null if not applicable.
agreement.terms.free_trial.durationStringDuration of the free trial in ISO 8601 format (e.g., P30D).
agreement.terms.free_trial.grants[]ArrayEntitlements granted during the free trial.
agreement.terms.free_trial.grants[].dimension_keyStringThe key for the granted entitlement.
agreement.terms.free_trial.grants[].max_quantityStringThe maximum quantity for the trial entitlement.
agreement.terms.renewal.auto_renewsBooleanWhether the agreement is configured to auto-renew.
agreement.terms.legal.documents[]ArrayLegal documents associated with the agreement.
agreement.terms.legal.documents[].typeStringThe type of legal document (e.g., CustomEula, StandardEula).
agreement.terms.legal.documents[].urlStringURL to the legal document.
agreement.terms.support.refund_policyStringThe stated refund policy for the agreement.

Example Payload

{
  "event_id": "evt_1a2b3c4d5e6f7g8h",
  "event_type": "agreement_changed",
  "detected_at": "2025-10-15T10:05:00Z",
  "cloud": "aws",
  "vendor_id": "6A1I4NB",
  "agreement": {
    "id": "agmt-a1b2c3d4e5f6g7h8",
    "type": "PurchaseAgreement",
    "status": "ACTIVE",
    "start_time": "2025-10-15T10:00:00Z",
    "end_time": "2026-10-15T09:59:59Z",
    "acceptance_time": "2025-10-14T18:30:00Z",
    "acceptor_account_id": "123456789012",
    "proposer_account_id": "987654321098",
    "product_id": "prod-xyz789",
    "product_type": "SaaSProduct",
    "offer_id": "offer-pqr456",
    "offer_visibility": "Private",
    "estimated_charges": {
      "total_amount": "50000.00",
      "currency_code": "USD"
    },
    "terms": {
      "validity": {
        "duration": "P12M"
      },
      "payment_schedule": {
        "currency_code": "USD",
        "schedule": [
          {
            "charge_date": "2025-10-15T10:00:00Z",
            "amount": "25000.00"
          },
          {
            "charge_date": "2026-04-15T10:00:00Z",
            "amount": "25000.00"
          }
        ]
      },
      "usage_based": {
        "currency_code": "USD",
        "rates": [
          {
            "dimension_key": "api_calls",
            "price": "0.01"
          },
          {
            "dimension_key": "storage_gb",
            "price": "0.50"
          }
        ]
      },
      "recurring_payment": {
        "currency_code": "USD",
        "billing_period": "Monthly",
        "price": "100.00"
      },
      "renewal": {
        "auto_renews": true
      },
      "legal": {
        "documents": [
          {
            "type": "CustomEula",
            "url": "https://s3.amazonaws.com/vendor-eulas/eula-agmt-a1b2c3d4.pdf"
          }
        ]
      },
      "support": {
        "refund_policy": "No refunds after 30 days."
      }
    },
    "license_arn": "arn:aws:licensemanager::123456789012:license:l076072f4d3ad437EXAMPLE"
  }
}

Agreement License Updated

Sent when the License ARN associated with an agreement is updated or deprovisioned.

Fields

FieldTypeDescription
event_idStringUnique identifier for this event notification.
event_typeStringagreement_license_updated
cloudStringaws
detected_atStringTimestamp of when Tackle detected the change in ISO 8601 format.
vendor_idStringThe vendor identifier for the seller account in the Tackle Platform.
payload.statusStringThe license status (e.g., updated, deprovisioned).
payload.acceptor_account_idStringThe AWS Account ID of the customer who accepted the agreement.
payload.agreement_idStringThe unique identifier for the agreement.
payload.license_arnStringThe License ARN associated with the agreement.
payload.offer_idStringThe unique identifier for the AWS offer.
payload.product_idStringThe unique identifier for the AWS product.
payload.proposer_account_idStringThe AWS Account ID of the vendor who proposed the agreement.

Example Payload

{
  "event_id": "evt_1a2b3c4d5e6f7g8h",
  "event_type": "agreement_license_updated",
  "detected_at": "2025-10-15T10:05:00Z",
  "cloud": "aws",
  "vendor_id": "6A1I4NB",
  "payload": {
    "status": "updated",
    "acceptor_account_id": "533037066560",
    "agreement_id": "agmt-ab5hndndgx4nccbn1avg6n0nk",
    "license_arn": "arn:aws:license-manager::294406891311:license:l-dde70b00f82f4ddb84ccd578e7b72427",
    "offer_id": "offer-4kzrsiu5mlyfo",
    "product_id": "prod-cice7vg3kyn3a",
    "proposer_account_id": "686371838774"
  }
}