Skip to main content

X402 payment protocol client for AceDataCloud APIs. Plugs into the acedatacloud SDK as a payment_handler.

Project description

@acedatacloud/x402-client — Python

X402 payment protocol client for AceDataCloud APIs. Plug-in for the acedatacloud SDK.

Pay-per-request with USDC — no API key, no account, no session. When an AceDataCloud API returns 402 Payment Required, this package signs the payment envelope and returns it as an X-Payment header; the SDK retries transparently.

  • 🟦 Base — USDC (ERC-20) via EIP-3009 TransferWithAuthorization
  • 🟪 Solana — USDC (SPL) via signed TransferChecked
  • 🟨 SKALE — USDC (bridged) via EIP-3009

Install

pip install acedatacloud acedatacloud-x402

Quick start

Base or SKALE (EVM)

from acedatacloud import AceDataCloud
from acedatacloud_x402 import create_x402_payment_handler, EVMAccountSigner

client = AceDataCloud(
    payment_handler=create_x402_payment_handler(
        network="base",                         # or "skale"
        evm_signer=EVMAccountSigner.from_private_key("0x..."),
    ),
)

res = client.openai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Say hi in 3 words"}],
    max_tokens=10,
)
print(res.choices[0].message.content)

Solana

from acedatacloud import AceDataCloud
from acedatacloud_x402 import create_x402_payment_handler, SolanaKeypairSigner

client = AceDataCloud(
    payment_handler=create_x402_payment_handler(
        network="solana",
        solana_signer=SolanaKeypairSigner.from_base58("..."),
    ),
)

task = client.images.generate(
    provider="nano-banana",
    prompt="a yellow banana on a white background",
)
result = task.wait()

The same handler works with AsyncAceDataCloud:

from acedatacloud import AsyncAceDataCloud

client = AsyncAceDataCloud(
    payment_handler=create_x402_payment_handler(network="base", evm_signer=signer),
)

Low-level signing

If you need to produce an X-Payment envelope without going through the SDK:

from acedatacloud_x402 import sign_evm_payment, sign_solana_payment

envelope = sign_evm_payment(requirement, evm_signer)          # dict
envelope = sign_solana_payment(requirement, solana_signer)    # dict
# base64-encode json(envelope) → X-Payment header value

Metered billing — the upto scheme

For APIs whose true cost is only known after the response (chat completions, image edits, etc.) AceDataCloud advertises an extra upto accept entry alongside exact. upto uses Uniswap Permit2 to authorize a ceiling; the server settles the actual amount at /record time (which may be 0).

from acedatacloud_x402 import (
    EVMAccountSigner,
    create_x402_payment_handler,
)

client = AceDataCloud(
    payment_handler=create_x402_payment_handler(
        network="base",
        evm_signer=EVMAccountSigner.from_private_key("0x..."),
        prefer_scheme="upto",   # opt-in; defaults to whatever the server lists first
    ),
)

A one-time on-chain ERC20.approve(Permit2, ∞) is required before the first upto payment. Use the bundled CLI:

pip install 'acedatacloud-x402[cli]'
X402_PRIVATE_KEY=0x... acedatacloud-x402 approve-permit2 --network base

or programmatically:

from acedatacloud_x402 import EVMAccountSigner, approve_permit2

approve_permit2(
    rpc_url="https://mainnet.base.org",
    signer=EVMAccountSigner.from_private_key("0x..."),
    token_address="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",  # USDC on Base
)

The helper is idempotent — re-running it after the allowance is already at or above the requested amount returns {"skipped": true} without sending a transaction.

Development

cd python
pip install -e ".[dev]"
pytest
ruff check .

License

MIT © AceDataCloud

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

acedatacloud_x402-2026.5.31.1.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

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

acedatacloud_x402-2026.5.31.1-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file acedatacloud_x402-2026.5.31.1.tar.gz.

File metadata

  • Download URL: acedatacloud_x402-2026.5.31.1.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for acedatacloud_x402-2026.5.31.1.tar.gz
Algorithm Hash digest
SHA256 63297564296e5d52cd5af15e6e6e0e54f3c46e42b46c609fa3e585617b39aa04
MD5 08d0531c65c814100a5f3c368286c05e
BLAKE2b-256 df5fc78fa6945271b05868eb10427eacc99e5e127cf5afd2254d96182df37552

See more details on using hashes here.

File details

Details for the file acedatacloud_x402-2026.5.31.1-py3-none-any.whl.

File metadata

File hashes

Hashes for acedatacloud_x402-2026.5.31.1-py3-none-any.whl
Algorithm Hash digest
SHA256 67082f7fedcf0608bf24db58f6ab6fa7837acf94595a1a130a5d630097914cf7
MD5 af1a152447ded3d9f6d78c3f7f56eb1a
BLAKE2b-256 802cfa3c1aaebe2acb4175fec779ff9d4a5cc813f25ba6f62bb98fcdd006f4b6

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