Skip to content

Integrations

Add signing to the tools you already use.

Sign where your team publishes. Verify where customers and partners receive files. The REST API, SDKs, and CLI are the supported surface; CMS helpers live in-repo and are not marketplace listings.
Supported today: REST API, Go/TS/Python SDKs, CLI, invisible watermarking, and org verify webhooks. WordPress, Ghost, and Strapi helpers are in-repo samples — not marketplace products and not covered by CI. Dedicated CI Actions and the browser extension store listing are coming soon. See current docs · Watermarking · Webhooks.

Available connections

CMS

WordPress Plugin

In-repo helper (not a WordPress.org listing, not in CI). Copy integrations/wordpress/ into a site you control. Default API host is api.krusade.dev.

# 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

CMS

Ghost

In-repo Ghost sidecar (not a marketplace listing, not in CI). Copy integrations/ghost/; point post.published (or page.published) at it. Signs feature_image via POST /api/v1/sign. No Admin API poller.

# Copy integrations/ghost, set env, npm start
KRUSADE_API_KEY=krsd_... \
WEBHOOK_SECRET=your-shared-secret \
SIGNED_OUT_DIR=./signed \
  npm start

# Point a post.published webhook (page.published if needed)
# at http://your-host:8791/hooks/ghost-media

CMS

Strapi

In-repo Strapi plugin (not a marketplace listing, not in CI). Copy integrations/strapi/krusade-c2pa/; afterCreate signs local uploads.

# 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',
  },
},

API

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]"

SDK

Go & TypeScript SDKs

In-repo clients (not on pkg.go.dev or npm). Copy sdk/go or sdk/typescript from github.com/krusade/krusade until the packages are published.

// Copy sdk/go from github.com/krusade/krusade (not on pkg.go.dev).
// go.mod: replace github.com/krusade/sdk-go => ./sdk/go
import krusade "github.com/krusade/sdk-go"

client := krusade.New("krsd_...")
result, err := client.Sign(ctx, "photo.jpg",
  krusade.SignOptions{Author: "Jane Doe"})
report, err := client.Verify(ctx, result.OutputPath)

// TypeScript: copy sdk/typescript, then npm install ./sdk/typescript

CLI

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

Watermark

Invisible Watermarking & Soft-Binding

Embed resilient, imperceptible watermarks during signing. When platforms strip C2PA metadata, detect the watermark to recover provenance.

# Sign with soft-binding watermark enabled
curl -X POST https://api.krusade.dev/api/v1/sign \
  -H "Authorization: Bearer krsd_..." \
  -F "[email protected]" \
  -F "watermark=true" \
  -o photo.signed.jpg

# Verify / detect watermark on stripped media
curl -X POST https://api.krusade.dev/api/verify \
  -F "[email protected]"

Webhook

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 → Webhooks

CI/CD

Pipeline Integration

Sign releases in GitHub Actions, GitLab CI, or Jenkins via the CLI or REST API. Dedicated Actions are coming soon.

# Example: sign in CI with the CLI
- run: krusade sign ./dist/hero.jpg
  env:
    KRUSADE_API_KEY: ${{ secrets.KRUSADE_API_KEY }}

Browser

Browser Extension

One-click verification for any file. Check authenticity without leaving the browser. Early access — store listing coming soon.

// 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')
}