Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

Check our main [developer changelog](https://developer.paddle.com/?utm_source=dx&utm_medium=paddle-python-sdk) for information about changes to the Paddle Billing platform, the Paddle API, and other developer tools.

## Unreleased

### Added

- Added support for verifications
- `Client.verifications.list`
- `Client.verifications.get`
- Added support for countries
- `Client.countries.list`
- Added support for currencies
- `Client.currencies.list`
- Added `verification.read` to `ApiKeyPermission` (permissions on `api_key.*` events)

## 1.15.0 - 2026-07-28

### Added
Expand Down
6 changes: 6 additions & 0 deletions paddle_billing/Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
from paddle_billing.Resources.Businesses.BusinessesClient import BusinessesClient
from paddle_billing.Resources.CheckoutDomains.CheckoutDomainsClient import CheckoutDomainsClient
from paddle_billing.Resources.ClientTokens.ClientTokensClient import ClientTokensClient
from paddle_billing.Resources.Countries.CountriesClient import CountriesClient
from paddle_billing.Resources.Currencies.CurrenciesClient import CurrenciesClient
from paddle_billing.Resources.Customers.CustomersClient import CustomersClient
from paddle_billing.Resources.CustomerPortalSessions.CustomerPortalSessionsClient import CustomerPortalSessionsClient
from paddle_billing.Resources.DiscountGroups.DiscountGroupsClient import DiscountGroupsClient
Expand All @@ -42,6 +44,7 @@
from paddle_billing.Resources.Subscriptions.SubscriptionsClient import SubscriptionsClient
from paddle_billing.Resources.Metrics.MetricsClient import MetricsClient
from paddle_billing.Resources.Transactions.TransactionsClient import TransactionsClient
from paddle_billing.Resources.Verifications.VerificationsClient import VerificationsClient


class Client:
Expand Down Expand Up @@ -76,6 +79,8 @@ def __init__(
self.businesses = BusinessesClient(self)
self.checkout_domains = CheckoutDomainsClient(self)
self.client_tokens = ClientTokensClient(self)
self.countries = CountriesClient(self)
self.currencies = CurrenciesClient(self)
self.customers = CustomersClient(self)
self.customer_portal_sessions = CustomerPortalSessionsClient(self)
self.discounts = DiscountsClient(self)
Expand All @@ -96,6 +101,7 @@ def __init__(
self.simulation_types = SimulationTypesClient(self)
self.subscriptions = SubscriptionsClient(self)
self.transactions = TransactionsClient(self)
self.verifications = VerificationsClient(self)
self.ip_addresses = IPAddressesClient(self)
self.metrics = MetricsClient(self)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from __future__ import annotations
from typing import Any

from paddle_billing.Entities.Collections.Collection import Collection
from paddle_billing.Entities.Collections.Paginator import Paginator
from paddle_billing.Entities.CountryDefinition import CountryDefinition


class CountryDefinitionCollection(Collection[CountryDefinition]):
@classmethod
def from_list(
cls, items_data: list[dict[str, Any]], paginator: Paginator | None = None
) -> CountryDefinitionCollection:
items: list[CountryDefinition] = [CountryDefinition.from_dict(item) for item in items_data]

return CountryDefinitionCollection(items, paginator)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from __future__ import annotations
from typing import Any

from paddle_billing.Entities.Collections.Collection import Collection
from paddle_billing.Entities.Collections.Paginator import Paginator
from paddle_billing.Entities.CurrencyDefinition import CurrencyDefinition


class CurrencyDefinitionCollection(Collection[CurrencyDefinition]):
@classmethod
def from_list(
cls, items_data: list[dict[str, Any]], paginator: Paginator | None = None
) -> CurrencyDefinitionCollection:
items: list[CurrencyDefinition] = [CurrencyDefinition.from_dict(item) for item in items_data]

return CurrencyDefinitionCollection(items, paginator)
14 changes: 14 additions & 0 deletions paddle_billing/Entities/Collections/VerificationCollection.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from __future__ import annotations
from typing import Any

from paddle_billing.Entities.Collections.Collection import Collection
from paddle_billing.Entities.Collections.Paginator import Paginator
from paddle_billing.Entities.Verification import Verification


class VerificationCollection(Collection[Verification]):
@classmethod
def from_list(cls, items_data: list[dict[str, Any]], paginator: Paginator | None = None) -> VerificationCollection:
items: list[Verification] = [Verification.from_dict(item) for item in items_data]

return VerificationCollection(items, paginator)
3 changes: 3 additions & 0 deletions paddle_billing/Entities/Collections/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
from paddle_billing.Entities.Collections.CheckoutDomainCollection import CheckoutDomainCollection
from paddle_billing.Entities.Collections.ClientTokenCollection import ClientTokenCollection
from paddle_billing.Entities.Collections.Collection import Collection
from paddle_billing.Entities.Collections.CountryDefinitionCollection import CountryDefinitionCollection
from paddle_billing.Entities.Collections.CreditBalanceCollection import CreditBalanceCollection
from paddle_billing.Entities.Collections.CurrencyDefinitionCollection import CurrencyDefinitionCollection
from paddle_billing.Entities.Collections.CustomerCollection import CustomerCollection
from paddle_billing.Entities.Collections.DiscountCollection import DiscountCollection
from paddle_billing.Entities.Collections.DiscountGroupCollection import DiscountGroupCollection
Expand All @@ -28,3 +30,4 @@
from paddle_billing.Entities.Collections.TransactionCollection import TransactionCollection
from paddle_billing.Entities.Collections.TransactionPreviewCollection import TransactionPreviewCollection
from paddle_billing.Entities.Collections.TransactionsDataCollection import TransactionsDataCollection
from paddle_billing.Entities.Collections.VerificationCollection import VerificationCollection
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from paddle_billing.PaddleStrEnum import PaddleStrEnum, PaddleStrEnumMeta


class CountryDefinitionTaxMode(PaddleStrEnum, metaclass=PaddleStrEnumMeta):
Internal: "CountryDefinitionTaxMode" = "internal"
External: "CountryDefinitionTaxMode" = "external"
1 change: 1 addition & 0 deletions paddle_billing/Entities/Countries/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from paddle_billing.Entities.Countries.CountryDefinitionTaxMode import CountryDefinitionTaxMode
36 changes: 36 additions & 0 deletions paddle_billing/Entities/CountryDefinition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from __future__ import annotations
from dataclasses import dataclass
from typing import Any

from paddle_billing.Entities.Entity import Entity
from paddle_billing.Entities.Countries import CountryDefinitionTaxMode
from paddle_billing.Entities.Shared import CountryCode, CountryCodeIso3, CurrencyCode, CurrencyCodePayouts


@dataclass
class CountryDefinition(Entity):
iso: CountryCode
iso3: CountryCodeIso3
name: str
printable_name: str
uses_postal_code: bool
transaction_currency: CurrencyCode
payout_currency: CurrencyCodePayouts
allow_sales: bool
has_regions: bool
tax_mode: CountryDefinitionTaxMode

@staticmethod
def from_dict(data: dict[str, Any]) -> CountryDefinition:
return CountryDefinition(
iso=CountryCode(data["iso"]),
iso3=CountryCodeIso3(data["iso3"]),
name=data["name"],
printable_name=data["printable_name"],
uses_postal_code=data["uses_postal_code"],
transaction_currency=CurrencyCode(data["transaction_currency"]),
payout_currency=CurrencyCodePayouts(data["payout_currency"]),
allow_sales=data["allow_sales"],
has_regions=data["has_regions"],
tax_mode=CountryDefinitionTaxMode(data["tax_mode"]),
)
27 changes: 27 additions & 0 deletions paddle_billing/Entities/CurrencyDefinition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from __future__ import annotations
from dataclasses import dataclass
from typing import Any

from paddle_billing.Entities.Entity import Entity
from paddle_billing.Entities.Shared import CountryCode, CurrencyCode


@dataclass
class CurrencyDefinition(Entity):
code: CurrencyCode
name: str
decimal_places: int
can_be_balance: bool
applicable_countries: list[CountryCode]
minimum_payment_amount: str

@staticmethod
def from_dict(data: dict[str, Any]) -> CurrencyDefinition:
return CurrencyDefinition(
code=CurrencyCode(data["code"]),
name=data["name"],
decimal_places=data["decimal_places"],
can_be_balance=data["can_be_balance"],
applicable_countries=[CountryCode(country) for country in data["applicable_countries"]],
minimum_payment_amount=data["minimum_payment_amount"],
)
Loading
Loading