Skip to main content
Async task infrastructure · European

Async without
the infrastructure.

Tasks, webhooks, and everything in between — programmable, European, and built to never drop the ball.

No credit card required · 10,000 requests/mo free forever

The problem

Every user action generates async work. Send a confirmation email after signup. Receive Stripe webhooks without dropping them. Retry a failed charge tomorrow. Expire a trial in 14 days. Clean up old sessions every night.

You shouldn't need Redis, a cron container, and a DIY message queue just to handle this. Let us do the plumbing — you focus on your product.

One API for all async work

Queued Tasks

Push a task and we run it immediately. Offload work from your request cycle — send emails, call APIs, process data. One POST, instant execution.

Message Queues

Pull-based queues for when your consumer can't expose a URL. Enqueue via API, long-poll to receive, ack when done. Visibility timeouts and dead letter built in. Like SQS, but simpler.

Delays & Scheduling

Schedule a task for any time in the future. Send a reminder in 24 hours. Expire a trial in 14 days. Just set a delay or a timestamp.

Crons & Monitoring

Daily reports, hourly syncs, weekly cleanups. Standard cron expressions with built-in dead man's switch — get alerted when jobs stop running, and again when they recover.

Webhook Gateway

Point Stripe, GitHub, or any service at Runlater. We store every payload, forward it to your app with retries, and let you replay any event.

Lanes & Serial Execution

Tag tasks with a lane name and they run one at a time. Perfect for payments, API rate limits, or anything that can't overlap. Pause and resume lanes on the fly.

Built for production

Retries & backoff

Endpoint down? We retry with exponential backoff — up to 10 attempts. Works for tasks, webhooks, and queue message delivery.

Webhook signatures

Every outbound request signed with HMAC-SHA256. For inbound webhooks, verify signatures in Lua — templates for Stripe, GitHub, and Shopify.

Idempotency & deduplication

Pass an idempotency key for exactly-once task creation. Retry the same request safely — we return the original result, never a duplicate.

Programmable

Lua scripts on every webhook or task response. Verify signatures, transform payloads, route to different destinations, or fan out follow-up tasks.

Debounce & callbacks

Coalesce rapid-fire events into a single execution. Get a callback POST with the full result when any task completes.

Event replay

Every inbound webhook stored with full headers and body. Reprocess any event with one click — useful after deploying a bug fix.

Full execution history

Every run logged with status code, duration, and response body. Debug failures without digging through your own logs.

Alerts to Slack, Discord, or email

Get notified when tasks fail or queues back up. We auto-detect Slack and Discord URLs and format the message for you.

Smart rate limit handling

When a target returns 429, we pause deliveries to that host and resume after backoff. Your other tasks and queues keep running.

Status pages & badges

Give customers a live status page at a shareable URL with 30-day uptime bars. Embed SVG badges in your README.

How it works

1

Delay a task

Something happened, do this in 24 hours

curl -X POST https://runlater.eu/api/v1/tasks \
  -H "Authorization: Bearer pk_live_xxx" \
  -H "Idempotency-Key: reminder-user-42" \
  -d '{
    "url": "https://myapp.com/api/remind",
    "delay": "24h"
  }'
2

Queue a task

Lane ensures tasks run one at a time

curl -X POST https://runlater.eu/api/v1/tasks \
  -H "Authorization: Bearer pk_live_xxx" \
  -d '{
    "url": "https://myapp.com/api/process",
    "lane": "payments",
    "callback_url": "https://myapp.com/api/done"
  }'
3

Schedule a cron

Recurring jobs on any schedule

curl -X POST https://runlater.eu/api/v1/schedules \
  -H "Authorization: Bearer pk_live_xxx" \
  -d '{
    "name": "Daily backup",
    "url": "https://myapp.com/api/backup",
    "cron": "0 6 * * *"
  }'
4

Pull from a queue

Enqueue messages, consumers long-poll to receive

curl -X POST https://runlater.eu/api/v1/mq/orders/messages \
  -H "Authorization: Bearer pk_live_xxx" \
  -d '{
    "body": {
      "event": "order.created",
      "order_id": 4217
    }
  }'

That's it. We handle retries, callbacks, and alerts.

Framework guides

View all guides →

Why Runlater

European-owned. Privacy-first. Full data sovereignty.

European-owned and operated on European infrastructure. No tracking cookies, no third-party analytics, no fingerprinting. Execution history is deleted automatically — we minimize data by design, not by accident. GDPR-native for teams that need it, and just good practice for everyone else.

Independent by design.

Independently funded, no reason to pivot. We exist to run your tasks on time — not to chase the next hype cycle. Full focus, long-term commitment.

Built on the BEAM

Elixir and the BEAM VM — the same technology behind WhatsApp and telecom systems. Designed for systems that never stop.

API-first with a dashboard

Full REST API with OpenAPI docs. Real-time dashboard for when you need visibility. Team workspaces with role-based access.

Simple pricing

Flat monthly price. No per-execution fees, no bill shock.

Free

€0

All features included. 10k requests/mo, 2 users, 3 monitors & endpoints

Pro

€29/mo

or €290/year (save 2 months)

Everything unlimited. 1M requests/mo, per-minute crons, 30-day history

Enterprise

Need more?

Higher limits, SLA, priority support

Contact sales →

Ready to offload your first task?

Create your free account and push your first task in minutes.

Get started free