Skip to content

Commit caec3c2

Browse files
feat: Add support for non-catalog discounts (#124)
1 parent 579fa46 commit caec3c2

22 files changed

+539
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Check our main [developer changelog](https://developer.paddle.com/?utm_source=dx
1010

1111
### Added
1212

13+
- Non-catalog discounts on Transactions, see [changelog](https://developer.paddle.com/changelog/2025/custom-discounts?utm_source=dx&utm_medium=paddle-python-sdk)
1314
- Support `retained_fee` field on totals objects to show the fees retained by Paddle for the adjustment.
1415
- Added support for new payment methods `blik`, `mb_way`, `pix` and `upi`. See [related changelog](https://developer.paddle.com/changelog/2025/blik-mbway-payment-methods?utm_source=dx&utm_medium=paddle-python-sdk).
1516

paddle_billing/Resources/Transactions/Operations/CreateTransaction.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
TransactionCreateItemWithPrice,
1616
CreateBillingDetails,
1717
)
18+
from paddle_billing.Resources.Transactions.Operations.Discount.TransactionNonCatalogDiscount import (
19+
TransactionNonCatalogDiscount,
20+
)
1821

1922

2023
@dataclass
@@ -31,3 +34,4 @@ class CreateTransaction(Operation):
3134
billing_details: CreateBillingDetails | None | Undefined = Undefined()
3235
billing_period: TimePeriod | None | Undefined = Undefined()
3336
checkout: Checkout | None | Undefined = Undefined()
37+
discount: TransactionNonCatalogDiscount | None | Undefined = Undefined()
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from __future__ import annotations
2+
from dataclasses import dataclass
3+
4+
from paddle_billing.Undefined import Undefined
5+
from paddle_billing.Entities.Shared.CustomData import CustomData
6+
from paddle_billing.Entities.Discounts.DiscountType import DiscountType
7+
8+
9+
@dataclass
10+
class TransactionNonCatalogDiscount:
11+
amount: str
12+
description: str
13+
type: DiscountType
14+
recur: bool | Undefined = Undefined()
15+
maximum_recurring_intervals: int | None | Undefined = Undefined()
16+
custom_data: CustomData | None | Undefined = Undefined()
17+
restrict_to: list[str] | None | Undefined = Undefined()
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from paddle_billing.Resources.Transactions.Operations.Discount.TransactionNonCatalogDiscount import (
2+
TransactionNonCatalogDiscount,
3+
)

paddle_billing/Resources/Transactions/Operations/PreviewTransaction.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
TransactionItemPreviewWithPriceId,
88
TransactionItemPreviewWithNonCatalogPrice,
99
)
10+
from paddle_billing.Resources.Transactions.Operations.Discount.TransactionNonCatalogDiscount import (
11+
TransactionNonCatalogDiscount,
12+
)
1013

1114

1215
@dataclass
@@ -16,3 +19,4 @@ class PreviewTransaction(Operation):
1619
currency_code: CurrencyCode | None | Undefined = Undefined()
1720
discount_id: str | None | Undefined = Undefined()
1821
ignore_trials: bool | Undefined = Undefined()
22+
discount: TransactionNonCatalogDiscount | None | Undefined = Undefined()

paddle_billing/Resources/Transactions/Operations/PreviewTransactionByAddress.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
TransactionItemPreviewWithPriceId,
88
TransactionItemPreviewWithNonCatalogPrice,
99
)
10+
from paddle_billing.Resources.Transactions.Operations.Discount.TransactionNonCatalogDiscount import (
11+
TransactionNonCatalogDiscount,
12+
)
1013

1114

1215
@dataclass
@@ -17,3 +20,4 @@ class PreviewTransactionByAddress(Operation):
1720
currency_code: CurrencyCode | None | Undefined = Undefined()
1821
discount_id: str | None | Undefined = Undefined()
1922
ignore_trials: bool | Undefined = Undefined()
23+
discount: TransactionNonCatalogDiscount | None | Undefined = Undefined()

paddle_billing/Resources/Transactions/Operations/PreviewTransactionByCustomer.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
TransactionItemPreviewWithPriceId,
88
TransactionItemPreviewWithNonCatalogPrice,
99
)
10+
from paddle_billing.Resources.Transactions.Operations.Discount.TransactionNonCatalogDiscount import (
11+
TransactionNonCatalogDiscount,
12+
)
1013

1114

1215
@dataclass
@@ -18,3 +21,4 @@ class PreviewTransactionByCustomer(Operation):
1821
currency_code: CurrencyCode | None | Undefined = Undefined()
1922
discount_id: str | None | Undefined = Undefined()
2023
ignore_trials: bool | Undefined = Undefined()
24+
discount: TransactionNonCatalogDiscount | None | Undefined = Undefined()

paddle_billing/Resources/Transactions/Operations/PreviewTransactionByIP.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
TransactionItemPreviewWithPriceId,
88
TransactionItemPreviewWithNonCatalogPrice,
99
)
10+
from paddle_billing.Resources.Transactions.Operations.Discount.TransactionNonCatalogDiscount import (
11+
TransactionNonCatalogDiscount,
12+
)
1013

1114

1215
@dataclass
@@ -17,3 +20,4 @@ class PreviewTransactionByIP(Operation):
1720
currency_code: CurrencyCode | None | Undefined = Undefined()
1821
discount_id: str | None | Undefined = Undefined()
1922
ignore_trials: bool | Undefined = Undefined()
23+
discount: TransactionNonCatalogDiscount | None | Undefined = Undefined()

paddle_billing/Resources/Transactions/Operations/UpdateTransaction.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
TransactionUpdateItemWithPrice,
1616
UpdateBillingDetails,
1717
)
18+
from paddle_billing.Resources.Transactions.Operations.Discount.TransactionNonCatalogDiscount import (
19+
TransactionNonCatalogDiscount,
20+
)
1821

1922

2023
@dataclass
@@ -31,3 +34,4 @@ class UpdateTransaction(Operation):
3134
billing_details: UpdateBillingDetails | None | Undefined = Undefined()
3235
billing_period: TimePeriod | None | Undefined = Undefined()
3336
checkout: Checkout | None | Undefined = Undefined()
37+
discount: TransactionNonCatalogDiscount | None | Undefined = Undefined()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"items": [
3+
{
4+
"quantity": 1,
5+
"price_id": "pri_01he5kxqey1k8ankgef29cj4bv"
6+
}
7+
],
8+
"discount": {
9+
"amount": "500",
10+
"description": "Black Friday",
11+
"type": "flat",
12+
"recur": true,
13+
"maximum_recurring_intervals": 3,
14+
"custom_data": {
15+
"source": "bf2025"
16+
},
17+
"restrict_to": [
18+
"pro_01gsz4t5hdjse780zja8vvr7jg",
19+
"pro_01gsz4s0w61y0pp88528f1wvvb"
20+
]
21+
}
22+
}

0 commit comments

Comments
 (0)