{"openapi":"3.0.3","info":{"title":"WPD Converter Website API","description":"Public HTTP APIs for the WPD Converter marketing site (wpdconverter.com). These endpoints support pricing, roadmap voting, downloads, checkout status, feedback, and Conversion Library Ask balance/checkout helpers. This is not a document-conversion API — conversion runs in the Windows desktop app.\n\nAPI versioning: prefer `/api/v1/…` (documented below via the v1 server). Unversioned `/api/…` paths remain supported as compatibility aliases to the same handlers. Breaking changes will ship under a new major (`/api/v2/…`); when an older major is retired, responses will include HTTP `Deprecation` and `Sunset` headers and this document will note the timeline.\n\nRate limits: public JSON/API routes allow 120 requests per IP per 60 seconds. Successful and error responses include IETF `RateLimit` and `RateLimit-Policy` headers; HTTP 429 responses also include `Retry-After` (seconds).","version":"1.0.0","contact":{"name":"WPD Converter Support","email":"support@wpdconverter.com","url":"https://wpdconverter.com/contact"}},"servers":[{"url":"https://wpdconverter.com/api/v1","description":"API v1 (preferred)"},{"url":"https://wpdconverter.com/api","description":"Unversioned compatibility aliases (same handlers as v1)"}],"tags":[{"name":"Pricing","description":"Live product offer pricing"},{"name":"Roadmap","description":"Public product roadmap and votes"},{"name":"Download","description":"Windows installer download"},{"name":"Checkout","description":"Stripe Checkout helpers"},{"name":"Feedback","description":"Product feedback submissions"},{"name":"Library Asks","description":"Conversion Library hosted Ask credits"}],"paths":{"/pricing":{"get":{"operationId":"getPricing","tags":["Pricing"],"summary":"Get live WPD Converter pricing and Payment Links","description":"Returns the public pricing payload used by the website and desktop app (Standard, Plus, commercial, trial file limit, and Stripe Payment Links).","responses":{"200":{"description":"Current pricing payload","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingPayload"}}}},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/roadmap":{"get":{"operationId":"listRoadmapFeatures","tags":["Roadmap"],"summary":"List visible roadmap features","description":"Lists publicly visible WPD Converter roadmap features with vote counts and whether the caller IP has already voted.","responses":{"200":{"description":"Roadmap features for WPD Converter","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadmapListResponse"}}}},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"toggleRoadmapVote","tags":["Roadmap"],"summary":"Toggle a vote on a roadmap feature (by client IP)","description":"Toggles a single vote for a visible roadmap feature, keyed by the caller IP. Returns whether the feature is voted after the toggle.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadmapVoteRequest"}}}},"responses":{"200":{"description":"Vote toggled","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadmapVoteResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/download":{"get":{"operationId":"downloadInstaller","tags":["Download"],"summary":"Download the current Windows MSI installer","description":"Streams or redirects to the current WPD Converter Windows installer. Non-Windows browsers may be redirected to download help.","responses":{"200":{"description":"Installer bytes","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"302":{"description":"Redirect to download help or storage URL"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"}}}},"/feedback":{"post":{"operationId":"submitFeedback","tags":["Feedback"],"summary":"Submit product feedback or a review","description":"Records product feedback (feature request, bug report, general note, or review) from the website or desktop app.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}}},"responses":{"200":{"description":"Feedback recorded","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/checkout/create":{"post":{"operationId":"createCheckoutSession","tags":["Checkout"],"summary":"Create a Stripe Checkout session for a WPD license","description":"Creates a Stripe Checkout Session for Standard, Plus, bundle, or commercial WPD licenses. Returns a hosted Checkout URL.","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutCreateRequest"}}}},"responses":{"200":{"description":"Checkout session created","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutCreateResponse"}}}},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/checkout/status":{"get":{"operationId":"getCheckoutStatus","tags":["Checkout"],"summary":"Poll license issuance for a paid Checkout session","description":"Polls whether license keys have been issued for a paid Stripe Checkout Session.","parameters":[{"name":"session_id","in":"query","required":true,"description":"Stripe Checkout Session id (cs_…)","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Checkout / license status","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutStatus"}}}},"400":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/checkout/summary":{"get":{"operationId":"getCheckoutSummary","tags":["Checkout"],"summary":"Get paid amount and plan type for analytics","description":"Returns a compact purchase summary (paid amount, currency, plan type) for analytics after Checkout.","parameters":[{"name":"session_id","in":"query","required":true,"description":"Stripe Checkout Session id (cs_…)","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Purchase summary","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutSummary"}}}},"400":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/library/asks/balance":{"post":{"operationId":"getLibraryAskBalance","tags":["Library Asks"],"summary":"Get Conversion Library Ask credit balance for a Plus key","description":"Returns the hosted Ask credit balance for a Conversion Library Plus (WPDP) license key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryAskBalanceRequest"}}}},"responses":{"200":{"description":"Ask balance","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryAskBalanceResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/library/asks/checkout":{"post":{"operationId":"createLibraryAskCheckout","tags":["Library Asks"],"summary":"Create a Stripe Checkout session to purchase Ask credits","description":"Creates a Stripe Checkout Session to purchase a hosted Ask pack (100, 500, or 1000) tied to a Plus (WPDP) license key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryAskCheckoutRequest"}}}},"responses":{"200":{"description":"Checkout session created","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryAskCheckoutResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/library/asks/purchase-status":{"get":{"operationId":"getLibraryAskPurchaseStatus","tags":["Library Asks"],"summary":"Poll Ask credit purchase status","description":"Polls Ask-pack purchase fulfillment for a Stripe Checkout Session and returns granted credits.","parameters":[{"name":"session_id","in":"query","required":true,"description":"Stripe Checkout Session id (cs_…)","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Purchase status","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryAskPurchaseStatus"}}}},"400":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/library/ask":{"post":{"operationId":"runLibraryAsk","tags":["Library Asks"],"summary":"Run a hosted Ask against Conversion Library context (Plus key required)","description":"Runs one hosted Ask against Conversion Library context using a Plus (WPDP) key. Consumes Ask credits when configured; returns the model answer and remaining balance.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryAskRequest"}}}},"responses":{"200":{"description":"Ask completed","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryAskResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}}},"components":{"schemas":{"Error":{"type":"object","required":["code","message","resolution"],"additionalProperties":true,"properties":{"code":{"type":"string","description":"Stable machine-readable error code","example":"missing_session_id"},"message":{"type":"string","description":"Human-readable error summary"},"resolution":{"type":"string","description":"Short hint describing how to resolve the error"}}},"PricingPayload":{"type":"object","required":["product","productDisplayName","currency","licensePrice","licensePriceDisplay","stripePaymentLink","trialFileLimit"],"properties":{"product":{"type":"string","enum":["wpd"]},"productDisplayName":{"type":"string"},"currency":{"type":"string","enum":["USD"]},"licensePrice":{"type":"string"},"licensePriceDisplay":{"type":"string"},"stripePaymentLink":{"type":"string","format":"uri"},"commercialLicensePrice":{"type":"string"},"commercialLicensePriceDisplay":{"type":"string"},"stripeCommercialPaymentLink":{"type":"string","format":"uri"},"trialFileLimit":{"type":"integer"},"plusAddonPrice":{"type":"string"},"plusAddonPriceDisplay":{"type":"string"},"stripePlusAddonPaymentLink":{"type":"string","format":"uri"},"plusBundlePrice":{"type":"string"},"plusBundlePriceDisplay":{"type":"string"},"stripePlusBundlePaymentLink":{"type":"string","format":"uri"},"plusCommercialPrice":{"type":"string"},"plusCommercialPriceDisplay":{"type":"string"},"stripePlusCommercialPaymentLink":{"type":"string","format":"uri"}}},"RoadmapFeature":{"type":"object","required":["id","title","description","category","vote_count","voted"],"properties":{"id":{"type":"integer"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"vote_count":{"type":"integer"},"voted":{"type":"boolean"},"release_version":{"type":"string","nullable":true}}},"RoadmapListResponse":{"type":"object","required":["features"],"properties":{"features":{"type":"array","items":{"$ref":"#/components/schemas/RoadmapFeature"}}}},"RoadmapVoteRequest":{"type":"object","required":["featureId"],"properties":{"featureId":{"type":"integer","minimum":1,"description":"Visible roadmap feature id from listRoadmapFeatures"}}},"RoadmapVoteResponse":{"type":"object","required":["voted"],"properties":{"voted":{"type":"boolean","description":"True if the caller IP has a vote after the toggle"}}},"FeedbackRequest":{"type":"object","required":["description"],"properties":{"type":{"type":"string","enum":["feature_request","bug_report","general","review"]},"email":{"type":"string","format":"email"},"description":{"type":"string","minLength":1},"appVersion":{"type":"string"},"rating":{"type":"integer","minimum":1,"maximum":5}}},"FeedbackResponse":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"}}},"CheckoutCreateRequest":{"type":"object","properties":{"channel":{"type":"string","enum":["store","msi"],"description":"Install channel reported by the desktop app"},"product":{"type":"string","description":"License SKU selector understood by checkout helpers"}}},"CheckoutCreateResponse":{"type":"object","required":["sessionId","url"],"properties":{"sessionId":{"type":"string"},"url":{"type":"string","format":"uri"}}},"CheckoutStatus":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["pending","processing","paid"]},"licenseKey":{"type":"string","nullable":true},"standardLicenseKey":{"type":"string","nullable":true},"plusLicenseKey":{"type":"string","nullable":true}}},"CheckoutSummary":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["unpaid","paid"]},"value":{"type":"number"},"currency":{"type":"string"},"plan_type":{"type":"string","enum":["personal","commercial"]}}},"LibraryAskBalanceRequest":{"type":"object","required":["plusLicenseKey"],"properties":{"plusLicenseKey":{"type":"string","description":"Conversion Library Plus (WPDP) license key"}}},"LibraryAskBalanceResponse":{"type":"object","properties":{"balance":{"type":"integer"},"lifetimeGranted":{"type":"integer"},"lifetimeUsed":{"type":"integer"},"includedWithPlus":{"type":"integer"}}},"LibraryAskCheckoutRequest":{"type":"object","required":["plusLicenseKey","askCount"],"properties":{"plusLicenseKey":{"type":"string","description":"Conversion Library Plus (WPDP) license key"},"askCount":{"type":"integer","enum":[100,500,1000],"description":"Ask pack size to purchase"}}},"LibraryAskCheckoutResponse":{"type":"object","required":["sessionId","url"],"properties":{"sessionId":{"type":"string"},"url":{"type":"string","format":"uri"},"askCount":{"type":"integer","enum":[100,500,1000]}}},"LibraryAskPurchaseStatus":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["unpaid","paid"]},"kind":{"type":"string","enum":["ask_pack","unknown"]},"message":{"type":"string"},"askCount":{"type":"integer","enum":[100,500,1000]},"asksGranted":{"type":"integer"},"balance":{"type":"integer"},"alreadyApplied":{"type":"boolean"},"value":{"type":"number"},"currency":{"type":"string"}}},"LibraryAskRequest":{"type":"object","required":["plusLicenseKey","userPrompt"],"properties":{"plusLicenseKey":{"type":"string","description":"Conversion Library Plus (WPDP) license key"},"userPrompt":{"type":"string","minLength":1,"description":"Question to ask against library context"},"systemPrompt":{"type":"string","description":"Optional system / library context prompt"},"tier":{"type":"string","description":"Ask model tier selector (defaults to Standard)"},"conversationHistory":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"type":"string"}}}}}},"LibraryAskResponse":{"type":"object","required":["answer"],"properties":{"answer":{"type":"string"},"asksCharged":{"type":"integer"},"balanceRemaining":{"type":"integer"},"tier":{"type":"string"},"model":{"type":"string"},"caps":{"type":"object","properties":{"maxPromptChars":{"type":"integer"},"maxCompletionTokens":{"type":"integer"}}}}}},"responses":{"Error":{"description":"Structured JSON error (`code`, `message`, `resolution`)","headers":{"RateLimit":{"description":"IETF RateLimit structured field, e.g. `\"default\";r=119;t=58` (remaining; seconds until reset).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy structured field, e.g. `\"default\";q=120;w=60` (quota; window seconds).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}