---
title: "discount.created"
method: POST
path: "discount.created"
tags: ["Discounts"]
---

# discount.created

`POST discount.created` (webhook)

Occurs when a discount is created.

Payload includes the complete discount entity, except `times_used`. This field changes frequently, so isn't included in payloads. [Get a discount using the API](https://developer.paddle.com/api-reference/discounts/get-discount) to see the latest value.

## Headers

- `paddle_signature` string, required

## Payload

- object
  - `event_id` string, required: Unique Paddle ID for this event, prefixed with `evt_`.
  - `event_type` 'address.created' | 'address.imported' | 'address.updated' | 'adjustment.created' | 'adjustment.updated' | 'api_key.created' | 'api_key.expired' | 'api_key.expiring' | 'api_key.revoked' | 'api_key.updated' | 'api_key_exposure.created' | 'business.created' | 'business.imported' | 'business.updated' | 'client_token.created' | 'client_token.revoked' | 'client_token.updated' | 'customer.created' | 'customer.imported' | 'customer.updated' | 'discount.created' | 'discount.imported' | 'discount.updated' | 'discount_group.created' | 'discount_group.updated' | 'payment_method.saved' | 'payment_method.deleted' | 'payout.created' | 'payout.paid' | 'price.created' | 'price.imported' | 'price.updated' | 'product.created' | 'product.imported' | 'product.updated' | 'report.created' | 'report.updated' | 'subscription.activated' | 'subscription.canceled' | 'subscription.created' | 'subscription.imported' | 'subscription.past_due' | 'subscription.paused' | 'subscription.resumed' | 'subscription.trialing' | 'subscription.updated' | 'transaction.billed' | 'transaction.canceled' | 'transaction.completed' | 'transaction.created' | 'transaction.paid' | 'transaction.past_due' | 'transaction.payment_failed' | 'transaction.ready' | 'transaction.revised' | 'transaction.updated', required: Type of event sent by Paddle, in the format `entity.event_type`.
  - `occurred_at` string, date-time, required: RFC 3339 datetime string of when this event occurred.
  - `notification_id` string, required: Unique Paddle ID for this notification, prefixed with `ntf_`.
  - `data` object, required: New or changed entity.
    - `id` string, required: Unique Paddle ID for this discount, prefixed with `dsc_`.
    - `status` 'active' | 'archived', required: Whether this entity can be used in Paddle.
    - `description` string, required: Short description for this discount for your reference. Not shown to customers.
    - `enabled_for_checkout` boolean, required: Whether this discount can be redeemed by customers at checkout (`true`) or not (`false`).
    - `code` string, nullable, required: Unique code that customers can use to apply this discount at checkout. Use letters and numbers only, up to 32 characters. Not case-sensitive.
    - `type` 'flat' | 'flat_per_seat' | 'percentage', required: Type of discount. Determines how this discount impacts the checkout or transaction total.
    - `amount` string, required: Amount to discount by. For `percentage` discounts, must be an amount between `0.01` and `100`. For `flat` and `flat_per_seat` discounts, amount in the lowest denomination for a currency.
    - `currency_code` 'USD' | 'EUR' | 'GBP' | 'JPY' | 'AUD' | 'CAD' | 'CHF' | 'HKD' | 'SGD' | 'SEK' | 'ARS' | 'BRL' | 'CLP' | 'CNY' | 'COP' | 'CZK' | 'DKK' | 'HUF' | 'ILS' | 'INR' | 'KRW' | 'MXN' | 'NOK' | 'NZD' | 'PEN' | 'PLN' | 'RUB' | 'THB' | 'TRY' | 'TWD' | 'UAH' | 'VND' | 'ZAR', nullable, required: Supported three-letter ISO 4217 currency code.
    - `recur` boolean, required: Whether this discount applies for multiple subscription billing periods (`true`) or not (`false`).
    - `maximum_recurring_intervals` integer, nullable, required: Number of subscription billing periods that this discount recurs for. Requires `recur`. `null` if this discount recurs forever. Subscription renewals, midcycle changes, and one-time charges billed to a subscription aren't considered a redemption. `times_used` is not incremented in these cases.
    - `usage_limit` integer, nullable, required: Maximum number of times this discount can be redeemed. This is an overall limit for this discount, rather than a per-customer limit. `null` if this discount can be redeemed an unlimited amount of times. Paddle counts a usage as a redemption on a checkout, transaction, or the initial application against a subscription. Transactions created for subscription renewals, midcycle changes, and one-time charges aren't considered a redemption. Paddle checks this limit when a discount is applied to a checkout or transaction, comparing it against `times_used` at that moment. As `times_used` only increments when a transaction completes, checkouts that are open at the same time can each pass this check, so in some cases a discount may be redeemed more times than this limit allows.
    - `restrict_to` string[], nullable, required: Product or price IDs that this discount is for. When including a product ID, all prices for that product can be discounted. `null` if this discount applies to all products and prices.
    - `expires_at` string, date-time, nullable, required: RFC 3339 datetime string.
    - `mode` 'standard' | 'custom', nullable, required: Discount mode. Standard discounts are considered part of your catalog and are shown in the Paddle dashboard.
    - `discount_group_id` string, nullable, required: Unique Paddle ID for this discount group, prefixed with `dsg_`.
    - `custom_data` object, nullable, required: Your own structured key-value data.
    - `import_meta` object, nullable, required: Import information for this entity. `null` if this entity is not imported.
      - `external_id` string, nullable: Reference or identifier for this entity from the provider where it was imported from.
      - `imported_from` string, required: Name of the platform or provider where this entity was imported from.
    - `created_at` string, date-time, required: RFC 3339 datetime string of when this entity was created. Set automatically by Paddle.
    - `updated_at` string, date-time, required: RFC 3339 datetime string of when this entity was updated. Set automatically by Paddle.

## Acknowledgement `200`

Respond with an HTTP 200 status code within 5 seconds to let Paddle know that you successfully received the message.

If your server sends another kind of status code or doesn't respond, Paddle automatically retries using an exponential backoff schedule.

---

[API](https://skmtc.dev/paddlehq/apis/paddle-api.md) - [All operations](https://skmtc.dev/paddlehq/apis/paddle-api/llms.txt) - [OpenAPI document](https://skmtc.dev/paddlehq/apis/paddle-api/revisions/bbc0c72039c8?raw)
