Repository navigation
v1.0.0
Generated from API version v2026-08-20.
First release. Covers every operation in that spec — 18 of them — plus two polling helpers over
its status endpoints. Response models are generated from its schemas. Requires Python 3.10+.
Added
AbyssaleandAsyncAbyssale, overhttpx. Both are context managers and both accept a
caller-suppliedhttpxclient.- All 18 endpoints — auth; design list/read/format read; sync and async generation; multipage
PDF; generation-request status; file read; fonts; projects list/create; export; dynamic image
URL; workspace templates, categories, duplication and duplication status. wait_for_generation_request/wait_for_duplication_request— exponential backoff with
jitter, a 30-minute default deadline, and a budget of three consecutive transient failures that
resets on any successful poll. Partial success resolves: a finalized request carrying both banners
and per-format errors is a result, not an exception. Only a request that finalized with no banners
at all and at least one error raises.- Retries that follow the spec's error contract — 5xx on idempotent methods only (every POST
bills credits, and a 504 does not mean the render did not happen); the full ladder for a429
carryingRetry-After; exactly one one-second probe for a bare429, because
rate_limit_exceededconflates spent credits with the gateway's per-second ceiling;
feature_not_in_plannever retried, whatever headers the response carries. max_retry_wait($ABYSSALE_MAX_RETRY_WAIT_MS, default 30s) — the longest single
Retry-Afterthe SDK will sleep through on your behalf. The rate limiter can name a cool-off of
~1700s once a quota is spent, andmax_retriesmultiplies it, so honouring it blindly would turn
one call into 83 minutes of silence. Past the bound the call fails immediately with
AbyssaleRateLimitError,retry_aftercarrying the server's figure so the decision is yours.
Passmath.infto wait however long the server asks.- An exception hierarchy under
AbyssaleError, built from the API's single error envelope — the
machine-readableidis always on the exception, anderrorsholds the per-field problems when
the failure was a payload problem. - Pydantic response models generated from the spec, with the Alpha design-import surface
stripped byscripts/fetch_spec.py. - Seven runnable examples in
examples/, each exercising a documented operation end to end.
Notes
- Request bodies are plain dicts. The
elementsschema is ananyOfof ten deliberately
overlapping branches with no discriminator, and the API accepts unknown element names by design,
so bodies are passed through untouched rather than modelled. - Parsing never fails a successful response. Unknown fields are kept, and a field the spec
calls required but the response omits does not raise — the spec is hand-maintained and the API is
the authority.