API reference
The Tend API is a JSON REST API at https://api.tendcomputer.com/v2. Authenticate with Authorization: Bearer <key>. Current API version: 2026-03-01.
Resources
Errors
| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request body or query parameters could not be parsed or failed validation. The details field lists the offending fields. |
| 400 | invalid_cron_expression | The cron expression is malformed, or the timezone is not a valid IANA zone name. |
| 401 | missing_api_key | No Authorization header was sent, or it was not in the form Bearer <key>. |
| 401 | invalid_api_key | The key does not exist, has been revoked, or does not begin with tnd_live_ or tnd_dev_. |
| 403 | insufficient_scope | The key is valid but lacks the scope required for this operation, such as writing schedules with a read-only key. |
| 404 | resource_not_found | The job, schedule, or run ID does not exist in this project and environment. Keys from tnd_dev_ and tnd_live_ cannot see each other's resources. |
| 409 | idempotency_conflict | An Idempotency-Key was reused within 24 hours with a different request body. |
| 409 | schedule_name_taken | A schedule with this name already exists in the project. Schedule names are unique per environment. |
| 413 | payload_too_large | The job payload exceeds 256 KB after JSON encoding. |
| 422 | interval_too_short | The schedule would fire more often than once every 30 seconds, which is the minimum interval. |
| 422 | run_at_in_past | The requested run_at time is more than 60 seconds in the past. Small clock skew is tolerated; yesterday is not. |
| 429 | rate_limit_exceeded | The project exceeded its requests-per-minute limit. Retry after the number of seconds in the Retry-After header. |
| 429 | quota_exceeded | The monthly run quota for a Hobby project has been reached. Paid plans are billed for overage instead and never receive this error. |
| 503 | region_unavailable | The requested region is temporarily unable to accept new jobs. Retry, or omit region to route to the default. |