Skip to content
Truenote

Uploading documents

How a paystub, W-2 or statement gets into Truenote from an agent or a script without the file passing through the model.

Documents (paystubs, W-2s, 1098s, last year’s return, statements) are kept sealed at rest, their text extracted for agents with sensitive numbers masked, and tied to what they’re about: a tax year, an income source, an account.

From an agent

With documents:write, an agent calls prepare_upload with what the document is (name, kind, tax year, the income source or account it belongs to). Truenote answers with a one-time link, good for 15 minutes and one file. The agent either sends the file itself (curl -F file=@paystub.pdf <link>) or hands the link to the person, who drops the file on its page. The model never carries the bytes.

From a script

curl https://app.usetruenote.com/v1/documents \
  -H "Authorization: Bearer tn_pat_…" \
  -F file=@paystub.pdf \
  -F 'metadata={"name":"Paystub Oct 16","kind":"paystub","taxYear":2026}'

PDF, PNG, JPEG and WebP, up to 10 MB. The real type is read from the bytes.

What agents read back

list_documents (search by text, kind, year) and read_document: a PDF’s text, masked, or an image as itself, with a hint about what it’s good for. A paystub’s year-to-date gross, 401(k) and federal withholding are offered as the tax inputs (upsert_income_source) after asking. get_tax_projection names the paystubs and forms behind its figures and warns when a newer paystub exists.