Developer docs
Exports
Your proof is yours to take with you: originals, every edit, the consent behind each use and the history of what happened to it. Plan limits never lock raw submissions away.
Ways to export
| Export | Who | What you get |
|---|---|---|
| Complete export (workspace, Proof Library) | Owners and admins | ZIP, JSON or CSV. Everything, or up to 90 selected items. |
| POST /api/v1/proof/exports | Service key with yousaid:proof:export | Approved words only (up to 5,000 approved or published items and 100 placements). No raw originals. |
| yousaid.proof_export_create (MCP) | Agents with mcp:read | The same approved-only export. |
| Rewards ledger CSV | Owners and admins | Every participation reward, for accounting, with coupon codes masked. |
| Customer receipt and Consent Passport | The customer, from their control link | Their own stories, versions, consent receipts, uses and revocations; the passport is signed. |
| Privacy request export | YouSaid privacy operations, after identity verification | Proof held about one person, as part of a data-subject access request. |
Exporting raw originals is a human permission. Agents and service keys never hold it.
What the complete export contains
- Every proof item, including deleted items still inside their 30-day recovery window.
- The immutable original and every later version, with sources and screenshots.
- Claims and their evidence.
- Consent grants with receipts, and the exact consent template versions they were given under.
- Incentives, placements, revocations and Proof Room links.
- The Trust Ledger: every recorded event, including agent actions.
- Library records: tags, notes, workflow decisions, links to customers, releases and feedback, provenance, duplicate decisions, transcripts, and import jobs with their per-row reconciliation.
The ZIP holds bundle.json, records.csv, consent.json, manifest.json and the original media files up to a 40 MB budget. Larger files are listed in manifest.json with an authenticated download path, so nothing is silently left out.
Verify an export
The response header x-export-digest and the bundle's digest field are the sha256 of the canonical JSON of the bundle without its digest field (keys sorted). Recompute it to prove the file is complete and unchanged.
import { createHash } from "node:crypto";
const canonical = (value) => Array.isArray(value)
? `[${value.map(canonical).join(",")}]`
: value && typeof value === "object"
? `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`).join(",")}}`
: JSON.stringify(value);
const { digest, ...rest } = bundle;
const ok = createHash("sha256").update(canonical(rest)).digest("hex") === digest;Recovery before export
Deleting a proof item hides it from lists and every placement, and keeps it recoverable for 30 days. After that, retention purges it and leaves a content-free receipt in the ledger. Items under legal hold are never purged.
An export is a copy you control. If a customer later withdraws, YouSaid removes the story from its own surfaces, but copies in exports are your responsibility; the withdrawal creates a removal task and a webhook so you can act. If the customer's data is later erased, the removal task is kept, de-identified: it keeps where the copy went, the asset reference, its state and due date, and drops the story link and notes.