{"openapi":"3.1.0","info":{"title":"foretop","version":"0.1.0"},"paths":{"/checkout":{"get":{"summary":"Checkout","description":"Paddle's default payment link, hosted on the approved domain.\n\nPaddle uses this one URL for three things: opening a checkout for a transaction, the\ncustomer portal's update-payment-method flow, and the links inside its own dunning emails.\nIt must live on a domain Paddle has approved. Both are, since `app.foretop.dev` was approved\non 2026-09-05 after four rejections — but this page stays regardless, because Paddle's\nconfigured default payment link points here and that URL is already in dunning emails that\nhave been sent. Removing it would break payment recovery for anyone holding one.\n\nPublic and unauthenticated on purpose. The transaction comes from `_ptxn`, a Paddle-issued\nidentifier this page neither mints nor can forge, and the client token is public by\nconstruction. A login wall here is what broke payment recovery on the hub's own copy.","operationId":"checkout_checkout_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Checkout","description":"Paddle's default payment link, hosted on the approved domain.\n\nPaddle uses this one URL for three things: opening a checkout for a transaction, the\ncustomer portal's update-payment-method flow, and the links inside its own dunning emails.\nIt must live on a domain Paddle has approved. Both are, since `app.foretop.dev` was approved\non 2026-09-05 after four rejections — but this page stays regardless, because Paddle's\nconfigured default payment link points here and that URL is already in dunning emails that\nhave been sent. Removing it would break payment recovery for anyone holding one.\n\nPublic and unauthenticated on purpose. The transaction comes from `_ptxn`, a Paddle-issued\nidentifier this page neither mints nor can forge, and the client token is public by\nconstruction. A login wall here is what broke payment recovery on the hub's own copy.","operationId":"checkout_checkout_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/og.png":{"get":{"summary":"Og Image","description":"The 1200x630 social card every page's Open Graph and Twitter metadata points at.","operationId":"og_image_og_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots","description":"Belt and braces with the per-page meta tag: a non-production deployment says so at the\ncrawler's first request rather than only once it has fetched and parsed a page.","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response"}}}},"/health/live":{"get":{"summary":"Health Live","operationId":"health_live_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Live Health Live Get"}}}}}}},"/health/ready":{"get":{"summary":"Health Ready","operationId":"health_ready_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Ready Health Ready Get"}}}}}}}}}