diff --git a/.gitignore b/.gitignore index fcd6191..ed55818 100644 --- a/.gitignore +++ b/.gitignore @@ -142,4 +142,4 @@ cython_debug/ # uv -.uv/ \ No newline at end of file +.uv/ diff --git a/pyproject.toml b/pyproject.toml index 4418e2e..133ef00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "blindpay" -version = "0.1.0" +version = "1.1.0" description = "Official Python SDK for the Blindpay API — Global payments infrastructure" readme = "README.md" authors = [{ name = "Blindpay", email = "gabriel@blindpay.com" }] diff --git a/src/blindpay/__init__.py b/src/blindpay/__init__.py index 9cd616b..8032b59 100644 --- a/src/blindpay/__init__.py +++ b/src/blindpay/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.1.0" +__version__ = "1.1.0" from ._internal.exceptions import BlindPayError from .client import BlindPay, BlindPaySync diff --git a/src/blindpay/resources/receivers/receivers.py b/src/blindpay/resources/receivers/receivers.py index 4335379..50c17fb 100644 --- a/src/blindpay/resources/receivers/receivers.py +++ b/src/blindpay/resources/receivers/receivers.py @@ -51,6 +51,17 @@ OwnerRole = Literal["beneficial_controlling", "beneficial_owner", "controlling_person"] +LimitIncreaseRequestStatus = Literal["in_review", "approved", "rejected"] + +LimitIncreaseRequestSupportingDocumentType = Literal[ + "individual_bank_statement", + "individual_tax_return", + "individual_proof_of_income", + "business_bank_statement", + "business_financial_statements", + "business_tax_return", +] + class KycWarning(TypedDict): code: Optional[str] @@ -362,6 +373,35 @@ class GetReceiverLimitsResponse(TypedDict): limits: Limits +class LimitIncreaseRequest(TypedDict): + id: str + receiver_id: str + status: LimitIncreaseRequestStatus + daily: float + monthly: float + per_transaction: float + supporting_document_file: str + supporting_document_type: LimitIncreaseRequestSupportingDocumentType + created_at: str + updated_at: str + + +GetLimitIncreaseRequestsResponse = List[LimitIncreaseRequest] + + +class RequestLimitIncreaseInput(TypedDict): + receiver_id: str + daily: float + monthly: float + per_transaction: float + supporting_document_file: str + supporting_document_type: LimitIncreaseRequestSupportingDocumentType + + +class RequestLimitIncreaseResponse(TypedDict): + id: str + + class ReceiversResource: def __init__(self, instance_id: str, client: InternalApiClient): self._instance_id = instance_id @@ -402,6 +442,20 @@ async def delete(self, receiver_id: str) -> BlindpayApiResponse[None]: async def get_limits(self, receiver_id: str) -> BlindpayApiResponse[GetReceiverLimitsResponse]: return await self._client.get(f"/instances/{self._instance_id}/limits/receivers/{receiver_id}") + async def get_limit_increase_requests( + self, receiver_id: str + ) -> BlindpayApiResponse[GetLimitIncreaseRequestsResponse]: + return await self._client.get(f"/instances/{self._instance_id}/receivers/{receiver_id}/limit-increase") + + async def request_limit_increase( + self, data: RequestLimitIncreaseInput + ) -> BlindpayApiResponse[RequestLimitIncreaseResponse]: + receiver_id = data["receiver_id"] + payload = {k: v for k, v in data.items() if k != "receiver_id"} + return await self._client.post( + f"/instances/{self._instance_id}/receivers/{receiver_id}/limit-increase", payload + ) + class ReceiversResourceSync: def __init__(self, instance_id: str, client: InternalApiClientSync): @@ -443,6 +497,16 @@ def delete(self, receiver_id: str) -> BlindpayApiResponse[None]: def get_limits(self, receiver_id: str) -> BlindpayApiResponse[GetReceiverLimitsResponse]: return self._client.get(f"/instances/{self._instance_id}/limits/receivers/{receiver_id}") + def get_limit_increase_requests(self, receiver_id: str) -> BlindpayApiResponse[GetLimitIncreaseRequestsResponse]: + return self._client.get(f"/instances/{self._instance_id}/receivers/{receiver_id}/limit-increase") + + def request_limit_increase( + self, data: RequestLimitIncreaseInput + ) -> BlindpayApiResponse[RequestLimitIncreaseResponse]: + receiver_id = data["receiver_id"] + payload = {k: v for k, v in data.items() if k != "receiver_id"} + return self._client.post(f"/instances/{self._instance_id}/receivers/{receiver_id}/limit-increase", payload) + def create_receivers_resource(instance_id: str, client: InternalApiClient) -> ReceiversResource: return ReceiversResource(instance_id, client) diff --git a/uv.lock b/uv.lock index a33bd08..cdea9dc 100644 --- a/uv.lock +++ b/uv.lock @@ -27,7 +27,7 @@ wheels = [ [[package]] name = "blindpay" -version = "1.0.0" +version = "1.1.0" source = { editable = "." } dependencies = [ { name = "httpx" },