{"openapi":"3.1.0","info":{"title":"Shift Nudge Public API","version":"1.0.0","summary":"Public read endpoints for shiftnudge.com.","description":"The public, unauthenticated JSON API for Shift Nudge (professional interface design training). For membership-gated design reviews and WCAG/APCA contrast computation, connect the MCP server described at /.well-known/mcp/server-card.json. A prose overview of every machine-readable surface is at /developers, and the canonical facts are at /facts.json.","contact":{"name":"Shift Nudge support","email":"help@shiftnudge.com","url":"https://shiftnudge-web.vercel.app/contact"},"license":{"name":"Proprietary"}},"servers":[{"url":"https://shiftnudge-web.vercel.app","description":"This origin"}],"externalDocs":{"description":"Developer & agent resources","url":"https://shiftnudge-web.vercel.app/developers"},"paths":{"/api/health":{"get":{"operationId":"getHealth","summary":"Service health and resource descriptor","description":"Returns service status and absolute URLs to every machine-readable surface (OpenAPI, developer docs, facts, llms.txt, sitemap, MCP server card). Unauthenticated. Safe to poll.","tags":["status"],"responses":{"200":{"description":"Service is healthy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"405":{"description":"A non-GET method was used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/subscriber-count":{"get":{"operationId":"getSubscriberCount","summary":"Newsletter subscriber count","description":"Returns the approximate number of Shift Nudge newsletter subscribers. Cached daily. Unauthenticated.","tags":["stats"],"responses":{"200":{"description":"The current subscriber count.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberCount"}}}}}}}},"components":{"schemas":{"Health":{"type":"object","required":["status","service","version","resources"],"properties":{"status":{"type":"string","enum":["ok"],"description":"Overall service status."},"service":{"type":"string","description":"Service identifier.","examples":["shiftnudge-web"]},"version":{"type":"string","description":"Service version.","examples":["1.0.0"]},"resources":{"type":"object","description":"Absolute URLs to the machine-readable surfaces of this origin.","additionalProperties":{"type":"string","format":"uri"}}}},"SubscriberCount":{"type":"object","required":["count"],"properties":{"count":{"type":"integer","minimum":0,"description":"Approximate newsletter subscriber count."}}},"Error":{"type":"object","required":["error"],"description":"Structured error envelope returned by every endpoint on failure.","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code.","examples":["method_not_allowed"]},"message":{"type":"string","description":"Human-readable description of the error."},"hint":{"type":"string","description":"How to resolve the error."}}}}}}},"x-mcp":{"description":"Membership-gated design intelligence (design reviews, contrast computation) is exposed over MCP, not this REST API.","serverCard":"https://shiftnudge-web.vercel.app/.well-known/mcp/server-card.json"}}