# cronservices: delete your cron functions

cronservices calls your APIs on a schedule, chains the responses, and reshapes the JSON in between. There are no servers, no deploys, and no cold starts. It's built so that AI agents can set it up for you.

- Website: https://cron.services
- API: https://api.cron.services ([OpenAPI](https://cron.services/openapi.json))
- Support: support@cron.services
- Agent guide: https://cron.services/agents.md

## What it does

A **job** is a schedule plus a chain of **steps**:

1. **Schedule.** A standard 5-field cron expression in any time zone, from every minute to once a year, with extensions like "last weekday of the month". Or a single `run_at` timestamp for a job that fires once.
2. **Request.** Call any HTTP endpoint with any method, headers, a templated body, and a saved credential.
3. **Built-in steps.** Send to Slack, Discord, Teams, Telegram, email, SMS, PagerDuty and more, or read from Stripe, GitHub and public data APIs, by filling in a few fields. See https://cron.services/integrations.md
4. **Transform.** Reshape the previous step's JSON with a small template language: `{{ $.field }}`, `{{#each $.items}}`, `{{ join($.lines, "\n") }}`, `{{ now:Europe/London }}`.
5. **Chain.** Each step receives the previous step's output, so fetch → reshape → post is one job.

Every run is recorded step by step, with status codes, durations, and why it failed.

## What it replaces

The scheduled functions that only move data between APIs: digests to Slack, CRM and partner syncs, cache warmers, cleanup routes, backup triggers, report pulls. Instead of a function plus a deploy target plus a cron trigger plus logs, you have one JSON document that a person or an agent can read and change.

When the work needs real code, keep it behind an HTTP endpoint and let cronservices own the schedule and the run history.

## Use cases

Complete, copyable jobs for real scenarios: Stripe past-due subscriptions to Slack, PagerDuty on-call announcements, an uptime check with Healthchecks.io, a morning balance email, daily exchange rates for a store, a Black Friday sale that starts at midnight Eastern, a weather brief for a field crew, batched appointment reminders, and waking an AI agent on a schedule. See https://cron.services/use-cases.md

## For agents

- [/llms.txt](https://cron.services/llms.txt) and [/llms-full.txt](https://cron.services/llms-full.txt): the docs, for language models
- [/openapi.json](https://cron.services/openapi.json): the API, for code generators and tool frameworks
- [/agent-tools.json](https://cron.services/agent-tools.json): function-calling tool definitions
- Every page has a Markdown twin at the same path plus `.md`.

## Pricing

Hobby is free for 3 jobs and 1,000 runs a month. Pro is $12/month for 50 jobs and 50,000 runs a month. Team is $49/month for 500 jobs and 500,000 runs a month. Details: https://cron.services/pricing.md

## FAQ

**What timezone are schedules in?** Any IANA time zone you choose, UTC by default. A job at 09:00 in `America/New_York` stays at 09:00 local when the clocks change. A one-time `run_at` can include any offset.

**Can a job run just once?** Yes. Send `run_at` (an ISO 8601 timestamp) instead of `cron`. It fires once, then switches itself off, and stops counting toward your job limit.

**How long can a request take?** 10 seconds per request step. For longer work, return `202` and finish in the background.

**What happens when a step fails?** The run stops at that step and is recorded with its status code and the start of the response. The next scheduled run starts fresh.

**Where do my API tokens go?** In credentials: saved once, encrypted at rest, never shown again, and referenced by id from any number of jobs.

**Can it run my code?** No. cronservices calls endpoints; it doesn't host code. That's the point: if a task is only HTTP calls and JSON reshaping, it shouldn't need hosted code.

**Is there a free plan?** Yes. Hobby is free and needs no card.
