Client SDKs from
your OpenAPI spec
in minutes, not months
Upload or paste your spec, download a typed SDK ZIP, and integrate on your servers — no ferrumSDK runtime required.
Hobby: 1 free generation to try. Pro ($99/mo): 100 generations/month across all 7 languages.
import { PetstoreClient } from 'petstore-sdk';
const client = new PetstoreClient({
apiKey: process.env.PETSTORE_API_KEY,
});
// One typed method per operation
const pets = await client.findPetsByStatus({ status: 'available' });
const order = await client.placeOrder({ petId: 1, quantity: 2 });
Workflow
Ship an SDK in three steps
No config files. No YAML schemas. Just your spec.
Paste or upload your spec
Drop in JSON or YAML, fetch from a URL, or upload a file. OpenAPI 3.0 and 3.1.
Pick your language
TypeScript, Python, Go, Java, C# / .NET, PHP, or Ruby — idiomatic for each ecosystem.
Download & ship
Unzip, wire auth, run against your API. You own the code — npm, PyPI, Maven, or private.
Your spec in, a typed client out
ferrumSDK reads OpenAPI 3.0 and 3.1, in JSON or YAML, and writes the client you would write by hand: one method per operation, one type per schema, and auth taken from your security schemes.
paths:
/pets/{id}:
get:
operationId: getPet
parameters:
- name: id
in: path
required: true
schema: { type: integer }
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/Pet"
components:
schemas:
Pet:
required: [id, name]
properties:
id: { type: integer }
name: { type: string }
tag: { type: string }
securitySchemes:
ApiKeyAuth: { type: apiKey, in: header, name: X-API-Key }
// src/client.ts
export class PetStoreClient {
async getPet(id: number, options?: RequestOptions): Promise<Pet>
}
// src/types.ts
export interface Pet {
id: number;
name: string;
tag?: string;
}
// your code
const client = new PetStoreClient({
apiKey: process.env.PET_STORE_API_KEY,
});
const pet = await client.getPet(42);
operationId becomes the method integer becomes number $ref becomes a named type fields outside required become optional the security scheme becomes a client option
- Parameters
- Path, query, header and cookie, arrays included.
- One document
- External $ref URLs are rejected, never half-generated.
- Swagger 2.0
- Rejected with a message telling you how to upgrade.
Seven languages from one spec
TypeScript, Python, Go, Java, C# / .NET, PHP or Ruby. Each package follows its ecosystem’s layout and ships with its manifest, so it publishes where your users already install from.
- One run, one language
- Generate Go, download it, then run Java from the same spec.
- No runtime
- The package depends on its own language’s standard tooling, not on us.
- package.json manifest
- tsconfig.json
- README.md quickstart and method table
- src/
- client.ts one method per operation
- types.ts one type per schema
- http.ts retries, backoff, auth
- errors.ts typed errors
- pagination.ts
- index.ts
Publish tonpm
- pyproject.toml manifest
- README.md quickstart and method table
- src/pet_store/
- client.py one method per operation
- types.py one type per schema
- http.py retries, backoff, auth
- errors.py typed errors
- pagination.py
- __init__.py
Publish toPyPI
- go.mod manifest
- README.md quickstart and method table
- client.go one method per operation
- types.go one type per schema
- http.go retries, backoff, auth
- errors.go typed errors
Publish toGo modules
- pom.xml manifest
- src/main/java/petstore/
- ApiClient.java one method per operation
- Models.java one type per schema
- HttpClient.java retries, backoff, auth
- ApiException.java typed errors
- Page.java
Publish toMaven
- PetStore.csproj manifest
- src/
- Client.cs one method per operation
- Models.cs one type per schema
- HttpClientBase.cs retries, backoff, auth
- Errors.cs typed errors
- Pagination.cs
Publish toNuGet
- composer.json manifest
- src/
- Client.php one method per operation
- Models.php one type per schema
- HttpClient.php retries, backoff, auth
- ClientConfig.php
- ApiException.php typed errors
- Page.php
Publish toPackagist
- pet_store.gemspec manifest
- Gemfile
- lib/pet_store.rb
- lib/pet_store/
- client.rb one method per operation
- types.rb one type per schema
- http.rb retries, backoff, auth
- errors.rb typed errors
- pagination.rb
- version.rb
Publish toRubyGems
Checked against a mock server before you download
With Pro Verify, each SDK is compiled in Docker, then every operation is called against a Prism mock server built from your spec.
- What fails a run
- Any exception, and any 4xx or 5xx response.
- Restarts
- A verification job resumes after a restart, on any worker node.
- Honest results
- Missing infrastructure is reported as skipped or failed, never as passed.
- dockernpm ci, tsc --noEmitcompiled
- prismmock from openapi.yamllistening
- GET/pets200
- GET/pets/{id}200
- POST/pets201
- DELETE/pets/{id}204
- 4 of 4 operations passed against the mock
An illustrative run. Verification proves the package compiles and matches your spec; it cannot test behavior the spec does not describe.
Retries and typed errors, already written
Every client retries 429 and 5xx responses with exponential backoff and jitter: three retries by default, starting at 500 ms and doubling. Only GET, HEAD, OPTIONS, PUT and DELETE are retried. POST and PATCH never are, so a create call never runs twice behind your back.
| Status | Throws (TypeScript) |
|---|---|
| 400 | APIBadRequestError |
| 401 | APIUnauthorizedError |
| 403 | APIForbiddenError |
| 404 | APINotFoundError |
| 409 | APIConflictError |
| 422 | APIUnprocessableEntityError |
| 429 | APIRateLimitError |
| 500 | APIInternalServerError |
Each error carries the status code and the parsed response body. Statuses in blue are retried on GET, HEAD, OPTIONS, PUT and DELETE before the error is thrown.
An MCP server, so agents can call your API
On Pro Verify, a TypeScript build can include an MCP server: one tool per endpoint, wrapping the SDK it ships beside, over stdio. Point Claude or Cursor at it and your API becomes a set of tools.
Claude, Cursor
Any MCP client calls a tool by name.
mcp/, generated
One tool per endpoint, calling the SDK.
- listPets
- getPet
- createPet
Your API
Auth comes from environment variables, as in the SDK.
Pet Store example; tool names follow your endpoints.
- Compiled and smoke-run in a resource-limited container with networking off
- Project mounted read-only while it runs
- Two runtime dependencies: @modelcontextprotocol/sdk and zod
- npm lifecycle scripts disabled
Pricing
Try once free. Ship with Pro.
Download SDKs and run them on your infrastructure. Pay when you need a real monthly budget.
Pro
$99/mo
100 generations/month · all 7 languages · instant ZIP. Replace weeks of hand-written clients.
See Pro detailsPro Verify
$199/mo
Same 100 gens/month, plus Docker compile checks, Prism mocks, and MCP server generation.
Validation & MCPFeatures
Built to integrate, not to demo
Deterministic templates, idiomatic per language — finish on your own CI.
Zero lock-in
You own every file. Standard packages — npm, PyPI, Maven, or any registry. No runtime dependency on us.
One method per operation
Every operationId becomes a typed method, with its path, query, header and cookie parameters in the signature.
Auth auto-detected
Reads your OpenAPI security schemes. API keys (header, query or cookie) and Bearer tokens are wired automatically.
Ready to publish
Includes package.json, pom.xml, and language manifests — ready for any registry.
JSON & YAML
Paste, upload, or fetch from a URL. Auto-detects format. Public or internal specs.
Runs in the background
Submit your spec, close the tab, come back when it's done. Live build log if you want.
MCP Server Generation
FeaturedOn Pro Verify, TypeScript builds can include an MCP server so agents (Claude Desktop, Cursor, Copilot) call your API as tools.
Your OpenAPI spec is all you need
If you already have an OpenAPI spec, get typed, production-quality clients — self-serve, in under a minute. No sales call.
No config file required
We read your OpenAPI spec directly — no .stainless.yml.
Retries and typed errors built in
429 and 5xx retried with backoff on idempotent methods; a typed error for every status.
Self-serve free tier
No waitlist. Sign in and generate your first SDK now.
7 languages, one spec
Regenerate the same spec per language; Pro includes 100 runs/month.
Try your spec free today
One free generation — download and test on your servers. Need more? Pro is $99/mo for 100 SDKs.
7 languages · You own the code · No lock-in