Developer Portal

Programmatic access to SayNO. Currently in early availability — the waitlist API is open and requires no authentication.

● API online Version 1.0.0

Overview

The SayNO API is a lightweight REST API served from the Cloudflare Workers edge. All endpoints return application/json. All errors return a structured JSON error body (never an HTML error page).

There is currently one functional resource: the waitlist. As the product evolves, additional resources (usage stats, block-session management, habit data) will be added here.

Base URL

https://saynoapp.imbtm.workers.dev

Authentication

The public API endpoints documented here require no authentication. No API key or token is needed. Simply send a valid request to the endpoint.

Future premium endpoints will use Bearer token authentication (Authorization: Bearer <token>).

Error format

All error responses (4xx, 5xx) use this structure:

{ "error": { "code": "BAD_REQUEST", // machine-readable code "message": "The `name` field ...", // human-readable description "docs": "https://saynoapp.imbtm.workers.dev/openapi.json" } }

Error codes: BAD_REQUEST, METHOD_NOT_ALLOWED, NOT_FOUND, CONFLICT, INTERNAL_ERROR.


Endpoints

GET /v1/health Health check

Returns 200 when the API is reachable. Agents should call this before other endpoints to verify connectivity.

cURL
curl https://saynoapp.imbtm.workers.dev/v1/health
Response 200
{
  "status": "ok",
  "version": "1.0.0",
  "timestamp": "2026-08-24T00:00:00Z"
}
POST /v1/waitlist Join early-access waitlist

Registers a person on the SayNO early-access waitlist. Providing an email enables deduplication (same email is never stored twice) and allows SayNO to notify the user when access opens.

Request body application/json

FieldTypeRequiredDescription
name *stringYesFull name. 1–120 chars.
emailstring (email)NoEmail address. Used for deduplication and notification.
cURL — name only
curl -X POST https://saynoapp.imbtm.workers.dev/v1/waitlist \
  -H "Content-Type: application/json" \
  -d '{"name": "Alex Johnson"}'
cURL — with email
curl -X POST https://saynoapp.imbtm.workers.dev/v1/waitlist \
  -H "Content-Type: application/json" \
  -d '{"name": "Alex Johnson", "email": "alex@example.com"}'
Response 200 — success
{
  "success": true,
  "id": "Xk9mN2pQrLvT8wYz",
  "alreadyRegistered": false
}
Response 400 — missing name
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "The `name` field is required and must not be empty.",
    "docs": "https://saynoapp.imbtm.workers.dev/openapi.json"
  }
}

MCP Server

SayNO provides an MCP Server manifest at /mcp.json.

OpenAPI specification

The full OpenAPI 3.1 specification is available at:

GET /openapi.json

Use this to generate SDK clients, import into Postman/Insomnia, or feed directly to an LLM function-calling schema.

Download
curl https://saynoapp.imbtm.workers.dev/openapi.json -o sayno-openapi.json

CLI tool

A lightweight Node.js CLI wraps the public API. Install from npm:

npm install -g sayno-cli

# Usage
sayno-cli waitlist join --name "Alex" --email "alex@example.com"
sayno-cli health

For AI agents

If you are an AI agent integrating with SayNO, read these files:

All API error responses are JSON. The site returns a real HTTP 404 for paths that do not exist — not the app shell.