TypeScript SDK
Coming Soon – TypeScript SDK is currently in development.
Overview
Official TypeScript SDK for the Canvelete API with full type safety.
Planned Features
- Type-first design – Full TypeScript support
- Tree-shakeable – Import only what you need
- Promise-based – Modern async/await API
- Browser & Node.js – Universal compatibility
- Zod validation – Runtime type checking
- Auto-generated types – Always up-to-date
Expected Installation
npm install @canvelete/sdk
# or
yarn add @canvelete/sdk
# or
pnpm add @canvelete/sdkExpected Usage
import { Canvelete, type RenderResponse } from "@canvelete/sdk";
const client = new Canvelete({
apiKey: "cvt_YOUR_API_KEY",
});
// Full type safety
const result: RenderResponse = await client.render({
designId: "abc123",
format: "png",
quality: 90,
dynamicElements: {
title: { text: "Hello World" },
image: { src: "https://example.com/image.jpg" },
},
});
console.log("Image URL:", result.imageUrl);
console.log("Render time:", result.renderTime, "ms");Type Definitions
interface RenderRequest {
designId: string;
format: "png" | "jpg" | "webp" | "pdf";
quality?: number;
width?: number;
height?: number;
scale?: number;
dynamicElements?: Record<string, DynamicElement>;
cache?: boolean;
webhook?: string;
}
interface DynamicElement {
text?: string;
src?: string;
color?: string;
fontSize?: number;
fontWeight?: "normal" | "bold" | "light";
fit?: "cover" | "contain" | "fill" | "scale-down";
}
interface RenderResponse {
imageUrl: string;
format: string;
width: number;
height: number;
fileSize: number;
renderTime: number;
cached: boolean;
}Error Handling
import { CanveleteError, RateLimitError, NotFoundError } from "@canvelete/sdk";
try {
const result = await client.render({
designId: "abc123",
format: "png",
});
} catch (error) {
if (error instanceof RateLimitError) {
console.error("Rate limit exceeded:", error.retryAfter);
} else if (error instanceof NotFoundError) {
console.error("Design not found:", error.message);
} else if (error instanceof CanveleteError) {
console.error("API error:", error.message);
} else {
console.error("Unexpected error:", error);
}
}Configuration
const client = new Canvelete({
apiKey: "cvt_YOUR_API_KEY",
baseUrl: "https://api.canvelete.com/api/v1", // Optional
timeout: 30000, // 30 seconds
retries: 3,
retryDelay: 1000,
});Get Notified
Want to be notified when the TypeScript SDK is released?
Join our mailing list (opens in a new tab) or star the repo (opens in a new tab).
Alternative
Use the REST API with fetch:
interface ApiResponse {
success: boolean;
data: {
imageUrl: string;
format: string;
width: number;
height: number;
};
}
const response = await fetch("https://api.canvelete.com/api/v1/render", {
method: "POST",
headers: {
Authorization: "Bearer cvt_YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
designId: "abc123",
format: "png",
}),
});
const data: ApiResponse = await response.json();
console.log(data.data.imageUrl);