Skip to documentation
Browse documentation

Changelog

Track public API and capability-contract changes.

View raw

This page records customer-visible API changes and deprecations, newest first.

Scope: entries begin at 2026-09-01. Earlier releases were not maintained in a customer-facing changelog.

2026-09-21 — Additive API changes: error envelope, credit ceiling, /v1

Every change here is additive. No field, status code or error code was removed or renamed, and existing integrations need no change.

  • Validation failures (HTTP 422) now also carry the standard envelope: error.code: "invalid_input", error.message and error.fields. The original top-level errors map is unchanged and stays.
  • POST /execute accepts an optional credit ceiling, max_credits in the body or an X-Max-Credits header. A job priced above it is refused with credit_limit_exceeded before acceptance.
  • Every REST path is also served under /v1 (for example POST /v1/execute). The unversioned paths remain supported.
  • A capability that cannot be served at admission now returns HTTP 503 temporarily_unavailable instead of 500 internal_error. MCP reports it with retryable: false.
  • MCP calls without an operation_key are deduplicated by request ID for about 15 minutes rather than indefinitely, so a later session that reuses a small request ID starts a new job. Calls with an operation_key are unchanged.

2026-09-01 — Durable results and fail-fast execution status

  • Results containing escaped NUL characters now save successfully.
  • A result that cannot be saved produces a terminal failure instead of leaving the job marked as running.
  • Polling and Prefer: wait=N return execution_lost promptly when a request ends without a result.
  • Automatic retry recovery prevents duplicate execution and unintended cancellation.

This platform-wide change applies to every scraper and requires no pagination or storage workaround in customer code.

2026-09-01 — Pinterest section backups (v1.4.11)

  • Added pinterest.section-pins.list for bounded, resumable section downloads.
  • pinterest.section.get now fails closed for sections above 1,000 pins instead of returning a potentially incomplete result as successful.
  • Section pages accept Pinterest's verified maximum of 50 raw records and expose pagination.next_cursor, pagination.has_more, pagination.retrieved_total, and an explicit completion outcome.
  • If Pinterest ends a large traversal at its observed ~2,000-item ceiling, the last page is marked outcome.status: incomplete instead of complete.

Existing integrations using pinterest.section.get for large sections must move to pinterest.section-pins.list and continue until has_more is false.

Credit prices and plans: Upscrape pricing