NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2201 most downloaded on PyPI
Python Client SDK for Unstructured API
Last release 1 months ago
24 Aug 2026
Release timing varies
gaps range from 9 days to 3 months
Nearly every release is documented
notes for 58 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
106 releases · first in 2023
One column per quarter.
Accept the API URL the Transform Platform hands you as server_url. The app's API Keys page and the docs give you https://platform-api.transform.unstru
Accept the API URL the Transform Platform hands you as server_url. The app's API Keys page and the docs give you https://platform-api.transform.unstructured.io/api/v1, which works with curl but 404'd every Platform call in the SDK: the URL cleaner only stripped a path for unstructuredapp.io hosts, so the /api/v1 survived and the operation's own /api/v1/jobs/ was appended on top, producing /api/v1/api/v1/jobs/. Hosts under unstructured.io are now recognized too, and are matched on domain boundaries so a lookalike host like unstructuredapp.io.example.com keeps its path and scheme. A server_url passed to an individual operation is cleaned as well — previously only the client-level URL was, so client.jobs.list_jobs(request={}, server_url=...) still 404'd.
fix: raise on an empty HTTP-200 split chunk in NDJSON mode (0.46.1) by @badGarnet in #348
Full Changelog: v0.46.0...v0.46.1
elements_file was silently short by those pages while the call still returned 200 — and split_pdf_allow_failed=False did not catch it, because an empty 200 counts as a successful chunk. Recombination now raises EmptyChunkResponseError (a ValueError), matching the buffered path, which raises JSONDecodeError on the same response. Emptiness is judged against the chunk's own Content-Type: JSON has no empty document (a chunk with no elements is []), while application/x-ndjson encodes zero records as zero lines, so an empty NDJSON chunk is well formed and still contributes nothing.feat: NDJSON elements-file mode for partition (0.46.0) by @badGarnet in #347
Full Changelog: v0.45.0...v0.46.0
partition(). Pass accept_header_override=PartitionAcceptEnum.APPLICATION_X_NDJSON to get PartitionResponse.elements_file — a path to an NDJSON file with one element per line — instead of PartitionResponse.elements. On the split-PDF path the per-chunk temp files are concatenated on disk rather than parsed, flattened, re-serialized with json.dumps and re-parsed by the SDK, which held four copies of the document in memory at once; peak memory becomes roughly one chunk instead of the whole document. elements_file is set for every input, including ones that are not split and responses from a server that ignores the Accept header, so callers need only one code path — but the memory saving itself applies only to split PDFs (a PDF of more than two pages, with split_pdf_page=True). The caller owns the returned file and is responsible for deleting it. Requesting application/json (the default) is unchanged.Make the split-PDF httpx.AsyncClient connection-pool limits configurable via env vars: UNSTRUCTURED_CLIENT_MAX_CONNECTIONS (default 100 ), UNSTRUCTURE
httpx.AsyncClient connection-pool limits configurable via env vars: UNSTRUCTURED_CLIENT_MAX_CONNECTIONS (default 100), UNSTRUCTURED_CLIENT_MAX_KEEPALIVE_CONNECTIONS (default 20), and UNSTRUCTURED_CLIENT_KEEPALIVE_EXPIRY (default 5.0s). Defaults match httpx, so behavior is unchanged unless set. Useful when deploying behind a connect-time-only load balancer (e.g. Kubernetes ClusterIP without a mesh) where shorter keepalives force connections to redistribute across backend pods.SSL_CERT_FILE / REQUESTS_CA_BUNDLE env vars to point the split-PDF httpx.AsyncClient at a custom trust store, so a single env-var setting applies uniformly across Python tooling.UNSTRUCTURED_CLIENT_TLS_CLIENT_CERT and UNSTRUCTURED_CLIENT_TLS_CLIENT_KEY env vars to wire an mTLS client certificate into the split-PDF httpx.AsyncClient (single PEM, or split cert + key files).event=plan_created log to include the resolved pool limits and trust-store / mTLS mode so the active config is visible in production logs.Add min_attempts and absolute_max_elapsed_time_ms fields to BackoffStrategy . min_attempts is the minimum number of retry attempts that must fire befo
min_attempts and absolute_max_elapsed_time_ms fields to BackoffStrategy. min_attempts is the minimum number of retry attempts that must fire before max_elapsed_time is honored; defaults to 0 (preserves existing behavior). absolute_max_elapsed_time_ms caps when a new retry can start (does not interrupt in-flight requests); defaults to None. Together these close a short-circuit where a single slow first attempt could exhaust the retry budget before any retry fired.Removed deprecated connector config models from the SDK (e.g. S3SourceConnectorConfig , AzureDestinationConnectorConfig ). Pass connector configs as p…
S3SourceConnectorConfig, AzureDestinationConnectorConfig). Pass connector configs as plain dicts with arbitrary fields. The SDK is no longer coupled to backend connector schemas — new fields work without an SDK upgrade.Enable trusted publishing by @PastelStorm in #337
PYPI_TOKEN secret.0.43.2 for the trusted-publishing release flow.Speakeasy CLI 1.601.0 (2.680.0) https://github.com/speakeasy-api/speakeasy
Based on:
httpx.TransportError subclasses (including ReadError, WriteError, ConnectError, RemoteProtocolError, and all timeout types) when retry_connection_errors=True. Previously only ConnectError, RemoteProtocolError, and TimeoutException were retried — ReadError (TCP connection reset mid-response) was treated as permanent.Speakeasy CLI 1.601.0 (2.680.0) https://github.com/speakeasy-api/speakeasy
Based on:
httpx.RemoteProtocolError (e.g. "Server disconnected without sending a response") when retry_connection_errors=True. Previously, mid-request server crashes were treated as permanent errors and not retried.Speakeasy CLI 1.601.0 (2.680.0) https://github.com/speakeasy-api/speakeasy
Based on:
Speakeasy CLI 1.601.0 (2.680.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.601.0 (2.680.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.601.0 (2.680.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.601.0 (2.680.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.601.0 (2.680.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
CreateSourceConnectorConfig and CreateDestinationConnectorConfig. This decouples us from the backend schemas. Users can send new connector config fields without having to upgrade their client.Speakeasy CLI 1.598.3 (2.674.3) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
SourceConnectorType and DestinationConnectorType. This lets the client support new connector types without having to upgrade.Speakeasy CLI 1.598.0 (2.674.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.595.0 (2.670.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Can't patch loop of type <class 'uvloop.Loop'>, remove usage of nest-asyncioclient.users that are not fully ready yetSpeakeasy CLI 1.589.0 (2.664.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
UnstructuredClientError to capture every error raised by the SDK. Note that some exceptions such as SDKError now have more information in the message field. This will impact any users who rely on string matching in their error handling.Speakeasy CLI 1.552.0 (2.610.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.552.0 (2.610.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.552.0 (2.610.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.552.0 (2.610.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.552.0 (2.610.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.552.0 (2.610.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.552.0 (2.610.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.544.0 (2.599.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.537.0 (2.588.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.535.1 (2.585.2) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.535.0 (2.585.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.533.0 (2.578.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.531.0 (2.568.2) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.529.1 (2.566.5) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.528.1 (2.565.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.526.0 (2.563.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.525.1 (2.562.2) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.524.0 (2.562.2) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.523.2 (2.560.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.521.1 (2.558.5) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.521.0 (2.558.2) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.513.0 (2.545.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.501.0 (2.522.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.505.0 (2.531.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Nothing published for this version
Nothing published for this version
Speakeasy CLI 1.498.1 (2.518.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.498.0 (2.518.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.493.0 (2.512.4) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.488.0 (2.506.0) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
server_url settings in the client usage.
To set the custom URL for the client, use the the server_url parameter in a given operation:elements = client.general.partition(
request=operations.PartitionRequest(
partition_parameters=shared.PartitionParameters(
files=shared.Files(
content=doc_file,
file_name="your_document.pdf",
),
strategy=shared.Strategy.FAST,
)
),
server_url="your_server_url",
)
Nothing published for this version
Speakeasy CLI 1.468.6 (2.493.13) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.445.2 (2.461.4) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.441.1 (2.461.2) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.424.0 (2.445.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.422.1 (2.438.15) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.418.1 (2.438.3) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.410.0 (2.434.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
partition_async for a non blocking alternative to partitionSpeakeasy CLI 1.405.6 (2.428.1) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.402.14 (2.422.22) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Speakeasy CLI 1.401.2 (2.421.3) https://github.com/speakeasy-api/speakeasy
Based on:
Publishing Completed
Your coding agent can read these notes before it upgrades. Set up the MCP server →