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.
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.
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 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.pngAdd -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:
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: 17926632604. 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.
c2patool image.marked.pngOr 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.
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
- All options of POST /v1/mark: output format, IPTC, keeping input credentials.
- Errors and rate limits.
- Our RFC 3161 time-stamp server, for signing locally.