Terms
What this service reports, what it deliberately refuses to decide, what is kept and what is not promised. Written to be read rather than clicked past.
Who runs this
TrustPDF is an independently built forensics service for machine callers: an HTTP and MCP endpoint that analyses a PDF and returns what it found. It is in beta, run directly by the developer who wrote it, and these terms describe it as exactly that. Mail reaches a person rather than a queue.
Read them as the operating conditions of infrastructure you are choosing to depend on. Everything the engine does is documented rather than proprietary — the whitepaper describes the analysis in full, and the API reference is generated from the settings that enforce it.
1. What the service does
TrustPDF analyses a PDF and reports structural facts about it: its revision history, what its signatures cover and whether the signed bytes still match, and what the file says about its own origin. Every observation cites the byte offsets it came from, so any of it can be checked in a hex editor without relying on this service being honest.
The interface, the prices, the limits and the report contract are described in the API reference, which is generated from the settings that enforce them. Where this page and that reference disagree about a number, the reference is what the service actually applies.
2. It does not decide, and you must not present it as having decided
A report contains no score, no risk level and no judgement of authenticity. Each observation carries an ordinary explanation and an adversarial one, side by side and unweighted, because the same structural fact is produced by both routine software and deliberate alteration.
Deciding between those readings is yours. If you use a report to accept or refuse a document, to release a payment, to open or close an account, or to bring or defend a claim, that decision and its consequences are yours. Do not present a TrustPDF report as a determination that a document is genuine or forged. It is not one, it does not claim to be one, and it is built so that it cannot be mistaken for one.
3. What a report does not tell you
A report has two arrays and both matter. observations is what was
found. undetermined is what could not be checked, and why.
The absence of an observation is not evidence that nothing is
wrong — it may mean the check could not run, which is why the second
array exists and why you should read it.
Not every kind of analysis is built. Trust-list and revocation checking are not, and are reported as unresolved rather than as passed. Raster analysis is specified and not implemented, because it needs image decoding this service does not do. What is deferred is listed openly rather than implied by silence, and the whitepaper states the current limits in full.
Analysis is structural. It cannot tell you whether the contents of a document are true, whether a signatory had authority, or whether a file that is structurally unremarkable was produced honestly.
4. Your documents
Documents are not stored. Bytes pass through on the way to the analysis engine and exist for the length of one request. They are not written to storage, not logged, not echoed back, and not retained afterwards.
What is kept is:
- the SHA-256 digest of the document, computed in transit — one way, and not reversible into the file
- the report the engine produced: byte ranges, object numbers, whether a signature exists. No text, no images, no page content
- one row per request holding that digest, a size, a duration, what it cost, and a salted digest of the caller. Never an address
There is no account, no profile and no record connecting a key to a person. A file that was never held cannot be read, and a digest does not turn back into one.
5. Repeats, and what will never be disclosed
If you send bytes you have already been given a report for, under the same
engine, that report is returned rather than the document being analysed again.
It is marked CACHED: 1 with ANALYSED-AT, and it costs
nothing — you paid for the analysis once, and the engine is deterministic, so
it is the same artefact rather than a second one. ?force=1, or
force: true over MCP, runs the engine anyway at the usual price.
Paying per document never returns a stored report at all.
You will never be told whether anyone else has sent a document.
Not with a flag, not by a faster answer, not by an allowance that failed to
move. CACHED means "you have had this", never "this has been
seen". Uploading a copy of a document is not a way to discover who else has
been looking at it, and any change that would make it one is treated as a
defect.
6. Keys
A key is a bearer instrument. Its digest and a balance are stored, and nothing that identifies you. It is shown once and cannot be recovered — there is no reset, because there is no account to reset it against.
Anyone holding your key can spend it. Keep it as you would keep cash. A holder cannot be told from an owner, and a balance spent by someone who obtained your key will not be restored.
7. Payment
Payment is x402, an open HTTP-native protocol, settled on chain in USDC on the network named in the API reference. There is no account and no stored payment instrument: each payment is a signed authorisation for that one call, and whichever facilitator settles it, nothing about a payer is kept here.
Prices are quoted before you pay, in the 402 response, and the price you signed is the price you are charged. Settlement is on chain and final: with no account and no identity attached to a key, there is no mechanism by which a payment can be reversed here. Units on a key do not expire. Prices may change, and a change applies only to purchases made after it, never retroactively to units already bought.
A unit taken for an analysis that produced no report is returned automatically.
At the date of these terms the service is in beta and settling on a test network. Payments there move test tokens, not money, and nothing you send has real value. The network actually in force is the one named in the API reference, which is generated from the running configuration — if it differs from this paragraph, the reference is current and this page is behind. Check it before you send anything you would mind losing.
8. Test checks
Test checks exist so an integration can be proven end to end before anyone pays. They are strictly bounded and the bounds are shared: one document anywhere every 15 minutes, one per caller every 3 hours, and a 4 MB ceiling. A slot taken by anyone is a slot nobody else has until it comes round.
They are offered as available and are not a service level. They may be narrowed or withdrawn at any time, and nothing should be built on their continued existence.
9. Acceptable use
By using the service you undertake that:
- you have the right to submit the documents you submit, and submitting them for analysis breaches no duty you owe to anyone else
- you will not use the service to attack it or anything else — including attempts to exhaust it, to circumvent its limits, or to probe it for what it holds about other callers
- you will not present its output as a verdict on authenticity, as described in section 2
Access may be refused or withdrawn where these are not met. Automated limits apply to everyone and are not a statement about any particular caller.
10. Availability, and how it changes
This service is in beta and improving quickly. The engine version and ruleset are reported in every report and at /v1/stats, and both will move as detectors are added. A ruleset change may change what a report says about the same file — which is exactly why both are versioned, and why a finding stays reproducible by pinning them.
Beta means no uptime or support commitment, and no guarantee that any part of
the interface stays as it is. Breaking changes to the report envelope increment
its schema version, so a caller can refuse a report it does not
recognise rather than misread one — the interface is designed to change without
breaking anyone quietly. If the service is ever withdrawn, reasonable notice
will be given here for anyone holding unspent units.
11. No warranty, and the limit of what is owed
The service is provided as it is, without warranty of any kind to the extent the law allows — including any warranty that it is fit for a particular purpose, that it will detect any given alteration, or that it will be available.
To the extent the law allows, total liability arising from your use of the service is limited to the amount you paid for it in the three months before the claim arose. There is no liability for indirect or consequential loss, including lost profit, lost business, or loss arising from a decision you made on the basis of a report.
Nothing here excludes liability that cannot lawfully be excluded.
12. Changes to these terms
These terms carry a version and a date, both at the top of this page. A material change gets a new version. Continuing to use the service after a change means the current version applies to you; if it does not suit you, stop using the service and spend or abandon any remaining units.
13. The stage this is at
The primary caller here is a machine, and the whole architecture follows from that. There is an HTTP endpoint and an MCP endpoint and no dashboard, because an agent deciding whether to act on a document does not sign up, does not hold an account, and cannot wait to be provisioned one. It reads a price, pays it, and proceeds — inside a single exchange.
x402 is what makes that possible: payment as an HTTP exchange rather than a relationship. A 402 quotes the price, the caller signs an authorisation, and the report comes back with a receipt. Nothing about a payer is stored, because nothing about a payer needs to be.
Today that settles against a public facilitator. x402 through Stripe is the next stage — the same protocol on rails with far broader reach — and the conventional footing arrives alongside it: a registered counterparty, a named governing law, invoicing. Until then these terms are offered by the developer operating the service and name no jurisdiction, so if your procurement needs a registered entity and a chosen law on day one, that belongs to that stage rather than this one.
What is not staged is the service itself. What it reports, what it keeps, what it costs, what it refuses to decide and what it will never disclose are all stated on this page and enforced in code you can test against without taking anyone's word for it.
Language. These terms are written in English and the English text governs. This site is built so that it can be translated; any translation is provided for convenience and is not the operative version.
If part of this does not hold. A term a court finds unenforceable is severed and the rest continues to apply. Not enforcing a term on one occasion is not a waiver of it.
14. Contact
[email protected]. It reaches a person, usually within a few days. There is no account to look you up in, so include whatever context your question needs — and never send a key.