Skip to content

feat!: add Server Actor client and sync with Apify OpenAPI spec v2-2026-11-04T151257Z - #22

Merged
Pijukatel merged 7 commits into
masterfrom
claude/blissful-johnson-3x9r01
Nov 9, 2026
Merged

Pijukatel merged 7 commits into
masterfrom
claude/blissful-johnson-3x9r01

Conversation

@Pijukatel

@Pijukatel Pijukatel commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Syncs the .NET client with OpenAPI spec v2-2026-11-04T151257Z (apify/apify-docs#3083, #3084, #3152) and apify-client-js #1179, #1187, #1188, #1190 and #1197. The client version goes to 0.9.0 (breaking: PaginationList.Count has a new meaning).

Spec sync

  • The embedded schemas are regenerated. The only response-schema change is actorPath on Actor versions and builds.
  • New model properties: ActorVersion.ActorPath, Actor.StandbyUrl, Actor.ActorStandby, Actor.TaggedBuilds and Build.ActorDefinition.

Server Actors (JS #1179)

  • ActorClient.Server() returns an ActorServerClient with RequestAsync, GetUrlAsync and GetOpenApiSpecAsync.
  • New types: ActorServerRequestOptions, ActorServerResponse and ActorServerException.
  • The token goes in X-Apify-Authorization.
  • Every response is returned, including error statuses.
  • Only 429 and 503 are retried. Network errors and timeouts are not.
  • Redirects are not followed.
  • The JS client's deprecated standby() alias is not ported, because the .NET client never had a Standby() method.

Redirect handling (new public API)

  • ApifyRequestOptions.FollowRedirects is set on requests that must not follow redirects.
  • HttpClientTransport accepts an optional second HttpClient, with redirects disabled, for those requests.
  • A transport that wraps your own HttpClient without that second client throws InvalidOperationException for such a request. This is documented.

Page Count (JS #1187, #1190), breaking

This matches the reference client and the Rust, Go, Java and PHP clients.

  • On a dataset items page, PaginationList.Count is the larger of X-Apify-Pagination-Count (rows scanned) and the number of items returned.
  • On every other list, Count is the count the API reports, as in the JS, Java and Go clients. It equals the number of items, except on the Store listing, where it can be larger.
  • Offset iteration steps by Count, capped at the requested limit. Dataset iteration stops when Count is 0, as in JS.
  • IReadOnlyCollection<T>.Count, LINQ Count(), enumeration and the indexer still count only the items returned. Code that indexes a page up to Count must use Items.Count instead. The CHANGELOG and docs say this.
  • The iteration docs are updated (JS #1190).

Signed URL validity (JS #1188)

  • A zero or negative expiresInSecs for signed public URLs now throws before any request is sent.

CI

  • The CI and publish workflows run the unit tests with TZ=Asia/Tokyo, and fail when a test filter matches no tests.

…and port the Server Actor client from apify-client-js

Adds ActorClient.Server() with request, URL and OpenAPI specification helpers, reports scanned rows as the Count of dataset item pages, adds actorPath on Actor versions, and regenerates the embedded response schemas.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

Claude-Session: https://claude.ai/code/session_017ocuAGnQ7tWM7EdPahZPAA
…ew of the Server Actor client

Adds PaginationList.ScannedRows, forwards Content-* request headers, rejects a non-positive expiresInSecs for signed public URLs, converts dates and lists in server request queries, hardens build number parsing and fixes documentation references.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

Claude-Session: https://claude.ai/code/session_017ocuAGnQ7tWM7EdPahZPAA
…TC and define the content header names once

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

Claude-Session: https://claude.ai/code/session_017ocuAGnQ7tWM7EdPahZPAA
@Pijukatel Pijukatel added adhoc Ad-hoc unplanned task added during the sprint. t-tooling Issues with this label are in the ownership of the tooling team. labels Nov 6, 2026 — with Claude
@apify-service-account apify-service-account added the tested Temporary label used only programatically for some analytics. label Nov 6, 2026
…ages

Count of a page from DatasetClient.ListItemsAsync is now the larger of the rows the API scanned (X-Apify-Pagination-Count) and the items returned, as count in apify-client-js #1187. Offset iteration steps by it, capped at the requested limit. Removes the unreleased ScannedRows property, marks the change as breaking in the CHANGELOG and updates docs and tests.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017ocuAGnQ7tWM7EdPahZPAA
…ocument the interface count

Listing pages now carry the count the API reports (the Store listing can drop entries after counting them), the iterator steps by it, the CHANGELOG and docs say that the list's own count still covers the items only, and the tests are updated.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017ocuAGnQ7tWM7EdPahZPAA
@Pijukatel Pijukatel changed the title feat: add Server Actor client and sync with Apify OpenAPI spec v2-2026-11-04T151257Z feat!: add Server Actor client and sync with Apify OpenAPI spec v2-2026-11-04T151257Z Nov 9, 2026
@Pijukatel
Pijukatel merged commit 779b691 into master Nov 9, 2026
4 checks passed
@Pijukatel
Pijukatel deleted the claude/blissful-johnson-3x9r01 branch November 9, 2026 11:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adhoc Ad-hoc unplanned task added during the sprint. t-tooling Issues with this label are in the ownership of the tooling team. tested Temporary label used only programatically for some analytics.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants