Python SDK
The official Python SDK for Pelago.
Installation
pip install pelago-sdk
Quick Start
import os
from pelago import PelagoClient
pelago = PelagoClient(
api_key=os.environ['PELAGO_API_KEY'],
api_secret=os.environ['PELAGO_API_SECRET'],
environment='production'
)
# Create a payment
payment = pelago.payments.create(
amount=99.99,
currency='USD',
cryptocurrency='USDC',
network='stellar',
merchant_wallet='GXXXXX...'
)
print(f'Payment URL: {payment.url}')
Configuration
pelago = PelagoClient(
# Required
api_key='pk_live_xxxxx',
api_secret='sk_live_xxxxx',
# Optional
environment='production', # 'production' or 'sandbox'
timeout=30, # Request timeout in seconds
max_retries=3 # Auto-retry failed requests
)
Payments
Create Payment
payment = pelago.payments.create(
amount=100.00,
currency='USD',
cryptocurrency='USDC',
network='stellar',
merchant_wallet='GXXXXX...',
redirect_url='https://mystore.com/success',
webhook_url='https://mystore.com/api/webhook',
expires_in=1800,
metadata={
'order_id': 'ORD-12345',
'customer_email': '[email protected]'
}
)
Retrieve Payment
payment = pelago.payments.retrieve('pay_abc123')
print(f'Status: {payment.status}')
List Payments
payments = pelago.payments.list(
status='completed',
limit=20,
created_gte='2025-01-01T00:00:00Z'
)
for payment in payments.data:
print(f'{payment.id}: {payment.amount}')
Refunds
# Create refund
refund = pelago.refunds.create(
payment_id='pay_abc123',
amount=50.00, # Partial refund
reason='Customer request'
)
# List refunds
refunds = pelago.refunds.list(payment_id='pay_abc123')
Webhooks (Flask)
from flask import Flask, request, jsonify
from pelago import PelagoClient
from pelago.errors import WebhookSignatureError
app = Flask(__name__)
pelago = PelagoClient(
api_key=os.environ['PELAGO_API_KEY'],
api_secret=os.environ['PELAGO_API_SECRET']
)
@app.route('/webhook', methods=['POST'])
def webhook():
payload = request.get_data(as_text=True)
signature = request.headers.get('X-Pelago-Signature')
timestamp = request.headers.get('X-Pelago-Timestamp')
try:
event = pelago.webhooks.construct_event(
payload,
signature,
timestamp,
os.environ['WEBHOOK_SECRET']
)
except WebhookSignatureError:
return jsonify({'error': 'Invalid signature'}), 401
if event['type'] == 'payment.completed':
order_id = event['data']['metadata']['order_id']
fulfill_order(order_id)
return jsonify({'received': True}), 200
Error Handling
from pelago.errors import (
PelagoError,
AuthenticationError,
InvalidRequestError,
RateLimitError
)
try:
payment = pelago.payments.create(...)
except AuthenticationError:
print('Check your API keys')
except InvalidRequestError as e:
print(f'Invalid param: {e.param}')
except RateLimitError:
print('Rate limited, slow down')
except PelagoError as e:
print(f'Error: {e.message}')
Django Integration
# views.py
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
@csrf_exempt
@require_POST
def create_payment(request):
data = json.loads(request.body)
payment = pelago.payments.create(
amount=data['amount'],
currency='USD',
cryptocurrency='USDC',
network='stellar',
merchant_wallet=settings.PELAGO_WALLET,
metadata={'order_id': data['order_id']}
)
return JsonResponse({'payment_url': payment.url})
@csrf_exempt
@require_POST
def webhook(request):
event = pelago.webhooks.construct_event(
request.body,
request.headers.get('X-Pelago-Signature'),
request.headers.get('X-Pelago-Timestamp'),
settings.WEBHOOK_SECRET
)
if event['type'] == 'payment.completed':
Order.objects.filter(
id=event['data']['metadata']['order_id']
).update(status='paid')
return JsonResponse({'received': True})
Async Support
import asyncio
from pelago import AsyncPelagoClient
pelago = AsyncPelagoClient(
api_key=os.environ['PELAGO_API_KEY'],
api_secret=os.environ['PELAGO_API_SECRET']
)
async def main():
payment = await pelago.payments.create(
amount=100,
currency='USD',
cryptocurrency='USDC',
network='stellar',
merchant_wallet='GXXXXX...'
)
print(f'Payment: {payment.url}')
asyncio.run(main())