arcenciel 1.0.0 stable
Official Python 3.11+ client for the immutable Arc en Ciel Developer API 1.9.0 contract. The package provides synchronous and asynchronous
generated APIs behind a small stable facade. PyPI publishes it from the signed public source tag through OIDC Trusted Publishing with a
digital attestation.
Install
python3.11 -m pip install arcenciel==1.0.0
Search and inspect a model
from arcenciel import ArcEnCielClient
client = ArcEnCielClient(api_key="...", timeout=30.0)
page = client.call_sync(
lambda: client.models.search_models_sync(
search="landscape",
page=1,
limit=20,
)
)
model = page.data[0] if page.data else None
if model and model.id:
detail = client.call_sync(lambda: client.models.get_model_sync(id=model.id))
print(detail.name)
Public catalogue reads do not require credentials. Configure api_key for account-specific filters and attribution. Use one key per
integration and grant only the documented scope.
Test safely in the sandbox
All 258 stable methods can target deterministic, non-persistent fixtures without changing generated code:
sandbox = ArcEnCielClient(
base_url="https://arcenciel.io/developers/sandbox",
api_key="aec_test_public",
)
page = sandbox.call_sync(lambda: sandbox.models.search_models_sync(limit=5))
The sandbox rejects live API keys, bearer credentials, and cookies. It supports documented error scenarios, binary ranges, redirects, and streams for integration and retry tests. See the sandbox guide.
Async calls use the same typed namespace and opt into retries only when the operation is safe:
async with ArcEnCielClient(api_key="...") as client:
model = await client.call(
lambda: client.models.get_model(id=42),
retry_safe=True,
)
Stream and verify a download
from pathlib import Path
from arcenciel import ArcEnCielClient
async def download() -> Path:
async with ArcEnCielClient(api_key="...") as client:
info = await client.call(
lambda: client.downloads.get_model_version_download_info(
model_id=42,
version_id=81,
),
retry_safe=True,
)
return await client.download_to_file(
42,
81,
"model.safetensors",
filename=info.file_name,
expected_sha256=info.sha256,
)
download_to_file and download_to_file_sync follow HTTPS redirects, stream into an atomic temporary file, optionally preserve a Range
header, and compare the complete SHA-256 before replacing the destination. A failed checksum removes only the temporary file and leaves an
existing destination untouched. Use stream_download or stream_download_sync when the caller needs direct control over the response
stream.
Errors and retries
ArcEnCielError exposes status, API code, request_id, response headers, and retry_after. Generated async calls are retried only
when client.call(..., retry_safe=True) is used and the failure is a network error or 429, 502, 503, or 504. Writes are never
retried implicitly. For a deliberately retried comment create, pass the same idempotency_key from the closure on every attempt.
Synchronous calls are normalized with call_sync and are not automatically retried.
Create a comment with an idempotency key
from uuid import uuid4
from arcenciel.generated.models.create_article_comment_request import (
CreateArticleCommentRequest,
)
key = str(uuid4())
created = client.call_sync(
lambda: client.comments.create_model_comment_sync(
model_id=42,
idempotency_key=key,
create_article_comment_request=CreateArticleCommentRequest(
content="Useful training notes—thank you!"
),
)
)
print(created.comment.id)
Unknown future response enum values remain strings instead of failing deserialization.
Read conversations and send once
from uuid import uuid4
inbox = client.call_sync(
lambda: client.chat.list_chat_threads_sync(folder="inbox", limit=30)
)
for thread in inbox.data:
print(thread.id, thread.title, thread.has_unread)
created = client.call_sync(
lambda: client.chat.create_chat_message_sync(
thread_id=81,
idempotency_key=str(uuid4()),
content="The release render is ready.",
)
)
print(created.id)
Grant ChatRead for thread, message, presence, unread, and preview reads. Add ChatWrite only for requests, groups, messages, reactions,
read state, and group mutations. Reuse the same idempotency key when deliberately retrying a request, group, or message create.
Manage and verify Developer Webhooks
from arcenciel import ArcEnCielClient, verify_webhook_signature
client = ArcEnCielClient(api_key="...")
endpoints = client.webhooks.list_webhook_endpoints_sync()
valid = verify_webhook_signature(
raw_body,
request.headers["x-aec-signature"],
webhook_secret,
)
Grant WebhooksRead for event, endpoint, and delivery reads. Add WebhooksWrite for endpoint lifecycle, test delivery, secret rotation, and
manual retry. Pass the exact unparsed request body to verify_webhook_signature; its default replay window is five minutes.
Run examples/webhook_workflow.py with a WebhooksRead key for a non-mutating discovery and local
signature-verification smoke workflow.
Stable namespaces
| Namespace | Stable operations |
|---|---|
client.articles |
Article discovery, drafts, media, scheduling, publication, updates, and deletion |
client.chat |
Private threads, requests, groups, messages, reactions, presence, and read state |
client.collabs |
Collaboration discovery, showcases, requests, participant media, and membership |
client.collections |
Collection discovery, creation, collaborators, contribution review, items, and media |
client.comments |
Typed article, image, model, and video comment reads and mutations |
client.downloads |
Model download metadata, binary transfers, training TOML, archives, and registration |
client.emotes |
Anonymous emote catalogue reads |
client.feedback |
Caller-owned product feedback, attachments, and deletion |
client.generator |
Image/video generation options, presets, uploads, jobs, events, outputs, and publish |
client.images |
Image discovery, uploads, metadata, crossposts, publishing, and bulk transfer |
client.models |
Models, versions, resumable uploads, managed media, resources, and publishing |
client.notifications |
Cursor-paginated inbox, summary, and read-state updates |
client.profile |
Own profile, uploads, export, history, pinned templates, links, and profile media |
client.social |
Favorites, follows, image/video reactions, and their explicit removal operations |
client.tags |
Anonymous tag-usage discovery |
client.trust_safety |
Illegal-content notices, private evidence, review requests, and content reports |
client.users |
Public profiles, creator statistics, search, and visible uploads |
client.videos |
Video discovery, uploads, metadata, publishing, HLS, streaming, and downloads |
client.webhooks |
Endpoint lifecycle, event catalog, delivery diagnostics, retries, and secret rotation |
The generated low-level APIs and Pydantic models remain available under arcenciel.generated.
Contract and generation
- Developer API:
1.9.0, 258 operations - SDK:
1.0.0stable - Python: 3.11+
- OpenAPI Generator CLI:
2.40.1 - OpenAPI Generator:
7.24.0 - Contract: https://arcenciel.io/developers/openapi/1.9.0.json
- Release manifest: https://arcenciel.io/developers/openapi/releases.json
- Portal and support: https://arcenciel.io/developers
Generated code is committed and deterministically regenerated from the immutable contract. The hand-written facade, tests, and this README are preserved across regeneration.
License
MIT
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 arcenciel-1.0.0.tar.gz.
File metadata
- Download URL: arcenciel-1.0.0.tar.gz
- Upload date:
- Size: 330.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
426a9fdfc4950e5da11450d0272b232b392e27c6cb02d893b823db9198b20b55
|
|
| MD5 |
282876c5fe8e40c88ddab6ff99e39353
|
|
| BLAKE2b-256 |
e6ae1f714c75f0f025c130000a1bab9d420eded2d0d9ac816563a4f56d0ce0f3
|
Provenance
The following attestation bundles were made for arcenciel-1.0.0.tar.gz:
Publisher:
publish.yml on FallenIncursio/arcenciel-sdks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arcenciel-1.0.0.tar.gz -
Subject digest:
426a9fdfc4950e5da11450d0272b232b392e27c6cb02d893b823db9198b20b55 - Sigstore transparency entry: 2384620544
- Sigstore integration time:
-
Permalink:
FallenIncursio/arcenciel-sdks@f6bf69d617f11a254604edff908c1aa5ca1ced1c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/FallenIncursio
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f6bf69d617f11a254604edff908c1aa5ca1ced1c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file arcenciel-1.0.0-py3-none-any.whl.
File metadata
- Download URL: arcenciel-1.0.0-py3-none-any.whl
- Upload date:
- Size: 946.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
078c67e5342b9c08ab4da5e5d2941494f1fd00fb6427b9e6e0fc6902604f27df
|
|
| MD5 |
6d22fec6b3b867795b0c3f45778675e2
|
|
| BLAKE2b-256 |
1771be19b847c525260e279e8c08100916dd3f9f3f30bac60d8943bd723994dd
|
Provenance
The following attestation bundles were made for arcenciel-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on FallenIncursio/arcenciel-sdks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arcenciel-1.0.0-py3-none-any.whl -
Subject digest:
078c67e5342b9c08ab4da5e5d2941494f1fd00fb6427b9e6e0fc6902604f27df - Sigstore transparency entry: 2384620664
- Sigstore integration time:
-
Permalink:
FallenIncursio/arcenciel-sdks@f6bf69d617f11a254604edff908c1aa5ca1ced1c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/FallenIncursio
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f6bf69d617f11a254604edff908c1aa5ca1ced1c -
Trigger Event:
workflow_dispatch
-
Statement type: