Request scheduling
Section titled “Request scheduling”Schedules run a stored cURL request on a cron-based interval. They are persistent (they survive server restarts), can be enabled or disabled without being deleted, and accept the same request configuration as the one-shot request endpoint. Use these endpoints to register recurring jobs, inspect them, change their cron expression or request, pause or resume them, and remove them.
Common uses include periodic API data collection, regular health checks and monitoring, scheduled report generation, and automated backups or synchronisation.
Schedules
Section titled “Schedules”GET /api/v1/curl/schedule
Section titled “GET /api/v1/curl/schedule”Retrieve every recurring schedule, sorted by creation time (newest first). The response shows each schedule’s configuration, its next scheduled run, and whether it is currently enabled.
Schedule states
- Enabled: active, fires at the next scheduled time.
- Disabled: paused, does not fire (can be re-enabled with
toggle).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | No | 1-based page number |
limit | query | integer | No | Items per page; when omitted, the handler returns all items |
Response
Section titled “Response”{ "items": [ { "created_at": "2024-01-15T10:00:00Z", "cron": "0 0 9 * * MON-FRI", "enabled": true, "id": "770e8400-e29b-41d4-a716-446655440000", "last_run": "2024-01-15T09:00:00Z", "next_run": "2024-01-16T09:00:00Z", "request": { "method": "GET", "url": "https://api.example.com/daily-report" } }, { "created_at": "2024-01-14T15:30:00Z", "cron": "0 0 * * * *", "enabled": false, "id": "880e8400-e29b-41d4-a716-446655440111", "last_run": "2024-01-15T10:00:00Z", "next_run": null, "request": { "method": "GET", "url": "https://health-check.example.com/ping" } } ], "meta": { "limit": 50, "page": 1, "total": 2 }}The query string is malformed, for instance because page or limit is not a non-negative integer.
{ "code": "INVALID_PARAMETER", "error": "Invalid request: invalid query string: Query deserialize error: invalid digit found in string"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INVALID_PARAMETER | Invalid request | A parameter, query value or JSON body is missing, malformed or out of range | Check the message for the offending field and fix the request; retrying unchanged fails again |
The server runs in origin-list CORS mode and the request’s Origin header is not on the list.
{ "code": "ORIGIN_NOT_ALLOWED", "error": "Origin not allowed"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
ORIGIN_NOT_ALLOWED | Origin rejected | The server runs in origin-list CORS mode and the request’s Origin header is not on the list; the request is refused before it reaches a handler | Call from an allowed origin, or add the origin to the server’s --cors list |
The service failed to process the request.
{ "code": "STORAGE_ERROR", "error": "IO error: No space left on device (os error 28)"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
STORAGE_ERROR | Storage failure | Reading or writing the service’s storage directory failed | Retry; check the storage directory’s permissions and free space if it persists |
INTERNAL_ERROR | Service-side failure | The service itself failed (a corrupt record, a worker join, shutdown in progress) | Retry; check the server logs if it persists |
import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
for await (const schedule of client.curl.schedules.listIterator()) { // ...}curl -X GET 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com/api/v1/curl/schedule' \ -H "Authorization: Bearer $HOODY_TOKEN"Closed error-code enum
Section titled “Closed error-code enum”The error response schema’s code field is a closed enum. The codes tied to specific statuses above appear in the corresponding tab. The full set of values the field may take is:
| Code |
|---|
INVALID_PARAMETER |
INVALID_URL |
INVALID_CRON_EXPRESSION |
PAYLOAD_TOO_LARGE |
ORIGIN_NOT_ALLOWED |
JOB_NOT_FOUND |
JOB_RESULT_NOT_READY |
SESSION_NOT_FOUND |
FILE_NOT_FOUND |
SCHEDULE_NOT_FOUND |
SCHEDULE_EXISTS |
REQUEST_TIMEOUT |
JOB_NOT_FINISHED |
JOB_CANCELLED |
STORAGE_ERROR |
INTERNAL_ERROR |
SSE_PARSE_ERROR |
UPSTREAM_ERROR |
DNS_RESOLUTION_FAILED |
RESPONSE_TOO_LARGE |
QUEUE_FULL |
SSE_CAPACITY_EXHAUSTED |
UPSTREAM_TIMEOUT |
NOT_FOUND |
METHOD_NOT_ALLOWED |
REQUEST_HEADERS_TOO_LARGE |
GET /api/v1/curl/schedule/{id}
Section titled “GET /api/v1/curl/schedule/{id}”Retrieve complete details for a single schedule: its id, cron expression, request configuration, last_run, next_run, and current enabled state.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Unique schedule identifier (UUID format) |
Response
Section titled “Response”The schedule’s full details. The example below is taken from the spec; the schema requires created_at and request, which the example omits.
{ "cron": "0 0 9 * * MON-FRI", "enabled": true, "id": "770e8400-e29b-41d4-a716-446655440000"}The server runs in origin-list CORS mode and the request’s Origin header is not on the list.
{ "code": "ORIGIN_NOT_ALLOWED", "error": "Origin not allowed"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
ORIGIN_NOT_ALLOWED | Origin rejected | The server runs in origin-list CORS mode and the request’s Origin header is not on the list; the request is refused before it reaches a handler | Call from an allowed origin, or add the origin to the server’s --cors list |
The schedule id does not exist, or the path parameter is not a UUID.
{ "code": "SCHEDULE_NOT_FOUND", "error": "Scheduled job not found: 770e8400-e29b-41d4-a716-446655440000"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
SCHEDULE_NOT_FOUND | Schedule does not exist | No schedule has this id | List schedules with schedules.list |
The service failed to process the request.
{ "code": "STORAGE_ERROR", "error": "IO error: No space left on device (os error 28)"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
STORAGE_ERROR | Storage failure | Reading or writing the service’s storage directory failed | Retry; check the storage directory’s permissions and free space if it persists |
INTERNAL_ERROR | Service-side failure | The service itself failed (a corrupt record, a worker join, shutdown in progress) | Retry; check the server logs if it persists |
import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
const schedule = await client.curl.schedules.get('770e8400-e29b-41d4-a716-446655440000');curl -X GET 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com/api/v1/curl/schedule/770e8400-e29b-41d4-a716-446655440000' \ -H "Authorization: Bearer $HOODY_TOKEN"Closed error-code enum
Section titled “Closed error-code enum”The error response schema’s code field is a closed enum. The codes tied to specific statuses above appear in the corresponding tab. The full set of values the field may take is:
| Code |
|---|
INVALID_PARAMETER |
INVALID_URL |
INVALID_CRON_EXPRESSION |
PAYLOAD_TOO_LARGE |
ORIGIN_NOT_ALLOWED |
JOB_NOT_FOUND |
JOB_RESULT_NOT_READY |
SESSION_NOT_FOUND |
FILE_NOT_FOUND |
SCHEDULE_NOT_FOUND |
SCHEDULE_EXISTS |
REQUEST_TIMEOUT |
JOB_NOT_FINISHED |
JOB_CANCELLED |
STORAGE_ERROR |
INTERNAL_ERROR |
SSE_PARSE_ERROR |
UPSTREAM_ERROR |
DNS_RESOLUTION_FAILED |
RESPONSE_TOO_LARGE |
QUEUE_FULL |
SSE_CAPACITY_EXHAUSTED |
UPSTREAM_TIMEOUT |
NOT_FOUND |
METHOD_NOT_ALLOWED |
REQUEST_HEADERS_TOO_LARGE |
POST /api/v1/curl/schedule
Section titled “POST /api/v1/curl/schedule”Create a new cron-based schedule. Once accepted, the schedule is persistent and will fire at each cron occurrence while it is enabled.
Sending the same cron, request, job_name, and enabled again does not create a duplicate: the existing schedule’s id is returned with a 200, so a retried create still produces one schedule.
Request body
Section titled “Request body”| Name | Type | Required | Description |
|---|---|---|---|
cron | string | Yes | Six-field cron expression: second minute hour day month weekday |
request | object | Yes | cURL request configuration; validated the same as for one-shot execution |
Response
Section titled “Response”A schedule with the same cron, request, job_name, and enabled already exists, so nothing is created and the existing schedule’s id is returned.
Schedule created; it is active unless enabled was false.
The cron expression or request configuration is invalid.
{ "code": "INVALID_CRON_EXPRESSION", "error": "Invalid cron expression: invalid field"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INVALID_CRON_EXPRESSION | Invalid cron expression | The cron expression does not parse, or an enabled schedule’s expression has no occurrence in the future | Use the six-field format second minute hour day month weekday, e.g. 0 0 9 * * MON-FRI |
INVALID_PARAMETER | Invalid request | A parameter, query value or JSON body is missing, malformed or out of range | Check the message for the offending field and fix the request; retrying unchanged fails again |
INVALID_URL | Invalid or refused URL | The target URL is malformed, uses an unsupported scheme, or is refused by the outbound URL policy (for example a private address) | Provide a complete public http(s) URL |
The server runs in origin-list CORS mode and the request’s Origin header is not on the list.
{ "code": "ORIGIN_NOT_ALLOWED", "error": "Origin not allowed"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
ORIGIN_NOT_ALLOWED | Origin rejected | The server runs in origin-list CORS mode and the request’s Origin header is not on the list; the request is refused before it reaches a handler | Call from an allowed origin, or add the origin to the server’s --cors list |
The request body exceeds the server’s inbound limit (--max-request-body-bytes).
{ "code": "PAYLOAD_TOO_LARGE", "error": "Request body too large: JSON payload (20000000 bytes) is larger than allowed (limit: 16777216 bytes)."}| Error Code | Title | Description | Resolution |
|---|---|---|---|
PAYLOAD_TOO_LARGE | Request body too large | The request body exceeds the server’s inbound limit (--max-request-body-bytes) | Send a smaller body, or raise the limit on the server |
The service failed to process the request.
{ "code": "STORAGE_ERROR", "error": "IO error: No space left on device (os error 28)"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
STORAGE_ERROR | Storage failure | Reading or writing the service’s storage directory failed | Retry; check the storage directory’s permissions and free space if it persists |
INTERNAL_ERROR | Service-side failure | The service itself failed (a corrupt record, a worker join, shutdown in progress) | Retry; check the server logs if it persists |
| Error Code | Title | Description | Resolution |
|---|---|---|---|
SCHEDULE_EXISTS | Schedule already exists | A schedule with the same cron and request already exists, with another job_name or enabled. Sending the same create again answers 200 with that schedule’s id instead | Update the existing schedule (updateSchedule or toggleSchedule), or delete it first |
import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.curl.schedules.create({ cron: '0 0 9 * * MON-FRI', request: { method: 'GET', url: 'https://api.example.com/daily-report', },});curl -X POST 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com/api/v1/curl/schedule' \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "cron": "0 0 9 * * MON-FRI", "request": { "method": "GET", "url": "https://api.example.com/daily-report" } }'Closed error-code enum
Section titled “Closed error-code enum”The error response schema’s code field is a closed enum. The codes tied to specific statuses above appear in the corresponding tab. The full set of values the field may take is:
| Code |
|---|
INVALID_PARAMETER |
INVALID_URL |
INVALID_CRON_EXPRESSION |
PAYLOAD_TOO_LARGE |
ORIGIN_NOT_ALLOWED |
JOB_NOT_FOUND |
JOB_RESULT_NOT_READY |
SESSION_NOT_FOUND |
FILE_NOT_FOUND |
SCHEDULE_NOT_FOUND |
SCHEDULE_EXISTS |
REQUEST_TIMEOUT |
JOB_NOT_FINISHED |
JOB_CANCELLED |
STORAGE_ERROR |
INTERNAL_ERROR |
SSE_PARSE_ERROR |
UPSTREAM_ERROR |
DNS_RESOLUTION_FAILED |
RESPONSE_TOO_LARGE |
QUEUE_FULL |
SSE_CAPACITY_EXHAUSTED |
UPSTREAM_TIMEOUT |
NOT_FOUND |
METHOD_NOT_ALLOWED |
REQUEST_HEADERS_TOO_LARGE |
PATCH /api/v1/curl/schedule/{id}
Section titled “PATCH /api/v1/curl/schedule/{id}”Change an existing schedule in place: its id, created_at, and last_run are kept. Send any of cron, request, and enabled; absent fields keep their current value. A request replaces the whole stored request, it is not merged. Validation is the same as for create: the request must pass the same checks, and an enabled schedule needs an expression with a future occurrence.
The change applies from the next occurrence; an occurrence already running finishes with the old request.
Returns the updated schedule, credentials redacted as in getSchedule. A credential sent back exactly as getSchedule showed it ([REDACTED], or the redacted URL, json or data body) keeps its stored value, so a schedule can be read, edited and written back. This holds only while the request URL keeps the same scheme, host and port: when changing the destination, send the credentials again or remove them, otherwise the update is refused with 400. Changing only the path or query on the same scheme, host and port keeps them: whoever may update the schedule can already aim its stored credentials at any endpoint of that service.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Unique schedule identifier |
Request body
Section titled “Request body”| Name | Type | Required | Description |
|---|---|---|---|
cron | string | No | New six-field cron expression: second minute hour day month weekday |
enabled | boolean | No | true enables the schedule, false disables it |
request | object | null | No | Replacement request; replaces the whole stored request, not merged; job_name becomes the schedule’s name |
Response
Section titled “Response”The updated schedule.
{ "created_at": "2024-01-15T10:00:00Z", "cron": "0 */5 * * * *", "enabled": true, "id": "770e8400-e29b-41d4-a716-446655440000", "last_run": "2024-01-15T09:00:00Z", "next_run": "2024-01-15T10:05:00Z", "request": { "method": "GET", "url": "https://api.example.com/daily-report" }}The cron expression is invalid, the request is invalid, an unknown field is present, or the update changes nothing.
{ "code": "INVALID_CRON_EXPRESSION", "error": "Invalid cron expression: invalid field"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INVALID_CRON_EXPRESSION | Invalid cron expression | The cron expression does not parse, or an enabled schedule’s expression has no occurrence in the future | Use the six-field format second minute hour day month weekday, e.g. 0 0 9 * * MON-FRI |
INVALID_PARAMETER | Invalid request | A parameter, query value or JSON body is missing, malformed or out of range | Check the message for the offending field and fix the request; retrying unchanged fails again |
INVALID_URL | Invalid or refused URL | The target URL is malformed, uses an unsupported scheme, or is refused by the outbound URL policy (for example a private address) | Provide a complete public http(s) URL |
The server runs in origin-list CORS mode and the request’s Origin header is not on the list.
{ "code": "ORIGIN_NOT_ALLOWED", "error": "Origin not allowed"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
ORIGIN_NOT_ALLOWED | Origin rejected | The server runs in origin-list CORS mode and the request’s Origin header is not on the list; the request is refused before it reaches a handler | Call from an allowed origin, or add the origin to the server’s --cors list |
The schedule id does not exist, or the path parameter is not a UUID.
{ "code": "SCHEDULE_NOT_FOUND", "error": "Scheduled job not found: 770e8400-e29b-41d4-a716-446655440000"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
SCHEDULE_NOT_FOUND | Schedule does not exist | No schedule has this id | List schedules with schedules.list |
The request body exceeds the server’s inbound limit (--max-request-body-bytes).
{ "code": "PAYLOAD_TOO_LARGE", "error": "Request body too large: JSON payload (20000000 bytes) is larger than allowed (limit: 16777216 bytes)."}| Error Code | Title | Description | Resolution |
|---|---|---|---|
PAYLOAD_TOO_LARGE | Request body too large | The request body exceeds the server’s inbound limit (--max-request-body-bytes) | Send a smaller body, or raise the limit on the server |
The service failed to process the request.
{ "code": "STORAGE_ERROR", "error": "IO error: No space left on device (os error 28)"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
STORAGE_ERROR | Storage failure | Reading or writing the service’s storage directory failed | Retry; check the storage directory’s permissions and free space if it persists |
INTERNAL_ERROR | Service-side failure | The service itself failed (a corrupt record, a worker join, shutdown in progress) | Retry; check the server logs if it persists |
import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.curl.schedules.update('770e8400-e29b-41d4-a716-446655440000', { cron: '0 */5 * * * *',});curl -X PATCH 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com/api/v1/curl/schedule/770e8400-e29b-41d4-a716-446655440000' \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "cron": "0 */5 * * * *" }'Closed error-code enum
Section titled “Closed error-code enum”The error response schema’s code field is a closed enum. The codes tied to specific statuses above appear in the corresponding tab. The full set of values the field may take is:
| Code |
|---|
INVALID_PARAMETER |
INVALID_URL |
INVALID_CRON_EXPRESSION |
PAYLOAD_TOO_LARGE |
ORIGIN_NOT_ALLOWED |
JOB_NOT_FOUND |
JOB_RESULT_NOT_READY |
SESSION_NOT_FOUND |
FILE_NOT_FOUND |
SCHEDULE_NOT_FOUND |
SCHEDULE_EXISTS |
REQUEST_TIMEOUT |
JOB_NOT_FINISHED |
JOB_CANCELLED |
STORAGE_ERROR |
INTERNAL_ERROR |
SSE_PARSE_ERROR |
UPSTREAM_ERROR |
DNS_RESOLUTION_FAILED |
RESPONSE_TOO_LARGE |
QUEUE_FULL |
SSE_CAPACITY_EXHAUSTED |
UPSTREAM_TIMEOUT |
NOT_FOUND |
METHOD_NOT_ALLOWED |
REQUEST_HEADERS_TOO_LARGE |
PATCH /api/v1/curl/schedule/{id}/toggle
Section titled “PATCH /api/v1/curl/schedule/{id}/toggle”Toggle a schedule between enabled and disabled without deleting it. Send {"enabled": true} to enable, {"enabled": false} to disable.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Unique schedule identifier |
Request body
Section titled “Request body”| Name | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Yes | true enables the schedule, false disables it |
Response
Section titled “Response”The schedule was toggled.
The body is missing enabled, or enabled is not a boolean.
{ "code": "INVALID_PARAMETER", "error": "Invalid request: timeout must be between 1 and 3600"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
INVALID_PARAMETER | Invalid request | A parameter, query value or JSON body is missing, malformed or out of range | Check the message for the offending field and fix the request; retrying unchanged fails again |
INVALID_CRON_EXPRESSION | Invalid cron expression | The cron expression does not parse, or an enabled schedule’s expression has no occurrence in the future | Use the six-field format second minute hour day month weekday, e.g. 0 0 9 * * MON-FRI |
The server runs in origin-list CORS mode and the request’s Origin header is not on the list.
{ "code": "ORIGIN_NOT_ALLOWED", "error": "Origin not allowed"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
ORIGIN_NOT_ALLOWED | Origin rejected | The server runs in origin-list CORS mode and the request’s Origin header is not on the list; the request is refused before it reaches a handler | Call from an allowed origin, or add the origin to the server’s --cors list |
The schedule id does not exist, or the path parameter is not a UUID.
{ "code": "SCHEDULE_NOT_FOUND", "error": "Scheduled job not found: 770e8400-e29b-41d4-a716-446655440000"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
SCHEDULE_NOT_FOUND | Schedule does not exist | No schedule has this id | List schedules with schedules.list |
The request body exceeds the server’s inbound limit (--max-request-body-bytes).
{ "code": "PAYLOAD_TOO_LARGE", "error": "Request body too large: JSON payload (20000000 bytes) is larger than allowed (limit: 16777216 bytes)."}| Error Code | Title | Description | Resolution |
|---|---|---|---|
PAYLOAD_TOO_LARGE | Request body too large | The request body exceeds the server’s inbound limit (--max-request-body-bytes) | Send a smaller body, or raise the limit on the server |
The service failed to process the request.
{ "code": "STORAGE_ERROR", "error": "IO error: No space left on device (os error 28)"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
STORAGE_ERROR | Storage failure | Reading or writing the service’s storage directory failed | Retry; check the storage directory’s permissions and free space if it persists |
INTERNAL_ERROR | Service-side failure | The service itself failed (a corrupt record, a worker join, shutdown in progress) | Retry; check the server logs if it persists |
curl -X PATCH 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com/api/v1/curl/schedule/770e8400-e29b-41d4-a716-446655440000/toggle' \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "enabled": false }'Closed error-code enum
Section titled “Closed error-code enum”The error response schema’s code field is a closed enum. The codes tied to specific statuses above appear in the corresponding tab. The full set of values the field may take is:
| Code |
|---|
INVALID_PARAMETER |
INVALID_URL |
INVALID_CRON_EXPRESSION |
PAYLOAD_TOO_LARGE |
ORIGIN_NOT_ALLOWED |
JOB_NOT_FOUND |
JOB_RESULT_NOT_READY |
SESSION_NOT_FOUND |
FILE_NOT_FOUND |
SCHEDULE_NOT_FOUND |
SCHEDULE_EXISTS |
REQUEST_TIMEOUT |
JOB_NOT_FINISHED |
JOB_CANCELLED |
STORAGE_ERROR |
INTERNAL_ERROR |
SSE_PARSE_ERROR |
UPSTREAM_ERROR |
DNS_RESOLUTION_FAILED |
RESPONSE_TOO_LARGE |
QUEUE_FULL |
SSE_CAPACITY_EXHAUSTED |
UPSTREAM_TIMEOUT |
NOT_FOUND |
METHOD_NOT_ALLOWED |
REQUEST_HEADERS_TOO_LARGE |
DELETE /api/v1/curl/schedule/{id}
Section titled “DELETE /api/v1/curl/schedule/{id}”Permanently delete a recurring schedule. The schedule immediately stops executing and its configuration is removed.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Unique schedule identifier |
Response
Section titled “Response”The schedule was deleted.
The server runs in origin-list CORS mode and the request’s Origin header is not on the list.
{ "code": "ORIGIN_NOT_ALLOWED", "error": "Origin not allowed"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
ORIGIN_NOT_ALLOWED | Origin rejected | The server runs in origin-list CORS mode and the request’s Origin header is not on the list; the request is refused before it reaches a handler | Call from an allowed origin, or add the origin to the server’s --cors list |
The schedule id does not exist, or the path parameter is not a UUID.
{ "code": "SCHEDULE_NOT_FOUND", "error": "Scheduled job not found: 770e8400-e29b-41d4-a716-446655440000"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
SCHEDULE_NOT_FOUND | Schedule does not exist | No schedule has this id | List schedules with schedules.list |
The service failed to process the request.
{ "code": "STORAGE_ERROR", "error": "IO error: No space left on device (os error 28)"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
STORAGE_ERROR | Storage failure | Reading or writing the service’s storage directory failed | Retry; check the storage directory’s permissions and free space if it persists |
INTERNAL_ERROR | Service-side failure | The service itself failed (a corrupt record, a worker join, shutdown in progress) | Retry; check the server logs if it persists |
import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.curl.schedules.delete('770e8400-e29b-41d4-a716-446655440000');curl -X DELETE 'https://{projectId}-{containerId}-curl-1.{server}.containers.hoody.com/api/v1/curl/schedule/770e8400-e29b-41d4-a716-446655440000' \ -H "Authorization: Bearer $HOODY_TOKEN"Closed error-code enum
Section titled “Closed error-code enum”The error response schema’s code field is a closed enum. The codes tied to specific statuses above appear in the corresponding tab. The full set of values the field may take is:
| Code |
|---|
INVALID_PARAMETER |
INVALID_URL |
INVALID_CRON_EXPRESSION |
PAYLOAD_TOO_LARGE |
ORIGIN_NOT_ALLOWED |
JOB_NOT_FOUND |
JOB_RESULT_NOT_READY |
SESSION_NOT_FOUND |
FILE_NOT_FOUND |
SCHEDULE_NOT_FOUND |
SCHEDULE_EXISTS |
REQUEST_TIMEOUT |
JOB_NOT_FINISHED |
JOB_CANCELLED |
STORAGE_ERROR |
INTERNAL_ERROR |
SSE_PARSE_ERROR |
UPSTREAM_ERROR |
DNS_RESOLUTION_FAILED |
RESPONSE_TOO_LARGE |
QUEUE_FULL |
SSE_CAPACITY_EXHAUSTED |
UPSTREAM_TIMEOUT |
NOT_FOUND |
METHOD_NOT_ALLOWED |
REQUEST_HEADERS_TOO_LARGE |