Client SDK for Tapsilat API
Project description
Tapsilat Client SDK for Python
Create orders and retrieve secure checkout URLs.
needs Python3.6+
Installation
pip install tapsilat-py
or
pip install git+https://github.com/tapsilat/tapsilat-py.git
or
git clone https://github.com/tapsilat/tapsilat-py.git
cd tapsilat-py
pip install -r requirements.txt
Running Tests
Unit Tests
pytest tests/unit
Integration Tests
Integration tests require a valid TAPSILAT_API_KEY in a .env file.
- Create a
.envfile in the root directory:
TAPSILAT_API_KEY=your_api_key_here
- Run the integration tests:
pytest tests/integration
Usage
.env file
TAPSILAT_API_KEY=your_api_key_here
TapsilatAPI initialization
import os
from tapsilat_py.client import TapsilatAPI
API_KEY = str(os.getenv("TAPSILAT_API_KEY"))
client = TapsilatAPI(API_KEY)
Validators
The SDK includes built-in validators for common data types:
GSM Number Validation
from tapsilat_py.validators import validate_gsm_number
# Valid formats
valid_gsm = validate_gsm_number("+905551234567") # International with +
valid_gsm = validate_gsm_number("00905551234567") # International with 00
valid_gsm = validate_gsm_number("05551234567") # National format
valid_gsm = validate_gsm_number("5551234567") # Local format
# Automatically cleans formatting
clean_gsm = validate_gsm_number("+90 555 123-45-67") # Returns: "+905551234567"
# Raises APIException for invalid formats
try:
validate_gsm_number("invalid-phone")
except APIException as e:
print(f"Error: {e.error}")
Installments Validation
from tapsilat_py.validators import validate_installments
# Valid installment strings
installments = validate_installments("1,2,3,6") # Returns: [1, 2, 3, 6]
installments = validate_installments("1, 2, 3, 6") # Handles spaces
installments = validate_installments("") # Returns: [1] (default)
# Raises APIException for invalid values
try:
validate_installments("1,15,abc") # 15 > 12, abc is not a number
except APIException as e:
print(f"Error: {e.error}")
Order create process
from tapsilat_py.models import BuyerDTO, OrderCreateDTO
# GSM number will be automatically validated in create_order
buyer = BuyerDTO(
name="John",
surname="Doe",
email="test@example.com",
gsm_number="+90 555 123-45-67" # Will be cleaned automatically
)
order = OrderCreateDTO(amount=100, currency="TRY", locale="tr", buyer=buyer)
order_response = client.create_order(order)
Get order details
reference_id = "mock-uuid-reference-id"
order_details = client.get_order(reference_id)
Get order details by conversation id
conversation_id = "mock-uuid-conversation-id"
order_details = client.get_order_by_conversation_id(reference_id)
Get order list
order_list = client.get_order_list(page=1, per_page=5)
Get order submerchants
order_list = client.get_order_submerchants(page=1, per_page=5)
Get checkout url
reference_id = "mock-uuid-reference-id"
checkout_url = client.get_checkout_url(reference_id)
Order cancel process
reference_id = "mock-uuid-reference-id"
client.cancel_order(reference_id)
Order refund process
from tapsilat_py.models import RefundOrderDTO
refund_data = RefundOrderDTO(amount=100, reference_id="mock-uuid-reference-id")
client.refund_order(refund_data)
Order refund all process
reference_id = "mock-uuid-reference-id"
client.refund_all_order(reference_id)
Get order payment details
reference_id = "mock-uuid-reference-id"
client.get_order_payment_details(reference_id)
# You can get with conversation_id too
conversation_id = "mock-uuid-conversation-id"
client.get_order_payment_details(reference_id, conversation_id)
Get order status
reference_id = "mock-uuid-reference-id"
client.get_order_status(reference_id)
Get order transactions
reference_id = "mock-uuid-reference-id"
client.get_order_transactions(reference_id)
Get order term
reference_id = "mock-uuid-reference-id"
client.get_order_term(reference_id)
Create order term
order_id = "mock-order-id"
terms = [
OrderPaymentTermCreateDTO(order_id=order_id, amount=5000, term_reference_id="TERM-123000456",due_date="2025-10-10 00:00",term_sequence=1),
OrderPaymentTermCreateDTO(order_id=order_id, amount=5000, term_reference_id="TERM-123000457",due_date="2025-11-10 00:00",term_sequence=2)
]
for term in terms:
client.create_order_term(term)
Delete order term
order_id = "mock-uuid-order-id"
term_reference_id = "TERM-123000456"
client.delete_order_term(order_id,term_reference_id)
Update order term
term = OrderPaymentTermUpdateDTO(term_reference_id="TERM-123000457",due_date="2025-12-10 00:00",required=True)
client.update_order_term(term)
Refund order term
term_refund = OrderTermRefundRequest(term_reference_id="TERM-123000456",amount=1200)
client.refund_order_term(term_refund)
Terminate order term
reference_id = "mock-uuid-reference-id"
client.order_terminate(reference_id)
Manual callback for order
reference_id = "mock-uuid-reference-id"
conversation_id = "mock-conversation-id"
client.order_manual_callback(reference_id, conversation_id)
Order related reference update
reference_id = "mock-uuid-reference-id"
related_reference_id = "mock-related-reference-id"
client.order_related_update(reference_id, related_reference_id)
Additional Methods
Get Orders with Pagination and Filter
# Get orders with pagination
orders = client.get_orders(page="1", per_page="10")
# Get orders for a specific buyer
orders = client.get_orders(page="1", per_page="10", buyer_id="buyer_123")
Organization Management
Get Settings
settings = client.get_organization_settings()
Callback URL Configuration
# Get callback settings
callbacks = client.get_callback_settings()
# Update callback settings
client.update_callback_settings(
success_url="https://example.com/success",
fail_url="https://example.com/fail"
)
Business and Currency
# Get currencies
currencies = client.get_currencies()
# Get VPOS list
vpos_list = client.get_vpos_list()
# Get Meta data
meta_info = client.get_meta()
User Management
# Create user
client.create_user(
email="test@example.com",
first_name="John",
last_name="Doe",
phone="+905551234567"
)
# Verify User Mobile
client.verify_user_mobile(user_id="user-123", code="123456")
# Verify User Email
client.verify_user_email(user_id="user-123", code="123456")
Limits
# Get Limits for a currency
limits = client.get_limits("TRY")
# Set Limits
client.set_limits([
{
"currency": "TRY",
"min_amount": 10,
"max_amount": 50000
}
])
System & Webhooks
Verify Webhook Request
# This verifies the signature sent by Tapsilat webhook
is_valid = client.verify_webhook(
payload='{"event": "order.completed", "data": {...}}',
signature="some-hash-signature"
)
Get System Order Status
status = client.get_system_order_status()
Subscription Management
The SDK provides comprehensive subscription management features.
Create Subscription
from tapsilat_py.models import (
SubscriptionCreateRequest,
SubscriptionUser,
SubscriptionBilling
)
# Create user and billing information
user = SubscriptionUser(
first_name="John",
last_name="Doe",
email="john.doe@example.com",
phone="+905551234567",
identity_number="12345678901"
)
billing = SubscriptionBilling(
address="Test Address",
city="Istanbul",
country="TR",
contact_name="John Doe",
zip_code="34000"
)
# Create subscription request
subscription_request = SubscriptionCreateRequest(
amount=100.0,
currency="TRY",
cycle=12, # Number of billing cycles
period=1, # Billing period (1=monthly, 3=quarterly, 12=yearly)
payment_date=1, # Day of month for payment
title="Monthly Subscription",
external_reference_id="ext_ref_123",
user=user,
billing=billing,
success_url="https://example.com/success",
failure_url="https://example.com/failure"
)
response = client.create_subscription(subscription_request)
print(f"Subscription ID: {response.reference_id}")
print(f"Order Reference ID: {response.order_reference_id}")
Get Subscription Details
from tapsilat_py.models import SubscriptionGetRequest
# Get by reference_id
request = SubscriptionGetRequest(reference_id="sub_ref_123")
subscription = client.get_subscription(request)
# Or get by external_reference_id
request = SubscriptionGetRequest(external_reference_id="ext_ref_123")
subscription = client.get_subscription(request)
print(f"Subscription title: {subscription.title}")
print(f"Amount: {subscription.amount} {subscription.currency}")
print(f"Status: {subscription.payment_status}")
print(f"Active: {subscription.is_active}")
List Subscriptions
subscriptions = client.list_subscriptions(page=1, per_page=10)
print(f"Total subscriptions: {subscriptions.get('total')}")
for sub in subscriptions.get('data', []):
print(f"Subscription: {sub['reference_id']} - {sub['title']}")
Cancel Subscription
from tapsilat_py.models import SubscriptionCancelRequest
# Cancel by reference_id
request = SubscriptionCancelRequest(reference_id="sub_ref_123")
response = client.cancel_subscription(request)
# Or cancel by external_reference_id
request = SubscriptionCancelRequest(external_reference_id="ext_ref_123")
response = client.cancel_subscription(request)
Get Subscription Redirect URL
from tapsilat_py.models import SubscriptionRedirectRequest
request = SubscriptionRedirectRequest(subscription_id="sub_id_123")
response = client.redirect_subscription(request)
print(f"Redirect to: {response.url}")
Error Handling
All API methods raise APIException on errors:
from tapsilat_py.exceptions import APIException
try:
order = client.create_order(order_data)
except APIException as e:
print(f"Status Code: {e.status_code}")
print(f"Error Code: {e.code}")
print(f"Error Message: {e.error}")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tapsilat_py-2026.3.31.1.tar.gz.
File metadata
- Download URL: tapsilat_py-2026.3.31.1.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab9993102f4afdeec286cb407e89917036e70aa7172d14d973072259df62da89
|
|
| MD5 |
f65b58ce885063b6a2e2bd9081e5416e
|
|
| BLAKE2b-256 |
40a90c5f89073695dbe93a5c4f0417f32b163480fc8d115f5c5c117eeeca1462
|
File details
Details for the file tapsilat_py-2026.3.31.1-py3-none-any.whl.
File metadata
- Download URL: tapsilat_py-2026.3.31.1-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc0fa271aaddbabba3ec39cf0251e5c2cd4c04cd3ccc6a14730229143bc81930
|
|
| MD5 |
0e95b87393026df6c11ae5a425ea8224
|
|
| BLAKE2b-256 |
3f60324a30b160c88155bc9185da70f92093fbbb185186200d3d5a7729aaec75
|