TypeScript Type Generation
Generate TypeScript types for the M0 Orchestration API directly from the OpenAPI specification.
Quick Start
npx openapi-typescript https://orchestration-api.m0.xyz/openapi.json -o ./m0-swap.d.tsThis generates a type definition file with full type coverage for all API endpoints, request parameters, and response objects.
Generated Types
The generated file exports types organized by OpenAPI structure:
import type { components, operations } from './m0-swap';
// Schema types (most commonly used)
type Asset = components['schemas']['Asset'];
type Quote = components['schemas']['Quote'];
type Route = components['schemas']['Route'];
type Chain = components['schemas']['Chain'];
type Payload = components['schemas']['Payload'];
type EvmPayload = components['schemas']['EvmPayload'];
type SvmPayload = components['schemas']['SvmPayload'];
// Operation types (for request/response typing)
type QuoteRequest = operations['quote_quote']['requestBody']['content']['application/json'];
type QuoteResponse = operations['quote_quote']['responses']['200']['content']['application/json'];Usage with fetch
Create a typed wrapper for API calls:
import type { components } from './m0-swap';
type Quote = components['schemas']['Quote'];
type Asset = components['schemas']['Asset'];
const API_BASE = 'https://orchestration-api.m0.xyz';
export async function getQuotes(params: {
route: {
source: { chain: string; address: string };
destination: { chain: string; address: string };
};
amountIn: string;
sender: string;
recipient?: string;
}): Promise<Quote[]> {
const response = await fetch(`${API_BASE}/quote`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(params),
});
return response.json();
}
export async function getSupportedAssets(): Promise<Asset[]> {
const response = await fetch(`${API_BASE}/supported-assets`);
return response.json();
}Type Aliases
For convenience, create a types file that re-exports commonly used types:
// types/m0-swap.ts
import type { components } from './m0-swap.d.ts';
export type Asset = components['schemas']['Asset'];
export type Quote = components['schemas']['Quote'];
export type Route = components['schemas']['Route'];
export type AssetAddress = components['schemas']['AssetAddress'];
export type Payload = components['schemas']['Payload'];
export type EvmPayload = components['schemas']['EvmPayload'];
export type SvmPayload = components['schemas']['SvmPayload'];
export type Chain = components['schemas']['Chain'];
export type ChainRuntime = components['schemas']['ChainRuntime'];
export type Providers = components['schemas']['Providers'];
export type QuoteType = components['schemas']['QuoteType'];Then import from your alias file:
import type { Quote, Asset, EvmPayload } from './types/m0-swap';Keeping Types Updated
Regenerate types when the API changes:
# Add to package.json scripts
{
"scripts": {
"generate:types": "openapi-typescript https://orchestration-api.m0.xyz/openapi.json -o ./src/types/m0-swap.d.ts"
}
}pnpm generate:typesopenapi-typescript Options
Common options for customization:
# Output to specific directory
npx openapi-typescript https://orchestration-api.m0.xyz/openapi.json -o ./src/types/api.d.ts
# Generate with immutable types (readonly)
npx openapi-typescript https://orchestration-api.m0.xyz/openapi.json -o ./api.d.ts --immutable
# Export types (for re-exporting)
npx openapi-typescript https://orchestration-api.m0.xyz/openapi.json -o ./api.d.ts --export-typeSee the openapi-typescript documentation for more options.
API Reference
For interactive schema exploration and testing, visit the API Reference.

