diff --git a/pyproject.toml b/pyproject.toml index 255444a..2bc800b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "blindpay" -version = "2.1.0" +version = "2.2.0" description = "Official Python SDK for the Blindpay API — Global payments infrastructure" readme = "README.md" authors = [{ name = "Blindpay", email = "alves@blindpay.com" }] diff --git a/src/blindpay/__init__.py b/src/blindpay/__init__.py index 538888a..2372588 100644 --- a/src/blindpay/__init__.py +++ b/src/blindpay/__init__.py @@ -1,4 +1,4 @@ -__version__ = "2.1.0" +__version__ = "2.2.0" from ._internal.exceptions import BlindPayError from .client import BlindPay, BlindPaySync diff --git a/src/blindpay/client.py b/src/blindpay/client.py index 0fb9d3b..78c3c57 100644 --- a/src/blindpay/client.py +++ b/src/blindpay/client.py @@ -39,7 +39,7 @@ from blindpay.resources.wallets.offramp import OfframpWalletsResource, OfframpWalletsResourceSync from blindpay.resources.webhooks.webhooks import WebhookEndpointsResource, WebhookEndpointsResourceSync -__version__ = "2.1.0" +__version__ = "2.2.0" T = TypeVar("T") diff --git a/src/blindpay/resources/bank_accounts/__init__.py b/src/blindpay/resources/bank_accounts/__init__.py index d2d1b2b..697c76b 100644 --- a/src/blindpay/resources/bank_accounts/__init__.py +++ b/src/blindpay/resources/bank_accounts/__init__.py @@ -15,18 +15,24 @@ CreateInternationalSwiftResponse, CreatePixInput, CreatePixResponse, + CreatePixSafeInput, + CreatePixSafeResponse, CreateRtpInput, CreateRtpResponse, CreateSpeiInput, CreateSpeiResponse, + CreateTedInput, + CreateTedResponse, CreateWireInput, CreateWireResponse, GetBankAccountResponse, ListBankAccountsResponse, OfframpNetwork, + PixSafeType, PixType, RtpType, SpeiBitsoType, + TedType, TransfersBitsoType, WireType, create_bank_accounts_resource, @@ -39,6 +45,7 @@ "BankAccountsResource", "BankAccountsResourceSync", "CreatePixInput", + "CreatePixSafeInput", "CreateArgentinaTransfersInput", "CreateSpeiInput", "CreateColombiaAchInput", @@ -46,16 +53,19 @@ "CreateWireInput", "CreateInternationalSwiftInput", "CreateRtpInput", + "CreateTedInput", "AchCopBitsoType", "AchCopDocument", "AchType", "ArgentinaTransfers", "OfframpNetwork", "PixType", + "PixSafeType", "TransfersBitsoType", "SpeiBitsoType", "WireType", "RtpType", + "TedType", "GetBankAccountResponse", "ListBankAccountsResponse", "CreateAchResponse", @@ -63,7 +73,9 @@ "CreateColombiaAchResponse", "CreateInternationalSwiftResponse", "CreatePixResponse", + "CreatePixSafeResponse", "CreateRtpResponse", "CreateSpeiResponse", + "CreateTedResponse", "CreateWireResponse", ] diff --git a/src/blindpay/resources/bank_accounts/bank_accounts.py b/src/blindpay/resources/bank_accounts/bank_accounts.py index 11586f5..246701d 100644 --- a/src/blindpay/resources/bank_accounts/bank_accounts.py +++ b/src/blindpay/resources/bank_accounts/bank_accounts.py @@ -25,6 +25,7 @@ InternationalSwiftType = Literal["international_swift"] RtpType = Literal["rtp"] PixSafeType = Literal["pix_safe"] +TedType = Literal["ted"] class OfframpWallet(TypedDict): @@ -85,6 +86,9 @@ class BankAccount(TypedDict): tron_wallet_hash: Optional[str] offramp_wallets: Optional[List[OfframpWallet]] created_at: str + ted_bank_code: Optional[str] + ted_branch_code: Optional[str] + ted_cpf_cnpj: Optional[str] class ListBankAccountsResponse(TypedDict): @@ -404,6 +408,28 @@ class CreatePixSafeResponse(TypedDict): created_at: str +class CreateTedInput(TypedDict): + receiver_id: str + name: str + account_number: str + account_type: BankAccountType + ted_bank_code: str + ted_branch_code: str + ted_cpf_cnpj: str + + +class CreateTedResponse(TypedDict): + id: str + type: TedType + name: str + account_number: str + account_type: BankAccountType + ted_bank_code: str + ted_branch_code: str + ted_cpf_cnpj: str + created_at: str + + class BankAccountsResource: def __init__(self, instance_id: str, client: InternalApiClient): self._instance_id = instance_id @@ -476,6 +502,12 @@ async def create_pix_safe(self, data: CreatePixSafeInput) -> BlindpayApiResponse payload["type"] = "pix_safe" return await self._client.post(f"/instances/{self._instance_id}/receivers/{receiver_id}/bank-accounts", payload) + async def create_ted(self, data: CreateTedInput) -> BlindpayApiResponse[CreateTedResponse]: + receiver_id = data["receiver_id"] + payload = {k: v for k, v in data.items() if k != "receiver_id"} + payload["type"] = "ted" + return await self._client.post(f"/instances/{self._instance_id}/receivers/{receiver_id}/bank-accounts", payload) + class BankAccountsResourceSync: def __init__(self, instance_id: str, client: InternalApiClientSync): @@ -549,6 +581,12 @@ def create_pix_safe(self, data: CreatePixSafeInput) -> BlindpayApiResponse[Creat payload["type"] = "pix_safe" return self._client.post(f"/instances/{self._instance_id}/receivers/{receiver_id}/bank-accounts", payload) + def create_ted(self, data: CreateTedInput) -> BlindpayApiResponse[CreateTedResponse]: + receiver_id = data["receiver_id"] + payload = {k: v for k, v in data.items() if k != "receiver_id"} + payload["type"] = "ted" + return self._client.post(f"/instances/{self._instance_id}/receivers/{receiver_id}/bank-accounts", payload) + def create_bank_accounts_resource(instance_id: str, client: InternalApiClient) -> BankAccountsResource: return BankAccountsResource(instance_id, client) diff --git a/src/blindpay/resources/fees/fees.py b/src/blindpay/resources/fees/fees.py index 49967fd..2699960 100644 --- a/src/blindpay/resources/fees/fees.py +++ b/src/blindpay/resources/fees/fees.py @@ -18,6 +18,7 @@ class FeesResponse(TypedDict): domestic_wire: Optional[FeeOptions] pix: Optional[FeeOptions] solana: Optional[FeeOptions] + ted: Optional[FeeOptions] class FeesResource: diff --git a/src/blindpay/resources/payins/payins.py b/src/blindpay/resources/payins/payins.py index 915533c..2f7ed59 100644 --- a/src/blindpay/resources/payins/payins.py +++ b/src/blindpay/resources/payins/payins.py @@ -95,6 +95,7 @@ class Payin(TypedDict): pse_full_name: Optional[str] pse_payment_link: Optional[str] pse_tax_id: Optional[str] + partner_fee_id: Optional[str] class ListPayinsInput(PaginationParams): @@ -165,6 +166,7 @@ class GetPayinTrackResponse(TypedDict): address: str network: Network blindpay_bank_details: BankDetails + partner_fee_id: Optional[str] class ExportPayinsInput(TypedDict): diff --git a/src/blindpay/resources/payins/quotes.py b/src/blindpay/resources/payins/quotes.py index 0f0e4e5..df67a64 100644 --- a/src/blindpay/resources/payins/quotes.py +++ b/src/blindpay/resources/payins/quotes.py @@ -10,7 +10,7 @@ StablecoinToken, ) -PaymentMethod = Literal["ach", "wire", "pix", "spei"] +PaymentMethod = Literal["ach", "wire", "pix", "spei", "rtp", "ted"] class PayerRules(TypedDict, total=False): diff --git a/src/blindpay/resources/payouts/payouts.py b/src/blindpay/resources/payouts/payouts.py index 148c580..b8db790 100644 --- a/src/blindpay/resources/payouts/payouts.py +++ b/src/blindpay/resources/payouts/payouts.py @@ -92,6 +92,10 @@ class Payout(TypedDict): transfers_account: Optional[str] transfers_type: ArgentinaTransfers has_virtual_account: bool + partner_fee_id: Optional[str] + ted_bank_code: Optional[str] + ted_branch_code: Optional[str] + ted_cpf_cnpj: Optional[str] class ListPayoutsInput(PaginationParams, total=False): diff --git a/src/blindpay/resources/receivers/receivers.py b/src/blindpay/resources/receivers/receivers.py index cf1ad4a..77c420e 100644 --- a/src/blindpay/resources/receivers/receivers.py +++ b/src/blindpay/resources/receivers/receivers.py @@ -16,6 +16,7 @@ StandardKycType = Literal["standard"] EnhancedKycType = Literal["enhanced"] KycType = Literal["light", "standard", "enhanced"] +KycStatus = Literal["awaiting_contract", "compliance_request"] ProofOfAddressDocType = Literal[ "UTILITY_BILL", "BANK_STATEMENT", "RENTAL_AGREEMENT", "TAX_DOCUMENT", "GOVERNMENT_CORRESPONDENCE" @@ -328,7 +329,7 @@ class IndividualWithStandardKYC(TypedDict): id: str type: IndividualType kyc_type: StandardKycType - kyc_status: str + kyc_status: KycStatus kyc_warnings: Optional[List[KycWarning]] email: str tax_id: str @@ -378,7 +379,7 @@ class IndividualWithEnhancedKYC(TypedDict): id: str type: IndividualType kyc_type: EnhancedKycType - kyc_status: str + kyc_status: KycStatus kyc_warnings: Optional[List[KycWarning]] email: str tax_id: str @@ -433,7 +434,7 @@ class BusinessWithStandardKYB(TypedDict): id: str type: BusinessType kyc_type: StandardKycType - kyc_status: str + kyc_status: KycStatus kyc_warnings: Optional[List[KycWarning]] email: str tax_id: str diff --git a/src/blindpay/types.py b/src/blindpay/types.py index 951de04..897a0da 100644 --- a/src/blindpay/types.py +++ b/src/blindpay/types.py @@ -47,10 +47,19 @@ class BlindpaySuccessResponse(TypedDict, Generic[T]): BankAccountType = Literal["checking", "savings"] -Currency = Literal["USDC", "USDT", "USDB", "BRL", "USD", "MXN", "COP", "ARS"] +Currency = Literal["USDB", "BRL", "USD", "MXN", "COP", "ARS"] Rail = Literal[ - "wire", "ach", "pix", "pix_safe", "spei_bitso", "transfers_bitso", "ach_cop_bitso", "international_swift", "rtp" + "wire", + "ach", + "pix", + "pix_safe", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "ted", ] AccountClass = Literal["individual", "business"] @@ -380,4 +389,53 @@ class TrackingPartnerFee(TypedDict): BankingPartner = Literal["cfsb", "citi", "hsbc", "jpmorgan"] -PaymentMethod = Literal["ach", "wire", "pix", "spei", "transfers", "pse", "international_swift"] +PaymentMethod = Literal["ach", "wire", "pix", "spei", "transfers", "pse", "international_swift", "rtp", "ted"] + +# New enum types from changelog +ActorType = Literal["api_key", "user"] + +Decision = Literal["approved", "rejected"] + +KycStatus = Literal["awaiting_contract", "compliance_request"] + +Operation = Literal["create", "delete", "update"] + +ReceiverType = Literal["business", "individual"] + +Status = Literal["submitted"] + +SwiftPaymentCode = Literal[ + "SALA", + "CBFF", + "INTC", + "CORT", + "TRAD", + "TREA", + "SECU", + "LIMA", + "HOLD", + "COLL", + "COMC", + "CPKC", + "DIVI", + "GOVI", + "INST", + "INTB", + "LEND", + "LIQM", + "MGCC", + "NOWS", + "OTHR", + "PHOB", + "RINP", + "RLTI", + "SALA", + "SECU", + "SSBE", + "SUPP", + "TAXS", + "TRAD", + "TREA", + "VATX", + "WHLD", +]