paulobrien.dev

For developers

Every API, in one place.

Connect my apps to your own code, scripts, servers and AI assistant. Each API runs on your own install, in your own Cloudflare account, so nothing goes through me.

// the same everywhere

Learn one, and you know them all.

Every app follows the same rules, so a script for one looks like a script for the others.

Keys made in the appMake a key in the app's settings, give it a name and copy it. It's shown once, and only a fingerprint (a SHA-256 hash) is kept. Delete it and it stops working straight away.
Sent in a headerAuthorization: Bearer <key> on every request. Never in the web address, and never in a web page where anyone could copy it.
JSON in and outEvery answer is JSON. Times are UTC, written like 2026-11-04T17:00:00.000Z.
Plain English errorsAnything that goes wrong comes back with a status and a sentence you can show to a person, plus a link to the right page.
Signed webhooksWhere an app sends webhooks, they're signed the same way, so one check works for all of them.
An AI connectorAdd the app to Claude, ChatGPT or any MCP client and ask questions in plain English. You choose what it may do.

// at a glance

Every API on one table.

Each address starts with your own install's web address, such as https://mail.yourdomain.co.uk.

AppAPI addressKeys start withWebhooksAI connector
Mail App/api/ext/v1mailapp_email.received, email.sentAdmins, inside sign-in
Blog Builder/_emdash/apiec_pat_NoneYes, /_emdash/api/mcp
ReaderCount/api/v1rc_NoneYes, /mcp
Site Watch/api/v1watch_monitor.down, monitor.up, monitor.flapping, monitor.blocked, monitor.cert, cert.expiring, domain.expiringYes, /mcp
DMARC Reports/api/v1dmarc_report.received, sender.new, sender.failing, reports.stopped, tls.failingYes, /mcp

Blog Builder's API comes from EmDash, the blogging software it's built on, so its keys and error answers follow EmDash's own pattern.

Stay in the loop

Subscribe for updates.

Leave your email and I'll tell you when there's a new version of one of my apps, or a new project to try. Nothing else.

That didn't work. Please check your email address and try again.

One email to confirm. Unsubscribe with one click. Your address is only used for these updates.