Official Python SDK for the AltPay crypto-payments API (sync + async).
Project description
altpay-py
Official Python SDK for the AltPay crypto-payments API. Synchronous
and asynchronous clients, typed models, request signing and webhook verification in one
package. Built on httpx and pydantic v2.
pip install altpay-py
import altpay # the distribution is altpay-py; the import name is altpay
Quick start
from decimal import Decimal
from altpay import AltPay, Credentials
client = AltPay(Credentials(
merchant_id="YOUR_MERCHANT_ID",
api_key="vc_live_...",
api_secret="YOUR_API_SECRET",
))
invoice = client.invoices.create(
uuid="order-42", # your idempotency key / order reference
amount=Decimal("100.00"),
fiat_currency="USD",
url_callback="https://example.com/altpay/webhook",
)
print(invoice.url) # hosted checkout URL to redirect the payer to
# later, check on it
invoice = client.invoices.get(order_id=invoice.order_id)
print(invoice.status) # PaymentStatus.CREATED | PAYED | EXPIRED | ...
Async
The async client mirrors the sync one exactly; just await the calls.
from altpay import AsyncAltPay, Credentials
async with AsyncAltPay(creds) as client:
invoice = await client.invoices.create(
uuid="order-42", amount="100.00", fiat_currency="USD",
)
print(invoice.url)
What you can do
| Resource | Method | Endpoint |
|---|---|---|
client.invoices |
create(...) |
create an invoice |
get(order_id=... | uuid=...) |
fetch one invoice | |
list(status=..., cursor=..., limit=...) |
page through invoices | |
services() |
available methods, limits and fees | |
balance(fiat_currency=...) |
balance valued in one fiat, per asset | |
create_wallet(network=..., order_id=...) |
static deposit wallet | |
list_wallets(limit=..., offset=...) |
list static wallets | |
client.account |
get() |
merchant + API-key identity |
balance() |
paid volume per method (native asset) | |
statistics() |
aggregate counts and USD volume |
Webhooks
AltPay POSTs a signed payment.updated event to your url_callback when an invoice is
paid. Always verify the signature before trusting the body, and pass the raw request
bytes (not the re-serialized JSON).
from altpay import WebhookVerifier
verifier = WebhookVerifier(WEBHOOK_SECRET, target="/altpay/webhook")
# inside your handler (framework-agnostic):
event = verifier.parse(raw_body, request_headers) # raises AuthenticationError on a bad sig
if event.status == "PAYED":
fulfil_order(event.merchant_reference)
verifier.verify(raw_body, headers) returns a bool if you prefer to branch yourself.
Errors
Every failure is an AltPayError. Network problems raise AltPayTransportError; anything the
API rejected raises an APIError subclass keyed by HTTP status. Each carries the server's
machine-readable detail, a human hint, and the request_id for support.
from altpay import AuthenticationError, RateLimitError, ValidationError, NotFoundError
try:
client.invoices.create(uuid="o1", amount="100", fiat_currency="USD")
except AuthenticationError as e:
... # bad credentials / clock skew / revoked key (HTTP 401, detail="invalid_signature")
except ValidationError as e:
... # a field failed validation (HTTP 400, detail="invalid_request")
except RateLimitError as e:
sleep(e.retry_after or 1) # HTTP 429
except NotFoundError as e:
... # HTTP 404
The full catalogue, with every detail value and how to fix it, is at
https://docs.altpay.money/docs/http-codes.
Configuration
AltPay(
credentials,
base_url="https://api.altpay.money", # override for staging
timeout=30.0, # per-request seconds
max_retries=2, # retry transient errors (5xx, 429, network) with backoff
http_client=my_httpx_client, # bring your own httpx.Client (proxies, custom TLS)
)
Authentication, in brief
Each request is signed with HMAC-SHA256 over a canonical string of the merchant id, API key,
timestamp, nonce, body hash, method and path. The SDK does this for you; the secret never
leaves your process. If you ever need the primitives (custom transport, testing), they live
in altpay.signing. Full spec: https://docs.altpay.money/docs/authentication.
Requirements
- Python 3.10+
httpx >= 0.24,pydantic >= 2.0
License
MIT
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 altpay_py-0.1.0.tar.gz.
File metadata
- Download URL: altpay_py-0.1.0.tar.gz
- Upload date:
- Size: 25.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db0f55d7823563c6fe0a70ef725e2d35e68f8df3db13dcb2d118f6c4cfad19de
|
|
| MD5 |
3dc2211a2087dc1e6eae15fd862d943f
|
|
| BLAKE2b-256 |
d379caa28a9fc846e8599cfc77fa594eb0e95e81dcc22c13f53f76df93de6e3f
|
File details
Details for the file altpay_py-0.1.0-py3-none-any.whl.
File metadata
- Download URL: altpay_py-0.1.0-py3-none-any.whl
- Upload date:
- Size: 34.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
360643bc8545fc525fd980d3bce896dc54e080a3c5dc972621113aa5892be079
|
|
| MD5 |
5477c1364b27af11561fa6a243d97577
|
|
| BLAKE2b-256 |
42d484b581a988aa88ccd59787a25dc6952de65f04e2dd54ff565d4856f7ce0b
|