Quickstart
Sign your first asset in a few lines. @limboai/verifox-sdk-issuer runs in Node.js and returns a C2PA sidecar you embed back into the file. For the model behind it, see the Overview.
Install
- npm
- yarn
- pnpm
npm install @limboai/verifox-sdk-issuer
yarn add @limboai/verifox-sdk-issuer
pnpm add @limboai/verifox-sdk-issuer
The SDK ships as a WebAssembly module for Node.js. For browser-side verification, see @limboai/verifox-sdk-verifier.
Connect to the signing service
The SDK connects to the signing service at https://api.trylimbo.com. Pass your integration's token as an authorization: Bearer … header on SignerClient.connect. Configure the client once at startup, then invoke sign as needed.
Sign your first asset
You describe the asset's provenance as facts — where it came from (origin), what was composited in (components), and what was done to it (actions) — and the signer authors the C2PA manifest from them. A fresh camera capture is an origin of digitalCapture with nothing else.
import { SignerClient, AssetSdk, embed } from "@limboai/verifox-sdk-issuer";
import { readFile, writeFile } from "node:fs/promises";
const client = await SignerClient.connect("https://api.trylimbo.com", {
headers: { authorization: `Bearer ${process.env.LIMBO_API_KEY}` },
});
const sdk = AssetSdk.create(client);
const original = await readFile("photo.jpg");
const { sidecar } = await sdk.sign(original, "My Photo", {
origin: { sourceType: "digitalCapture" },
actions: [{ kind: "published" }],
}, { storage: { mode: "embedded" } });
const signed = embed(original, sidecar);
await writeFile("photo.signed.jpg", signed);
Run it:
node --experimental-strip-types sign-image.ts
Inspect the result
photo.signed.jpg is a standard JPEG. Any image viewer can open it, and a Verifier validates its embedded C2PA manifest.
Next steps
- Sign an asset: the full
sign/embedsurface for files. - Storage modes: embedded, remote, or both.
- Assertions: actions, metadata, and AI-use declarations.
- Identity: bind a verified organizational identity.
- Sign a live stream: segment-level HLS/DASH signing.