One API call
Stripe-for-authenticity developer experience. Bearer key in, signed bytes out. Errors are RFC 7807 problem+json with machine-readable codes.
Built on the C2PA open standard
Krusade embeds tamper-evident Content Credentials in your images and documents with a single API call. No certificate management, no crypto code — verifiable anywhere, from Adobe to c2patool.
1,000 free signs — no card required
How it works
POST your image or PDF to /api/v1/sign with a bearer key. JPEG, PNG, WebP, AVIF and PDF up to 64 MB — one multipart request, no SDK ceremony required.
The signer builds a cryptographically signed, tamper-evident manifest and embeds it invisibly in the bytes you already have — same pixels, provenance included.
Credentials travel inside the file itself. Verify with Krusade, the official c2patool, or Adobe Content Credentials — no vendor lock-in, ever.
Features
Stripe-for-authenticity developer experience. Bearer key in, signed bytes out. Errors are RFC 7807 problem+json with machine-readable codes.
Every manifest is signed with ES256 under Krusade's managed certificate. Any edit breaks the signature chain — and verifiers can tell.
An optional forensic watermark survives screenshots, crops and re-encodes, soft-binding provenance even after the metadata is gone.
Standard C2PA manifests, readable by every compliant tool. Your files outlive us — the proof stays in the pixels, not in our database.
We run the certificates and keep them chained to the C2PA trust list, so manifests read “Trusted by Krusade”. You never touch a key.
100 free signatures every month, then simple per-sign credits. From side project to production without renegotiating anything.
Developer experience
One endpoint signs, one verifies, one reports usage. Official SDKs for Go and Python, honest REST for everyone else — and every response is the file itself, not a ticket to redeem later.
curl -X POST https://api.krusade.dev/api/v1/sign \
-H "Authorization: Bearer krsd_live_xxxxx" \
-F "[email protected]" \
-F "author=Ada Lovelace" \
-o sunset-ridge.signed.jpgclient := krusade.New("krsd_live_xxxxx")
result, err := client.Sign(ctx, "photo.jpg",
krusade.SignOptions{Author: "Jane Doe"})
// photo.jpg.signed — same pixels, provenance included
report, err := client.Verify(ctx, result.OutputPath)
fmt.Println(report.Status) // "valid"{
"status": "valid",
"issuer": "Krusade Signing CA",
"claim_generator": "krusade/1.0",
"assertions": [
"std.exif",
"std.thumbnail",
"std.c2pa.actions"
]
}Upload it to the verifier. Krusade reads the C2PA manifest from the file bytes and returns issuer, timestamp, assertions, and whether the signature chain still holds. Free, no account needed. The file is not stored.
Open the verifierPricing
Start with 1,000 free signs, add a verified company identity when your team grows, or build a dedicated provenance program with us.
$0
Start signing with zero friction. First 1,000 signs free.
$49/month
Company identity for content credentials — one signing identity across your apps.
Custom
Independent org identity hub — BYO cert/DID, API at scale, audit across every pipeline.
Full plan details on the pricing page.
FAQ
Content Credentials are an open standard (C2PA — Coalition for Content Provenance and Authenticity) for attaching cryptographically signed provenance information to media: who made it, when, how it was edited. Think of it as a tamper-evident nutrition label that lives inside the file itself.
JPEG, PNG, WebP, AVIF and PDF, up to 64 MB per file. The signed output is byte-identical to the input apart from the embedded manifest — your pixels don't change.
No. Krusade signs under its own managed certificate, chained to the C2PA trust list, so manifests read “Trusted by Krusade”. You never handle keys, CSRs, or renewals.
Removing or editing a signed manifest breaks the signature chain, and any compliant verifier will flag it. For cases where metadata is stripped entirely, Krusade's optional invisible watermark provides a soft binding that survives screenshots and re-encodes.
Anywhere C2PA is supported: our free verifier, the official c2patool CLI, or Adobe Content Credentials. Or programmatically via POST /api/verify — no account needed for public verification.