CronJobFast Docs
← Home Log in Sign up

Welcome to CronJobFast

CronJobFast is a premium HTTP cron platform: REST API, signed webhooks, DHRU Auto Sync, reseller flow with sub-accounts, and one-time security unlocks. This page is the complete developer reference — auth, endpoints, integrations, comparisons.

How it works

  1. Sign up for a free account at app.cronjobfast.com.
  2. Issue an API key from Sidebar → Integrations → API Keys. The cleartext token is shown only once; we store SHA-256 hashes.
  3. Create a cron job — manually from the panel, programmatically via POST /api/v1/jobs, or via the DHRU Other Script endpoint.
  4. Listen for results — register a webhook endpoint to get HMAC-signed delivery on every interesting event.

Authentication

The REST API uses Bearer tokens. Each request must include:

Authorization: Bearer cjf_live_<32-char-secret>

Rate limits

60 requests per minute per API key, sliding window backed by Redis. Every authenticated response carries:

X-RateLimit-Limit:     60
X-RateLimit-Remaining: 57
X-RateLimit-Reset:     32   # seconds until window resets

When the budget is exhausted you get HTTP 429 with the same headers; back off until Reset.

Envelopes & errors

Every response is wrapped:

{ "data": { ...handler-specific... } }
{ "error": { "code": "snake_case", "message": "Human", "details": { ... } } }
HTTPMeaning
200OK
400Bad request (validation)
401Missing or invalid bearer
403Insufficient scope
404No matching route
409Idempotency conflict, expired key or unconfirmed operation
422Domain failure (e.g. add-on not eligible)
429Rate limit hit
500Unexpected server error
503Idempotency storage unavailable or outcome unconfirmed; retry the same key after recovery
Idempotency: on POST / PATCH / DELETE include an Idempotency-Key header (1–128 letters, digits, dots, underscores or hyphens). Database mutations and their response are committed together. The same key, method, URL and body replay the response for 24 hours. A changed request or expired key returns 409; an expired key is never reused automatically. Run Now and verification email reserve the key before sending: an unconfirmed operation returns 409 idempotency_pending on retry. Inspect its outcome before starting a new request. Storage failures return 503 without falling back to an unprotected mutation. During the legacy transition, new protected writes return 503 idempotency_not_active until activation. One-time credential responses are encrypted.

API · Account

GET /me

Current user, plan, balance, monthly add-on cost.

{ "data": {
  "user_id": 7, "email": "ops@example.com",
  "plan": "advanced", "balance": "12.50",
  "monthly_addon_cost": "1.99",
  "scopes": ["read","write"], "api_key_id": 4
}}

API · Balance & transactions

GET /balance

Lightweight; only the current balance.

GET /transactions?limit=50

Recent credit_transactions. limit clamped to [1..200].

POST /balance/topup (reseller-only)

Credit a sub-account from the reseller's balance. Atomic with paired ledger rows.

API · Plans

GET /plans

Catalogue: basic, starter, advanced, professional, dhru_premium.

POST /plans/change

Switches the user's plan with automatic Stripe-style prorate. Requires write scope.

{ "plan": "advanced" }

API · Add-ons

GET /addons/catalog

Returns every add-on key with price, eligibility flags and benefit. Source of truth for the panel UI.

POST /addons

Activate a monthly add-on. Body: { "addon_key": "extra_manual_jobs", "quantity": 1 }.

DELETE /addons/{id}

Cancel an active add-on. Status transitions to cancelled; the row is preserved for history.

API · Jobs

GET /jobs

List manual jobs. Supports limit, offset, status, type query params.

POST /jobs

Create a new manual job.

{
  "name":     "Daily backup ping",
  "url":      "https://example.com/cron/backup",
  "method":   "GET",
  "interval": 86400,
  "headers":  { "X-Auth": "secret" },
  "body":     null
}

PATCH /jobs/{id}

Partial update. Only the fields you send change.

POST /jobs/{id}/run-now

Force an out-of-band execution of a job. Returns the job_runs row id.

GET /jobs/{id}/runs?limit=50

Recent execution log for one job.

API · Webhooks

Full CRUD for outbound webhook endpoints — see the Webhooks section below for event types and HMAC verification details.

API · Reseller (gated)

Available only to accounts flagged is_reseller=1. The full reseller namespace under /api/v1/reseller/* covers sub-account CRUD, credit transfers, suspension/reactivation, public profile, and aggregate usage.

POST   /api/v1/reseller/accounts                — create sub-account
POST   /api/v1/reseller/accounts/{id}/topup     — atomic credit transfer
POST   /api/v1/reseller/accounts/{id}/suspend   — suspend
POST   /api/v1/reseller/accounts/{id}/reactivate
GET    /api/v1/reseller/usage                   — fleet aggregates

DHRU Integration · Other Script endpoint

CronJobFast speaks the DHRU Fusion API standards (v6.1) so resellers can plug it into their DHRU panel as an "Other Script" provider. The endpoint lives at:

https://app.cronjobfast.com/dhru-sync

DHRU appends /api/index.php automatically; no need to suffix the URL.

Setup

  1. From the panel: Sidebar → Account → Reseller Panel → DHRU Connect. Generate an API key (auto-scoped to dhru_otherscript).
  2. In your DHRU admin: API Settings → Add Other Script with:
    • Name → CronJobFast
    • API KEY → the cleartext key you just generated
    • Username → your numeric user id (shown next to the key)
    • API url → https://app.cronjobfast.com/dhru-sync
    • Currency → USD
  3. Click Synchronize. DHRU will pull our service catalog and surface our products under your shop.

Actions catalog

ActionWhat we do
accountinfoReturns your spendable credits (balance + remaining overdraft) plus account email.
imeiservicelistReturns the catalog: 1 generic credit + plans (Starter / Pro / DHRU Premium, monthly + yearly).
placeimeiorderAtomic credit/plan delivery to a customer email; auto-creates the sub-account if missing.
getimeiorderStatus lookup by reference id.
imeiorderstatusRecent orders list.

Order flow

When a customer of yours buys from your DHRU storefront, DHRU calls our placeimeiorder. We:

  1. Resolve (or create) the customer's sub-account by email.
  2. Debit the agreed credits from your reseller balance and credit them to the sub.
  3. If the order is a plan, run changePlanWithProrate() on the sub — full Stripe-style upgrade math.
  4. Email the customer a "set your password" link if the sub-account is brand new.
  5. Emit dhru.order.completed webhook to your registered endpoints.
Pricing is 1 credit = 1 unit on the backend. You set your fiat margin from your DHRU panel.

Webhooks · Event types

EventTrigger
webhook.testYou hit POST /webhooks/{id}/test
payment_intent.confirmedTop-up confirmed
payment_intent.cancelledTop-up cancelled before confirm
payment_intent.expiredTop-up expired with no action
addon.activatedAdd-on row created
addon.cancelledAdd-on cancelled
addon.expiredRenewal failed (insufficient balance)
balance.lowBalance crosses your threshold
plan.changedPlan switch (with prorate metadata)
job.auto_pausedJob hit the consecutive-failure threshold
reseller.account.createdSub-account provisioned
reseller.account.suspendedSub-account paused
reseller.account.reactivatedSub-account resumed
reseller.transfer.completedCredits moved to a sub-account
reseller.credit_limit_warningOverdraft used ≥ 80%
reseller.credit_limit_exhaustedOverdraft used == 100%
dhru.order.completedDHRU placeimeiorder succeeded
dhru.order.failedDHRU placeimeiorder rejected

Signature verification

Every delivery includes:

Cronjobfast-Signature: t=1700000000,v1=<hex>

Where v1 is hmac_sha256(secret, "{t}.{body}"). Verify on your side:

// Node
const crypto = require('crypto');
const [_, ts, sig] = req.headers['cronjobfast-signature'].match(/t=(\d+),v1=([a-f0-9]+)/);
const expected = crypto.createHmac('sha256', SECRET)
                       .update(ts + '.' + req.rawBody).digest('hex');
const valid = crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));

Retries & backoff

Up to 6 attempts at 1m → 5m → 30m → 2h → 6h → 12h. After 12 consecutive failures the endpoint is auto-disabled and we emit nothing else until you flip it back to active. During key rotation we double-sign with both old and new secrets for 24 hours, so you can rotate without downtime.

Why CronJobFast

A factual breakdown of where CronJobFast leads compared to popular alternatives. All numbers reflect publicly published specs at the time of writing — verify with each provider before final selection.

Headline differentiators

Pricing parity

CronJobFast lists in credits (1 credit ≈ $1 USD nominal). Credits do not expire; paid plans keep their stated expiry date and require an explicit extension. Resellers confirm their payment conditions. Equivalents in monthly USD for like-for-like tiers:

Tier CronJobFast FastCron cron-job.org EasyCron
Free $0 · 5 jobs · 30s $0 · 5 jobs · 60s $0 · 50 jobs · 60s $0 · 20 jobs · 600s
Entry paid $2.99 · 20 jobs · 5s $5 · ~20 jobs · 60s $5 · 200 jobs · 60s $5.95 · 30 jobs · 60s
Mid tier $4.99 · 60 jobs · 2s $15 · 60 jobs · 60s $15 · 1,000 jobs · 60s $15.95 · 100 jobs · 60s
Top tier $9.99 DHRU Premium · 500 jobs · 2s · 50k logs $30 · 200 jobs · 60s $25 · 5,000 jobs · 60s $39.95 · 500 jobs · 60s

Snapshot as of May 2026. Sub-second-precision execution and DHRU integration are unique to CronJobFast at any of these tiers.

Feature matrix

Capability CronJobFast FastCron cron-job.org EasyCron
Minimum interval 2s (Pro+) 60s 60s 60s
REST API (CRUD + reseller + webhooks) 30+ endpoints, idempotent Read-mostly Limited CRUD Yes
HMAC-signed webhooks 19 events · key rotation grace Basic Failure notifications only Email + URL
Idempotency keys Yes (24h response replay) — — —
DHRU Auto Sync (260+ endpoints) Native — — —
DHRU "Other Script" reseller endpoint Native — — —
Reseller / sub-accounts Built-in (overdraft, atomic transfers, public listing) — — —
Current purchase channel Authorised resellers; payment methods agreed with the reseller — — —
Endpoint Protection (anti-double-execution) 1.99 credits one-time unlock — currently unavailable (egress re-verification) — — —
2FA (TOTP) Yes · 10 backup codes Yes — Yes
Telegram + email failure alerts Yes Email Email Email
Per-job retry & auto-pause Configurable + threshold-based auto-pause Limited Threshold-based pause Limited
Plan-change prorate (Stripe-style) Atomic with refund-as-credit Manual — Manual

When to pick a different provider

To stay factual: each alternative has its own strengths and we want you to choose based on what your project needs, not a sales pitch.

If your stack involves DHRU panels, GSM tools, sub-second timing, reseller management or reseller credit purchases, none of the alternatives match what CronJobFast ships today.

In-depth · vs cron-job.org

cron-job.org publishes a free, generous-jobs-count tier limited to 60-second precision and offers basic failure email alerts. CronJobFast adds: sub-second timing on Pro+, idempotent writes, signed webhooks across 19 events, sub-account API, DHRU vertical, and credits that never expire.

In-depth · vs EasyCron

EasyCron's UI focuses on URL scheduling with email notifications and Telegram on higher tiers. CronJobFast prices its mid tier ~3× cheaper for 30× more execution capacity, retains up to 50,000 run-log rows on DHRU Premium (vs ~10,000 on EasyCron's plus tier), and adds a programmable reseller layer with overdraft and prorate billing.

FAQ · Cloudflare WAF blocks

If your origin sits behind Cloudflare and the cron URL returns 403, allowlist our worker:

For the full setup, the Cron Endpoint Protection add-on (1.99 credits, one-time) emails step-by-step instructions and a link to the panel wizard, which generates the Cloudflare Custom rule that blocks every other source. Currently unavailable while the worker egress set is being re-verified — it is not purchasable and no charge is possible.

FAQ · Migrating from another service

  1. Check Endpoint Protection in the add-ons section (optional; unavailable while the worker egress set is being re-verified).
  2. Replicate your jobs via POST /jobs or by importing JSON in the panel.
  3. When Endpoint Protection is available again, its setup instructions email and the panel wizard walk you through the WAF rule so the old service stops triggering double-executions.
  4. Cancel the old subscription. Done.

FAQ · Domain & job quotas

PlanManual jobsMin intervalDHRU domains
Free530s0
Starter205s0
Pro602s1
DHRU Premium5002s3

Need more? Buy the corresponding add-ons (stackable per slot/domain) or upgrade tier.

Changelog

See the public changelog. Earlier highlights:

Need help? Email support@cronjobfast.com or consult the service status page.