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
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 acedatacloud-2026.4.20.0.tar.gz.
File metadata
- Download URL: acedatacloud-2026.4.20.0.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52ac7a6ce92ab1b0f31b324fd4fc4420db4bed0ac1a36b90862719630ad7aa1c
|
|
| MD5 |
a0ceb0ff556ee121547ab1f4b2da312d
|
|
| BLAKE2b-256 |
a82f61aa8cd231493f210a48a1f2b793b94b73a4582a96770cbbc9f32f6e0525
|
File details
Details for the file acedatacloud-2026.4.20.0-py3-none-any.whl.
File metadata
- Download URL: acedatacloud-2026.4.20.0-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f12cbb1a8199e9d8c419a1f22ecb81aa7b18b5bb1858bfa7223c7ba852e03a3
|
|
| MD5 |
5f4463473daba5eb7c72722e15e029af
|
|
| BLAKE2b-256 |
93d89c285aa9e11aa11dbc8367dc7d352a12bed2f1b488ad3de00dd796c4a954
|