Python SDK for the Pvium API
Project description
Pvium Python SDK
Python SDK equivalent of the Pvium TypeScript SDK.
Project Structure
python-sdk/
src/pvium_sdk/
core/
client.py
types.py
sdk.py
async_sdk.py
services/
invoice/
endpoints.py
oauth/
oauth.py
invites/
invites.py
payout/
payout.py
webhooks/
webhooks.py
...compatibility wrapper modules...
crypto/
signing.py
invite_merkle.py
__init__.py
...compatibility wrapper modules...
tests/
...pytest suite...
pyproject.toml
README.md
Install
pip install pvium
For local development and tests:
pip install -e '.[dev]'
Quick Start
from pvium_sdk import PviumSdk, PviumSdkConfig
pvium = PviumSdk.init(
PviumSdkConfig(
environment="sandbox",
apiKey="your_api_key",
clientId="your_client_id",
)
)
invoices = pvium.endpoints.listInvoices()
print(invoices)
Scheduled Payout Quick Start
Use scheduled payouts for larger payout batches. If a payout has more than 200 payees, create a scheduled payout instead of an instant payout.
from uuid import uuid4
from pvium_sdk import PayoutCurrency, PviumSdk, PviumSdkConfig
pvium = PviumSdk.init(
PviumSdkConfig(
environment="sandbox",
apiKey="your_api_key",
clientId="your_client_id",
)
)
scheduled = pvium.payout.createFinalized(
{
"id": str(uuid4()),
"type": "Scheduled",
"chain": "base",
"name": "March creator payouts",
"payoutCurrency": PayoutCurrency.USDC,
"scheduleDate": 1777488000,
"payments": [
{
"receiver": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"amount": 100,
"memo": "March payout",
},
# Add the rest of the payees here.
],
},
"your_signer_private_key",
{
"timestamp": 1777487451,
"claimDate": 1777488000,
},
)
print(scheduled.fundingUrl)
Async Usage
AsyncPviumSdk preserves the same service surface as PviumSdk and runs service calls in a worker thread.
from pvium_sdk import AsyncPviumSdk, PviumSdkConfig
sdk = AsyncPviumSdk.init(
PviumSdkConfig(baseUrl="https://api-sandbox.pvium.com/v1", apiKey="your_api_key")
)
# await any service method
invoices = await sdk.endpoints.listInvoices()
Run Tests
pytest
Services
-
pvium.endpointscreateInvoice(body, options=None)listInvoices(options=None)getInvoiceStatus(code, options=None)cancelInvoice(invoice_id, options=None)getInstallmentPayments(installment_id, options=None)
-
pvium.oauthexchangeCodeForToken(input, options=None)refreshAccessToken(input, options=None)getAccessTokenFromRefreshToken(input, options=None)getUserInfo(options=None)
-
pvium.invitescreateBundle(input)signBundle(bundle, signer)createSignedBundle(input, signer)commitBundle(bundle, options=None)createSignedAndCommit(input, signer, options=None)
-
pvium.payoutcreate(input, options=None)createFinalized(input, signer, options=None, request_options=None)list(query=None, options=None)get(payout_id, options=None)addPayments(payout, input, options=None)addRecipients(payout_id, input, options=None)resolveRecipients(payout_id, input, options=None)removePayments(payout_id, input, options=None)deletePayment(payout_id, payment_id, options=None)updatePayment(payout_id, payment_id, input, options=None)editPayment(payout_id, payment_id, input, options=None)listPayments(payout_id, query=None, options=None)listInvites(payout_id, options=None)revokeInvite(payout_id, invite_id, options=None)revokeInviteRoot(payout_id, invite_root_id, options=None)delete(payout_id, options=None)finalize(payout_input, signer, options=None, request_options=None)
Single-payout responses are payout intent objects. They keep dictionary
compatibility with ["meta"] and ["data"], and expose payout fields and proxy
methods directly:
payout_intent = pvium.payout.create({
"type": "Instant",
"chain": "base",
"name": "Creator payroll",
"payments": [
{
"receiver": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"amount": 100,
"token": "usdc",
}
],
})
finalized = payout_intent.finalize("your_signer_private_key")
print(finalized.fundingUrl)
Instant payouts are best for smaller batches. Prefer scheduled payouts when the batch has more than 200 payees.
Batch detail responses include up to 250 embedded payments. If the payout has
more, the response meta/data includes truncation fields such as
paymentsTruncated, paymentsLimit, and paymentCount. Use the paginated
payment list for larger payouts:
payments = payout_intent.listPayments({"page": 1, "perPage": 100})
for payment in payments["data"]:
print(payment["id"], payment["amount"])
You can manage a payout intent and its payments through the intent object:
payout_intent.editPayment(payment_id, {"memo": "Updated memo"})
payout_intent.deletePayment(payment_id)
payout_intent.revokeInvite(invite_id)
payout_intent.delete()
For funded escrow payouts, use the intent proxy instead of passing the batch back into the service:
funded_escrow = pvium.payout.get("escrow_batch_id")
funded_escrow.addPayments({
"payments": [
{
"receiver": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"amount": 100,
"memo": "Approved payout",
}
],
"signer": "your_signer_private_key",
"finalizeOptions": {"claimDate": 1777488000},
})
Utilities
The package exports signing helpers, webhook verification helpers, invite merkle helpers, and payout hash helpers similar to the TypeScript SDK.
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 pvium-0.1.1.tar.gz.
File metadata
- Download URL: pvium-0.1.1.tar.gz
- Upload date:
- Size: 37.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
304d3c7ceefcad4274709c75dcd0b344faeee5560b2dfd1dd802405a05ae3a90
|
|
| MD5 |
d106cd497281fb7514e7d5e17f678fa9
|
|
| BLAKE2b-256 |
bede567a20c16dc0863e8e3bd5eb8d67d95a57a0772b8a4a8d8c119e41a84c69
|
Provenance
The following attestation bundles were made for pvium-0.1.1.tar.gz:
Publisher:
python-sdk-publish.yml on pvium/sdks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pvium-0.1.1.tar.gz -
Subject digest:
304d3c7ceefcad4274709c75dcd0b344faeee5560b2dfd1dd802405a05ae3a90 - Sigstore transparency entry: 1734840078
- Sigstore integration time:
-
Permalink:
pvium/sdks@8ac9dd173263f3527673011eaa0bf5a3c366ad3f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pvium
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-sdk-publish.yml@8ac9dd173263f3527673011eaa0bf5a3c366ad3f -
Trigger Event:
push
-
Statement type:
File details
Details for the file pvium-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pvium-0.1.1-py3-none-any.whl
- Upload date:
- Size: 34.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27c38d823d5d4fe88a77a9825cc3a68af8242eb3b41d35ab50d0d39fcb8304ee
|
|
| MD5 |
46804b5cbb1118abaa7a1eecae0e4b45
|
|
| BLAKE2b-256 |
c5cd76a46dc21c1ced0c9d728c1126d86a302e802c0492eeef61f80fcbf78490
|
Provenance
The following attestation bundles were made for pvium-0.1.1-py3-none-any.whl:
Publisher:
python-sdk-publish.yml on pvium/sdks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pvium-0.1.1-py3-none-any.whl -
Subject digest:
27c38d823d5d4fe88a77a9825cc3a68af8242eb3b41d35ab50d0d39fcb8304ee - Sigstore transparency entry: 1734840147
- Sigstore integration time:
-
Permalink:
pvium/sdks@8ac9dd173263f3527673011eaa0bf5a3c366ad3f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pvium
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-sdk-publish.yml@8ac9dd173263f3527673011eaa0bf5a3c366ad3f -
Trigger Event:
push
-
Statement type: