All notable changes to the Rust Apify API client are documented here. The format is based on Keep a Changelog and the project adheres to Semantic Versioning.
- Bumped
API_SPEC_VERSIONtov2-2026-07-13T092445Z. The spec delta (added402/408error responses on the resurrect and run-sync-get-dataset-items endpoints, and relaxed therequiredconstraints on the run/build/key-value-store/webhook stats sub-objects) needs no code change: error responses are handled generically and response models are forward-compatible. - Bumped crate version to
0.6.1.
- Lazy async pagination iterators on every collection client, via a shared generic
ListIterator<T>(exported at the crate root). Newiterate()methods on the actor, actor version, environment-variable, build, run, dataset, key-value-store, request-queue, schedule, task, webhook, and webhook-dispatch collection clients, plusDatasetClient::iterate_items()for dataset items. Each yields one item at a time, fetching pages on demand — the idiomatic counterpart to the reference client's async-iterable list results. The options'limitcaps the total number of items yielded (matching the reference client), andListIterator::with_chunk_sizesets the per-request page size. KeyValueStoreClient::iterate_keys(), returning a cursor-basedKeyValueStoreKeysIteratorthat auto-paginates a store's keys viaexclusiveStartKey/nextExclusiveStartKey(the auto-paginating counterpart tolist_keys, matching the reference client'slistKeys()async-iterable).- Re-exported
StoreActorIteratorat the crate root.
- Bumped
API_SPEC_VERSIONtov2-2026-07-10T105921Z. The spec delta (added401/402error responses and relaxed field nullability/optionality) needs no code change: error responses are handled generically and response models are forward-compatible. StoreCollectionClient::iteratenow uses the sharedListIterator, andStoreActorIteratoris a type alias forListIterator<ActorStoreListItem>. As part of this,store().iterate()'soptions.limitchanged from a per-page size (0.5.0) to a cap on the total number of items yielded, for consistency with the reference client and the otheriterate()methods; set the per-page size withListIterator::with_chunk_sizeinstead. TheStoreActorIteratortype alias itself is unchanged.- Corrected the
src/models.rsmodule doc to describe forward-compatibility accurately. - Documented
ApifyClient::set_status_messageandBuildClient::get_openapi_definitionin thedocs/pages and README. - Simplified the total-cap truncation in the offset and key-value-store iterators (removed a
dead
.max(0)clamp on an already-positive remaining count). - Bumped crate version to
0.6.0.
KeyValueStoreClient::get_recordsandGetRecordsOptions. TheGET /v2/key-value-stores/{storeId}/recordsendpoint is not implemented by the reference JS client, so it is out of scope; its removal corrects an earlier scope violation.
- Documented all
ActorStartOptionsfields indocs/actors.md(added the previously undocumentedrestart_on_error,force_permission_level, andwebhooks), and linked the taskstart/callrows indocs/tasks.mdto that field table. - Listed
JSONLin thedownload_itemsformat summary indocs/storages.mdfor consistency with theDownloadItemsFormatvariant list. - Noted why the request-queue iterator is named
paginate_requests(mirrors the reference JSpaginateRequests) rather than aniterate_*verb. - Made the
run_store_actorexample resilient to Store ranking shifts by falling back to the well-knownapify/hello-worldidentifier, and cleaned upOptionoutput in theget_accountanditerate_storeexamples and thedocs/README.mdquick-start snippet.
RequestCompressionenum andApifyClientBuilder::request_compressionto select the request-body encoding: brotli (Content-Encoding: br, default) or gzip (Content-Encoding: gzip).
- The
User-AgentOS token now matches the reference client'sos.platform()value (darwin,win32,sunos) instead of Rust-native spellings (macos,windows,solaris). - Bumped crate version to
0.5.0.
- Request bodies of at least 1024 bytes are now brotli-compressed and sent with
Content-Encoding: br.
- Bumped
API_SPEC_VERSIONtov2-2026-07-08T143931Z. - Bumped crate version to
0.4.8.
- Bumped
API_SPEC_VERSIONtov2-2026-07-07T132551Z. - Bumped crate version to
0.4.7.
- Corrected the
last_run/LastRunOptionsrustdoc comments:originis now a documented query parameter on the last-run endpoints in the OpenAPI spec (the comments previously said it was undeclared). - Fixed the
README.mdmonthly_usagelink to point at the Users section ofdocs/misc.mdinstead of the Logs section.
- Rewrote earlier
CHANGELOG.mdentries to satisfy the changelog requirements: condensed narrative prose into short change bullets and removed cross-client references to sibling implementations, references to requirement-tracking issues, and out-of-scope / not-implemented notes. - Bumped crate version to
0.4.6.
- Bumped
API_SPEC_VERSIONtov2-2026-07-02T131926Z. - Bumped crate version to
0.4.5.
- Added
chronoto the extra-dependency install instructions. - Expanded the
DatasetListItemsOptions/DatasetDownloadOptionsandActorBuildOptionsfield lists into per-field descriptions, and corrected theoutput_fieldsdescription. - Removed a stray
get_statisticsbullet from the request-queue return-types list.
- Bumped
API_SPEC_VERSIONtov2-2026-07-01T115402Z. - Bumped crate version to
0.4.4.
- Bumped
API_SPEC_VERSIONtov2-2026-06-30T091455Z. - Bumped crate version to
0.4.3.
examples/get_account.rs: importchrono::Utcexplicitly so the snippet is self-contained.RunCollectionClient::list: added a rustdoc example for the two-argumentlist(ListOptions, RunListOptions)call.
- Bumped
API_SPEC_VERSIONtov2-2026-06-29T142258Z(no in-scope API surface change).
- Documentation now states the client is "official, but experimental" and AI-generated/AI-maintained (crate-level rustdoc
src/lib.rs,README.md,docs/README.md, and theCargo.tomldescription). - The crates.io publish workflow (
.github/workflows/rust-publish.yml) now authenticates with Trusted Publishing (OIDC) viarust-lang/crates-io-auth-action@v1instead of a storedCARGO_REGISTRY_TOKENsecret; the job gainsid-token: writepermission to mint the short-lived token.
ActorClient::last_run_with_optionsandTaskClient::last_run_with_options, plusLastRunOptions { status, origin }(re-exported at the crate root), adding anoriginfilter alongsidestatuson the last-run endpoints. The existinglast_run(status)delegates to it (additive).LogClient::get_with_options/stream_with_optionsandRunClient::get_streamed_log_with_options, plusLogOptions { raw }(re-exported), exposing the spec's optionalrawquery parameter on the log endpoints. The existing no-argument methods delegate with default options (additive).examples/raw_log.rs(covered by theTest examplesCI step) exercising the raw-log path end-to-end.- Tests:
log_get_sends_raw_query_param; a raw-log assertion in therun_actor_and_read_outputsintegration flow.
- Bumped
API_SPEC_VERSIONtov2-2026-06-25T142310Z. - Bumped crate version
0.3.0→0.4.0(minor; additive APIs above). - Tightened the
build_user_agentisAtHomecomment insrc/common.rs(no behaviour change).
- Documented the accepted
last_runoriginvalues (DEVELOPMENT,WEB,API,SCHEDULER) indocs/runs.mdand referenced them fromdocs/actors.md/docs/tasks.md; corrected theTaskClient::last_rundocstring example to"SCHEDULER"; showed anorigin-filtered call inexamples/run_and_last_run_storages.rs.
ListRequestsOptions.filter(forGET /v2/request-queues/{queueId}/requests) is nowOption<Vec<String>>serialized comma-joined, matching the spec (an array of the enum valueslocked/pending). Breaking change to that field's type.- The
User-AgentisAtHomeflag is now based solely on theAPIFY_IS_AT_HOMEenvironment variable.
- Bumped
API_SPEC_VERSIONtov2-2026-06-24T105326Z. - Bumped crate version
0.2.4→0.3.0(minor; breakingfiltertype change). RunMetamorphOptionsandRunChargeOptionsare now re-exported at the crate root (additive).- Documentation: the
log_redirectionexample now redirects a separate Actor's run log; added model field tables forTask/Schedule/Webhook/WebhookDispatch; alignedmonthly_usagedocs on the non-panickingValue::getidiom; hardened thelast_runexample against eventual consistency; documented the crate-root import surface and theAPIFY_TOKENconvention.
- Bumped
API_SPEC_VERSIONtov2-2026-06-23T113219Z. - Bumped crate version
0.2.3→0.2.4.
- CI: the manually triggered
Publish Rust client to crates.ioworkflow (.github/workflows/rust-publish.yml) now also tags the released commit and creates a matching GitHub release. The tag (vX.Y.Z) is derived from theCargo.tomlversion, validated as bare semver, and checked against existing local/remote tags; it is created beforecargo publish, and the GitHub release step is idempotent. Thedry_runinput skips tag and release creation.
- CI: a manually triggered (
workflow_dispatch)Publish Rust client to crates.ioworkflow (.github/workflows/rust-publish.yml) that publishes the crate to crates.io. It runs the format/clippy/build gate, acargo publish --dry-runcheck, thencargo publish. The registry token is read from theCARGO_REGISTRY_TOKENrepository secret. Adry_runinput allows a packaging-only run.
- Packaging: added the
homepagefield (https://apify.com) toCargo.toml. - Documentation: added the "experimental, AI-generated and AI-maintained" disclaimer to the crate-level rustdoc (
src/lib.rs),README.mdanddocs/README.md, and reworded theCargo.tomldescriptionaccordingly; documentedApifyClientError::as_api_error; removed dangling reference-style Markdown link brackets indocs/README.mdanddocs/misc.md; added a "Releasing" subsection to the README "Versioning" section.
- CI: added a standalone
Test examplesstep that runs theexamples/programs end-to-end against the live API and the in-documentation snippets as doctests;Run integration testsnow skips theexample_*tests (via--skip example_). - Documentation testing: the external
docs/pages are now compiled as doctests via#[doc = include_str!]insrc/lib.rs, so every in-documentationrustsnippet is verified. - Documentation: added response-model field tables for
ActorRun,Actor,Build, the shared storage-metadata fields ofDataset/KeyValueStore/RequestQueue, andUser, each with a runnableno_rundoctest.
ActorClient::validate_input_for_build— exposes the spec's optionalbuildquery parameter onPOST /v2/actors/{actorId}/validate-input. The existingvalidate_inputdelegates withNone.UserClient::monthly_usage_for_date— exposes the spec's optionaldatequery parameter onGET /v2/users/me/usage/monthly. The existingmonthly_usagedelegates withNone.- Integration tests:
get_monthly_usage_for_date; avalidate_input_for_buildcall added tobuild_actor_flow.
- Bumped
API_SPEC_VERSIONtov2-2026-06-18T095846Z.
validate_input/validate_input_for_buildno longer fail to parse the bare{ "valid": ... }response (new internalpost_action_rawhelper skipsdata-envelope unwrapping).UserClient::monthly_usage'sme-only guard error now namesmonthly_usageinstead of the delegatedmonthly_usage_for_date.
Initial release of the official Rust client for the Apify API.
- Resource-oriented async client (
ApifyClient+ApifyClientBuilder) mirroring the JavaScript reference client. - Resource clients for Actors, Actor builds, Actor runs, Actor tasks, datasets, key-value stores, request queues, schedules, webhooks, webhook dispatches, the Apify Store, users, Actor versions and environment variables, and logs.
- Convenience helpers:
actor.call/task.call(start + wait + run),run.wait_for_finishandbuild.wait_for_finish, dataset push/list items, key-value store records, request queue operations, log retrieval and streaming (log redirection), and lazy iteration of Apify Store Actors (store().iterate()). - Replaceable HTTP transport via the
HttpBackendtrait with a default reqwest backend. - Automatic Bearer authentication, the mandated
User-Agentheader, and transparent retries with exponential backoff on429/5xx/network errors. - Public version constants
CLIENT_VERSIONandAPI_SPEC_VERSION(v2-2026-06-16T064758Z). - Request-queue lock lifecycle:
list_requests,list_and_lock_head,prolong_request_lock,delete_request_lock,unlock_requests, plusbatch_add_requests/batch_delete_requests. - Dataset
download_items(JSON/CSV/XLSX/XML/RSS/HTML export) andget_statistics. KeyValueStoreClient::get_records— downloads all records from a store as a ZIP archive, withcollection/prefix/signaturefiltering viaGetRecordsOptions.- Build
get_openapi_definition. ApifyClient::set_status_messagefor setting the current run's status from inside an Actor.- Public, shareable resource URLs with HMAC-SHA256 signing for private resources:
DatasetClient::create_items_public_url,KeyValueStoreClient::get_record_public_url/create_keys_public_url, plus a configurablepublic_base_url. - Format-specific dataset export options via
DatasetDownloadOptions(attachment,bom,delimiter,skip_header_row,xml_root,xml_row). - Full parameter coverage on list/start endpoints (
my/sortByfor Actors;webhooks,restartOnError,forcePermissionLevelfor run start;unwind/flatten/view/etc. for dataset items;includeUnrunnableActorsfor store;attachmentfor KVS records). - Offline unit tests (mock
HttpBackend) covering retry counting, 429/5xx retry vs. 4xx no-retry, network-error retry, backoff, error-envelope parsing and 404→None mapping. - Integration test suite covering simple GETs and full CRUD flows for each resource.
- GitHub Actions workflow running formatting, clippy, build and integration tests.
- Percent-encode URL path segments (key-value-store record keys, request-queue request IDs) so keys containing
/,?,#, spaces or non-ASCII no longer produce malformed URLs. get_recordnow sendsattachment=true, matching the reference client'sgetRecord.get_record_with_optionstakes aGetRecordOptions { attachment, signature };attachmentdefaults totruewhen unset.- Request-queue request pagination (
paginate_requests/RequestQueueRequestsIterator) now feeds the opaquenextCursorback as thecursorquery parameter on subsequent pages, matching the reference client (previously pagination broke past the first page). User-Agent{language version}now reports the real compiler version captured at build time (viabuild.rsrunningrustc --version) instead ofRust/unknown.
- Added previously-missing spec query parameters: dataset items
outputFields(list/download) andfeedTitle/feedDescription(download); key-value-store keyscollection/signature; key-value-store recordsignature(viaGetRecordOptions); request-queue requestscursor/filter(viaListRequestsOptions); storage collection listunnamed/ownership(viaStorageListOptions); run collection liststartedAfter/startedBefore(viaRunListOptions). get_record_with_optionssignature changed to takeGetRecordOptions(wasattachment: bool), exposing the specsignatureparam for reading records from private stores.ActorClient::default_buildnow takes await_for_finish: Option<i64>argument, matching the reference client'sdefaultBuild(options).- Backoff doubling factor extracted to a named constant.
RunClient::chargenow takesRunChargeOptions { event_name, count, idempotency_key }and always sends anidempotency-keyheader (auto-generated when omitted), so a transport-retried charge is applied at most once.RunClient::metamorphnow takesRunMetamorphOptions { build, content_type }.RunResurrectOptionsgainedmax_items,max_total_charge_usd, andrestart_on_error.RunListOptions::statusis nowVec<String>(sent comma-separated).RunClient::abortnow takesgracefully: Option<bool>instead ofbool(Noneomits the query parameter).RequestQueueClient::batch_add_requestsnow splits inputs larger than the API's 25-per-call limit into chunks and merges the per-chunkprocessedRequests/unprocessedRequestsresults.