Observed since 21 Oct, 10:16 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Official Python SDK for AI Content Drop — generate AI video and images across 35+ models from one credit balance.
Official Python client for the AI Content Drop API. Generate AI video and images across 35+ models on one credit balance.
pip install aicontentdrop
No runtime dependencies — everything is standard library, so it installs anywhere Python 3.9+ runs and cannot conflict with your pinned HTTP client.
The catalogue, cost estimates, the natural-language endpoint and the sandbox need no credential, so you can finish an integration before anyone signs up.
from aicontentdrop import AiContentDrop
acd = AiContentDrop() # no key
for model in acd.models(type="video", max_credits=12):
print(model["id"], model["credits"])
print(acd.cost("kling_3_0", quantity=3)) # quote before you spend
Rehearse a generation for free, with full validation and no API key:
rehearsal = AiContentDrop(sandbox=True)
job = rehearsal.generate_video(prompt="a red balloon over a city", model="kling_3_0")
print(job["status"], job["creditsUsed"]) # completed 0
Create a key at https://aicontentdrop.com/settings/integrations, then put it
in ACD_API_KEY (or pass api_key=).
acd = AiContentDrop() # reads ACD_API_KEY
video = acd.generate_video_and_wait(
prompt="a golden retriever surfing at sunset",
model="kling_3_0",
on_progress=lambda v: print(v["status"]),
)
print(video["video_url"])
generate_video_and_wait raises on any terminal state other than completed,
so a failed job can never be mistaken for a finished one.
For manual control, generate_video() returns immediately and video(id) polls:
job = acd.generate_video(prompt="…", model="kling_3_0")
while job["status"] == "generating":
time.sleep(5)
job = acd.video(job["id"])
from aicontentdrop import AcdError
try:
acd.generate_video(prompt="…", model="kling_3_0")
except AcdError as exc:
if exc.code == "insufficient_credits":
print("Balance too low:", acd.me()["credits"])
elif exc.is_retryable:
time.sleep(exc.retry_after or 30)
else:
raise
Branch on exc.code, never on the message. Credits are charged only on
success, so a failure costs nothing and there is no refund to request.
Quote a whole job in one call, and move loops of reads into one request:
quote = acd.cost_batch([
{"model_id": "kling_3_0", "quantity": 8},
{"model_id": "veo_3_fast", "quantity": 2},
])
print(quote["credits_total"])
results = acd.batch([
{"id": "video", "method": "GET", "path": "/v1/models?type=video"},
{"id": "image", "method": "GET", "path": "/v1/models?type=image"},
])
Give each item in a batch its own stable idempotency_key derived from the item
rather than the attempt — that is what makes a run resumable after a crash
instead of paying twice.
| Docs | https://aicontentdrop.com/developers |
| OpenAPI 3.1 | https://aicontentdrop.com/openapi.json |
| Pricing, as markdown | https://aicontentdrop.com/pricing.md |
| Errors and retries | https://aicontentdrop.com/docs/errors |
| Rate limits | https://aicontentdrop.com/docs/rate-limits |
| Agent skills | https://aicontentdrop.com/skills/index.json |
| Source | https://github.com/aicontentdrop/aicontentdrop |
No test dependencies either — standard-library unittest:
python -m unittest discover -s tests -t .
MIT licensed.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.0 | 26 Aug 2026 | 0 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 21 Oct, 10:16 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:b5ad2386e752204f5dde32c8c122ead06bac49a44ae22234c631a7f7b8a178ab