Skip to main content

Official Python SDK for AceDataCloud — AI-powered data services

Project description

AceDataCloud Python SDK

Official Python client for the AceDataCloud API.

Installation

pip install acedatacloud

Quick Start

from acedatacloud import AceDataCloud

client = AceDataCloud(api_token="your-token")

# OpenAI-compatible chat completions
response = client.openai.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(response["choices"][0]["message"]["content"])

# Streaming
for chunk in client.openai.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Tell me a story"}],
    stream=True,
):
    print(chunk.get("choices", [{}])[0].get("delta", {}).get("content", ""), end="")

Async Usage

import asyncio
from acedatacloud import AsyncAceDataCloud

async def main():
    client = AsyncAceDataCloud(api_token="your-token")
    result = await client.search.google(query="Python SDK")
    print(result)
    await client.close()

asyncio.run(main())

Resources

Resource Description
client.openai OpenAI-compatible chat completions and responses
client.chat Native chat messages
client.images Image generation (Midjourney, Flux, etc.)
client.audio Music generation (Suno)
client.video Video generation (Luma, Sora, Veo, etc.)
client.search Web search (Google SERP)
client.tasks Cross-service async task polling
client.files File uploads
client.platform Applications, credentials, models management

Image Generation (with Task Polling)

# Default provider (nano-banana)
task = client.images.generate(prompt="A sunset over mountains")
result = task.wait()  # polls until complete
print(result["image_url"])

# Use a specific provider
mj_task = client.images.generate(prompt="A sunset over mountains", provider="midjourney")

Multi-Provider Support

Image, video, and audio resources support a provider parameter to switch between services:

# Video — default is 'sora'
client.video.generate(prompt="A cat playing piano", provider="kling")
client.video.generate(prompt="Ocean waves", provider="luma")

# Audio — default is 'suno'
client.audio.generate(prompt="A jazz song", provider="producer")

Available providers:

Resource Providers
client.images nano-banana (default), midjourney, flux, seedream
client.video sora (default), luma, veo, kling, hailuo, seedance, wan, pika, pixverse
client.audio suno (default), producer

Error Handling

from acedatacloud import AceDataCloud, AuthenticationError, RateLimitError

client = AceDataCloud(api_token="your-token")
try:
    client.search.google(query="test")
except AuthenticationError:
    print("Invalid or expired token")
except RateLimitError:
    print("Too many requests, slow down")

Configuration

client = AceDataCloud(
    api_token="your-token",
    base_url="https://api.acedata.cloud",       # API gateway
    platform_base_url="https://platform.acedata.cloud",  # Management plane
    timeout=300.0,      # Request timeout in seconds
    max_retries=2,      # Retry count for transient errors
)

The token can also be set via the ACEDATACLOUD_API_TOKEN environment variable.

Paying with X402 Instead of a Bearer Token

The SDK supports a pluggable payment_handler that is invoked when the API returns 402 Payment Required. Any callable (or async callable) that returns the required headers is accepted:

from acedatacloud import AceDataCloud, PaymentHandlerContext, PaymentHandlerResult

def my_payment_handler(ctx: PaymentHandlerContext) -> PaymentHandlerResult:
    # ctx["accepts"] is the list of payment requirements returned by the server.
    # Your job: sign the preferred one and return the retry header.
    x_payment = sign_and_encode(ctx["accepts"])  # your implementation
    return {"headers": {"X-Payment": x_payment}}

client = AceDataCloud(payment_handler=my_payment_handler)

# Normal SDK calls — the handler is only invoked when the server returns 402.
result = client.openai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Hi"}],
)

The AsyncAceDataCloud client accepts either a synchronous or asynchronous handler, so you can plug in wallet SDKs that use asyncio. A ready-made x402 signer for Python is not shipped yet (there is a TypeScript implementation in @acedatacloud/x402-client — contributions for a Python port are welcome).

License

MIT

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-2026.4.26.1.tar.gz (17.3 kB view details)

Uploaded Source

Built Distribution

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

acedatacloud-2026.4.26.1-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file acedatacloud-2026.4.26.1.tar.gz.

File metadata

  • Download URL: acedatacloud-2026.4.26.1.tar.gz
  • Upload date:
  • Size: 17.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for acedatacloud-2026.4.26.1.tar.gz
Algorithm Hash digest
SHA256 8616d56a049245d218d19f5e18a5a9707633e6f02d0591206a6975d666d47c0f
MD5 1356ac6c1f5b85618b63f5c7b2b9e290
BLAKE2b-256 5e170f2daf8bc58f8d9e2e16f3996375386bf11a3dafb172fc922b8e607e43de

See more details on using hashes here.

File details

Details for the file acedatacloud-2026.4.26.1-py3-none-any.whl.

File metadata

File hashes

Hashes for acedatacloud-2026.4.26.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d1cd47f6b627c9ebc6835f1ce2248c57632a4d6a82fc49e4bf60180d56db8a24
MD5 aea094810390ca4dea8e14c900d10733
BLAKE2b-256 12181f2140f350d4b5c3f53bff74128a7c43288b2b798f035dfbd29af74e4f43

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