Skip to content

Quickstart

Five minutes from sign-up to your first marked image: a free key and one request. You get the same image back with an invisible watermark and signed, time-stamped Content Credentials, the marks the EU AI Act and California ask for.

Using a coding agent? Give Cursor or Claude Code the prompt on our homepage; it reads these docs at kennmarq.com/llms.txt.

Base URL

Every endpoint lives under https://api.kennmarq.com, over HTTPS only. Requests and errors are described in the API reference.

1. Create an account

Sign up with your work email and confirm it with the link we send. Your organisation and a project called Default are created for you. Keys can only be created once your email is confirmed.

2. Create a test key

In the dashboard, open API keys and create a key in the Default project, environment Test, scope mark. Copy it straight away: we store only a hash, so it's shown once. Keep it on your server, out of browsers and apps.

Shell
export KENNMARQ_API_KEY="sk_test_…"

Test keys have their own monthly allowance (100 marks on Free, as many as live on paid plans), and sign with a test certificate. See keys, scopes and environments.

3. Mark a picture

Send a PNG, JPEG or WebP file as multipart form data, up to 4 MB in the request; a larger one, up to 25 MB, goes through an upload:

curl
curl https://api.kennmarq.com/v1/mark \
  -H "Authorization: Bearer $KENNMARQ_API_KEY" \
  -F file=@image.png \
  -F source=created \
  -F model="FLUX.1 schnell" \
  -F app_name="Acme Studio" \
  -D headers.txt \
  -o image.marked.png

Add -F provider="Acme Inc." and -F app_version="2.1" and the mark carries all five items of California's latent disclosure; add -F markets=eu,us-ca for a receipt.

Songs (MP3, WAV, M4A) go the same way. A clip (MP4) is marked as a job: the call answers 202 with its ID, and GET /v1/marks/{id} gives the marked clip when it's done (clips).

The response body is the marked file. headers.txt holds what you'll want to keep:

headers.txt
HTTP/2 200
content-type: image/png
content-disposition: attachment; filename="image.marked.png"
x-mark-id: mk_4Q8oT1n6mWc2fLr0aZ9eYb
x-watermark-id: 1a2b3c4d5e6f7081
x-marks-used: 1
x-marks-limit: 1000
x-request-id: req_7Hc2kQm0Zt1L
x-ratelimit-limit: 10
x-ratelimit-remaining: 9
x-ratelimit-reset: 1792663260

4. Check the marks

Any C2PA reader, such as the open-source c2patool, shows the signed manifest: the AI source type, your model and app name, the watermark action and the time-stamp.

Shell
c2patool image.marked.png

Or drop it on our free checker, which reads both marks in your browser, and finds the Content Credentials of a copy whose metadata was stripped through its watermark.

Until our C2PA conformance and publicly trusted certificate are in place, readers report the signature as valid from an unknown signer, and our time-stamps as untrusted. Our certificate chains are public at GET /v1/certificate.

5. Go live

Create a key in the Live environment for production and limit it to your servers with an IP allowlist. Live and test keys count against separate allowances, so testing never uses up production marks. Watch your usage in the dashboard, in the X-Marks-Used header, or with GET /v1/usage.

Next