Skip to main content

Schedule Management

The Schedule Management section covers all operations related to creating, updating, and managing scheduled HTTP requests.

Get All Schedules

Retrieve all schedules for the authenticated user.
const schedules = await cronhost.getSchedules();
Returns: Promise<Schedule[]>

Get Schedule by ID

Retrieve a specific schedule by its ID.
const schedule = await cronhost.getSchedule("schedule-id");
Parameters:
  • id (string, required): The unique identifier of the schedule
Returns: Promise<Schedule>

Create Schedule

Create a new scheduled HTTP request.
const schedule = await cronhost.createSchedule({
  name: "Daily Health Check",
  description: "Check if our API is healthy every day at 9 AM",
  cronExpression: "0 9 * * *",
  timezone: "America/New_York",
  endpoint: "https://api.example.com/health",
  httpMethod: "GET",
  body: JSON.stringify({ key: "value" }), // Optional for POST/PUT/PATCH
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer token",
  },
  maxRetries: 3,
  timeoutSeconds: 30,
});
Parameters:
  • name (string, required): A descriptive name for the schedule
  • description (string, optional): Additional description of what the schedule does
  • cronExpression (string, required): Valid cron expression defining when to run
  • timezone (string, required): IANA timezone identifier (e.g., ‘America/New_York’) - View all options
  • endpoint (string, required): The HTTP endpoint to call
  • httpMethod (“GET” | “POST” | “PUT” | “DELETE” | “PATCH”, required): HTTP method to use
  • body (string, optional): Request body for POST/PUT/PATCH requests
  • headers (Record<string, string>, optional): HTTP headers to include in the request
  • maxRetries (number, optional): Maximum number of retry attempts (default: 3)
  • timeoutSeconds (number, optional): Request timeout in seconds (default: 30)
Returns: Promise<Schedule>

Update Schedule

Update an existing schedule.
const updatedSchedule = await cronhost.updateSchedule("schedule-id", {
  name: "Updated Schedule Name",
  cronExpression: "0 10 * * *", // Changed to 10 AM
  maxRetries: 5,
});
Parameters:
  • id (string, required): The unique identifier of the schedule to update
  • data (UpdateScheduleData, required): Object containing fields to update
UpdateScheduleData fields (all optional):
  • name (string): Update the schedule name
  • description (string): Update the description
  • cronExpression (string): Update the cron expression
  • timezone (string): Update the timezone
  • endpoint (string): Update the endpoint URL
  • httpMethod (“GET” | “POST” | “PUT” | “DELETE” | “PATCH”): Update HTTP method
  • body (string): Update request body
  • headers (Record<string, string>): Update HTTP headers
  • maxRetries (number): Update retry limit
  • timeoutSeconds (number): Update timeout
Returns: Promise<Schedule>

Delete Schedule

Delete a schedule permanently.
await cronhost.deleteSchedule("schedule-id");
Parameters:
  • id (string, required): The unique identifier of the schedule to delete
Returns: Promise<void>

Toggle Schedule

Enable or disable a schedule without deleting it.
// Disable a schedule
const disabledSchedule = await cronhost.toggleSchedule("schedule-id", false);

// Enable a schedule
const enabledSchedule = await cronhost.toggleSchedule("schedule-id", true);
Parameters:
  • id (string, required): The unique identifier of the schedule
  • enabled (boolean, required): Whether to enable (true) or disable (false) the schedule
Returns: Promise<Schedule>

Trigger Schedule

Manually trigger a schedule to run immediately, regardless of its cron schedule.
const job = await cronhost.triggerSchedule("schedule-id");
Parameters:
  • id (string, required): The unique identifier of the schedule to trigger
Returns: Promise<Job> - Returns the created job that will execute the request

Example: Complete Schedule Workflow

import { Cronhost } from "cronhost";

const cronhost = new Cronhost({
  apiKey: "your-api-key",
});

async function scheduleWorkflow() {
  try {
    // Create a new schedule
    const schedule = await cronhost.createSchedule({
      name: "API Health Check",
      description: "Monitor API health every hour",
      cronExpression: "0 * * * *", // Every hour
      timezone: "UTC",
      endpoint: "https://api.example.com/health",
      httpMethod: "GET",
      headers: {
        "User-Agent": "Cronhost-Monitor",
      },
      maxRetries: 2,
      timeoutSeconds: 15,
    });

    console.log("Created schedule:", schedule.id);

    // Update the schedule
    const updated = await cronhost.updateSchedule(schedule.id, {
      maxRetries: 3, // Increase retry count
    });

    // Trigger it immediately for testing
    const job = await cronhost.triggerSchedule(schedule.id);
    console.log("Triggered job:", job.id);

    // Disable the schedule temporarily
    await cronhost.toggleSchedule(schedule.id, false);
    console.log("Schedule disabled");

    // Re-enable it
    await cronhost.toggleSchedule(schedule.id, true);
    console.log("Schedule re-enabled");
  } catch (error) {
    console.error("Workflow error:", error.message);
  }
}

scheduleWorkflow();