Skip to main content

TossPayments Python Server SDK

PyPI version Python 3.9+ License: MIT

A Python library for TossPayments API integration, designed to make server-side payment processing simple and intuitive.

Note
This is an unofficial SDK for TossPayments API. All features are implemented based on the official TossPayments API documentation (v1) and sample data provided in the official documentation.

Installation

pip install tosspayments-python-server-sdk

Quick Start

Initialize Client

from tosspayments_server_sdk import Client

# Test environment
client = Client(secret_key="test_sk_...")

# Live environment  
client = Client(secret_key="live_sk_...")

Confirm Payment

try:
    payment = client.payments.confirm(
        payment_key="5zJ4xY7m0kODnyRpQWGrN2xqGlNvLrKwv1M9ENjbeoPaZdL6",
        order_id="a4CWyWY5m89PNh7xJwhk1",
        amount=15000
    )
    
    print(f"Payment completed: {payment.order_name}")
    print(f"Amount: {payment.total_amount:,} KRW")
    
except tosspayments_server_sdk.APIError as e:
    print(f"Payment failed: {e.message}")

Retrieve Payment

# Retrieve by payment key
payment = client.payments.retrieve("5zJ4xY7m0kODnyRpQWGrN2xqGlNvLrKwv1M9ENjbeoPaZdL6")

# Retrieve by order ID
payment = client.payments.retrieve_by_order_id("a4CWyWY5m89PNh7xJwhk1")

print(f"Payment status: {payment.status.value}")
print(f"Payment method: {payment.method}")

# Access nested payment details with dataclass properties
if payment.card:
    print(f"Card issuer: {payment.card.issuer_code}")
    print(f"Installments: {payment.card.installment_plan_months}")
elif payment.virtual_account:
    print(f"Virtual account: {payment.virtual_account.bank_code}")
    print(f"Account number: {payment.virtual_account.account_number}")

# Use convenient methods for payment status checks
if payment.is_paid():
    print("✅ Payment completed")
elif payment.can_be_canceled():
    print(f"Can cancel up to: {payment.get_cancelable_amount():,} KRW")

Cancel Payment

# Full cancellation
canceled_payment = client.payments.cancel(
    payment_key="5zJ4xY7m0kODnyRpQWGrN2xqGlNvLrKwv1M9ENjbeoPaZdL6",
    cancel_reason="Customer request"
)

# Partial cancellation
canceled_payment = client.payments.cancel(
    payment_key="5zJ4xY7m0kODnyRpQWGrN2xqGlNvLrKwv1M9ENjbeoPaZdL6",
    cancel_reason="Partial refund",
    cancel_amount=5000
)

print(f"Canceled amount: {canceled_payment.get_canceled_amount():,} KRW")

Handle Webhooks

from tosspayments_server_sdk import WebhookVerificationError

def handle_webhook(request):
    try:
        # Parse webhook data
        webhook_event = client.webhooks.verify_and_parse(request.body)
        
        if webhook_event.is_payment_event:
            payment_event = webhook_event
            print(f"Payment status changed: {payment_event.payment_key}")
            print(f"New status: {payment_event.status.value}")
            
            if payment_event.is_payment_completed():
                # Handle payment completion
                pass
                
        elif webhook_event.is_cancel_event:
            cancel_event = webhook_event  
            print(f"Cancellation completed: {cancel_event.transaction_key}")
            
    except WebhookVerificationError as e:
        print(f"Webhook verification failed: {e}")
        return "Bad Request", 400
        
    return "OK", 200

Why This SDK?

Beyond Simple API Calls

This SDK doesn't just make API calls - it transforms TossPayments responses into intelligent, easy-to-use objects with built-in business logic:

# ❌ Raw API approach - complex and error-prone
if response["status"] == "DONE" and response["balanceAmount"] > 0:
    cancelable = response["totalAmount"] - (response["totalAmount"] - response["balanceAmount"])
    if cancelable >= refund_amount:
        # Complex cancellation logic...

# ✅ This SDK - simple and intuitive
if payment.is_paid() and payment.can_be_canceled():
    max_refund = payment.get_cancelable_amount()
    if max_refund >= refund_amount:
        # Clean business logic
        process_refund(payment, refund_amount)

Smart Business Logic Methods

  • payment.is_paid() - Intelligent status checking instead of string comparison
  • payment.can_be_canceled() - Automatic validation for cancellation eligibility
  • payment.get_cancelable_amount() - Calculate remaining refundable amount
  • payment.get_canceled_amount() - Track total canceled amount
  • webhook_event.is_payment_completed() - Smart webhook event handling

Type-Safe Data Access

# Full IDE autocomplete and type safety
if payment.card:
    issuer = payment.card.issuer_code          # String
    installments = payment.card.installment_plan_months  # Optional[int]
elif payment.virtual_account:
    bank = payment.virtual_account.bank_code   # String  
    due_date = payment.virtual_account.due_date # datetime

Real Business Logic Example

def handle_payment_result(payment):
    """Clean, readable business logic"""
    if payment.is_paid():
        # Order fulfillment
        send_confirmation_email(payment.order_id)
        update_inventory(payment)
        process_delivery(payment)
        
    elif payment.can_be_canceled():
        # Show refund options
        max_refund = payment.get_cancelable_amount()
        enable_refund_button(max_amount=max_refund)
        
    # Access payment method details easily
    if payment.card and payment.card.installment_plan_months:
        schedule_installment_notifications(payment)

Features

🔐 Authentication

  • Automatic test/live environment detection
  • Secure Basic Auth with API keys

💳 Payment Management

  • Payment confirmation (confirm)
  • Payment retrieval (retrieve, retrieve_by_order_id)
  • Payment cancellation (cancel)

🔔 Webhook Handling

  • Payment status change events
  • Cancellation status change events
  • Virtual account deposit completion events

📝 Type Safety & Data Models

  • Full type hints support for better IDE experience
  • Dataclass-based models for structured data access
  • Automatic JSON serialization/deserialization
  • Rich payment objects with convenient methods

⚡ HTTP Client

  • Automatic retry with backoff
  • Configurable timeout settings

Configuration

client = Client(
    secret_key="test_sk_...",
    api_version="v1",           # API version (default: v1)
    timeout=30,                 # Timeout in seconds (default: 30)
    max_retries=3               # Max retry attempts (default: 3)
)

# Environment check
print(f"Test mode: {client.is_test_mode}")
print(f"Live mode: {client.is_live_mode}")

Requirements

  • Python 3.9+

Dependencies

  • requests>=2.28.0

License

MIT License

Support

Changelog

1.0.2 (2025-07-02)

  • Complete internationalization (English-first with Korean support)
  • Enhanced documentation with detailed guides
  • Improved type safety and code documentation
  • Added comprehensive documentation site
  • Better PyPI package metadata

1.0.1 (2025-07-02)

  • Version synchronization fix

1.0.0 (2025-06-05)

  • Initial release
  • Payment confirmation, retrieval, and cancellation features
  • Webhook handling functionality

한국어 안내

토스페이먼츠 Python 서버 SDK

이 라이브러리는 토스페이먼츠 API를 Python 서버 환경에서 보다 편리하게 활용할 수 있도록 개발된 서드파티 SDK입니다.

주요 기능

  • 결제 승인: 클라이언트에서 받은 결제 정보를 서버에서 승인
  • 결제 조회: 결제키 또는 주문번호로 결제 정보 조회
  • 결제 취소: 전체 또는 부분 결제 취소
  • 웹훅 처리: 결제 상태 변경 시 실시간 알림 처리

설치 및 사용법

자세한 사용법은 문서 사이트를 참고하세요.

문의 및 지원

  • GitHub Issues에서 문의사항을 남겨주세요.
  • 토스페이먼츠 공식 API 문서는 여기에서 확인할 수 있습니다.

라이센스

MIT 라이센스 하에 배포됩니다.

Release files for tosspayments-python-server-sdk 1.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tosspayments-python-server-sdk 1.0.6
File Size Uploaded
tosspayments_python_server_sdk-1.0.6.tar.gz 19.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tosspayments-python-server-sdk 1.0.6
File Interpreter ABI Platform
tosspayments_python_server_sdk-1.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 38.9 kB

Release files / tosspayments_python_server_sdk-1.0.6.tar.gz

Download URL tosspayments_python_server_sdk-1.0.6.tar.gz
Size 19.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3e8f7c68d8988089c1fd926ab716db0a955682edf85eee0380f2b0fa34030d9d
BLAKE2b-256 checksum
How to use checksums
d95dd28a842406ac8ac75bb6170b9f35dd9c2d694db8d63481ef836cce78f12c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.21

Release files / tosspayments_python_server_sdk-1.0.6-py3-none-any.whl

Download URL tosspayments_python_server_sdk-1.0.6-py3-none-any.whl
Size 19.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b1fd5e6be1c7f4475399ec761dca3de107f043b7c885dab2e9821ab4400c1eac
BLAKE2b-256 checksum
How to use checksums
b36945f2777193abb563298c9b5087d36b1bc7f814257af5f5ac276713232d89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.21

Release history Release notifications | RSS feed

This release

1.0.6 This release

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page