Drop-in SDKs in TypeScript and Python. No build step.
Every spec compiles to a single drop-in .ts or .py file with typed methods, dataclasses, and a Client class. No npm package to maintain, no codegen toolchain — paste the file into a repo and import it. Re-run from CI on every spec change with one curl line.
// Generated from openapi.yaml · 2026-05-07 // Run: curl docs.outworx.io/api/sdk/acme/ts > acme-sdk.ts export interface User { id: string; email: string; created_at: string; } export class AcmeClient { constructor(private apiKey: string) {} async listUsers(page = 1): Promise<User[]> { return this._get(`/v1/users?page=${page}`); } }
Why one file
Skip the SDK pipeline. Keep the SDK ergonomics.
The conventional codegen path is heavyweight: a generator project, a publishing pipeline, a registry, a versioning policy, a CI workflow, a deprecation strategy. Reasonable for AWS — overkill for a 30-endpoint API your three customers integrate against.
One file, end to end
Typed methods, request/response dataclasses, error types, retry policy, the Client class — all in one importable file. Paste it in. Done.
No package, no registry
No npm publish, no PyPI workflow, no version-pinning conversation between you and your customers. The file is the SDK; the spec is the source of truth.
Re-download on spec change
curl the latest from CI on every spec PR. The SDK regenerates deterministically — same spec in, same file out, byte-for-byte.
Wire it into CI
One curl line. Fresh SDK on every spec PR.
Every project gets a stable URL at /api/sdk/<slug>/<lang>. Pipe it into your repo, commit the result, push. Per-project rate limit (60/min) keeps a runaway CI loop from costing you money.
Add a CI step
- name: Sync Acme SDK
run: |
curl -fsSL \
docs.outworx.io/api/sdk/acme/ts \
-o packages/acme/src/index.tsCommit if changed
git diff --quiet packages/acme || \ (git add -A && git commit -m "sync sdk" && git push)
# .github/workflows/sync-sdk.yml curl -fsSL \ docs.outworx.io/api/sdk/acme/ts \ -o packages/acme/src/index.ts ✓ Wrote 612 lines · 18.4 KB rate limit: 23 / 60 (per-project, 1m window) git diff --quiet packages/acme/src/index.ts || \ (git add -A && git commit -m 'chore(sdk): sync' && git push) [main 8f3a4c2] chore(sdk): sync 1 file changed, 14 insertions(+), 8 deletions(-)
Supported languages
TypeScript and Python today. ~150 lines per new language.
Each generator lives under lib/sdk/. Adding a new language is a small file that walks the parsed spec and emits the target syntax. The runtime surface (request envelope, retry, error shape) is shared.
TypeScript
.tsLive- Typed methods + interfaces
- fetch-based, no transitive deps
- Retry with backoff (configurable)
- Tree-shake-friendly named exports
Python
.pyLive- Dataclasses for request + response
- httpx-based; no per-version pinning
- Typed exceptions per response code
- Sync + async client variants
Go
.goRoadmap- Coming soon
- Single-file with idiomatic structs
- context.Context-aware methods
Rust
.rsRoadmap- Coming soon
- Single-crate with reqwest
- serde-derived types end to end
{{name}} placeholders at run time.Environments
Variable maps you can reference as {{var}} — flip between staging and prod with one click.
- Staging
3 variables
- Production
3 variables
Saved requests
Method + path + headers + body, with {{var}} placeholders resolved against the active environment.
List users
GET {{baseUrl}}/v1/users
RunCreate user
POST {{baseUrl}}/v1/users
RunStart checkout
POST {{baseUrl}}/v1/checkout/sessions
RunRead order
GET {{baseUrl}}/v1/orders/{{orderId}}
Run
Saved requests + environments
The Postman replacement, built into the dashboard.
Library of named requests with {{var}} placeholders that resolve from a chosen environment at runtime. One-click flip between staging and production.
Collections + per-environment variables. Localhost auto-routes through `npx outworx-proxy` (same SSRF guard as the docs Try-It panel).
Project-scoped + RLS-locked. A collaborator can't accidentally read a prod token from an environment they shouldn't have access to.
Response auto-renders for JSON, sandboxed HTML, XML, images, video, audio, and PDF — with byte-faithful base64 round-trip for binaries.
Plan tiers
SDKs ship on every paid plan.
Free
—
- Try-It playground (cURL/Fetch examples)
- No SDK download
- Saved requests on Pro and up
Pro
TS + Python
- Single-file SDKs from every spec
- 60 req/min/project rate limit
- Saved requests + environments
- outworx-proxy for localhost
- Response auto-render
Business
TS + Python
- Everything in Pro
- Custom domain on the docs site
- Priority support
- Roadmap input on next language
Pairs well with
Spec Diff
Pair with the spec-diff PR action — every PR shows the diff and the SDK regenerates only on merge, never on a draft.
Mock Server
Frontends can stub the typed SDK against the free mock URL while the real backend is still being built.
MCP Server
MCP's `generate_client` tool emits the same single-file SDK — Claude / Cursor can pipe it into the user's repo.
Ship a typed SDK in one curl.
Pro plan unlocks single-file TypeScript and Python SDKs from your spec. No registry, no build step.