The boring infrastructure your app needs, behind one API key.

Scheduled jobs, a webhook relay, PDFs, and transactional email for apps built with Claude Code, Cursor, and other coding agents. An SDK, an MCP server, and plain-text docs mean your agent can wire it all up for you.

npm install oakstack

const oakstack = new Oakstack(); // reads OAKSTACK_API_KEY

await oakstack.clock.jobs.create({ name: "Nightly", schedule: "0 3 * * *", url: "https://..." });
await oakstack.post.emails.send({
  from: "Acme <hello@acme.com>",
  to: customer.email,
  subject: "Your invoice",
  html: "<p>Thanks for your order.</p>",
  attachments: [{ filename: "invoice.pdf", print: { template: "invoice", data } }],
});

The Free plan needs no card.

Scheduled jobs

Call a URL in your app on a cron schedule, in any time zone. Failed calls are retried, every run is logged, and a job that keeps failing pauses itself.

oakstack.clock

Webhook relay

A permanent inbound URL for Stripe, GitHub, or any sender. Every event is stored, forwarded with its original headers, retried for hours if your app is down, and can be replayed.

oakstack.hook

PDFs

Send HTML, or pick a hosted invoice, proposal, or report template and send data. Real Chrome renders it; you get a private download link.

oakstack.print

Read documents

Turn photos, screenshots, PDFs, and pasted lists into clean data: products from a photo of boxes or a pre-order email, receipts, contacts. Unclear items are flagged for review.

oakstack.lens

Email

Transactional email from your own verified domain, with PDFs attached in the same call. Receive email at an Oakstack address and get it in your app as a webhook.

oakstack.post

Push notifications

Notify a user on every browser, iPhone, and Android device they've signed in on, in one call. Devices that are gone are removed for you, and every delivery is logged.

oakstack.bell

Text messages

Texts from your own verified toll-free number: order updates, reminders, sign-in codes. STOP replies are handled for you, and replies reach your app as a webhook.

oakstack.ring

Email that stays out of spam folders

Every customer shares our sending reputation, so we protect it for everyone:

  • Email only goes out from domains the customer has verified, signed with DKIM.
  • Emailing anyone outside your own team needs a paid plan with a card on file.
  • Addresses that bounce or mark email as spam are suppressed automatically and checked before every send.
  • New senders have daily limits that rise over their first month.
  • Sending pauses automatically above 5% bounces or 0.1% spam complaints until a person reviews it.
  • Purchased or scraped lists are never allowed. See the Acceptable Use Policy.

Pricing

Flat monthly plans with hard limits: when you reach one, that feature stops instead of billing you more.

Free

$0 /month

  • 3 scheduled jobs
  • 5 webhook endpoints
  • 1,000 webhook events a month
  • 25 PDFs a month
  • 100 emails a month, to your own team only
  • 20 pages read a month
  • Texts in test mode only
  • 1,000 push notifications a month
  • Logs kept 7 days

Builder

$20 /month

  • 25 scheduled jobs
  • 50 webhook endpoints
  • 50,000 webhook events a month
  • 1,000 PDFs a month
  • 10,000 emails a month
  • 200 pages read a month
  • 100 texts a month
  • 50,000 push notifications a month
  • Logs kept 7 days

Studio

$49 /month

  • 100 scheduled jobs
  • 200 webhook endpoints
  • 250,000 webhook events a month
  • 5,000 PDFs a month
  • 50,000 emails a month
  • 500 pages read a month
  • 300 texts a month
  • 250,000 push notifications a month
  • Logs kept 30 days

Add-ons for Builder and Studio, as many as you need: Reading pack (+1,000 pages a month, $25), SMS pack (+500 texts a month, $10), Extra phone number ($5). Everything else is included in the plan.