A real situation: someone hands you a PDF with the transcript and summary of a meeting and tells you Uttera generated it. It could be a supplier, an expert witness, the other side of a contract, or your own team two years later.
How do you know it's true?
Short answer: upload the PDF at uttera.ai/en/verify and it tells you. No account, no key, nothing to install. The long answer is why that works, which is what decides whether you trust the result.
Every report carries two, answering different questions:
| Signature | Over what | What it answers |
|---|---|---|
| content | what the report says: summary, transcript, customer, date, usage | did this text come from Uttera? |
| container | the bytes of the PDF file | is this file exactly the one that was issued? |
The distinction is not decorative. The content signature still holds after the PDF has been reprinted, cropped or re-saved — things that happen constantly as a document moves around a company. The container signature detects a single changed byte, which is what you care about if you suspect someone touched a figure.
A report can pass the first and fail the second: that means the text is ours but the file you're holding is not the original. That is useful information, not an error.
The content signature is printed inside the report, at the foot of every page, as a short fingerprint. You can see it with your own eyes.
The container signature cannot go inside — signing something that is then modified is
impossible — so it is appended after the finished document, on a final line starting
with %%UTTERA-FIRMA-V1:. Your PDF reader does not show it, and that is not a trick: the
format says to read from the last startxref, so everything after %%EOF is ignored.
That detail is what makes the PDF enough on its own. The signature used to be returned separately by the API and had to be filed next to the document; the moment someone forwarded the report by email, the signature stayed behind and the document became impossible to verify. Now it travels inside.
If you'd rather archive it separately, the API still returns it in
report.container_signature.
We publish the public key at GET /v1/reports/public-key, unauthenticated. With it you
can verify on your own infrastructure, without sending us the document — which is exactly
what you'll want if the report contains something that must not leave your network.
And if you'd rather we did it, POST /v1/reports/verify takes the PDF and answers.
The documentation has the full procedure, including key rotation: a signature you cannot verify five years from now is worthless, so old keys stay published.
Worth being blunt, because confusion here is expensive:
That is the difference between authentic and true, and you need both words.
If what you're holding is audio rather than a PDF, the relevant piece is a different one: the watermark, which says "a machine made this". It goes into everything we produce and we cover it separately.
Two tools, two questions: the mark answers how it was made; the signature answers who issued it and whether it is intact. Neither replaces the other.
Anything to add or correct? Write to support@uttera.ai. If you correct us, we edit the post and credit you.