This library is the abstraction of Xendit API for access from applications written with Python.
- API Documentation
- Requirements
- Installation
- Usage
- API Key
- Headers
- Object Creation
- Using Custom HTTP Client
- Balance Service
- Credit Card Service
- eWallets Service
- Cardless Credit Service
- QR Codes Service
- Direct Debit Service
- Create Customer
- Get Customer by Reference ID
- Initialize Linked Account Tokenization
- Validate OTP for Linked Account Token
- Retrieve Accessible Accounts by Linked Account Token
- Create Payment Method
- Get Payment Methods by Customer ID
- Create Direct Debit Payment
- Create Recurring Payment with Direct Debit
- Validate OTP for Direct Debit Payment
- Get Direct Debit Payment Status by ID
- Get Direct Debit Payment Status by Reference ID
- Virtual Account Service
- Retail Outlet Service
- Invoice Service
- Recurring Payment Service
- Payout Service
- Disbursement Service
- Batch Disbursement Service
- xenPlatform Service
- Payment Methods
- Payment Requests
- Refunds
- Contributing
Please check Xendit API Reference.
Python 3.7 or later
To use the package, run pip install xendit-python
To add API Key, you have 2 option: Use global variable or use Xendit instance
import xendit
xendit.api_key = "test-key123"
# Then just run each class as static
from xendit import Balance
Balance.get()
import xendit
x = xendit.Xendit(api_key="test-key123")
# Then access each class from x attribute
Balance = x.Balance
Balance.get()
You can add headers by using the following keyword parameters
- X-IDEMPOTENCY-KEY:
x_idempotency_key
VirtualAccount.create(x_idempotency_key="your-idemp-key")
- for-user-id:
for_user_id
Balance.get(for_user_id='subaccount-user-id')
- X-API-VERSION:
x_api_version
Balance.get(x_api_version='2020-01-01')
If an API need an object as its parameter, you can use either dictionary for that class or a helper method e.g:
items = []
item = {
id: "123123",
name: "Phone Case",
price: 100000,
quantity: 1
}
items.append(item)
EWallet.create_linkaja_payment(
external_id="linkaja-ewallet-test-1593663498",
phone="089911111111",
items=items,
amount=300000,
callback_url="https://my-shop.com/callbacks",
redirect_url="https://xendit.co/",
)
is equivalent with
items = []
item = EWallet.helper_create_linkaja_item(
id="123123", name="Phone Case", price=100000, quantity=1
)
items.append(item)
EWallet.create_linkaja_payment(
external_id="linkaja-ewallet-test-1593663498",
phone="089911111111",
items=items,
amount=300000,
callback_url="https://my-shop.com/callbacks",
redirect_url="https://xendit.co/",
)
To use your own HTTP Client, you can do it as long as your http client adhere to HTTP client interface at xendit/network/http_client_interface.py
. For example, requests library are compatible with that interface, so we can freely use it in our library. To attach it to your instance, add it to your xendit parameter.
import xendit
xendit_instance = xendit.Xendit(api_key='', http_client=YourHTTPClientClass)
The account_type
parameter is optional.
from xendit import Balance
Balance.get()
Balance.AccountType(
account_type=BalanceAccountType.CASH,
)
Usage example:
from xendit import Balance, BalanceAccountType
Balance balance = Balance.get(
account_type=BalanceAccountType.CASH,
)
# To get the JSON view
print(balance)
# To get only the value
print(balance.balance)
Will return
{'balance': 1000000000}
1000000000
from xendit import CreditCard
charge = CreditCard.create_authorization(
token_id="5f0410898bcf7a001a00879d",
external_id="card_preAuth-1594106356",
amount=75000,
card_cvn="123",
metadata={
"meta": "data",
},
)
print(charge)
Will return
{
"status": "AUTHORIZED",
"authorized_amount": 75000,
"capture_amount": 0,
"currency": "IDR",
"business_id": "5ed75086a883856178afc12e",
"merchant_id": "xendit_ctv_agg",
"merchant_reference_code": "5f0421faa98815a4f4c92a0d",
"external_id": "card_preAuth-1594106356",
"eci": "07",
"charge_type": "MULTIPLE_USE_TOKEN",
"masked_card_number": "400000XXXXXX0002",
"card_brand": "VISA",
"card_type": "CREDIT",
"descriptor": "XENDIT*XENDIT'S INTERN",
"bank_reconciliation_id": "5941063625146828103011",
"approval_code": "831000",
"created": "2020-07-07T07:19:22.921Z",
"id": "5f0421fa8cc1e8001973a1d6",
"metadata": {
"meta": "data"
}
}
from xendit import CreditCard
reverse_authorization = CreditCard.reverse_authorizatiton(
credit_card_charge_id="5f0421fa8cc1e8001973a1d6",
external_id="reverse-authorization-1594106387",
)
print(reverse_authorization)
Will return
{
"status": "SUCCEEDED",
"currency": "IDR",
"credit_card_charge_id": "5f0421fa8cc1e8001973a1d6",
"business_id": "5ed75086a883856178afc12e",
"external_id": "card_preAuth-1594106356",
"amount": 75000,
"created": "2020-07-07T07:19:48.896Z",
"id": "5f0422148cc1e8001973a1dc"
}
from xendit import CreditCard
charge = CreditCard.create_charge(
token_id="5f0410898bcf7a001a00879d",
external_id="card_charge-1594106478",
amount=75000,
card_cvn="123",
metadata={
"meta": "data",
},
)
print(charge)
Will return
{
"status": "CAPTURED",
"authorized_amount": 75000,
"capture_amount": 75000,
"currency": "IDR",
"business_id": "5ed75086a883856178afc12e",
"merchant_id": "xendit_ctv_agg",
"merchant_reference_code": "5f0422746fc1d25bd222df2e",
"external_id": "card_charge-1594106478",
"eci": "07",
"charge_type": "MULTIPLE_USE_TOKEN",
"masked_card_number": "400000XXXXXX0002",
"card_brand": "VISA",
"card_type": "CREDIT",
"descriptor": "XENDIT*XENDIT'S INTERN",
"bank_reconciliation_id": "5941064846646923303008",
"approval_code": "831000",
"created": "2020-07-07T07:21:25.027Z",
"id": "5f0422752bbbe50019a368b5",
"metadata": {
"meta": "data"
}
}
from xendit import CreditCard
charge = CreditCard.capture_charge(
credit_card_charge_id="5f0422aa2bbbe50019a368c2",
amount=75000,
)
print(charge)
Will return
{
"status": "CAPTURED",
"authorized_amount": 75000,
"capture_amount": 75000,
"currency": "IDR",
"created": "2020-07-07T07:22:18.719Z",
"business_id": "5ed75086a883856178afc12e",
"merchant_id": "xendit_ctv_agg",
"merchant_reference_code": "5f0422aa6fc1d25bd222df32",
"external_id": "card_preAuth-1594106532",
"eci": "07",
"charge_type": "MULTIPLE_USE_TOKEN",
"masked_card_number": "400000XXXXXX0002",
"card_brand": "VISA",
"card_type": "CREDIT",
"descriptor": "XENDIT*XENDIT'S INTERN",
"bank_reconciliation_id": "5941065383296525603007",
"approval_code": "831000",
"mid_label": "CTV_TEST",
"id": "5f0422aa2bbbe50019a368c2"
}
from xendit import CreditCard
charge = CreditCard.get_charge(
credit_card_charge_id="5f0422aa2bbbe50019a368c2",
)
print(charge)
Will return
{
"status": "CAPTURED",
"authorized_amount": 75000,
"capture_amount": 75000,
"currency": "IDR",
"created": "2020-07-07T07:22:18.719Z",
"business_id": "5ed75086a883856178afc12e",
"merchant_id": "xendit_ctv_agg",
"merchant_reference_code": "5f0422aa6fc1d25bd222df32",
"external_id": "card_preAuth-1594106532",
"eci": "07",
"charge_type": "MULTIPLE_USE_TOKEN",
"masked_card_number": "400000XXXXXX0002",
"card_brand": "VISA",
"card_type": "CREDIT",
"descriptor": "XENDIT*XENDIT'S INTERN",
"bank_reconciliation_id": "5941065383296525603007",
"approval_code": "831000",
"mid_label": "CTV_TEST",
"metadata": {},
"id": "5f0422aa2bbbe50019a368c2"
}
from xendit import CreditCard
refund = CreditCard.create_refund(
credit_card_charge_id="5f0422aa2bbbe50019a368c2",
amount=10000,
external_id="card_refund-1594106755",
)
print(refund)
Will return
{
"status": "REQUESTED",
"currency": "IDR",
"credit_card_charge_id": "5f0422aa2bbbe50019a368c2",
"user_id": "5ed75086a883856178afc12e",
"amount": 10000,
"external_id": "card_refund-1594106755",
"created": "2020-07-07T07:25:56.872Z",
"updated": "2020-07-07T07:25:57.740Z",
"id": "5f0423848bb8da600c57c44f",
"fee_refund_amount": 290
}
from xendit import CreditCard
promotion = CreditCard.create_promotion(
reference_id="BRI_20_JAN-1594176600",
description="20% discount applied for all BRI cards",
discount_amount=10000,
bin_list=['400000', '460000'],
start_time="2020-01-01T00:00:00.000Z",
end_time="2021-01-01T00:00:00.000Z",
)
print(promotion)
Will return
{
"business_id": "5ed75086a883856178afc12e",
"reference_id": "BRI_20_JAN-1594176600",
"description": "20% discount applied for all BRI cards",
"start_time": "2020-01-01T00:00:00.000Z",
"end_time": "2021-01-01T00:00:00.000Z",
"type": "CARD_BIN",
"discount_amount": 10000,
"bin_list": [
"400000",
"460000"
],
"currency": "IDR",
"id": "c65a2ae7-ce75-4a15-bbec-55d076f46bd0",
"created": "2020-07-08T02:50:02.296Z",
"status": "ACTIVE"
}
from xendit import EWallet
basket = []
basket_item = EWallet.helper_create_basket_item(
reference_id = "basket-product-ref-id",
name = "product_name",
category = "product_category",
currency = "IDR",
price = 50000,
quantity = 5,
type = "product_type",
sub_category = "product_sub_category",
metadata = {
"meta": "data"
}
)
basket.append(basket_item)
ewallet_charge = EWallet.create_ewallet_charge(
reference_id="basket-product-ref-id",
currency="IDR",
amount=10000,
checkout_method="ONE_TIME_PAYMENT",
channel_code="ID_SHOPEEPAY",
channel_properties={
"success_redirect_url": "https://yourwebsite.com/order/123",
},
basket=basket,
)
Will return
{
"id": "ewc_f3925450-5c54-4777-98c1-fcf22b0d1e1c",
"business_id": "5ed75086a883856178afc12e",
"reference_id": "basket-product-ref-id",
"status": "PENDING",
"currency": "IDR",
"charge_amount": 10000,
"capture_amount": 10000,
"checkout_method": "ONE_TIME_PAYMENT",
"channel_code": "ID_SHOPEEPAY",
"channel_properties": {
"success_redirect_url": "https://yourwebsite.com/order/123",
},
"actions": {
"desktop_web_checkout_url": null,
"mobile_web_checkout_url": null,
"mobile_deeplink_checkout_url": "https://ewallet-mock-connector.xendit.co/v1/ewallet_connector/checkouts?token=ZjQyOGIzMGVlNGFjOWJhNTE2YWQ3NGQyN2RiMTIwODg6ZTY2YjA2YjQ1ZjJlZWI0NDA4OGNjODg2NGFlYzQ2N2U5YTI5MjM3ODUzODViYzljNjQyYWYwOGExMjU4MzdmMTc3NDFlMWZmYjcxN2MzOWZiYmMyNjY4N2ViNmMxM2ZkMjg1ZmIzZDM5ZmZiZDYzM2ViNGMyMDRkOWM3ZTUzNWUyMDBlOWUzMzdhZTkwZjllZjQwZjQyMjExOTkyNWQ2MTg2YzgzZTQ3N2JhYWZkNDFhN2U0MWM1ZDMzMGJmMmNhNzhiMjhmMmY5ZDBjZDQ4MjlkODA3MjE5YWQzYTlhNTE0YmM1NjUzYjljMmZlOWU1YjMwM2FmNTZiNmViNGVlZDIxODQzNzdjNDJmYjRmNzBmZDZlZDhlM2MyMGM4YmExY2RmNTVkOTdjZmU3MWYxMWVmMDYzMmQzNGE1ZTFmMzE=",
"qr_checkout_string": "test-qr-string",
},
"is_redirect_required": true,
"callback_url": "https://yourwebsite.com/order/123",
"created": "2021-02-09T06:22:35.064408Z",
"updated": "2021-02-09T06:22:35.064408Z",
"voided_at": null,
"capture_now": true,
"customer_id": null,
"payment_method_id": null,
"failure_code": null,
"basket": [
{
"reference_id": "basket-product-ref-id",
"name": "product_name",
"category": "product_category",
"currency": "IDR",
"price": 50000,
"quantity": 5,
"type": "product_type",
"url": "",
"description": "",
"sub_category": "product_sub_category",
"metadata": {
"meta": "data"
}
}
],
"metadata": null,
}
from xendit import EWallet
ewallet_charge = EWallet.get_ewallet_charge_status(
charge_id="ewc_f3925450-5c54-4777-98c1-fcf22b0d1e1c",
)
Will return
{
"id": "ewc_f3925450-5c54-4777-98c1-fcf22b0d1e1c",
"business_id": "5ed75086a883856178afc12e",
"reference_id": "basket-product-ref-id",
"status": "PENDING",
"currency": "IDR",
"charge_amount": 10000,
"capture_amount": 10000,
"checkout_method": "ONE_TIME_PAYMENT",
"channel_code": "ID_SHOPEEPAY",
"channel_properties": {
"success_redirect_url": "https://yourwebsite.com/order/123",
},
"actions": {
"desktop_web_checkout_url": null,
"mobile_web_checkout_url": null,
"mobile_deeplink_checkout_url": "https://ewallet-mock-connector.xendit.co/v1/ewallet_connector/checkouts?token=ZjQyOGIzMGVlNGFjOWJhNTE2YWQ3NGQyN2RiMTIwODg6ZTY2YjA2YjQ1ZjJlZWI0NDA4OGNjODg2NGFlYzQ2N2U5YTI5MjM3ODUzODViYzljNjQyYWYwOGExMjU4MzdmMTc3NDFlMWZmYjcxN2MzOWZiYmMyNjY4N2ViNmMxM2ZkMjg1ZmIzZDM5ZmZiZDYzM2ViNGMyMDRkOWM3ZTUzNWUyMDBlOWUzMzdhZTkwZjllZjQwZjQyMjExOTkyNWQ2MTg2YzgzZTQ3N2JhYWZkNDFhN2U0MWM1ZDMzMGJmMmNhNzhiMjhmMmY5ZDBjZDQ4MjlkODA3MjE5YWQzYTlhNTE0YmM1NjUzYjljMmZlOWU1YjMwM2FmNTZiNmViNGVlZDIxODQzNzdjNDJmYjRmNzBmZDZlZDhlM2MyMGM4YmExY2RmNTVkOTdjZmU3MWYxMWVmMDYzMmQzNGE1ZTFmMzE=",
"qr_checkout_string": "test-qr-string",
},
"is_redirect_required": true,
"callback_url": "https://yourwebsite.com/order/123",
"created": "2021-02-09T06:22:35.064408Z",
"updated": "2021-02-09T06:22:35.064408Z",
"voided_at": null,
"capture_now": true,
"customer_id": null,
"payment_method_id": null,
"failure_code": null,
"basket": [
{
"reference_id": "basket-product-ref-id",
"name": "product_name",
"category": "product_category",
"currency": "IDR",
"price": 50000,
"quantity": 5,
"type": "product_type",
"url": "",
"description": "",
"sub_category": "product_sub_category",
"metadata": {
"meta": "data"
}
}
],
"metadata": null,
}
from xendit import CardlessCredit, CardlessCreditType
cardless_credit_items = []
cardless_credit_items.append(
CardlessCredit.helper_create_item(
id="item-123",
name="Phone Case",
price=200000,
type="Smartphone",
url="http://example.com/phone/phone_case",
quantity=2,
)
)
customer_details = CardlessCredit.helper_create_customer_details(
first_name="customer first name",
last_name="customer last name",
email="[email protected]",
phone="0812332145",
)
shipping_address = CardlessCredit.helper_create_shipping_address(
first_name="first name",
last_name="last name",
address="Jl Teknologi No. 12",
city="Jakarta",
postal_code="12345",
phone="081513114262",
country_code="IDN",
)
cardless_credit_payment = CardlessCredit.create_payment(
cardless_credit_type=CardlessCreditType.KREDIVO,
external_id="id-1595923113",
amount=10000,
payment_type="3_months",
items=cardless_credit_items,
customer_details=customer_details,
shipping_address=shipping_address,
redirect_url="https://my-shop.com/home",
callback_url="https://my-shop.com/callback",
)
print(cardless_credit_payment)
Will return
{
"redirect_url": "https://pay-sandbox.kredivo.com/signIn?tk=26458cdf-660c-4491-a1de-bb6e63312d8a",
"order_id": "e8ae4066-7980-499f-b92c-eb3a587782c1",
"external_id": "id-1595923113",
"cardless_credit_type": "KREDIVO"
}
from xendit import CardlessCredit, CardlessCreditType
cardless_credit_items = []
cardless_credit_items.append(
CardlessCredit.helper_create_item(
id="item-123",
name="Phone Case",
price=200000,
type="Smartphone",
url="http://example.com/phone/phone_case",
quantity=2,
)
)
cardless_credit_payment_types = CardlessCredit.calculate_payment_type(
cardless_credit_type=CardlessCreditType.KREDIVO,
amount=10000,
items=cardless_credit_items,
)
print(cardless_credit_payment_types)
Will return
{
"message": "Available payment types are listed.",
"payments": [
{
"raw_monthly_installment": 401000,
"name": "Bayar dalam 30 hari",
"amount": 401000,
"installment_amount": 401000,
"raw_amount": 401000,
"rate": 0,
"down_payment": 0,
"monthly_installment": 401000,
"discounted_monthly_installment": 0,
"tenure": 1,
"id": "30_days"
}
]
}
from xendit import QRCode, QRCodeType
qrcode = QRCode.create(
external_id="qrcode-id-1594794038",
type=QRCodeType.DYNAMIC,
callback_url="https://webhook.site",
amount=4000,
)
print(qrcode)
Will return
{
"id": "qr_13c31ddd-9d58-449b-9f52-1bf5123a45b5",
"external_id": "qrcode-id-1594794038",
"amount": 4000,
"qr_string": "00020101021226660014ID.LINKAJA.WWW011893600911002411480002152004230411480010303UME51450015ID.OR.GPNQR.WWW02150000000000000000303UME520454995802ID5920Placeholder merchant6007Jakarta610612345662380115wLoc6DRGwAOgSkZ0715wLoc6DRGwAOgSkZ53033605404400063047668",
"callback_url": "https://webhook.site",
"type": "DYNAMIC",
"status": "ACTIVE",
"created": "2020-07-15T06:20:40.636Z",
"updated": "2020-07-15T06:20:40.636Z"
}
from xendit import QRCode
qrcode = QRCode.get_by_ext_id(
external_id="qrcode-id-1594794038",
)
print(qrcode)
Will return
{
"id": "qr_13c31ddd-9d58-449b-9f52-1bf5123a45b5",
"external_id": "qrcode-id-1594794038",
"amount": 4000,
"qr_string": "00020101021226660014ID.LINKAJA.WWW011893600911002411480002152004230411480010303UME51450015ID.OR.GPNQR.WWW02150000000000000000303UME520454995802ID5920Placeholder merchant6007Jakarta610612345662380115wLoc6DRGwAOgSkZ0715wLoc6DRGwAOgSkZ53033605404400063047668",
"callback_url": "https://webhook.site",
"type": "DYNAMIC",
"status": "ACTIVE",
"created": "2020-07-15T06:20:40.636Z",
"updated": "2020-07-15T06:20:40.636Z"
}
from xendit import DirectDebit
customer = DirectDebit.create_customer(
reference_id="merc-1594279037",
email="[email protected]",
given_names="Adyaksa",
)
print(customer)
Will return
{
"id": "ed20b5db-df04-41fc-8018-8ea4ac4d1030",
"reference_id": "merc-1594279037",
"description": null,
"given_names": "Adyaksa",
"middle_name": null,
"surname": null,
"mobile_number": null,
"phone_number": null,
"email": "[email protected]",
"nationality": null,
"addresses": null,
"date_of_birth": null,
"employment": null,
"source_of_wealth": null,
"metadata": null
}
from xendit import DirectDebit
customer = DirectDebit.get_customer_by_ref_id(
reference_id="merc-1594279037",
)
print(customer)
Will return
[{
"id": "ed20b5db-df04-41fc-8018-8ea4ac4d1030",
"reference_id": "merc-1594279037",
"description": null,
"given_names": "Adyaksa",
"middle_name": null,
"surname": null,
"mobile_number": null,
"phone_number": null,
"email": "[email protected]",
"nationality": null,
"addresses": null,
"date_of_birth": null,
"employment": null,
"source_of_wealth": null,
"metadata": null
}]
from xendit import DirectDebit
card_linking = DirectDebit.helper_create_card_link(
account_mobile_number="+62818555988",
card_last_four="8888",
card_expiry="06/24",
account_email="[email protected]",
)
linked_account = DirectDebit.initialize_tokenization(
customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
channel_code="DC_BRI",
properties=card_linking,
)
print(linked_account)
Will return
{
"id": "lat-f325b757-0aae-4c24-92c5-3661e299e154",
"customer_id": "ed20b5db-df04-41fc-8018-8ea4ac4d1030",
"channel_code": "DC_BRI",
"authorizer_url": null,
"status": "PENDING",
"metadata": null
}
from xendit import DirectDebit
linked_account = DirectDebit.validate_token_otp(
linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
otp_code="333000",
)
print(linked_account)
Will return
{
"id": "lat-f325b757-0aae-4c24-92c5-3661e299e154",
"customer_id": "ed20b5db-df04-41fc-8018-8ea4ac4d1030",
"channel_code": "DC_BRI",
"status": "SUCCESS",
"metadata": null
}
from xendit import DirectDebit
accessible_accounts = DirectDebit.get_accessible_account_by_token(
linked_account_token_id="lat-f325b757-0aae-4c24-92c5-3661e299e154",
)
print(accessible_accounts)
Will return
[{
"channel_code": "DC_BRI",
"id": "la-08b089e8-7035-4f5f-bdd9-94edd9dc9480",
"properties": {
"card_expiry": "06/24",
"card_last_four": "8888",
"currency": "IDR",
"description": ""
},
"type": "DEBIT_CARD"
}]
from xendit import DirectDebit, DirectDebitPaymentMethodType
payment_method = DirectDebit.create_payment_method(
customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
type=DirectDebitPaymentMethodType.DEBIT_CARD,
properties={'id': 'la-fac7e744-ab40-4100-a447-cbbb16f29ded'},
)
print(payment_method)
Will return
{
"customer_id": "ed20b5db-df04-41fc-8018-8ea4ac4d1030",
"type": "DEBIT_CARD",
"properties": {
"id": "la-fac7e744-ab40-4100-a447-cbbb16f29ded",
"currency": "IDR",
"card_expiry": "06/24",
"description": "",
"channel_code": "DC_BRI",
"card_last_four": "8888"
},
"status": "ACTIVE",
"metadata": {},
"id": "pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
"created": "2020-07-13T07:28:57.716Z",
"updated": "2020-07-13T07:28:57.716Z"
}
from xendit import DirectDebit
payment_methods = DirectDebit.get_payment_methods_by_customer_id(
customer_id="ed20b5db-df04-41fc-8018-8ea4ac4d1030",
)
print(payment_methods)
Will return
[{
"id": "pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
"customer_id": "ed20b5db-df04-41fc-8018-8ea4ac4d1030",
"status": "ACTIVE",
"type": "DEBIT_CARD",
"properties": {
"id": "la-fac7e744-ab40-4100-a447-cbbb16f29ded",
"currency": "IDR",
"card_expiry": "06/24",
"description": "",
"channel_code": "DC_BRI",
"card_last_four": "8888"
},
"metadata": {},
"created": "2020-07-13T07:28:57.716Z",
"updated": "2020-07-13T07:28:57.716Z"
}]
from xendit import DirectDebit
payment = DirectDebit.create_payment(
reference_id="direct-debit-ref-1594718940",
payment_method_id="pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
currency="IDR",
amount="60000",
callback_url="http://webhook.site/",
enable_otp=True,
idempotency_key="idemp_key-1594718940",
)
print(payment)
Will return
{
"failure_code": null,
"otp_mobile_number": null,
"otp_expiration_timestamp": null,
"id": "ddpy-eaa093b6-b669-401a-ba2e-61ac644b2aff",
"reference_id": "direct-debit-ref-1594718940",
"payment_method_id": "pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
"channel_code": "DC_BRI",
"currency": "IDR",
"amount": 60000,
"is_otp_required": true,
"basket": null,
"description": "",
"status": "PENDING",
"metadata": null,
"created": "2020-07-14T09:29:02.614443Z",
"updated": "2020-07-14T09:29:02.614443Z"
}
You can use Create Recurring Payment to use this feature.
from xendit import DirectDebit
payment = DirectDebit.validate_payment_otp(
direct_debit_id="ddpy-eaa093b6-b669-401a-ba2e-61ac644b2aff",
otp_code="222000",
)
print(payment)
Will return
{
"failure_code": null,
"otp_mobile_number": null,
"otp_expiration_timestamp": null,
"id": "ddpy-eaa093b6-b669-401a-ba2e-61ac644b2aff",
"reference_id": "direct-debit-ref-1594718940",
"payment_method_id": "pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
"channel_code": "DC_BRI",
"currency": "IDR",
"amount": 60000,
"is_otp_required": true,
"basket": null,
"description": "",
"status": "PENDING",
"metadata": null,
"created": "2020-07-14T09:29:02.614443Z",
"updated": "2020-07-14T09:29:02.614443Z"
}
from xendit import DirectDebit
payment = DirectDebit.get_payment_status(
direct_debit_id="ddpy-38ef50a8-00f0-4019-8b28-9bca81f2cbf1",
)
print(payment)
Will return
{
"failure_code": null,
"otp_mobile_number": null,
"otp_expiration_timestamp": null,
"id": "ddpy-38ef50a8-00f0-4019-8b28-9bca81f2cbf1",
"reference_id": "direct-debit-ref-1594717458",
"payment_method_id": "pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
"channel_code": "DC_BRI",
"currency": "IDR",
"amount": 60000,
"is_otp_required": false,
"basket": null,
"description": "",
"status": "PENDING",
"metadata": null,
"created": "2020-07-14T09:04:20.031451Z",
"updated": "2020-07-14T09:04:20.031451Z"
}
from xendit import DirectDebit
payments = DirectDebit.get_payment_status_by_ref_id(
reference_id="direct-debit-ref-1594717458",
)
print(payments)
Will return
[{
"amount": 60000,
"basket": null,
"channel_code": "DC_BRI",
"created": "2020-07-14T09:04:20.031451Z",
"currency": "IDR",
"description": "",
"failure_code": null,
"id": "ddpy-38ef50a8-00f0-4019-8b28-9bca81f2cbf1",
"is_otp_required": false,
"metadata": null,
"otp_expiration_timestamp": null,
"otp_mobile_number": null,
"payment_method_id": "pm-b6116aea-8c23-42d0-a1e6-33227b52fccd",
"reference_id": "direct-debit-ref-1594717458",
"status": "PENDING",
"updated": "2020-07-14T09:04:20.031451Z"
}]
from xendit import VirtualAccount
virtual_account = VirtualAccount.create(
external_id="demo_1475459775872",
bank_code="BNI",
name="Rika Sutanto",
)
print(virtual_account)
Will return
{
"owner_id": "5ed75086a883856178afc12e",
"external_id": "demo_1475459775872",
"bank_code": "BNI",
"merchant_code": "8808",
"name": "Rika Sutanto",
"account_number": "8808999956275653",
"is_single_use": false,
"status": "PENDING",
"expiration_date": "2051-06-22T17:00:00.000Z",
"is_closed": false,
"id": "5ef174c48dd9ea2fc97d6a1e"
}
from xendit import VirtualAccount
virtual_account_banks = VirtualAccount.get_banks()
print(virtual_account_banks)
Will return
[{
"name": "Bank Mandiri",
"code": "MANDIRI"
}, {
"name": "Bank Negara Indonesia",
"code": "BNI"
}, {
"name": "Bank Rakyat Indonesia",
"code": "BRI"
}, {
"name": "Bank Permata",
"code": "PERMATA"
}, {
"name": "Bank Central Asia",
"code": "BCA"
}]
from xendit import VirtualAccount
virtual_account = VirtualAccount.get(
id="5eec3a3e8dd9ea2fc97d6728",
)
print(virtual_account)
Will return
{
"owner_id": "5ed75086a883856178afc12e",
"external_id": "demo_1475459775872",
"bank_code": "BNI",
"merchant_code": "8808",
"name": "Rika Sutanto",
"account_number": "8808999917965673",
"is_single_use": true,
"status": "ACTIVE",
"expiration_date": "2051-06-18T17:00:00.000Z",
"is_closed": false,
"id": "5eec3a3e8dd9ea2fc97d6728"
}
from xendit import VirtualAccount
virtual_account = VirtualAccount.update(
id="5eec3a3e8dd9ea2fc97d6728",
is_single_use=True,
)
print(virtual_account)
Will return
{
"owner_id": "5ed75086a883856178afc12e",
"external_id": "demo_1475459775872",
"bank_code": "BNI",
"merchant_code": "8808",
"name": "Rika Sutanto",
"account_number": "8808999917965673",
"is_single_use": true,
"status": "PENDING",
"expiration_date": "2051-06-18T17:00:00.000Z",
"is_closed": false,
"id": "5eec3a3e8dd9ea2fc97d6728"
}
from xendit import VirtualAccount
virtual_account_payment = VirtualAccount.get_payment(
payment_id="5ef18efca7d10d1b4d61fb52",
)
print(virtual_account_payment)
Will return
{
"id": "5ef18efcf9ce3b5f8e188ee4",
"payment_id": "5ef18efca7d10d1b4d61fb52",
"callback_virtual_account_id": "5ef18ece8dd9ea2fc97d6a84",
"external_id": "VA_fixed-1592889038",
"merchant_code": "88608",
"account_number": "9999317837",
"bank_code": "MANDIRI",
"amount": 50000,
"transaction_timestamp": "2020-06-23T05:11:24.000Z"
}
from xendit import RetailOutlet
retail_outlet = RetailOutlet.create_fixed_payment_code(
external_id="demo_fixed_payment_code_123",
retail_outlet_name="ALFAMART",
name="Rika Sutanto",
expected_amount=10000,
)
print(retail_outlet)
Will return
{
"owner_id": "5ed75086a883856178afc12e",
"external_id": "demo_fixed_payment_code_123",
"retail_outlet_name": "ALFAMART",
"prefix": "TEST",
"name": "Rika Sutanto",
"payment_code": "TEST56147",
"expected_amount": 10000,
"is_single_use": False,
"expiration_date": "2051-06-23T17:00:00.000Z",
"id": "5ef2f0f8e7f5c14077275493",
}
from xendit import RetailOutlet
retail_outlet = RetailOutlet.update_fixed_payment_code(
fixed_payment_code_id="5ef2f0f8e7f5c14077275493",
name="Joe Contini",
)
print(retail_outlet)
Will return
{
"owner_id": "5ed75086a883856178afc12e",
"external_id": "demo_fixed_payment_code_123",
"retail_outlet_name": "ALFAMART",
"prefix": "TEST",
"name": "Joe Contini",
"payment_code": "TEST56147",
"expected_amount": 10000,
"is_single_use": False,
"expiration_date": "2051-06-23T17:00:00.000Z",
"id": "5ef2f0f8e7f5c14077275493",
}
from xendit import RetailOutlet
retail_outlet = RetailOutlet.get_fixed_payment_code(
fixed_payment_code_id="5ef2f0f8e7f5c14077275493",
)
print(retail_outlet)
Will return
{
"owner_id": "5ed75086a883856178afc12e",
"external_id": "demo_fixed_payment_code_123",
"retail_outlet_name": "ALFAMART",
"prefix": "TEST",
"name": "Rika Sutanto",
"payment_code": "TEST56147",
"expected_amount": 10000,
"is_single_use": False,
"expiration_date": "2051-06-23T17:00:00.000Z",
"id": "5ef2f0f8e7f5c14077275493",
}
from xendit import Invoice
invoice = Invoice.create(
external_id="invoice-1593684000",
amount=20000,
payer_email="[email protected]",
description="Invoice Demo #123",
)
print(invoice)
Will return
{
"id": "5efdb0210425db620ec35fb3",
"external_id": "invoice-1593684000",
"user_id": "5ed75086a883856178afc12e",
"status": "PENDING",
"merchant_name": "Xendit's Intern",
"merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1591169469152_279.png",
"amount": 20000,
"payer_email": "[email protected]",
"description": "Invoice Demo #123",
"expiry_date": "2020-07-03T10:00:01.148Z",
"invoice_url": "https://invoice-staging.xendit.co/web/invoices/5efdb0210425db620ec35fb3",
"available_banks": [
{
"bank_code": "MANDIRI",
"collection_type": "POOL",
"bank_account_number": "8860846854335",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
},
{
"bank_code": "BRI",
"collection_type": "POOL",
"bank_account_number": "2621554807492",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
},
{
"bank_code": "BNI",
"collection_type": "POOL",
"bank_account_number": "880854597383",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
},
{
"bank_code": "PERMATA",
"collection_type": "POOL",
"bank_account_number": "821456659745",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
},
{
"bank_code": "BCA",
"collection_type": "POOL",
"bank_account_number": "1076619844859",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
}
],
"available_retail_outlets": [
{
"retail_outlet_name": "ALFAMART",
"payment_code": "TEST34956",
"transfer_amount": 20000
}
],
"available_ewallets": [],
"should_exclude_credit_card": false,
"should_send_email": false,
"created": "2020-07-02T10:00:01.285Z",
"updated": "2020-07-02T10:00:01.285Z",
"currency": "IDR"
}
from xendit import Invoice
invoice = Invoice.get(
invoice_id="5efda8a20425db620ec35f43",
)
print(invoice)
Will return
{
"id": "5efda8a20425db620ec35f43",
"external_id": "invoice-1593682080",
"user_id": "5ed75086a883856178afc12e",
"status": "EXPIRED",
"merchant_name": "Xendit's Intern",
"merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1591169469152_279.png",
"amount": 20000,
"payer_email": "[email protected]",
"description": "Invoice Demo #123",
"expiry_date": "2020-07-02T09:55:47.794Z",
"invoice_url": "https://invoice-staging.xendit.co/web/invoices/5efda8a20425db620ec35f43",
"available_banks": [
{
"bank_code": "MANDIRI",
"collection_type": "POOL",
"bank_account_number": "8860846853111",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
},
{
"bank_code": "BRI",
"collection_type": "POOL",
"bank_account_number": "2621554806292",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
}
],
"available_retail_outlets": [
{
"retail_outlet_name": "ALFAMART",
"payment_code": "TEST34950",
"transfer_amount": 20000
}
],
"available_ewallets": [],
"should_exclude_credit_card": false,
"should_send_email": false,
"created": "2020-07-02T09:28:02.191Z",
"updated": "2020-07-02T09:55:47.794Z",
"currency": "IDR"
}
from xendit import Invoice
invoice = Invoice.expire(
invoice_id="5efda8a20425db620ec35f43",
)
print(invoice)
Will return
{
"id": "5efda8a20425db620ec35f43",
"external_id": "invoice-1593682080",
"user_id": "5ed75086a883856178afc12e",
"status": "EXPIRED",
"merchant_name": "Xendit's Intern",
"merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1591169469152_279.png",
"amount": 20000,
"payer_email": "[email protected]",
"description": "Invoice Demo #123",
"expiry_date": "2020-07-02T09:55:47.794Z",
"invoice_url": "https://invoice-staging.xendit.co/web/invoices/5efda8a20425db620ec35f43",
"available_banks": [
{
"bank_code": "MANDIRI",
"collection_type": "POOL",
"bank_account_number": "8860846853111",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
},
{
"bank_code": "BRI",
"collection_type": "POOL",
"bank_account_number": "2621554806292",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
}
"available_retail_outlets": [
{
"retail_outlet_name": "ALFAMART",
"payment_code": "TEST34950",
"transfer_amount": 20000
}
],
"available_ewallets": [],
"should_exclude_credit_card": false,
"should_send_email": false,
"created": "2020-07-02T09:28:02.191Z",
"updated": "2020-07-02T09:55:47.794Z",
"currency": "IDR"
}
from xendit import Invoice
invoices = Invoice.list_all(
limit=3,
)
print(invoices)
Will return
[
...
{
"id": "5efda8a20425db620ec35f43",
"external_id": "invoice-1593682080",
"user_id": "5ed75086a883856178afc12e",
"status": "EXPIRED",
"merchant_name": "Xendit's Intern",
"merchant_profile_picture_url": "https://xnd-companies.s3.amazonaws.com/prod/1591169469152_279.png",
"amount": 20000,
"payer_email": "[email protected]",
"description": "Invoice Demo #123",
"expiry_date": "2020-07-02T09:55:47.794Z",
"invoice_url": "https://invoice-staging.xendit.co/web/invoices/5efda8a20425db620ec35f43",
"available_banks": [
{
"bank_code": "MANDIRI",
"collection_type": "POOL",
"bank_account_number": "8860846853111",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
},
{
"bank_code": "BRI",
"collection_type": "POOL",
"bank_account_number": "2621554806292",
"transfer_amount": 20000,
"bank_branch": "Virtual Account",
"account_holder_name": "XENDIT'S INTERN",
"identity_amount": 0
}
"available_retail_outlets": [
{
"retail_outlet_name": "ALFAMART",
"payment_code": "TEST34950",
"transfer_amount": 20000
}
],
"available_ewallets": [],
"should_exclude_credit_card": false,
"should_send_email": false,
"created": "2020-07-02T09:28:02.191Z",
"updated": "2020-07-02T09:55:47.794Z",
"currency": "IDR"
}
...
]
from xendit import RecurringPayment
recurring_payment = RecurringPayment.create(
external_id="recurring_12345",
payer_email="[email protected]",
description="Test Curring Payment",
amount=100000,
interval="MONTH",
interval_count=1,
)
print(recurring_payment)
Will return
{
"status": "ACTIVE",
"should_send_email": false,
"missed_payment_action": "IGNORE",
"recurrence_progress": 1,
"recharge": true,
"user_id": "5ed75086a883856178afc12e",
"external_id": "recurring_12345",
"payer_email": "[email protected]",
"description": "Test Curring Payment",
"amount": 100000,
"interval": "MONTH",
"interval_count": 1,
"start_date": "2020-07-08T08:22:55.815Z",
"currency": "IDR",
"created": "2020-07-08T08:22:55.817Z",
"updated": "2020-07-08T08:22:55.994Z",
"id": "5f05825ff9f52d3ed204c687",
"last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5f05825ff9f52d3ed204c688"
}
from xendit import RecurringPayment
recurring_payment = RecurringPayment.get(
id="5f05825ff9f52d3ed204c687",
)
print(recurring_payment)
Will return
{
"status": "ACTIVE",
"should_send_email": false,
"missed_payment_action": "IGNORE",
"recurrence_progress": 1,
"recharge": true,
"user_id": "5ed75086a883856178afc12e",
"external_id": "recurring_12345",
"payer_email": "[email protected]",
"description": "Test Curring Payment",
"amount": 100000,
"interval": "MONTH",
"interval_count": 1,
"start_date": "2020-07-08T08:22:55.815Z",
"currency": "IDR",
"created": "2020-07-08T08:22:55.817Z",
"updated": "2020-07-08T08:22:55.994Z",
"id": "5f05825ff9f52d3ed204c687",
"last_created_invoice_url": "https://invoice-staging.xendit.co/web/invoices/5f05825ff9f52d3ed204c688"
}
from xendit import RecurringPayment
recurring_payment = RecurringPayment.edit(
id="5f05825ff9f52d3ed204c687",
interval_count=2,
)
print(recurring_payment)
Will return
{
"status": "ACTIVE",
"should_send_email": false,
"missed_payment_action": "IGNORE",
"recurrence_progress": 1,
"recharge": true,
"user_id": "5ed75086a883856178afc12e",
"external_id": "recurring_12345",
"payer_email": "[email protected]",
"description": "Test Curring Payment",
"amount": 100000,
"interval": "MONTH",
"interval_count": 2,
"start_date": "2020-07-08T08:22:55.815Z",
"currency": "IDR",
"created": "2020-07-08T08:22:55.817Z",
"updated": "2020-07-08T08:24:58.295Z",
"id": "5f05825ff9f52d3ed204c687"
}
from xendit import RecurringPayment
recurring_payment = RecurringPayment.stop(
id="5f05825ff9f52d3ed204c687",
)
print(recurring_payment)
Will return
{
"status": "STOPPED",
"should_send_email": false,
"missed_payment_action": "IGNORE",
"recurrence_progress": 1,
"recharge": true,
"user_id": "5ed75086a883856178afc12e",
"external_id": "recurring_12345",
"payer_email": "[email protected]",
"description": "Test Curring Payment",
"amount": 100000,
"interval": "MONTH",
"interval_count": 2,
"start_date": "2020-07-08T08:22:55.815Z",
"currency": "IDR",
"created": "2020-07-08T08:22:55.817Z",
"updated": "2020-07-08T08:26:32.464Z",
"id": "5f05825ff9f52d3ed204c687"
}
from xendit import RecurringPayment
recurring_payment = RecurringPayment.pause(
id="5f05825ff9f52d3ed204c687",
)
print(recurring_payment)
Will return
{
"status": "PAUSED",
"should_send_email": false,
"missed_payment_action": "IGNORE",
"recurrence_progress": 1,
"recharge": true,
"user_id": "5ed75086a883856178afc12e",
"external_id": "recurring_12345",
"payer_email": "[email protected]",
"description": "Test Curring Payment",
"amount": 100000,
"interval": "MONTH",
"interval_count": 2,
"start_date": "2020-07-08T08:22:55.815Z",
"currency": "IDR",
"created": "2020-07-08T08:22:55.817Z",
"updated": "2020-07-08T08:25:44.580Z",
"id": "5f05825ff9f52d3ed204c687"
}
from xendit import RecurringPayment
recurring_payment = RecurringPayment.resume(
id="5f05825ff9f52d3ed204c687",
)
print(recurring_payment)
Will return
{
"status": "ACTIVE",
"should_send_email": false,
"missed_payment_action": "IGNORE",
"recurrence_progress": 1,
"recharge": true,
"user_id": "5ed75086a883856178afc12e",
"external_id": "recurring_12345",
"payer_email": "[email protected]",
"description": "Test Curring Payment",
"amount": 100000,
"interval": "MONTH",
"interval_count": 2,
"start_date": "2020-07-08T08:22:55.815Z",
"currency": "IDR",
"created": "2020-07-08T08:22:55.817Z",
"updated": "2020-07-08T08:26:03.082Z",
"id": "5f05825ff9f52d3ed204c687"
}
from xendit import Payout
payout = Payout.create(
external_id="payout-1595405117",
amount=50000,
email="[email protected]",
)
print(payout)
Will return
{
"id": "a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
"external_id": "payout-1595405117",
"amount": 50000,
"merchant_name": "Xendit's Intern",
"status": "PENDING",
"expiration_timestamp": "2020-07-23T08:05:19.815Z",
"created": "2020-07-22T08:05:18.421Z",
"email": "[email protected]",
"payout_url": "https://payout-staging.xendit.co/web/a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472"
}
from xendit import Payout
payout = Payout.get(
id="a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
)
print(payout)
Will return
{
"id": "a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
"external_id": "payout-1595405117",
"amount": 50000,
"merchant_name": "Xendit's Intern",
"status": "PENDING",
"expiration_timestamp": "2020-07-23T08:05:19.815Z",
"created": "2020-07-22T08:05:18.421Z",
"email": "[email protected]",
"payout_url": "https://payout-staging.xendit.co/web/a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472"
}
from xendit import Payout
payout = Payout.void(
id="a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
)
print(payout)
Will return
{
"id": "a6ee1bf1-ffcd-4bda-a7ab-99c1d5cd0472",
"external_id": "payout-1595405117",
"amount": 50000,
"merchant_name": "Xendit's Intern",
"status": "VOIDED",
"expiration_timestamp": "2020-07-23T08:05:19.815Z",
"created": "2020-07-22T08:05:18.421Z",
"email": "[email protected]"
}
from xendit import Disbursement
disbursement = Disbursement.create(
external_id="demo_1475459775872",
bank_code="BCA",
account_holder_name="Bob Jones",
account_number="1231242311",
description="Reimbursement for shoes",
amount=17000,
)
print(disbursement)
Will return
{
"user_id": "5ed75086a883856178afc12e",
"external_id": "demo_1475459775872",
"amount": 17000,
"bank_code": "BCA",
"account_holder_name": "Bob Jones",
"disbursement_description": "Reimbursement for shoes",
"status": "PENDING",
"id": "5ef1c4f40c2e150017ce3b96",
}
from xendit import Disbursement
disbursement = Disbursement.get(
id="5ef1befeecb16100179e1d05",
)
print(disbursement)
Will return
{
"user_id": "5ed75086a883856178afc12e",
"external_id": "demo_1475459775872",
"amount": 17000,
"bank_code": "BCA",
"account_holder_name": "Bob Jones",
"disbursement_description": "Disbursement from Postman",
"status": "PENDING",
"id": "5ef1befeecb16100179e1d05"
}
from xendit import Disbursement
disbursement_list = Disbursement.get_by_ext_id(
external_id="demo_1475459775872",
)
print(disbursement_list)
Will return
[
{
"user_id": "5ed75086a883856178afc12e",
"external_id": "demo_1475459775872",
"amount": 17000,
"bank_code": "BCA",
"account_holder_name": "Bob Jones",
"disbursement_description": "Reimbursement for shoes",
"status": "PENDING",
"id": "5ef1c4f40c2e150017ce3b96",
},
{
"user_id": "5ed75086a883856178afc12e",
"external_id": "demo_1475459775872",
"amount": 17000,
"bank_code": "BCA",
"account_holder_name": "Bob Jones",
"disbursement_description": "Disbursement from Postman",
"status": "PENDING",
"id": "5ef1befeecb16100179e1d05",
},
...
]
from xendit import Disbursement
disbursement_banks = Disbursement.get_available_banks()
print(disbursement_banks)
Will return
[
...
{
"name": "Mandiri Taspen Pos (formerly Bank Sinar Harapan Bali)",
"code": "MANDIRI_TASPEN",
"can_disburse": True,
"can_name_validate": True,
},
{
"name": "Bank QNB Indonesia (formerly Bank QNB Kesawan)",
"code": "QNB_INDONESIA",
"can_disburse": True,
"can_name_validate": True,
}
]
from xendit import BatchDisbursement
batch_disbursement_items = []
batch_disbursement_items.append(
BatchDisbursement.helper_create_batch_item(
amount=10000,
bank_code="BCA",
bank_account_name="Adyaksa W",
bank_account_number="12345678",
description="Sample Batch Disbursement",
external_id=f"batch-disbursement-item-12345"
)
)
batch_disbursement = BatchDisbursement.create(
reference="batch_disbursement-1595326225",
disbursements=batch_disbursement_items,
)
print(batch_disbursement)
Will return
{
"status": "UPLOADING",
"reference": "batch_disbursement-1595326225",
"total_uploaded_amount": 10000,
"total_uploaded_count": 1,
"created": "2020-07-21T10:10:35.782Z",
"id": "5f16bf1bfc70de0017b858bf"
}
You can use Get Available Banks to use this feature.
from xendit import XenPlatform, XenPlatformAccountType
xenplatform_account = XenPlatform.create_account(
account_email="[email protected]",
type=XenPlatformAccountType.OWNED,
business_profile={'business_name': 'python-xendit'},
)
print(xenplatform_account)
Will return
{
"account_email": "[email protected]",
"user_id": "5f2132ed172cd67992c402d6",
"created": "2020-07-29T08:27:25.346Z",
"status": "SUCCESSFUL",
"type": "OWNED"
}
from xendit import XenPlatform, XenPlatformURLType
xenplatform_callback_url = XenPlatform.set_callback_url(
type=XenPlatformURLType.INVOICE,
url="https://test-url-invoice.com",
)
print(xenplatform_callback_url)
Will return
{
"status": "SUCCESSFUL",
"user_id": "5e6b30d967627b957de8c123",
"url": "https://test-url-invoice.com",
"environment": "TEST",
"callback_token": "66a6680348e1c33ed2b9053a8eb9291b9e2230ff4f4d3057c9f4ac26405d2123"
}
from xendit import XenPlatform
xenplatform_transfers = XenPlatform.transfers(
reference="transfer001",
amount=10000,
source_user_id="54afeb170a2b18519b1b8768",
destination_user_id="5cafeb170a2b1851246b8768",
)
print(xenplatform_transfers)
Will return
{
"created": "2020-01-01T08:51:44.484Z",
"transfer_id": "60b9d810-d9a3-456c-abbf-2786ec7a9651",
"reference": "transfer001",
"source_user_id": "54afeb170a2b18519b1b8768",
"destination_user_id": "5cafeb170a2b1851246b8768",
"status": "SUCCESSFUL",
"amount": 10000
}
from xendit import PaymentMethod
from xendit.models.paymentmethod import ewallet
payment_method = PaymentMethod.create(
type="EWALLET",
reusability="ONE_TIME_USE",
ewallet=ewallet.EWallet.Query(
channel_code="PAYMAYA",
channel_properties=ewallet.ChannelProperties.Query(
success_return_url="https://mock-test.co",
failure_return_url="https://mock-test.co",
cancel_return_url="https://mock-test.co",
),
)
)
print(payment_method)
Will return
{
"id": "pm-9cee5b23-5f70-49f0-8b2c-82cae820c380",
"type": "EWALLET",
"country": "PH",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"customer_id": null,
"reference_id": "729aaf53-69bc-4be5-b232-8ad16c092c71",
"reusability": "ONE_TIME_USE",
"status": "ACTIVE",
"actions": [],
"description": null,
"created": "2022-11-04T02:14:02.830773203Z",
"updated": "2022-11-04T02:14:02.830773203Z",
"metadata": null,
"billing_information": null,
"failure_code": null,
"ewallet": {
"channel_code": "PAYMAYA",
"channel_properties": {
"cancel_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co",
"success_return_url": "https://mock-test.co"
},
"account": {
"name": null,
"account_details": null,
"balance": null,
"point_balance": null
}
},
"direct_bank_transfer": null,
"direct_debit": null,
"card": null,
"over_the_counter": null,
"qr_code": null,
"virtual_account": null
}
from xendit import PaymentMethod
payment_method = PaymentMethod.get(
payment_method_id="pm-9cee5b23-5f70-49f0-8b2c-82cae820c380"
)
print(payment_method)
Will return
{
"id": "pm-9cee5b23-5f70-49f0-8b2c-82cae820c380",
"type": "EWALLET",
"country": "PH",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"customer_id": null,
"reference_id": "729aaf53-69bc-4be5-b232-8ad16c092c71",
"reusability": "ONE_TIME_USE",
"status": "ACTIVE",
"actions": [],
"description": null,
"created": "2022-11-04T02:14:02.830773203Z",
"updated": "2022-11-04T02:14:02.830773203Z",
"metadata": null,
"billing_information": null,
"failure_code": null,
"ewallet": {
"channel_code": "PAYMAYA",
"channel_properties": {
"cancel_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co",
"success_return_url": "https://mock-test.co"
},
"account": {
"name": null,
"account_details": null,
"balance": null,
"point_balance": null
}
},
"direct_bank_transfer": null,
"direct_debit": null,
"card": null,
"over_the_counter": null,
"qr_code": null,
"virtual_account": null
}
from xendit import PaymentMethod
payment_method = PaymentMethod.update(
payment_method_id="pm-9cee5b23-5f70-49f0-8b2c-82cae820c380",
status="INACTIVE"
)
print(payment_method)
Will return
{
"id": "pm-9cee5b23-5f70-49f0-8b2c-82cae820c380",
"type": "EWALLET",
"country": "PH",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"customer_id": null,
"reference_id": "729aaf53-69bc-4be5-b232-8ad16c092c71",
"reusability": "ONE_TIME_USE",
"status": "INACTIVE",
"actions": [],
"description": null,
"created": "2022-11-04T02:14:02.830773Z",
"updated": "2022-11-04T02:32:42.982673023Z",
"metadata": null,
"billing_information": null,
"failure_code": null,
"ewallet": {
"channel_code": "PAYMAYA",
"channel_properties": {
"cancel_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co",
"success_return_url": "https://mock-test.co"
},
"account": {
"name": null,
"account_details": null,
"balance": null,
"point_balance": null
}
},
"direct_bank_transfer": null,
"direct_debit": null,
"card": null,
"over_the_counter": null,
"qr_code": null,
"virtual_account": null
}
from xendit import PaymentMethod
payment_method = PaymentMethod.expire(
payment_method_id="pm-9cee5b23-5f70-49f0-8b2c-82cae820c380"
)
print(payment_method)
Will return
{
"id": "pm-9cee5b23-5f70-49f0-8b2c-82cae820c380",
"type": "EWALLET",
"country": "PH",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"customer_id": null,
"reference_id": "729aaf53-69bc-4be5-b232-8ad16c092c71",
"reusability": "ONE_TIME_USE",
"status": "EXPIRED",
"actions": [],
"description": null,
"created": "2022-11-04T02:14:02.830773Z",
"updated": "2022-11-04T02:32:42.982673023Z",
"metadata": null,
"billing_information": null,
"failure_code": null,
"ewallet": {
"channel_code": "PAYMAYA",
"channel_properties": {
"cancel_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co",
"success_return_url": "https://mock-test.co"
},
"account": {
"name": null,
"account_details": null,
"balance": null,
"point_balance": null
}
},
"direct_bank_transfer": null,
"direct_debit": null,
"card": null,
"over_the_counter": null,
"qr_code": null,
"virtual_account": null
}
from xendit import PaymentMethod
payment_methods = PaymentMethod.list()
print(payment_methods)
Will return
{
"has_more": false,
"data": [{
"id": "pm-9cee5b23-5f70-49f0-8b2c-82cae820c380",
"type": "EWALLET",
"country": "PH",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"customer_id": null,
"reference_id": "729aaf53-69bc-4be5-b232-8ad16c092c71",
"reusability": "ONE_TIME_USE",
"status": "INACTIVE",
"actions": [],
"description": null,
"created": "2022-11-04T02:14:02.830773Z",
"updated": "2022-11-04T02:32:42.982673023Z",
"metadata": null,
"billing_information": null,
"failure_code": null,
"ewallet": {
"channel_code": "PAYMAYA",
"channel_properties": {
"cancel_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co",
"success_return_url": "https://mock-test.co"
},
"account": {
"name": null,
"account_details": null,
"balance": null,
"point_balance": null
}
},
"direct_bank_transfer": null,
"direct_debit": null,
"card": null,
"over_the_counter": null,
"qr_code": null,
"virtual_account": null
}]
}
This endpoint only applies to BRI Direct Debit. This is used when an additional authorization (ex. OTP Validation) is required in order to successfully activate a payment method. This is equivalent to the POST - AUTH action provided when a Payment Method has the status REQUIRES_ACTION.
from xendit import PaymentMethod
payment_method = PaymentMethod.authorize(
payment_method_id="pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a",
auth_code="123456"
)
print(payment_method)
Will return
{
"id": "pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a",
"card": null,
"type": "DIRECT_DEBIT",
"status": "ACTIVE",
"actions": [],
"country": "ID",
"created": "2022-08-12T13:30:26.579048Z",
"ewallet": null,
"qr_code": null,
"updated": "2022-08-12T13:30:58.908220358Z",
"metadata": null,
"customer_id": "e2878b4c-d57e-4a2c-922d-c0313c2800a3",
"description": null,
"reusability": "MULTIPLE_USE",
"direct_debit": {
"type": "DEBIT_CARD",
"debit_card": {
"mobile_number": "+62818555988",
"card_last_four": "8888",
"card_expiry": "06/24",
"email": "[email protected]"
},
"bank_account": null,
"channel_code": "BRI",
"channel_properties": {
"mobile_number": "+62818555988",
"card_last_four": "8888",
"card_expiry": "06/24",
"email": "[email protected]"
}
},
"failure_code": null,
"reference_id": "620b9df4-fe69-4bfd-b9d4-5cba6861db8a",
"virtual_account": null,
"over_the_counter": null,
"billing_information": null,
"direct_bank_transfer": null,
"business_id": "5f27a14a9bf05c73dd040bc8"
}
from xendit import PaymentMethod
payments = PaymentMethod.list_payments(
payment_method_id="pm-62605ad7-3fbd-462c-9fd4-193e5a9e77b6"
)
print(payments)
Will return
{
"has_more": false,
"data": [
{
"amount": 100,
"business_id": "61371058772b574041bc5ee2",
"channel_code": "RCBC",
"country": "PH",
"created": "2022-09-22T09:05:30.484Z",
"currency": "PHP",
"id": "pymt-c025b648-bd51-4138-8cf1-94b48bc1a9f8",
"instrument_id": "qrpy_fe3c2e20-f885-4a68-b841-0973121e20d4",
"payment_detail": {
"issuer_name": "",
"receipt_id": ""
},
"payment_method": {
"card": {},
"created": "2022-09-22T09:03:39.197475Z",
"direct_bank_transfer": null,
"direct_debit": null,
"ewallet": null,
"id": "pm-62605ad7-3fbd-462c-9fd4-193e5a9e77b6",
"over_the_counter": null,
"qr_code": {
"channel_code": "RCBC",
"channel_properties": {
"qr_string": "some-random-qr-string"
}
},
"reference_id": "a4486137-7624-4b34-b879-16cbbfc1a032",
"reusability": "ONE_TIME_USE",
"status": "EXPIRED",
"type": "QR_CODE",
"updated": "2022-09-22T09:05:30.409211Z",
"virtual_account": null
},
"payment_request_id": "pr-b33ecb15-c8e6-455c-9b1b-84612b6fd13b",
"reference_id": "a4486137-7624-4b34-b879-16cbbfc1a032",
"status": "SUCCEEDED",
"type": "QR_CODE",
"updated": "2022-09-22T09:05:30.484Z"
}
]
}
from xendit import PaymentRequest
payment_request = PaymentRequest.create(
amount=50,
currency="PHP",
payment_method_id="pm-64eedc01-702e-439c-9a96-b3b665caeb05"
)
print(payment_request)
Will return
{
"id": "ddpy-74ebdd86-e052-42e8-8b53-d84255ab7004",
"reference_id": "7200b7ce-4634-489e-976b-269d641e4343",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"currency": "PHP",
"amount": 50,
"country": "PH",
"payment_method": {
"id": "pm-64eedc01-702e-439c-9a96-b3b665caeb05",
"type": "DIRECT_DEBIT",
"reference_id": "9c511ec0-a9b7-4eee-9cb5-b91085edbdd3",
"description": null,
"created": "2022-11-04T04:43:04.259281Z",
"updated": "2022-11-04T04:43:29.063919Z",
"card": null,
"ewallet": null,
"direct_debit": {
"channel_code": "BPI",
"channel_properties": {
"success_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co"
},
"type": "BANK_ACCOUNT",
"bank_account": {
"masked_bank_account_number": "XXX1631",
"bank_account_hash": "8f06b7dc684aa57a283adf49b2f67bdb11750ac04300f3996d97c7412ac5ca48"
},
"debit_card": null
},
"direct_bank_transfer": null,
"over_the_counter": null,
"virtual_account": null,
"qr_code": null,
"metadata": null,
"reusability": "MULTIPLE_USE",
"status": "ACTIVE"
},
"description": null,
"metadata": null,
"customer_id": "fa8f36a4-60e4-4a49-a040-adf953539f71",
"created": "2022-11-04T04:44:39.220981439Z",
"updated": "2022-11-04T04:44:39.220981439Z",
"status": "REQUIRES_ACTION",
"actions": [
{
"action": "AUTH",
"url": "https://direct-debit-web-dev.xendit.co/direct_debits/ddpy-74ebdd86-e052-42e8-8b53-d84255ab7004/checkout?failure_redirect_url=https%3A%2F%2Fredirect.me%2Fbadstuff&payment_redirect_delay=10",
"url_type": "WEB",
"method": "GET",
"qr_code": null
},
{
"action": "AUTH",
"url": "https://api.xendit.co/payment_requests/ddpy-74ebdd86-e052-42e8-8b53-d84255ab7004/auth",
"url_type": "API",
"method": "POST",
"qr_code": null
}
],
"failure_code": null,
"capture_method": "AUTOMATIC",
"initiator": null,
"card_verification_results": null,
"channel_properties": null,
"shipping_information": null,
"items": null
}
from xendit import PaymentRequest
from xendit.models.paymentmethod import direct_debit, PaymentMethod
payment_request = PaymentRequest.create(
amount=50,
currency="PHP",
customer_id="fa8f36a4-60e4-4a49-a040-adf953539f71",
payment_method=PaymentMethod.Query(
type="DIRECT_DEBIT",
reusability="MULTIPLE_USE",
direct_debit=direct_debit.DirectDebit.Query(
channel_code="BPI",
channel_properties=direct_debit.ChannelProperties.Query(
success_return_url="https://mock-test.co",
failure_return_url="https://mock-test.co"
)
)
)
)
print(payment_request)
Will return
{
"id": "pr-db958a53-cf92-4c1f-99d2-dcf2401211d2",
"reference_id": "e192b1c2-8814-4e71-a203-ecd43b7af808",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"currency": "PHP",
"amount": 50,
"country": "PH",
"payment_method": {
"id": "pm-b8c93e5c-0bc9-44ef-869a-ca5eb73f1ad0",
"type": "DIRECT_DEBIT",
"reference_id": "9b1841a2-e4a4-4ab7-ab7a-ca7d78b4ce07",
"description": null,
"created": "2022-11-04T04:51:28.284694454Z",
"updated": "2022-11-04T04:51:28.284694454Z",
"card": null,
"ewallet": null,
"direct_debit": {
"channel_code": "BPI",
"channel_properties": {
"success_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co"
},
"type": "BANK_ACCOUNT",
"bank_account": {
"masked_bank_account_number": null,
"bank_account_hash": null
},
"debit_card": null
},
"direct_bank_transfer": null,
"over_the_counter": null,
"virtual_account": null,
"qr_code": null,
"metadata": null,
"reusability": "MULTIPLE_USE",
"status": "PENDING"
},
"description": null,
"metadata": null,
"customer_id": "fa8f36a4-60e4-4a49-a040-adf953539f71",
"created": "2022-11-04T04:51:28.157374805Z",
"updated": "2022-11-04T04:51:28.157374805Z",
"status": "REQUIRES_ACTION",
"actions": [
{
"action": "AUTH",
"url": "https://link-web-staging.xendit.co/oauth/lat-c752e0e0-c4eb-4e4f-9fc8-fbfb12a8d095/confirm",
"url_type": "WEB",
"method": "GET",
"qr_code": null
}
],
"failure_code": null,
"capture_method": "AUTOMATIC",
"initiator": null,
"card_verification_results": null,
"channel_properties": null,
"shipping_information": null,
"items": null
}
from xendit import PaymentRequest
payment_request = PaymentRequest.get(
payment_request_id="pr-db958a53-cf92-4c1f-99d2-dcf2401211d2"
)
print(payment_request)
Will return
{
"id": "pr-db958a53-cf92-4c1f-99d2-dcf2401211d2",
"reference_id": "e192b1c2-8814-4e71-a203-ecd43b7af808",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"currency": "PHP",
"amount": 50,
"country": "PH",
"payment_method": {
"id": "pm-b8c93e5c-0bc9-44ef-869a-ca5eb73f1ad0",
"type": "DIRECT_DEBIT",
"reference_id": "9b1841a2-e4a4-4ab7-ab7a-ca7d78b4ce07",
"description": null,
"created": "2022-11-04T04:51:28.284694454Z",
"updated": "2022-11-04T04:51:28.284694454Z",
"card": null,
"ewallet": null,
"direct_debit": {
"channel_code": "BPI",
"channel_properties": {
"success_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co"
},
"type": "BANK_ACCOUNT",
"bank_account": {
"masked_bank_account_number": null,
"bank_account_hash": null
},
"debit_card": null
},
"direct_bank_transfer": null,
"over_the_counter": null,
"virtual_account": null,
"qr_code": null,
"metadata": null,
"reusability": "MULTIPLE_USE",
"status": "PENDING"
},
"description": null,
"metadata": null,
"customer_id": "fa8f36a4-60e4-4a49-a040-adf953539f71",
"created": "2022-11-04T04:51:28.157374805Z",
"updated": "2022-11-04T04:51:28.157374805Z",
"status": "REQUIRES_ACTION",
"actions": [
{
"action": "AUTH",
"url": "https://link-web-staging.xendit.co/oauth/lat-c752e0e0-c4eb-4e4f-9fc8-fbfb12a8d095/confirm",
"url_type": "WEB",
"method": "GET",
"qr_code": null
}
],
"failure_code": null,
"capture_method": "AUTOMATIC",
"initiator": null,
"card_verification_results": null,
"channel_properties": null,
"shipping_information": null,
"items": null
}
from xendit import PaymentRequest
payment_request = PaymentRequest.confirm(
payment_request_id="pr-db958a53-cf92-4c1f-99d2-dcf2401211d2",
auth_code="123456"
)
print(payment_request)
Will return
{
"id": "pr-db958a53-cf92-4c1f-99d2-dcf2401211d2",
"reference_id": "e192b1c2-8814-4e71-a203-ecd43b7af808",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"currency": "PHP",
"amount": 50,
"country": "PH",
"payment_method": {
"id": "pm-b8c93e5c-0bc9-44ef-869a-ca5eb73f1ad0",
"type": "DIRECT_DEBIT",
"reference_id": "9b1841a2-e4a4-4ab7-ab7a-ca7d78b4ce07",
"description": null,
"created": "2022-11-04T04:51:28.284694454Z",
"updated": "2022-11-04T04:51:28.284694454Z",
"card": null,
"ewallet": null,
"direct_debit": {
"channel_code": "RCBC",
"channel_properties": {
"success_return_url": "https://mock-test.co",
"failure_return_url": "https://mock-test.co"
},
"type": "BANK_ACCOUNT",
"bank_account": {
"masked_bank_account_number": "11111111111",
"bank_account_hash": "loremipman"
},
"debit_card": null
},
"direct_bank_transfer": null,
"over_the_counter": null,
"virtual_account": null,
"qr_code": null,
"metadata": null,
"reusability": "MULTIPLE_USE",
"status": "PENDING"
},
"description": null,
"metadata": null,
"customer_id": "fa8f36a4-60e4-4a49-a040-adf953539f71",
"created": "2022-11-04T04:51:28.157374805Z",
"updated": "2022-11-04T04:51:28.157374805Z",
"status": "SUCCEEDED",
"actions": [],
"failure_code": null,
"capture_method": "AUTOMATIC",
"initiator": null,
"card_verification_results": null,
"channel_properties": null,
"shipping_information": null,
"items": null
}
from xendit import PaymentRequest
payment_request = PaymentRequest.resend_auth(payment_request_id="ddpy-a310d9c2-ed99-4031-a3bf-fb4d8e384f45")
print(payment_request)
Will return
{
"id": "ddpy-a310d9c2-ed99-4031-a3bf-fb4d8e384f45",
"reference_id": "3abc9ab4-294e-4f9d-994c-f755b5b87a2a",
"business_id": "5f9a3fbd571a1c4068aa40ce",
"currency": "PHP",
"amount": 500,
"country": "PH",
"payment_method": {
"id": "pm-3d15aa4f-7b08-4355-a4ab-94187151d33c",
"type": "DIRECT_DEBIT",
"reference_id": "b869964d-37b7-4fc2-9915-386c12a48791",
"description": null,
"created": "2022-11-04T05:50:27.446274Z",
"updated": "2022-11-04T05:50:49.865006Z",
"card": null,
"ewallet": null,
"direct_debit": {
"channel_code": "BPI",
"channel_properties": {
"success_return_url": "https://redirect.me/goodstuff",
"failure_return_url": "https://redirect.me/badstuff"
},
"type": "BANK_ACCOUNT",
"bank_account": {
"masked_bank_account_number": "XXX1631",
"bank_account_hash": "8f06b7dc684aa57a283adf49b2f67bdb11750ac04300f3996d97c7412ac5ca48"
},
"debit_card": null
},
"direct_bank_transfer": null,
"over_the_counter": null,
"virtual_account": null,
"qr_code": null,
"metadata": null,
"reusability": "MULTIPLE_USE",
"status": "ACTIVE"
},
"description": null,
"metadata": null,
"customer_id": "96f2bab4-4a59-4a80-8da4-1e086c200512",
"created": "2022-11-04T05:54:35.703988Z",
"updated": "2022-11-04T05:54:35.942271Z",
"status": "REQUIRES_ACTION",
"actions": [
{
"action": "AUTH",
"url": "https://direct-debit-web-dev.xendit.co/direct_debits/ddpy-a310d9c2-ed99-4031-a3bf-fb4d8e384f45/checkout?failure_redirect_url=https%3A%2F%2Fredirect.me%2Fbadstuff&payment_redirect_delay=10",
"url_type": "WEB",
"method": "GET",
"qr_code": null
},
{
"action": "AUTH",
"url": "https://api.xendit.co/payment_requests/ddpy-a310d9c2-ed99-4031-a3bf-fb4d8e384f45/auth",
"url_type": "API",
"method": "POST",
"qr_code": null
}
],
"failure_code": null,
"capture_method": "AUTOMATIC",
"initiator": null,
"card_verification_results": null,
"channel_properties": null,
"shipping_information": null,
"items": null
}
from xendit import PaymentRequest
payment_requests = PaymentRequest.list()
print(payment_requests)
Will return
{
"has_more": false,
"data": [
{
"id": "pr-ba8a686b-57d7-4d93-aa50-2753af90e889",
"reference_id": "48e11a9f-025d-4c6b-bc7d-7cec7d91c3ea",
"business_id": "5ed75086a883856178afc12e",
"currency": "PHP",
"amount": 1500,
"country": "PH",
"payment_method": {
"id": "pm-193fff85-e457-41f8-adcd-da8b61525d2e",
"type": "EWALLET",
"reference_id": "1c376b0a-bbf0-4c7d-89e4-88d63443a955",
"description": null,
"created": "2022-10-21T03:42:11.602144Z",
"updated": "2022-10-21T03:42:11.602144Z",
"card": null,
"ewallet": {
"channel_code": "PAYMAYA",
"channel_properties": {
"cancel_return_url": "https://redirect.me/nostuff",
"failure_return_url": "https://redirect.me/badstuff",
"success_return_url": "https://redirect.me/goodstuff"
},
"account": {
"name": null,
"account_details": null,
"balance": null,
"point_balance": null
}
},
"direct_debit": null,
"direct_bank_transfer": null,
"over_the_counter": null,
"virtual_account": null,
"qr_code": null,
"metadata": null,
"reusability": "ONE_TIME_USE",
"status": "ACTIVE"
},
"description": null,
"metadata": null,
"customer_id": null,
"created": "2022-10-21T03:42:11.617507Z",
"updated": "2022-10-21T03:42:11.617507Z",
"status": "UNKNOWN",
"actions": [],
"failure_code": null,
"capture_method": "AUTOMATIC",
"initiator": null,
"card_verification_results": null,
"channel_properties": null,
"shipping_information": null,
"items": null
}
]
}
from xendit import Refund
refund = Refund.create(
payment_request_id="ewc_0b98b8c6-2f5f-4355-87f1-d3afe372495b"
)
print(refund)
Will return
{
"id": "rfd-107ac068-0737-4c85-8aaf-61f908e3c136",
"payment_id": "ewc_0b98b8c6-2f5f-4355-87f1-d3afe372495b",
"invoice_id": "",
"amount": 1500,
"payment_method_type": "EWALLET",
"channel_code": "GRABPAY",
"country": "PH",
"currency": "PHP",
"status": "PENDING",
"reason": "",
"reference_id": "",
"failure_code": null,
"refund_fee_amount": null,
"created": "2022-11-04T06:21:35.213018123Z",
"updated": "2022-11-04T06:21:35.213018243Z",
"metadata": null,
"refund_method": "DIRECT",
"payout_link_properties": null,
"actions": null
}
from xendit import Refund
refund = Refund.get(
refund_id="rfd-107ac068-0737-4c85-8aaf-61f908e3c136"
)
print(refund)
Will return
{
"id": "rfd-107ac068-0737-4c85-8aaf-61f908e3c136",
"payment_id": "ewc_0b98b8c6-2f5f-4355-87f1-d3afe372495b",
"invoice_id": "",
"amount": 1500,
"payment_method_type": "EWALLET",
"channel_code": "GRABPAY",
"country": "PH",
"currency": "PHP",
"status": "PENDING",
"reason": "",
"reference_id": "",
"failure_code": null,
"refund_fee_amount": null,
"created": "2022-11-04T06:21:35.213018123Z",
"updated": "2022-11-04T06:21:35.213018243Z",
"metadata": null,
"refund_method": "DIRECT",
"payout_link_properties": null,
"actions": null
}
from xendit import Refund
refunds = Refund.list()
print(refunds)
Will return
{
"has_more": true,
"data": [{
"id": "rfd-107ac068-0737-4c85-8aaf-61f908e3c136",
"payment_id": "ewc_0b98b8c6-2f5f-4355-87f1-d3afe372495b",
"invoice_id": "",
"amount": 1500,
"payment_method_type": "EWALLET",
"channel_code": "GRABPAY",
"country": "PH",
"currency": "PHP",
"status": "PENDING",
"reason": "",
"reference_id": "",
"failure_code": null,
"refund_fee_amount": null,
"created": "2022-11-04T06:21:35.213018123Z",
"updated": "2022-11-04T06:21:35.213018243Z",
"metadata": null,
"refund_method": "DIRECT",
"payout_link_properties": null,
"actions": null
}]
}
For any requests, bugs, or comments, please open an issue or submit a pull request.
To start developing on this repository, you need to have Poetry installed for package dependency. After that, you can run poetry install
to install the dependency. To enter the environment, run poetry shell
Make sure the the code passes all tests.
Run the test:
python -m pytest tests/
Run with coverage:
python -m pytest tests/ --cov=xendit/