@cjd3v/shotapi
v0.1.0
Published
Official Node.js client for ShotAPI — screenshots, OG cards, HTML-to-PNG and URL-to-PDF as an API
Maintainers
Readme
shotapi
Official Node.js client for ShotAPI — screenshots, OG cards, HTML-to-PNG and URL-to-PDF as an API. Zero dependencies, TypeScript types included.
Get a free API key (500 renders/month) at shotapi.cortexnest.icu/#signup.
Install
npm install @cjd3v/shotapiUsage
const { ShotAPI } = require("@cjd3v/shotapi");
const shot = new ShotAPI("sk_live_...");
// Screenshot a URL
const { url } = await shot.screenshot("https://example.com");
// Generate an OG card
await shot.og({ title: "We just raised our seed round", template: "bold" });
// Render raw HTML to PNG
await shot.html({ html: "<h1>Certificate</h1>" });
// URL or HTML to PDF
await shot.pdf({ url: "https://example.com/invoice/123" });
// Usage + branding
console.log(await shot.usage());
await shot.setBranding({ color: "#0ea5e9", logo: "https://yoursite.com/logo.png" });Download a render straight to disk:
const { ShotAPI, downloadToFile } = require("@cjd3v/shotapi");
const shot = new ShotAPI("sk_live_...");
const { url } = await shot.screenshot("https://example.com");
await downloadToFile(url, "./shot.png");TypeScript:
import { ShotAPI, ShotAPIError } from "@cjd3v/shotapi";
const shot = new ShotAPI(process.env.SHOTAPI_KEY!);
try {
const card = await shot.og({ title: "Hello", template: "minimal" });
console.log(card.url);
} catch (e) {
if (e instanceof ShotAPIError) console.error(e.status, e.message);
}Errors throw ShotAPIError with a status property (402 = quota exceeded, 401 = bad key, 429 = rate limited).
