SDKs
TypeScript

TypeScriptTypeScript SDK

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/sdk

Expected 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);