{"openapi":"3.1.0","info":{"title":"AlertForge API","version":"1.0.0","summary":"AlertForge's public API surface -- small and honest by design.","description":"AlertForge is a web app, not a general-purpose public API today. This document lists exactly two things: a public, unauthenticated health check, and the checkout-session endpoint that actually powers the pricing page -- documented so its real behavior and real prices are machine-readable, not because it's callable by an anonymous agent (it requires an existing signed-in Supabase session set by the web app; there is no self-serve API-key/token issuance yet). See https://alertforge.ai/docs/api and https://alertforge.ai/auth.md for the full account of what's public vs. session-gated, and https://alertforge.ai/api/mcp for a real, public, read-only MCP server (product info, pricing, FAQ; no auth, no side effects).","contact":{"name":"AlertForge support","email":"support@alertforge.ai","url":"https://alertforge.ai/support"}},"servers":[{"url":"https://alertforge.ai"}],"x-service-info":{"categories":["stream-tools","video-generation","creator-tools"],"docs":{"homepage":"https://alertforge.ai","apiReference":"https://alertforge.ai/docs/api","llms":"https://alertforge.ai/llms.txt"}},"paths":{"/api/health":{"get":{"operationId":"getHealth","summary":"Service health check","description":"Public, unauthenticated. Returns 200 when the app is serving requests. No internal details are exposed.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]}},"required":["status"]},"example":{"status":"ok"}}}}}}},"/api/billing/checkout":{"post":{"operationId":"createCheckoutSession","summary":"Create a Stripe Checkout session for a subscription tier or a one-time credit/identity pack","description":"Session-authenticated only -- requires an existing signed-in Supabase session (browser cookies set by https://alertforge.ai/login or /signup). Not directly callable by an unauthenticated agent; documented here for transparency about what AlertForge's real, priced checkout surface does and what it actually charges. On success, returns a Stripe-hosted Checkout URL -- the human completes payment there (redirect flow); AlertForge only learns of success once Stripe's webhook fires. This is a traditional session-authenticated redirect checkout, not an x402-style inline payment-required challenge, so this operation does not return 402.","security":[{"supabaseSession":[]}],"x-payment-info":{"offers":[{"intent":"charge","method":"stripe","amount":"1500","currency":"usd","description":"Starter plan, billed monthly -- 240 credits/mo, 720p × 5 sec alerts. $15/mo (annual $135/yr also available)."},{"intent":"charge","method":"stripe","amount":"2900","currency":"usd","description":"Pro plan, billed monthly -- 540 credits/mo, 720p × 8 sec alerts. $29/mo (annual $261/yr also available)."},{"intent":"charge","method":"stripe","amount":"4900","currency":"usd","description":"Max plan, billed monthly -- 1080 credits/mo, 1080p × 8 sec alerts. $49/mo (annual $441/yr also available)."},{"intent":"charge","method":"stripe","amount":"12900","currency":"usd","description":"Ultra plan, billed monthly -- 1800 credits/mo, 4K × 8 sec alerts. $129/mo (annual $1161/yr also available)."},{"intent":"charge","method":"stripe","amount":"500","currency":"usd","description":"Mini one-time credit pack -- 30 credits for $5."},{"intent":"charge","method":"stripe","amount":"1500","currency":"usd","description":"Boost one-time credit pack -- 150 credits for $15."},{"intent":"charge","method":"stripe","amount":"3500","currency":"usd","description":"Bulk one-time credit pack -- 350 credits for $35."}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["subscription_tier","pack"]},"tier":{"type":"string","enum":["starter","pro_v2","max","ultra"]},"cycle":{"type":"string","enum":["monthly","annual"]},"pack":{"type":"string","enum":["mini","boost","bulk","spark","basic","full","fullplus"]},"quantity":{"type":"integer","minimum":1,"maximum":10},"returnTo":{"type":"string","description":"Relative in-app path to return to after checkout."}}},"examples":{"subscribeToMax":{"value":{"mode":"subscription_tier","tier":"max","cycle":"monthly"}},"buyBoostPack":{"value":{"mode":"pack","pack":"boost"}}}}}},"responses":{"200":{"description":"Checkout session created.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}},"400":{"description":"Invalid tier, cycle, or pack."},"401":{"description":"No signed-in session."},"429":{"description":"Rate limited."},"500":{"description":"Billing not configured, or a Stripe error."}}}}},"components":{"securitySchemes":{"supabaseSession":{"type":"apiKey","in":"cookie","name":"sb-session","description":"Browser session cookie set by Supabase Auth after web sign-in (email/password, magic link, or Google). Placeholder name -- this is not a documented, stable, third-party API-key contract. See /auth.md."}}}}