Changelog
SDK release history and version notes.
load_xarray()andload_dataframe()now raiseSubscriptionFailedErrorwhen the subscription's status isfailed, instead of warning and returning an empty-looking result.failedis terminal, so there is nothing to load; the error message carries the subscription ID and the provider's own explanation fromstatus_message(or "The provider returned no detail." when none was given).pending,processingandpartialsubscriptions still emit theUserWarningintroduced in 0.1.19 and return the data that exists. Catchcecil.errors.SubscriptionFailedError(a subclass ofcecil.errors.Error) if your code loads subscriptions whose status you have not checked.
- Added
statusandstatus_messageto theSubscriptionmodel.statusis one ofpending(created, no data yet),processing(data arriving),completed(everything the dataset should have by now is delivered; later time steps such as a new quarter still arrive as appends),partial(some data landed but the subscription will not complete) orfailed(no usable data).status_messageisNoneunless there is something to say — the provider's own error text, or how long the pipeline has been quiet. Both areNoneon API responses that predate the field. load_xarray()andload_dataframe()now emit aUserWarningwhen the subscription's status is notcompleted, so a valid-looking but incomplete dataset (for example 2 of 20 variables a few minutes after creation) is no longer silent. Nothing is raised; the data is returned as before.create_webhook()accepts an optionaleventslist to choose which event types the webhook receives:subscription.delivered,subscription.failed,subscription.completed. Omit it to receive all three. Existing webhooks keep receivingdeliveredandfailedonly; recreate one witheventsto addcompleted. TheWebhookmodel gainsevents.
- Added
dataset_publicationanddataset_current_publicationto theSubscriptionmodel.dataset_publicationis the publication of the dataset your subscription was created under and never changes;dataset_current_publicationis the dataset's publication now. When the two differ, a newer publication exists and you can create a new subscription to pick it up (create_subscription(..., allow_duplicate=True)). Both areNonefor subscriptions the API has not pinned. load_xarray()andload_dataframe()now attach both values to the returned object's.attrs, next todataset_idandsubscription_id. This adds one lightweight request per load. Note that pandas.attrsdoes not survive every DataFrame operation; theSubscriptionreturned byget_subscription()is the source of truth.
- Fixed
load_xarray()failing withValueError: cannot convert float NaN to integerwhen a dataset declares an integer band with no nodata value (first seen on Biomass Atlascomputed). Such bands are now returned without a_FillValue; every stored value is data. Float bands without a declared nodata still default to NaN, and bands with a declared nodata are unchanged. Biomass Atlas users should upgrade to this version to useload_xarray().
create_subscription()no longer silently creates a duplicate: if you already have an active subscription for the same AOI and dataset, the API returns an error naming the existing subscription, raised ascecil.errors.DuplicateSubscriptionError. Pass the newallow_duplicate=Trueparameter to create one deliberately (for example, to pick up a new dataset version), or archive the old subscription first.create_aoi()with a geometry identical to one of your existing AOIs now returns the existing AOI instead of creating a duplicate, so re-running a registration script converges on the same IDs. Passing a differentexternal_refstill creates a separate AOI.- Added optional
scaleandoffsetto the datasetVariablemodel: variables whose stored values are packed now expose the packing in dataset metadata (get_dataset()/list_datasets()), matching the dataset pages.
- Widened the
pyarrowdependency range to allow 23.x (previously pinned below 23), so new installs pick up pyarrow 23.0.1, which includes a high-severity security fix. Upgrading is recommended but not required — no SDK behaviour changes.
- Added
get_usage(): your organisation's subscription and AOI counts and subscribed hectares, all-time and for the current calendar month, alongside the monthly subscription limit (and, for unverified organisations, the account caps). Requires the corresponding API release.
- Improved
load_dataframe()performance for self-hosted datasets: the parquet footer is now read once per file instead of twice (up to ~3s faster per call on wide datasets). - Added optional
columnsparameter toload_dataframe()to load a subset of columns (self-hosted datasets only);geometryis always included. load_xarray()now appliesscale_factor/add_offsetfor bands that declare them in the dataset file schema: values are returned as physical float32 with NaN nodata, and the packing metadata moves to each variable's.encoding. Passmask_and_scale=Falseto get raw packed values with the truescale_factor/add_offsetas attributes instead. Bands without a declared scale/offset are unaffected.- Fixed
load_xarray()stamping the first file'sscale_factor/add_offsetattributes onto every variable; variables without a declared scale/offset no longer carry these attributes. - Added
geometry_typeandlocation_countto theAOImodel (returned by the API since 2026-08-20).
- Improves
load_dataframe()compatibility with more vector dataset types across different coordinate reference systems.
- Changed
load_dataframe()to return GeoDataframe format. - Upgraded Python required version to
3.11.
- Added
get_dataset(). - Added all details to
Dataset. - Improved error handling.
- Made
external_refnullable forSubscriptionandAOI. - Renamed
get_organisation_settings()toget_settings(). - Renamed
update_organisation_settings()toupdate_settings().
- Changed
load_dataframe()to retry when failing to load files from bucket.
Webhook improvements
- Added
list_webhooks(). - Added
get_webhook(). - Renamed
webhook_configure()tocreate_webhook(). - Changed
delete_webhook()to receive anidparam.
Archive/restore AOI
- Added
archive_aoi(). - Added
restore_aoi(). - Changed
list_aois()to accept an optionalarchivedparam.
Archive/restore subscription
- Added
archive_subscription(). - Added
restore_subscription()within the grace period. - Changed
list_subscriptions()to accept an optionalarchivedparam.
- Added
configure_webhook(). - Added
delete_webhook(). - Added
HTTPErrorandSDKError. - Improved error handling.
- Added
list_datasets().
- Changed
load_dataframe()to reset dataframe index after concatenation.
- Updated error handling to handle HTTP 403 Forbidden errors.
- Renamed
AOIRecordtoAOI.
- Changed
load_dataframe()to return empty dataframe when no data is available.
- Updated dependencies.
- First release.