{"openapi":"3.1.0","info":{"title":"The Swift Kit API","description":"Public HTTP API for The Swift Kit marketing site (https://theswiftk.it.com). Subscribe to the email course, send a done-for-you enquiry, or start a Dodo Payments checkout. The product itself is a SwiftUI Xcode template, not this API. Machine-readable docs: /llms.txt, /developers.","version":"1.0.0","contact":{"name":"Ahmed Gagan","email":"adgan.business@gmail.com","url":"https://theswiftk.it.com/contact"},"license":{"name":"Proprietary","url":"https://theswiftk.it.com/legal/terms"}},"servers":[{"url":"https://theswiftk.it.com","description":"Production"}],"tags":[{"name":"Leads","description":"Email capture and service enquiries"},{"name":"Checkout","description":"Payments via Dodo Payments"},{"name":"Discovery","description":"Machine-readable specs for agents"}],"paths":{"/api/subscribe":{"post":{"operationId":"subscribeEmailCourse","tags":["Leads"],"summary":"Subscribe an email to the SwiftUI shipping course","description":"Stores the address in the waitlist and triggers the email course. Idempotent per email (upsert). Rate-limit by not retrying on 400 invalid_email.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeRequest"}}}},"responses":{"200":{"description":"Subscribed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkResponse"}}}},"400":{"description":"Invalid email","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Storage failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"operationId":"subscribeEmailCourseGetRejected","tags":["Leads"],"summary":"GET is not allowed","description":"Subscribe is POST-only. Returns 405 with a JSON error body.","responses":{"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/leads":{"post":{"operationId":"createServicesLead","tags":["Leads"],"summary":"Submit a done-for-you or services enquiry","description":"Captures a lead for custom setup, App Store shipping, ASO, or related services. Does not charge a card. Ahmed replies by email.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRequest"}}}},"responses":{"200":{"description":"Lead stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkResponse"}}}},"400":{"description":"Invalid email","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Storage failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"get":{"operationId":"createServicesLeadGetRejected","tags":["Leads"],"summary":"GET is not allowed","description":"Leads are POST-only. Returns 405 with a JSON error body.","responses":{"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/dodo/checkout":{"get":{"operationId":"createDodoCheckout","tags":["Checkout"],"summary":"Start a Dodo Payments checkout session","description":"Redirects (302) to hosted checkout. Use this from a browser. Agents that cannot follow redirects should send users to https://theswiftk.it.com/pricing instead of calling this endpoint.","parameters":[{"name":"plan","in":"query","required":false,"description":"Product tier. `starter` ($99) or `pro` ($149). Defaults to starter.","schema":{"type":"string","enum":["starter","pro"],"default":"starter"}},{"name":"quantity","in":"query","required":false,"description":"Seat count. Minimum 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"source","in":"query","required":false,"description":"Attribution key for the CTA slot, e.g. pricing_page.","schema":{"type":"string"}}],"responses":{"302":{"description":"Redirect to Dodo hosted checkout (or static buy link fallback)","headers":{"Location":{"description":"Checkout URL","schema":{"type":"string","format":"uri"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApiJson","tags":["Discovery"],"summary":"Download this OpenAPI 3.1 specification as JSON","description":"The document you are reading. Content-Type: application/json.","responses":{"200":{"description":"OpenAPI document","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/openapi.yaml":{"get":{"operationId":"getOpenApiYaml","tags":["Discovery"],"summary":"Download this OpenAPI 3.1 specification as YAML","description":"Same document as /openapi.json, serialized as YAML.","responses":{"200":{"description":"OpenAPI document","content":{"application/yaml":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"OkResponse":{"type":"object","additionalProperties":false,"required":["ok"],"properties":{"ok":{"type":"boolean","enum":[true]}}},"ApiError":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","docs"],"properties":{"code":{"type":"string","description":"Stable machine code, e.g. invalid_email, method_not_allowed."},"message":{"type":"string","description":"Human-readable explanation."},"hint":{"type":"string","description":"What to do next."},"docs":{"type":"string","format":"uri","description":"Always https://theswiftk.it.com/developers"}}}}},"SubscribeRequest":{"type":"object","additionalProperties":false,"required":["email"],"properties":{"email":{"type":"string","format":"email","maxLength":254},"source":{"type":"string","maxLength":120,"description":"CTA slot id, e.g. prog_best_components"},"page":{"type":"string","maxLength":200,"description":"Path the form was submitted from"}}},"LeadRequest":{"type":"object","additionalProperties":false,"required":["email"],"properties":{"email":{"type":"string","format":"email","maxLength":254},"name":{"type":"string","maxLength":120},"message":{"type":"string","maxLength":4000},"service":{"type":"string","enum":["dfy_setup","dfy_launch","aso","screenshots","ugc","app_design","app_development","other"]},"budget_band":{"type":"string","enum":["under_1k","1k_5k","5k_15k","15k_plus","unsure",""]},"source":{"type":"string","maxLength":120},"page":{"type":"string","maxLength":200}}}}}}