Request access
Signing API

Learn the API from one sample photo.

A worked example you can change. Follow beach.jpg through every call, from upload to finding it again after its metadata is gone, and switch the options on the way to see what each one changes.

beach.jpgThe sample, JPEG, 2 MB
1POST /v1/files

Upload the photo.

Send the bytes once. We keep the file for 24 hours, long enough to sign it, verify it, or sign it again with other settings.

Request
curl https://api.inteqral.com/v1/files \
  -H "Authorization: Bearer $TOKEN" \
  -F asset=@beach.jpg
2POST /v1/sign

Sign it.

We write the C2PA manifest: that the photo was created, a hash of its content, your title and AI training statement, our signature and a time-stamp. With wait, the call answers when it is done.

Retention

The default. Download the signed copy within 24 hours; we keep only the manifest and the fingerprint.We keep the signed copy and your original, and the signed copy is public at a stable link.

Request
curl "https://api.inteqral.com/v1/sign?wait=25" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"file_id": "0199b2c4-6a1e-...",
       "ai_training": false,
       "retention": "temporary""persisted"}'
3GET /v1/sign/{id}/asset

Download the signed copy.

The manifest now travels inside the file, and we keep our own copy of it. With temporary retention, you can download the signed copy for 24 hours, then we delete it.With persisted retention, the signed copy and your original stay with us, and the signed copy is public at a stable link.

Request
curl https://api.inteqral.com/v1/sign/0199b2c4-7d02-.../asset \
  -H "Authorization: Bearer $TOKEN" \
  -o beach-signed.jpg

# kept, so also public, with no token
curl https://api.inteqral.com/v1/assets/urn%3Ac2pa%3A3f1e9a7c-... \
  -o beach-signed.jpg
4POST /v1/verify

Anyone can check it.

Verify runs the full C2PA validation, here or in any C2PA tool. The hash shows whether anything changed since signing; the certificate shows who signed it.Someone retouched the signed photo and kept its credentials. The signature still checks out, but the hash no longer matches the pixels, so verify answers invalid.The same photo, signed by someone whose certificate is not on the trust list. Nothing changed since signing, so verify answers valid, but who signed it is unconfirmed.

Try another file
Request
curl https://api.inteqral.com/v1/verify \
  -H "Authorization: Bearer $TOKEN" \
  -F asset=@beach-signed.jpgbeach-edited.jpgbeach-elsewhere.jpg
5Outside the API

Then someone copies it.

Days later, a social network re-encodes the photo and drops its metadata. The copy looks the same, but its Content Credentials are gone, and verify has nothing to read.

Verify the copy404
{
  "error": {
    "code": "no_matching_manifest",
    "message": "...",
    "request_id": "..."
  }
}
6POST /v1/resolve

Resolve leads back to the original.

We fingerprinted the photo when we signed it. Resolve compares the copy with every image your account signed and returns the closest manifests. A copy that was only re-encoded or resized is usually within 32.

You chose temporary retention, so the signed copy is gone by now. The trail ends at the manifest, which your account can still open in the console.You chose persisted retention, so the closest candidate leads straight to the signed copy at its public link.

Retention, as chosen in step 2
Request
curl https://api.inteqral.com/v1/resolve \
  -H "Authorization: Bearer $TOKEN" \
  -F asset=@IMG_2041.jpg

# then download the signed copy, no token
curl https://api.inteqral.com/v1/assets/urn%3Ac2pa%3A3f1e9a7c-... \
  -o beach-signed.jpg

Read the documentation.

Every call with its parameters, responses and errors, and a guide for each step of this page and each integration. While we onboard accounts one at a time, the docs are open on request. They become public once onboarding opens up.

Request access to the docs info@inteqral.com

Get started

  • Overview
  • Quickstart
  • Authentication
  • Formats and limits

Sign

  • Overview
  • Sign an image
  • Retention
  • AI training
  • Versions and components
  • Articles

Verify

  • Overview
  • Results and status codes

Resolve

  • Overview
  • Resolve an image
  • Trace text

Account

  • Credentials
  • Team and roles
  • Usage

Integrations

  • WordPress
  • Superdesk
  • n8n
  • Browser extension

API reference

  • API conventions
  • Files
  • Signings
  • Verify
  • Resolve
  • Public assets

What matters once it runs in production.

Keep or expire

By default the signed file is deleted after 24 hours. Send "retention": "persisted" to keep it at a public link, with the original you sent. The manifest is kept either way.

Images that are already signed

We validate existing Content Credentials first. If they are intact, the new manifest goes on top and the earlier ones stay as its history. If they are broken, nothing is signed.

Versions and components

Sign a new version of a manifest you own, or a composite of up to 100 signed components. The links are in the manifest, and the console draws the lineage.

Credentials

OAuth 2.0 client credentials, created by owners in the console. Two secrets at a time for rotation; revoked within a minute.

One error shape

Every error carries a stable code, a message and a request_id you can quote to us.

Limits

Requests up to 25 MiB. Uploads kept 24 hours. wait holds a call up to 25 seconds. Tokens last an hour.

Start signing.

We are onboarding accounts one at a time. Tell us what you want to sign and where, and we will set up your console and your first credential.

Request access info@inteqral.com