Changelog
2026.09.1· September 10, 2026Run annotations and faster log search
- Added
annotationson runs: attach up to 20 key-value pairs to a run from your handler and filter by them in the dashboard and API. - Run log search is now roughly 3x faster for projects with more than 10 million retained runs.
- Fixed a bug where
next_run_atcould show a value up to 30 seconds stale on schedules using the six-field cron form.
- Added
2026.08.2· August 19, 2026Region pinning for individual jobs
- Scale and Enterprise projects can now set
regionon a per-job basis, overriding the project default. - Added
region_unavailable(503) as a documented error code with a recommended retry strategy. - Node.js SDK 2.9.0 adds typed errors for every documented error code.
- Scale and Enterprise projects can now set
2026.07.1· July 8, 2026Webhook signing secret rotation
- Signing secrets can now be rotated with a 24-hour overlap period during which both the old and new secret are valid.
- Deliveries during an overlap window include two
v1values in theTend-Signatureheader, one per secret. - Python SDK 2.7.1 updates
verify_signatureto accept multiple secrets.
2026.06.1· June 16, 2026Global concurrency counters
- Concurrency keys are now enforced globally across regions, with counters reconciled every 10 seconds.
- Added
GET /v2/concurrency/{key}to inspect the current count, limit, and queued runs for a key. - Dashboard now shows queued-behind-concurrency time separately from execution time on each run.
2026.05.1· May 13, 2026Bulk cancel and reschedule
- Added
POST /v2/jobs/cancelaccepting up to 1,000 job IDs or a filter expression. - Delayed jobs can now be rescheduled with
PATCH /v2/jobs/{id}until the moment they start executing. - Go SDK 2.4.2 fixes context cancellation handling in long-running list iterators.
- Added
2026.04.1· April 7, 2026Smarter retry controls
- Added
permanent_failure_codeson jobs and schedules: responses with a listed status code stop retries immediately. - Backoff cap is now configurable per job from 1 to 86400 seconds; the default remains 3600.
- Maximum retry attempts raised from 15 to 25 on all paid plans.
- Added
2026.03.1· March 1, 2026API version 2026-03-01
- New API version 2026-03-01 becomes the default for new projects. Existing projects stay pinned to their current version until you change it.
- Cursor pagination responses now always include
has_more, removing the need to make a final empty request. - Error responses now include a
request_idfield matching theTend-Request-Idresponse header.
2026.01.2· January 22, 2026Idempotency window extended
- The
Idempotency-Keywindow has been extended from 12 hours to 24 hours on all plans. - Reusing a key with a different body now returns a 409
idempotency_conflicterror that includes the ID of the original request. - Dashboard adds a tab showing recent idempotent replays for debugging duplicate-looking traffic.
- The