{"openapi":"3.1.0","info":{"title":"uplift.page prompt API","version":"1.1.0","description":"Tech-stack recommendations and clean, citation-backed mini prompts for AI builders. MCP server at https://uplift.page/mcp"},"servers":[{"url":"https://uplift.page/api"},{"url":"https://oeksfqhupxhnnlrmqivs.supabase.co/functions/v1/uplift-api"}],"paths":{"/v1/health":{"get":{"summary":"Liveness check.","x-plan":"free","x-auth":"none","responses":{"200":{"description":"OK"}}}},"/v1/categories":{"get":{"summary":"Published categories (games, web apps, AI agents, and more). Draft categories stay hidden until curated.","x-plan":"free","x-auth":"none","responses":{"200":{"description":"OK"}}}},"/v1/prompts":{"get":{"summary":"List published public prompts. Filters: ?category=<slug>, ?q=<full-text search>, ?limit=.","x-plan":"free","x-auth":"none","responses":{"200":{"description":"OK"}}}},"/v1/prompts/{slug}":{"get":{"summary":"One prompt: mini prompt body, tech stack, tags, version, and source citation.","x-plan":"free","x-auth":"none","responses":{"200":{"description":"OK"}}},"patch":{"summary":"Minor in-place edit (body, title, summary, stack, tags, status). Version bumps and the old row is snapshotted automatically.","x-plan":"free","x-auth":"bearer (Supabase user JWT: platform admin or org owner/admin)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"body_md":{"description":"string"},"title":{"description":"string"},"summary":{"description":"string"},"stack":{"description":"array"},"tags":{"description":"array"},"status":{"description":"draft | published | archived"}}}}}},"responses":{"200":{"description":"OK"}}}},"/v1/prompts/{slug}/raw":{"get":{"summary":"The mini prompt as text/markdown. Pipe it straight into a file or an agent context.","x-plan":"free","x-auth":"none","responses":{"200":{"description":"OK"}}}},"/v1/design":{"get":{"summary":"The uplift design language prompt (clean, minimalist, developer-forward UI).","x-plan":"free","x-auth":"none","responses":{"200":{"description":"OK"}}}},"/v1/recommend":{"post":{"summary":"Describe what you're building; returns a recommended tech stack, a clean mini prompt, a citation, and alternatives. Vector search with full-text fallback.","x-plan":"free","x-auth":"none","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"description":"string (required)"},"category":{"description":"string (optional category slug)"},"max_results":{"description":"number (optional, max 10)"}}}}}},"responses":{"200":{"description":"OK"}}}},"/v1/convert":{"post":{"summary":"Run the conversion engine on markdown: strips telemetry/tracking instructions, tracking params, invisible characters, vendor residue; returns the mini prompt plus a transparent removal report and source sha256.","x-plan":"free","x-auth":"none","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"markdown":{"description":"string (required, max 100KB)"},"budget":{"description":"number (optional max output chars, default 2400)"},"source_url":{"description":"string (optional)"}}}}}},"responses":{"200":{"description":"OK"}}}},"/v1/feedback":{"post":{"summary":"Models and systems report a prompt outcome: positive or negative with a message. Feeds quality analytics and per-prompt scores.","x-plan":"free","x-auth":"none","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt_slug":{"description":"string"},"outcome":{"description":"positive | negative (required)"},"message":{"description":"string"},"model":{"description":"string"},"source_agent":{"description":"string"},"metadata":{"description":"object"}}}}}},"responses":{"200":{"description":"OK"}}}},"/v1/change-requests":{"post":{"summary":"Propose a prompt change for human review in the dashboard (the curator skill's major-change path).","x-plan":"free","x-auth":"none","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt_slug":{"description":"string"},"title":{"description":"string (required)"},"rationale":{"description":"string (required)"},"proposed_body_md":{"description":"string"},"severity":{"description":"minor | major"},"requested_by":{"description":"string"},"agent":{"description":"string"}}}}}},"responses":{"200":{"description":"OK"}}}},"/v1/telemetry":{"post":{"summary":"Multi-tenant telemetry ingest: 1-100 events per call (skill runs, prompt runs, feedback). Forwards to the org's own webhook if configured.","x-plan":"free (fair use); paid for high volume","x-auth":"x-uplift-key (org ingest key)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"events":{"description":"array of events (or a single event object)"},"kind":{"description":"skill_usage | skill_feedback | prompt_run | custom"},"name":{"description":"skill/prompt name"},"model":{"description":"model used"},"more":{"description":"tokens, duration_ms, success, repo, payload"}}}}}},"responses":{"200":{"description":"OK"}}}},"/v1/usage":{"get":{"summary":"Self-serve metering transparency: this billing period's event and request counts for your org, plus plan and limits.","x-plan":"free","x-auth":"x-uplift-key (org ingest key)","responses":{"200":{"description":"OK"}}}},"/v1/import":{"post":{"summary":"Prompt-link import: fetch a markdown URL, run the conversion engine to strip the source's tracking, optionally append your org's outcome instrumentation, and store it in your library with full provenance (URL + sha256).","x-plan":"paid (Team or Scale)","x-auth":"x-uplift-key (org ingest key)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"description":"string (required, http(s), max 200KB)"},"instrument":{"description":"boolean (default true)"},"visibility":{"description":"private (default) | public (review required)"},"category":{"description":"string (default prompt-management)"},"slug":{"description":"string (optional)"}}}}}},"responses":{"200":{"description":"OK"}}}},"/v1/admin/reembed":{"post":{"summary":"Backfill embeddings for published prompts missing them (3 per call; call until remaining is 0).","x-plan":"free","x-auth":"none (idempotent, rate-limited)","responses":{"200":{"description":"OK"}}}},"/v1/openapi.json":{"get":{"summary":"This API description as OpenAPI 3.1, generated from the same manifest that renders the docs.","x-plan":"free","x-auth":"none","responses":{"200":{"description":"OK"}}}}}}