Skip to main content
Signing your content is free. See it on your own words in two minutes.Start free Explore Encypher Seal

C2PA Implementation Guide

From zero to signed content in five minutes. REST API with Python, TypeScript, Go, and Rust SDKs, all auto-generated from the same OpenAPI spec. Free verification for any C2PA-signed content, no account required.

API Quickstart

Sign text content with a single API call. Get your free API key from the Encypher dashboard (free tier).

Sign Text

# Sign a text document

curl -X POST https://api.encypher.com/api/v1/sign \

-H "Authorization: Bearer ey_your_key_here" \

-H "Content-Type: application/json" \

-d '{"text": "Your article content here.", "metadata": {"author": "Jane Smith", "rights": "bronze"}}'

Sign an Image

# Sign an image file

curl -X POST https://api.encypher.com/api/v1/sign/media \

-H "Authorization: Bearer ey_your_key_here" \

-F "file=@photo.jpg"

Verify (no auth required)

# Verify any C2PA-signed content

curl -X POST https://api.encypher.com/api/v1/verify \

-H "Content-Type: application/json" \

-d '{"text": "Content to verify here."}'

Python SDK

# Install

pip install git+https://github.com/encypherai/sdk-python.git

# Sign text with sentence-level provenance

from encypher import EncypherClient

client = EncypherClient(api_key="ey_your_key_here")

result = client.sign_text(

text="Your article content here.",

author="Jane Smith",

rights="bronze"

)

signed_text = result.text # Contains invisible provenance markers

# Verify

verification = client.verify_text(signed_text)

print(verification.signer, verification.timestamp)

The Python SDK wraps the REST API with typed interfaces for all signing and verification operations. Batch utilities allow processing thousands of documents:

# Batch sign articles from CMS

articles = cms.get_all_articles() # Your CMS client

results = client.sign_batch(

items=[{"text": a.body, "id": a.id} for a in articles],

concurrency=20

)

TypeScript SDK

// Install

npm install encypherai/sdk-typescript

// Sign text content

import { EncypherClient } from '@encypher/sdk';

const client = new EncypherClient({ key: 'ey_your_key_here' });

const result = await client.signText({

text: 'Your article content here.',

author: 'Jane Smith',

rights: 'bronze',

});

// Verify (no API key needed)

const verification = await client.verifyText(result.text);

console.log(verification.signer, verification.timestamp);

The TypeScript SDK provides full type definitions for all API responses. Compatible with Node.js and browser environments. The verification function works without an API key using the public verification endpoint.

Go and Rust SDKs

# Go

go get github.com/encypherai/sdk-go

# Rust

cargo add --git https://github.com/encypherai/sdk-rust

All four SDKs (Python, TypeScript, Go, and Rust) are auto-generated from the same OpenAPI spec at github.com/encypherai/sdk-python, sdk-typescript, sdk-go, and sdk-rust, so they stay in sync with the API. Full endpoint documentation lives in the API reference.

CMS Integration Patterns

The most common integration pattern is signing at publish time via a CMS webhook. When an article is published, the CMS fires a webhook to your signing service, which calls the Encypher API and updates the stored article with the signed version.

WordPress

Hook into the publish_post action. Call the Encypher signing API with the post content. Update the post with the signed content before the response is sent.

Contentful / Headless CMS

Subscribe to the ContentPublished webhook. In the handler, retrieve the content, sign it, and update the entry via the Management API. The signed version is served to readers.

Next.js / Static Generation

Sign content in getStaticProps or at build time. The signed content is baked into the static output. No runtime signing required for static sites.

Signing Options Reference

ParameterTypeDescription
text / filestring / fileContent to sign. Text for articles; multipart file for media.
authorstringAuthor name or identifier. Included in manifest assertion.
rightsbronze | silver | goldMachine-readable rights tier for AI licensing.
encodingvs | zwcVS markers (default) or ZWC markers (Word-safe). Text only.
sentence_levelbooleanEnable Merkle tree per-sentence authentication. Default true.
fingerprintstringRecipient ID for distribution fingerprinting. Enterprise tier only.

Free Tier and Limits

The free tier provides unlimited signing for normal publishing use (fair-use guardrails apply), including 10,000 AI-output assets per month. Verification is unlimited and free at all tiers including without any account. The free tier includes full API access, all four SDK libraries, and sentence-level Merkle tree authentication.

Paid tiers unlock higher volume limits, multi-media signing, fingerprinting, batch endpoints, and enterprise features including BYOK and on-premises deployment. See pricing for tier details.

Related Resources

Start Building

Free API key and free signing for normal publishing use. Verification is always free.

Related