Construct Computer site API

Public endpoints served from https://construct.computer. The machine-readable version of this page is the OpenAPI 3.1 document, discoverable through the RFC 9727 API catalog.

Conventions

Free tools

The free tools on this site, open to any client and any AI agent with no key. GET /api/tools lists them. GET a tool's URL for its input schema and an example, then run it with GET ?input=<URL-encoded JSON> or by posting the JSON. Browser agents with WebMCP find the same tools registered on every page.

Endpoint What it does
/api/tools/gmail-filter-generator Builds Gmail filters. Returns a Gmail search string per filter, to preview matches in Gmail's search bar, and a mailFilters.xml file the user imports in Gmail under Settings, Filters and Blocked Addresses, Import filters. Each filter needs at least one condition and one action.
/api/tools/zapier-cost-calculator Estimates a monthly Zapier bill from a list of Zaps (action steps and runs per month). Returns monthly tasks, the cheapest plan including any pay-per-task overage, and the smallest plan that covers the tasks outright. Uses Zapier list prices checked on 2026-10-11.
/api/tools/mcp-config-generator Writes MCP server configuration for Claude Desktop, Claude Code, Cursor, VS Code and Codex from one description of the server. Give command (and args, env) for a local server, or url (and headers) for a remote one. Returns each client's file location and paste-ready snippet.
curl 'https://construct.computer/api/tools/zapier-cost-calculator?input=%7B%22zaps%22%3A%5B%7B%22name%22%3A%22New%20lead%20to%20CRM%20and%20Slack%22%2C%22action_steps%22%3A2%2C%22runs_per_month%22%3A300%7D%2C%7B%22name%22%3A%22Paid%20invoice%20to%20sheet%22%2C%22action_steps%22%3A3%2C%22runs_per_month%22%3A120%7D%5D%2C%22billing%22%3A%22annual%22%2C%22team%22%3Afalse%7D'

GET /api/health

Liveness check. No parameters, no storage reads, safe to poll. Responds 200 with application/health+json.

curl https://construct.computer/api/health

{
  "status": "pass",
  "serviceId": "construct-computer-site-api",
  "description": "Construct Computer site API"
}

POST /api/beta-signup

Records an email address against the call to action that produced it. Every call needs a Cloudflare Turnstile token minted on construct.computer for the beta_signup action, so this endpoint is only usable from the site itself. It is listed here for completeness and for automated discovery, not as an integration point. Submitting an address that is already on the list returns the same 200 and creates no duplicate.

Request body

Field Type Required Notes
email string yes Max 254 characters. Trimmed and lowercased.
name string yes Required person name for Listmonk (not the email local-part). Not stored in D1.
ctaSource string yes Which call to action produced the signup, for example hero or nav.
referral enum no One of twitter, reddit, hackernews, producthunt, linkedin, discord, other. Defaults to other/newsletter when omitted.
referralOther string conditional Required when referral is "other". 2 to 120 characters.
turnstileToken string browser Turnstile token for browser posts. Server ingest uses SIGNUP_INGEST_SECRET instead.
honeypot string no Bot trap. A filled value is accepted and dropped.
meta object no Allowlisted attribution (subscribedVia, authProvider, constructUserId, campaign/utm fields) → Listmonk attribs when API credentials are set.

Response

{ "ok": true, "listmonk": true }

listmonk is false when D1 saved the signup but Listmonk sync failed (retry-safe for authenticated ingest). Browser UX still treats HTTP 200 as success.

Errors

Status Code Meaning
400 invalid_request The body was not JSON, or it failed validation.
403 origin_rejected An Origin header was sent and it was not construct.computer.
403 verification_failed The Turnstile token was missing, stale, or issued elsewhere.
404 not_found No free tool has that name. GET /api/tools lists them.
405 method_not_allowed The endpoint was called with the wrong HTTP method.
413 payload_too_large The request body was larger than 8 KiB, or a free tool's input was larger than 16 KiB.
415 unsupported_media_type Content-Type was not application/json.
500 internal_error Verification or storage failed. The request was not recorded.

Discovery