Skip to content

Signed statements

The receipt naulon signs for every paid answer: what it holds, exporting it, discounts, and proving a set complete in compliance mode.

On this page

Every paid answer comes with a statement: a small document naulon signs that says what your agent bought, what it spent, and what naulon charged. You can hand it to anyone, and they can check it against naulon's published keys without asking us.

A statement never contains your question or the answer. It carries their SHA-256 hashes, so whoever holds the text can prove it matches, and nobody else can read it.

What a statement says

A statement is a compact JWS with the header typ: naulon-bundle+jwt, signed with Ed25519. The claims that matter for your books:

Claim Meaning
iat When the read finished, in Unix seconds
qh, ah SHA-256 of the question and of the answer, hex
bought Each source the read paid for
spentMicro Everything the read cost, in micro-USDC (1 USDC is 1,000,000)
fees Each of naulon's fees: list, discountBp, charged, and whether it was paid
org Your account, as an identifier only your own statements share
seq, prev Compliance mode only: the statement's place in your chain, and the hash of the one before

Authors are paid what they ask. A discount on your account applies to naulon's fees only, never to an author's price.

Where you get them

  • On the Ask page, the last lines of the receipt: Save downloads the statement, Verify opens it in the checker.
  • From the API and MCP, on every completed read: bundle is the signed statement, and statement.kept says what naulon kept of it (stored, chained or none, with seq when chained). When it is chained or none, your copy is the only one.
  • From Activity, as an export of any period up to 366 days: CSV for a spreadsheet, or JSONL, which is the signed statements themselves, one per line. One export holds at most 10,000 statements; split a longer period.

The CSV columns are issued_at, mode, sources_bought, spent_usdc, naulon_fee_list_usdc, discount_usdc, naulon_fee_charged_usdc and statement_sha256. Every figure is read from the signed statement on the same row, and statement_sha256 finds that statement in the JSONL export.

In an organisation, owners, admins and analysts can export. Other roles see who can.

Discounts

If naulon has agreed a discount with your organisation, each quote shows naulon's fees at list, the discount, and what you will be charged. The discount is signed into the quote. If it changes between your search and your read, the read is refused and nothing is charged: search again and you get a quote at the current rate.

Compliance mode

Some organisations must show an auditor that their record of answers is complete, while their questions stay private. Compliance mode does both. An owner or billing manager turns it on in Security.

With it on:

  • naulon keeps no copy of your statements and no record of your questions. Your agents receive each statement and you keep them.
  • Each statement names the one before it (prev) and its position (seq), so the statements form a chain.
  • naulon keeps one line per statement: its position, its SHA-256 and the time. That is enough to prove the set complete, and it says nothing about what was asked or bought.

If naulon cannot read your setting at the moment of a read, it treats you as in compliance mode and keeps nothing. The receipt then says naulon kept no copy, so a gap never surprises you later.

Turning compliance mode on does not erase statements stored before it. Erase them in Security, by date. Turning it off stops the chain where it is; turning it on again continues it.

Statements your agent did not save

When you turn it on you choose what happens to a statement an agent fails to save:

  • Keep it sealed for 24 hours. Your browser makes a key pair. The private key is downloaded as a file and never leaves your machine; naulon stores only the public key and seals each statement to it (X25519, HKDF-SHA256, AES-256-GCM). In Security, choose the key file and open them. They are deleted from naulon once your browser has saved them. Lose the key file and nobody can open them, naulon included.
  • Keep nothing. A statement your agent does not save is gone, and your auditor will see the gap.

Proving the set complete

Download checkpoints for a period from Security. The file holds a checkpoint naulon signs for each end of the period (typ: naulon-checkpoint+jwt, with the claims org, seq, head and at) and the line for every statement between them.

Give your auditor that file and your statements for the period. At naulon.app/verify/statements they drop both, and the page checks every signature and walks the chain. If a statement is missing, altered or out of place, it names the position and the time. The check runs in the browser; nothing is uploaded.

Checking offline

The check needs nothing from naulon but the public keys at https://gate.naulon.app/.well-known/naulon-jwks.json:

  1. Verify both checkpoints and every statement with the key whose kid matches the header. Reject any other typ.
  2. Both checkpoints must name the same org, and the closing seq must not be lower than the opening one.
  3. The lines in the file must run from opening seq + 1 to closing seq with no gap, and the last line's hash must equal the closing head.
  4. For each line, find the statement with that seq. Its SHA-256 must equal the line's hash, and its prev must equal the previous line's hash (the opening head for the first).

If all four hold, the set is complete and unaltered for the period, and the count of statements is the closing seq minus the opening seq.