Skip to main content

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.

  1. Create a .env file in the root directory:
TAPSILAT_API_KEY=your_api_key_here
  1. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tapsilat_py-2026.4.9.1.tar.gz (17.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tapsilat_py-2026.4.9.1-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file tapsilat_py-2026.4.9.1.tar.gz.

File metadata

  • Download URL: tapsilat_py-2026.4.9.1.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.14.3

File hashes

Hashes for tapsilat_py-2026.4.9.1.tar.gz
Algorithm Hash digest
SHA256 fd9c87ebd11ec2775d1ef1521b7fba27dae10dd2a8af8cc6eb7c749eec46c650
MD5 eb70d6d258810e41fed4f8c52a51346a
BLAKE2b-256 01b46974cb030371e4b5204bf437f9a503c6fbc996d1a0e091b2c117dc40edca

See more details on using hashes here.

File details

Details for the file tapsilat_py-2026.4.9.1-py3-none-any.whl.

File metadata

File hashes

Hashes for tapsilat_py-2026.4.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d1b2bdbc00dcf201ddac79a526810f02b4dc9b76bc062462d75c469e99ed5f57
MD5 8202b6ccbfe778e39b18b4069dd56614
BLAKE2b-256 d561405ae614f3f877e7b759a9a75433466e43b955987fa7e2053b55ab34743e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page