# Payouts-Python-SDK **Repository Path**: mirrors_paypal/Payouts-Python-SDK ## Basic Information - **Project Name**: Payouts-Python-SDK - **Description**: Python SDK for Payouts RESTful APIs - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-18 - **Last Updated**: 2026-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PayPal Payouts API SDK for Python ![PayPal Developer](homepage.jpg) __Welcome to PayPal Python SDK__. This repository contains PayPal's Python SDK and samples for [v1/payments/payouts](https://developer.paypal.com/docs/api/payments.payouts-batch/v1/) APIs. This is a part of the next major PayPal SDK. It includes a simplified interface to only provide simple model objects and blueprints for HTTP calls. This repo currently contains functionality for PayPal Payouts APIs which includes [Payouts](https://developer.paypal.com/docs/api/payments.payouts-batch/v1/). Please refer to the [PayPal Payouts Integration Guide](https://developer.paypal.com/docs/payouts/) for more information. Also refer to [Setup your SDK](https://developer.paypal.com/docs/payouts/reference/setup-sdk) for additional information about setting up the SDK's. ## Prerequisites Python 2.0+ or Python 3.0+ An environment which supports TLS 1.2 (see the TLS-update site for more information) ## Requirements PayPalHttp can be found at https://pypi.org/project/paypalhttp/ ## Usage ### Binaries It is not mandatory to fork this repository for using the PayPal SDK. You can refer [PayPal Payouts SDK](https://developer.paypal.com/docs/payouts/reference/setup-sdk/#install-the-sdk) for configuring and working with SDK without forking this code. For contributing or referring the samples, You can fork/refer this repository. ### Setting up credentials Get client ID and client secret by going to https://developer.paypal.com/developer/applications and generating a REST API app. Get Client ID and Secret from there. ```python from paypalpayoutssdk.core import PayPalHttpClient, SandboxEnvironment # Creating Access Token for Sandbox client_id = "<>" client_secret = "<>" # Creating an environment environment = SandboxEnvironment(client_id=client_id, client_secret=client_secret) client = PayPalHttpClient(environment) ``` ## Examples ### Creating a Payouts This code created a Payout and prints the batch_id for the Payout. #### Code: ```python from paypalpayoutssdk.payouts import PayoutsPostRequest from paypalhttp import HttpError # Construct a request object and set desired parameters # Here, PayoutsPostRequest() creates a POST request to /v1/payments/payouts body = { "sender_batch_header": { "recipient_type": "EMAIL", "email_message": "SDK payouts test txn", "note": "Enjoy your Payout!!", "sender_batch_id": "Test_SDK_1", "email_subject": "This is a test transaction from SDK" }, "items": [{ "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.00" }, "receiver": "payout-sdk-1@paypal.com", "sender_item_id": "Test_txn_1" }, { "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.00" }, "receiver": "payout-sdk-2@paypal.com", "sender_item_id": "Test_txn_2" }, { "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.00" }, "receiver": "payout-sdk-3@paypal.com", "sender_item_id": "Test_txn_3" }, { "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.00" }, "receiver": "payout-sdk-4@paypal.com", "sender_item_id": "Test_txn_4" }, { "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.00" }, "receiver": "payout-sdk-5@paypal.com", "sender_item_id": "Test_txn_5" }] } request = PayoutsPostRequest() request.request_body(body) try: # Call API with your client and get a response for your call response = client.execute(request) # If call returns body in response, you can get the deserialized version from the result attribute of the response batch_id = response.result.batch_header.payout_batch_id print batch_id except IOError as ioe: print ioe if isinstance(ioe, HttpError): # Something went wrong server-side print ioe.status_code ``` ### Handle API Failure This will create a Payout with validation failure to showcase how to parse the failed response entity. Refer samples for more scenarios #### Code: ```python from paypalpayoutssdk.payouts import PayoutsPostRequest from paypalhttp import HttpError from paypalhttp.encoder import Encoder from paypalhttp.serializers.json_serializer import Json # Construct a request object and set desired parameters # Here, PayoutsPostRequest() creates a POST request to /v1/payments/payouts body = { "sender_batch_header": { "recipient_type": "EMAIL", "email_message": "SDK payouts test txn", "note": "Enjoy your Payout!!", "sender_batch_id": "Test_SDK_1", "email_subject": "This is a test transaction from SDK" }, "items": [{ "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.0.0" }, "receiver": "payout-sdk-1@paypal.com", "sender_item_id": "Test_txn_1" }, { "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.0.0" }, "receiver": "payout-sdk-2@paypal.com", "sender_item_id": "Test_txn_2" }, { "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.0.0" }, "receiver": "payout-sdk-3@paypal.com", "sender_item_id": "Test_txn_3" }, { "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.0.0" }, "receiver": "payout-sdk-4@paypal.com", "sender_item_id": "Test_txn_4" }, { "note": "Your 1$ Payout!", "amount": { "currency": "USD", "value": "1.0.0" }, "receiver": "payout-sdk-5@paypal.com", "sender_item_id": "Test_txn_5" }] } request = PayoutsPostRequest() request.request_body(body) try: # Call API with your client and get a response for your call response = client.execute(request) # If call returns body in response, you can get the deserialized version from the result attribute of the response batch_id = response.result.batch_header.payout_batch_id print batch_id except HttpError as httpe: # Handle server side API failure encoder = Encoder([Json()]) error = encoder.deserialize_response(httpe.message, httpe.headers) print("Error: " + error["name"]) print("Error message: " + error["message"]) print("Information link: " + error["information_link"]) print("Debug id: " + error["debug_id"]) print("Details: ") for detail in error["details"]: print("Error location: " + detail["location"]) print("Error field: " + detail["field"]) print("Error issue: " + detail["issue"]) except IOError as ioe: #Handle cient side connection failures print(ioe.message) ``` ### Retrieve a Payout Batch Pass the batch_id from the previous sample to retrieve Payouts batch details #### Code: ```python from paypalpayoutssdk.payouts import PayoutsGetRequest # Here, PayoutsGetRequest() creates a GET request to /v1/payments/payouts/ request = PayoutsGetRequest("PAYOUT-BATCH-ID") try: # Call API with your client and get a response for your call response = client.execute(request) # If call returns body in response, you can get the deserialized version from the result attribute of the response batch_status = response.result.batch_header.batch_status print batch_status except IOError as ioe: if isinstance(ioe, HttpError): # Something went wrong server-side print ioe.status_code print ioe.headers print ioe else: # Something went wrong client side print ioe ``` ## Running tests To run integration tests using your client id and secret, clone this repository and run the following command: ```sh $ pip install nose # if not already installed $ PAYPAL_CLIENT_ID=your_client_id PAYPAL_CLIENT_SECRET=your_client_secret nosetests --exe ``` ## Samples You can start off by trying out [Payouts Samples](samples/run_all.py) To try out different samples head to [this link](samples) Note: Update the `paypal_client.py` with your sandbox client credentials or pass your client credentials as environment variable whie executing the samples. ## License Code released under [SDK LICENSE](LICENSE)