Ships today: REST API, Go/TS SDKs, CLI, WordPress, Ghost, Strapi, and org verify webhooks. Dedicated CI Actions and the browser extension store listing are still landing. See current docs · Webhooks.
Verify everywhere
Sign content where you publish it. Verify it where you consume it. Krusade integrates into every layer of the content lifecycle.
WordPress Plugin
Sign media on upload from the WordPress admin. Ships in integrations/wordpress/.
# Install from the repo wp plugin install ./integrations/wordpress \ --activate # Or copy krusade-c2pa.php into wp-content/plugins/ # then set your krsd_* key in Settings → Krusade
Ghost
Sign-on-publish sidecar: Ghost media.uploaded webhook → Krusade /api/v1/sign. Ships in integrations/ghost/.
# Copy integrations/ghost, set env, npm start KRUSADE_API_KEY=krsd_... \ WEBHOOK_SECRET=your-shared-secret \ SIGNED_OUT_DIR=./signed \ npm start # Point Ghost Custom Integration webhook (media.uploaded) # at http://your-host:8791/hooks/ghost-media
Strapi
Sign uploads on afterCreate for the Upload plugin (local provider overwrite). Ships in integrations/strapi/krusade-c2pa/.
# Copy into src/plugins/krusade-c2pa, enable in config/plugins.js
'krusade-c2pa': {
enabled: true,
config: {
apiKey: process.env.KRUSADE_API_KEY,
apiBase: 'https://api.krusade.dev',
},
},REST API
Embed signing and verification in any application. One POST to sign; one POST to verify.
# Sign content curl -X POST https://api.krusade.dev/api/v1/sign \ -H "Authorization: Bearer krsd_..." \ -F "[email protected]" \ -o photo.signed.jpg # Verify content (public) curl -X POST https://api.krusade.dev/api/verify \ -F "[email protected]"
Go & TypeScript SDKs
Native clients for sign, verify, and usage. Drop into services, CLIs, and Node pipelines.
import krusade "github.com/krusade/sdk-go"
// or: import { Client } from "@krusade/sdk"
client := krusade.New("krsd_...")
result, err := client.Sign(ctx, "photo.jpg",
krusade.SignOptions{Author: "Jane Doe"})
report, err := client.Verify(ctx, result.OutputPath)Command Line
Sign and verify from your terminal. Integrate into build pipelines and release workflows.
# Sign a release krusade sign ./photo.jpg --api-key "$KRUSADE_API_KEY" # Verify authenticity krusade verify ./photo.jpg.signed
Org verify webhooks
Team owner/admin registers an HTTPS URL in the dashboard (Organization). We POST verify events with HMAC-SHA256. See /docs/webhooks.
# Delivery (HMAC in X-Krusade-Signature)
POST https://your-server.com/hooks/krusade
{
"event": "verify.event",
"organization_id": "…",
"status": "valid",
"issuer": "CN=…",
"errors": []
}
# Manage endpoints: Dashboard → Organization → WebhooksPipeline Integration
Sign releases in GitHub Actions, GitLab CI, or Jenkins via the CLI or REST API. Dedicated Actions are still landing.
# Example: sign in CI with the CLI
- run: krusade sign ./dist/hero.jpg
env:
KRUSADE_API_KEY: ${{ secrets.KRUSADE_API_KEY }}Browser Extension
One-click verification for any file. Check authenticity without leaving the browser. Early access — store listing still landing.
// Content script (preview)
const hash = await krusade.hash(file)
const receipt = await krusade.verify(hash)
if (receipt.valid) {
showBadge('Verified by ' + receipt.org)
} else {
showWarning('Content not verified')
}