[{"data":1,"prerenderedAt":486},["ShallowReactive",2],{"doc-reference\u002Fsdk-roadmap":3},{"id":4,"title":5,"author":6,"body":7,"date":470,"description":471,"draft":472,"extension":473,"faq":474,"meta":475,"navigation":142,"path":476,"schemaType":477,"seo":478,"stem":479,"tags":480,"updatedAt":484,"__hash__":485},"content\u002Freference\u002Fsdk-roadmap.md","SDK roadmap","YT2Text Team",{"type":8,"value":9,"toc":453},"minimark",[10,14,18,48,53,66,70,90,93,97,100,113,116,119,123,126,131,195,199,264,268,310,314,362,366,415,419,446,450],[11,12,5],"h1",{"id":13},"sdk-roadmap",[15,16,17],"p",{},"YT2Text is API-first today. The stable integration path is the REST API documented in:",[19,20,21,28,33,38,43],"ul",{},[22,23,24],"li",{},[25,26,27],"code",{},"\u002Fguide\u002Fauthentication",[22,29,30],{},[25,31,32],{},"\u002Fapi\u002Fvideos",[22,34,35],{},[25,36,37],{},"\u002Fapi\u002Fbatch",[22,39,40],{},[25,41,42],{},"\u002Fapi\u002Fusage",[22,44,45],{},[25,46,47],{},"\u002Fapi\u002Fwebhooks",[49,50,52],"h2",{"id":51},"current-status","Current status",[19,54,55,58],{},[22,56,57],{},"REST API is the officially supported path.",[22,59,60,61,65],{},"Client SDK packages are planned but ",[62,63,64],"strong",{},"not yet published as first-party packages"," in this repository.",[49,67,69],{"id":68},"planned-sdk-names","Planned SDK names",[19,71,72,82],{},[22,73,74,77,78,81],{},[62,75,76],{},"Python",": ",[25,79,80],{},"yt2text"," (PyPI)",[22,83,84,77,87,89],{},[62,85,86],{},"JavaScript\u002FTypeScript",[25,88,80],{}," (npm)",[15,91,92],{},"Additional language clients may be added later (Swift\u002FKotlin\u002Fdocs examples may remain advisory until release).",[49,94,96],{"id":95},"security-and-auth-requirement","Security and auth requirement",[15,98,99],{},"Any SDK wrapper must authenticate every request using headers only:",[19,101,102,108],{},[22,103,104,107],{},[25,105,106],{},"Authorization: Bearer \u003Capi_key>"," or",[22,109,110],{},[25,111,112],{},"X-API-Key: \u003Capi_key>",[15,114,115],{},"There is no support for query parameter authentication.",[15,117,118],{},"SDKs should treat API keys as secrets and should not embed them in client-side apps.",[49,120,122],{"id":121},"public-sdk-todo-plan-typescript-python","Public SDK TODO plan (TypeScript + Python)",[15,124,125],{},"Goal: ship official TS and Python SDKs that let users go from API key to production deployment in minutes.",[127,128,130],"h3",{"id":129},"phase-1-foundation-week-1","Phase 1: Foundation (Week 1)",[19,132,135,159,179,189],{"className":133},[134],"contains-task-list",[22,136,139,144,145],{"className":137},[138],"task-list-item",[140,141],"input",{"disabled":142,"type":143},true,"checkbox"," Finalize package names and ownership:\n",[19,146,147,153],{},[22,148,149,150,152],{},"TS: ",[25,151,80],{}," on npm",[22,154,155,156,158],{},"Python: ",[25,157,80],{}," on PyPI",[22,160,162,164,165,168,169,168,172,168,175,178],{"className":161},[138],[140,163],{"disabled":142,"type":143}," Create SDK repos (or monorepo packages) with ",[25,166,167],{},"LICENSE",", ",[25,170,171],{},"README",[25,173,174],{},"CHANGELOG",[25,176,177],{},"CONTRIBUTING",".",[22,180,182,184,185,188],{"className":181},[138],[140,183],{"disabled":142,"type":143}," Define semantic versioning policy (",[25,186,187],{},"v1.x"," stable API contract).",[22,190,192,194],{"className":191},[138],[140,193],{"disabled":142,"type":143}," Add generated API types\u002Fmodels from the OpenAPI spec as the single source of truth.",[127,196,198],{"id":197},"phase-2-core-client-parity-week-1-2","Phase 2: Core client parity (Week 1-2)",[19,200,202,216,232,249,255],{"className":201},[134],[22,203,205,207,208,211,212,215],{"className":204},[138],[140,206],{"disabled":142,"type":143}," Implement auth configuration (",[25,209,210],{},"apiKey",", custom ",[25,213,214],{},"baseUrl",", request timeout).",[22,217,219,221,222,168,225,168,228,231],{"className":218},[138],[140,220],{"disabled":142,"type":143}," Implement Videos endpoints (",[25,223,224],{},"process",[25,226,227],{},"status",[25,229,230],{},"result",") with typed responses.",[22,233,235,237,238,168,240,168,242,168,245,248],{"className":234},[138],[140,236],{"disabled":142,"type":143}," Implement Batch endpoints (",[25,239,224],{},[25,241,227],{},[25,243,244],{},"results",[25,246,247],{},"list",").",[22,250,252,254],{"className":251},[138],[140,253],{"disabled":142,"type":143}," Implement Usage endpoints (current usage\u002Flimits).",[22,256,258,260,261,178],{"className":257},[138],[140,259],{"disabled":142,"type":143}," Implement Webhook signature verification helper for ",[25,262,263],{},"X-Webhook-Signature",[127,265,267],{"id":266},"phase-3-dx-and-reliability-week-2","Phase 3: DX and reliability (Week 2)",[19,269,271,285,295,304],{"className":270},[134],[22,272,274,276,277,280,281,284],{"className":273},[138],[140,275],{"disabled":142,"type":143}," Add automatic retries for ",[25,278,279],{},"429"," + idempotent ",[25,282,283],{},"5xx"," responses with exponential backoff.",[22,286,288,290,291,294],{"className":287},[138],[140,289],{"disabled":142,"type":143}," Add strongly typed error classes (map API ",[25,292,293],{},"error.code"," values).",[22,296,298,300,301,248],{"className":297},[138],[140,299],{"disabled":142,"type":143}," Add polling helper (",[25,302,303],{},"waitForResult(jobId, { intervalMs, timeoutMs })",[22,305,307,309],{"className":306},[138],[140,308],{"disabled":142,"type":143}," Add request ID exposure for debugging\u002Flog correlation.",[127,311,313],{"id":312},"phase-4-super-easy-deployment-path-week-2-3","Phase 4: Super-easy deployment path (Week 2-3)",[19,315,317,326,340,350,356],{"className":316},[134],[22,318,320,322,323,248],{"className":319},[138],[140,321],{"disabled":142,"type":143}," Ship copy-paste quickstart for both SDKs (",[25,324,325],{},"3-minute deploy",[22,327,329,331,332],{"className":328},[138],[140,330],{"disabled":142,"type":143}," Provide one-command starter templates:\n",[19,333,334,337],{},[22,335,336],{},"TS: Vercel\u002FNode function template",[22,338,339],{},"Python: FastAPI\u002FCloud Run template",[22,341,343,345,346,349],{"className":342},[138],[140,344],{"disabled":142,"type":143}," Add ",[25,347,348],{},".env.example"," + secret management guidance for production.",[22,351,353,355],{"className":352},[138],[140,354],{"disabled":142,"type":143}," Add webhook receiver examples with signature verification enabled by default.",[22,357,359,361],{"className":358},[138],[140,360],{"disabled":142,"type":143}," Publish Docker examples for both SDKs (minimal production image + healthcheck).",[127,363,365],{"id":364},"phase-5-cicd-and-release-automation-week-3","Phase 5: CI\u002FCD and release automation (Week 3)",[19,367,369,375,381,395,409],{"className":368},[134],[22,370,372,374],{"className":371},[138],[140,373],{"disabled":142,"type":143}," Add test matrix (Node LTS versions + Python 3.10-3.13).",[22,376,378,380],{"className":377},[138],[140,379],{"disabled":142,"type":143}," Add integration tests against staging API.",[22,382,384,386,387],{"className":383},[138],[140,385],{"disabled":142,"type":143}," Add automated publish workflows:\n",[19,388,389,392],{},[22,390,391],{},"npm provenance + release tags",[22,393,394],{},"PyPI trusted publisher + release tags",[22,396,398,400,401,404,405,408],{"className":397},[138],[140,399],{"disabled":142,"type":143}," Add prerelease channel (",[25,402,403],{},"next"," \u002F ",[25,406,407],{},"beta",") before GA.",[22,410,412,414],{"className":411},[138],[140,413],{"disabled":142,"type":143}," Add release checklist (smoke tests, docs sync, announcement).",[127,416,418],{"id":417},"phase-6-ga-readiness-week-3-4","Phase 6: GA readiness (Week 3-4)",[19,420,422,428,434,440],{"className":421},[134],[22,423,425,427],{"className":424},[138],[140,426],{"disabled":142,"type":143}," Documentation landing pages updated with real install commands and live examples.",[22,429,431,433],{"className":430},[138],[140,432],{"disabled":142,"type":143}," Support policy and deprecation policy published.",[22,435,437,439],{"className":436},[138],[140,438],{"disabled":142,"type":143}," Postman collection parity confirmed with both SDKs.",[22,441,443,445],{"className":442},[138],[140,444],{"disabled":142,"type":143}," Final migration guide: raw REST -> TS\u002FPython SDK.",[49,447,449],{"id":448},"future-notes","Future notes",[15,451,452],{},"When first-party SDKs are released, release notes will link package URLs and example auth setup for production apps.",{"title":454,"searchDepth":455,"depth":455,"links":456},"",2,[457,458,459,460,469],{"id":51,"depth":455,"text":52},{"id":68,"depth":455,"text":69},{"id":95,"depth":455,"text":96},{"id":121,"depth":455,"text":122,"children":461},[462,464,465,466,467,468],{"id":129,"depth":463,"text":130},3,{"id":197,"depth":463,"text":198},{"id":266,"depth":463,"text":267},{"id":312,"depth":463,"text":313},{"id":364,"depth":463,"text":365},{"id":417,"depth":463,"text":418},{"id":448,"depth":455,"text":449},"2025-02-01","Planned first-party SDK clients for YT2Text REST API",false,"md",null,{},"\u002Freference\u002Fsdk-roadmap","TechArticle",{"title":5,"description":471},"reference\u002Fsdk-roadmap",[481,482,483],"reference","operations","reliability","2026-02-28","gqAGSsnOMYqF3VAdMBOCcgz3JJy4fU2ebFxujuY_Wvk",1792448457539]