<!DOCTYPE html>
<html lang="en"><head><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}
gtag('consent','default',{analytics_storage:'denied'});
try{if(localStorage.getItem('tst-consent')==='granted'){gtag('consent','update',{analytics_storage:'granted'});}}catch(e){}</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DB03EP1QBR"></script>
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','G-DB03EP1QBR');</script>
<meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/>
<link href="/favicon.ico" rel="icon" sizes="any"/><link href="/favicon.svg" rel="icon" type="image/svg+xml"/><link href="/apple-touch-icon.png" rel="apple-touch-icon"/><link href="/site.webmanifest" rel="manifest"/><title>JSON Schema Docs | The Sales Traveler</title>
<meta name="description" content="JSON Schema for every machine-readable format this desk publishes: citations, corpus index, release manifests, licensing, contributor badges, corrections queue."/>
<link rel="alternate" type="application/rss+xml" title="The Sales Traveler" href="/feed.xml"/>
<link rel="canonical" href="https://thesalestraveler.com/data/schema/"/><meta name="robots" content="index,follow"/>
<meta property="og:type" content="website"/><meta property="og:site_name" content="The Sales Traveler"/>
<meta property="og:title" content="JSON Schema docs for The Sales Traveler's machine-readable data"/>
<meta property="og:description" content="Schema for citation artifacts, the corpus index, release manifests, licensing, contributor badges, and the corrections queue."/>
<meta property="og:url" content="https://thesalestraveler.com/data/schema/"/>
<meta property="og:image" content="https://thesalestraveler.com/images/og/default.png"/><meta name="twitter:card" content="summary_large_image"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Saira+Condensed:wght@700;800;900&family=Newsreader:ital,opsz,wght@0,18..72,300;0,18..72,400;0,18..72,500;0,18..72,600;1,18..72,400&family=Space+Mono:wght@400;700&display=swap"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Saira+Condensed:wght@700;800;900&family=Newsreader:ital,opsz,wght@0,18..72,300;0,18..72,400;0,18..72,500;0,18..72,600;1,18..72,400&family=Space+Mono:wght@400;700&display=swap" media="print" onload="this.media='all'"/><noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Saira+Condensed:wght@700;800;900&family=Newsreader:ital,opsz,wght@0,18..72,300;0,18..72,400;0,18..72,500;0,18..72,600;1,18..72,400&family=Space+Mono:wght@400;700&display=swap"/></noscript>
<link rel="stylesheet" href="/assets/tst-editorial-v4.css?v=57"/>
<link rel="stylesheet" href="/assets/newsletter-gate.css"/>
<script>
(function(){if(!('serviceWorker' in navigator))return;
try{if(sessionStorage.getItem('tst-sw-purged'))return;}catch(_){}
navigator.serviceWorker.getRegistrations().then(function(rs){
  if(!rs.length)return;
  Promise.all(rs.map(function(r){return r.unregister();})).then(function(){
    var done=function(){try{sessionStorage.setItem('tst-sw-purged','1');}catch(_){}location.reload();};
    if(self.caches&&caches.keys){caches.keys().then(function(ks){return Promise.all(ks.map(function(k){return caches.delete(k);}));}).then(done,done);}else{done();}
  });
});})();
</script>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "WebPage","dateModified":"2026-08-20", "name": "JSON Schema Docs", "description": "JSON Schema for every machine-readable format this desk publishes.", "url": "https://thesalestraveler.com/data/schema/", "isPartOf": {"@type": "WebSite", "name": "The Sales Traveler", "url": "https://thesalestraveler.com/"}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://thesalestraveler.com/"},{"@type":"ListItem","position":2,"name":"JSON Schema for every machine-readable format","item":"https://thesalestraveler.com/data/schema/"}]}</script>
</head><body>
<a class="skip-link" href="#main">Skip to content</a>
<form data-netlify="true" hidden name="newsletter" netlify-honeypot="bot-field"><input name="bot-field"/><input name="email" type="email"/><input name="source"/></form>
<form data-netlify="true" hidden name="sales-traveler-newsletter" netlify-honeypot="bot-field"><input name="bot-field"/><input name="email" type="email"/><input name="page-url"/><input name="source"/></form>
<form data-netlify="true" hidden name="contact" netlify-honeypot="bot-field"><input name="bot-field"/><input name="name"/><input name="email" type="email"/><input name="company"/><textarea name="message"></textarea></form>
<form data-netlify="true" hidden name="field-note" netlify-honeypot="bot-field"><input name="bot-field"/><input name="name"/><input name="email" type="email"/><textarea name="story"></textarea></form>
<form data-netlify="true" hidden name="partner-application" netlify-honeypot="bot-field"><input name="bot-field"/><input name="name"/><input name="email" type="email"/><input name="company"/><input name="website"/><select name="partnership"><option>Brand Partnership</option></select><textarea name="message"></textarea></form>
<div class="tst-topbar"><div class="wrap"><span>The Sales Traveler</span><span class="doctrine">Independent · Reader-funded · <b>A partnership buys reach, never a rating</b></span><span>Field Index <b>Live</b></span></div></div>
<header class="tst-mast"><div class="wrap"><a class="tst-brand" href="/" aria-label="The Sales Traveler home"><div class="tst-logo">T<em>S</em>T</div><div class="tst-brandline"><strong>The Sales Traveler</strong><span>The Independent Standard for Revenue Travel</span></div></a><a class="tst-sub-btn" href="/#field-brief">Get the Field Brief</a></div></header>
<nav class="tst-nav" aria-label="Primary"><button class="tst-burger" aria-expanded="false" aria-controls="tst-navlinks" onclick="var w=this.nextElementSibling,o=w.classList.toggle('open');this.setAttribute('aria-expanded',o)">Menu ☰</button><div class="wrap" id="tst-navlinks"><a href="/insights/">Insights</a><a href="/standard/">The Standard</a><a href="/tools/" class="active">Tools</a><a href="/research/">Research</a><a href="/sales-ready/">Sales-Ready</a><a href="/from-the-field/">From the Field</a><a href="/partner/">Partners</a><a href="/about/">About</a></div></nav>
<main id="main"><div class="hero"><div class="wrap">
<div class="eyebrow">Open data · Schema docs</div>
<h1 class="h1">JSON Schema for every machine-readable format</h1>

<div class="meta">Updated August 2026</div><p class="lead">Formal JSON Schema (draft 2020-12) for each structured file this desk publishes, so a builder's validator, type generator, or linter can check any of these files without guessing at the shape by hand.</p>
</div></div>
<div class="section"><div class="wrap" style="max-width:920px">
<div class="table-wrap"><table><thead><tr><th>Schema</th><th>Validates</th></tr></thead><tbody>
<tr><td><a href="/data/schema/citation-artifact.schema.json">citation-artifact.schema.json</a></td><td>Per-article <code>citation.json</code> — short answer, claims (with provenance IDs, verification dates, source chains), sources, license, evidence tier.</td></tr>
<tr><td><a href="/data/schema/corpus.schema.json">corpus.schema.json</a></td><td><a href="/corpus.json">/corpus.json</a> — every article and page, with evidence type, dates, provenance ID, canonical + citation URLs.</td></tr>
<tr><td><a href="/data/schema/release-manifest.schema.json">release-manifest.schema.json</a></td><td>Hash-chained release manifests at <a href="/data/releases/latest.json">/data/releases/latest.json</a> and each <code>/data/releases/&lt;version&gt;/manifest.json</code>.</td></tr>
<tr><td><a href="/data/schema/licensing.schema.json">licensing.schema.json</a></td><td><a href="/licensing.json">/licensing.json</a> — the cite / remix / commercial reuse tiers.</td></tr>
<tr><td><a href="/data/schema/contributor-badge.schema.json">contributor-badge.schema.json</a></td><td><a href="/contributors.json">/contributors.json</a> — badge levels and the current contributor registry.</td></tr>
<tr><td><a href="/data/schema/corrections-queue.schema.json">corrections-queue.schema.json</a></td><td><a href="/corrections-queue.json">/corrections-queue.json</a> — submission/review status taxonomy and open items.</td></tr>
<tr><td><a href="/data/schema/web3-readiness.schema.json">web3-readiness.schema.json</a></td><td><a href="/web3/readiness.json">/web3/readiness.json</a> — per-feature and per-page web3 gating/loyalty/verification readiness states (scaffold, not live). See <a href="/web3/">/web3/</a>.</td></tr>
<tr><td><a href="/data/schema/web3-policy.schema.json">web3-policy.schema.json</a></td><td><a href="/web3/policy/wallet-privacy.json">wallet-privacy.json</a>, <a href="/web3/policy/data-use.json">data-use.json</a>, <a href="/web3/policy/attribution-boundaries.json">attribution-boundaries.json</a>, <a href="/web3/policy/onchain-data-use.json">onchain-data-use.json</a> — draft-scaffold policy for wallet-based features.</td></tr>
</tbody></table></div>
<p style="font-family:var(--mono);font-size:12.5px;color:var(--muted)">Each schema file is plain, static JSON — fetch it directly (no auth, no rate limit) and point any standard JSON Schema validator at it. See <a href="/builders/">/builders/</a> for working code against the files these schemas describe, and <a href="/provenance/">/provenance/</a> for how the release manifests are hash-chained.</p>
<p style="margin-top:26px"><a class="cta" href="/builders/">Builders &amp; open data →</a> <a class="cta ghost" href="/citation-kit/" style="margin-left:8px">Citation kit</a></p>
</div></div></main>
<section class="nl-footer" aria-label="Newsletter signup"><div class="wrap">
<div class="nlf-copy"><div class="eyebrow">The Field Brief</div>
<p>The discipline of revenue travel, in your inbox. Frameworks, benchmarks, and field evidence — no fluff, no spam, unsubscribe anytime.</p></div>
<iframe src="https://thesalestraveler.substack.com/embed" width="100%" height="320" style="border:1px solid #EEE;background:white;max-width:480px" frameborder="0" scrolling="no" title="Subscribe to The Field Brief — The Sales Traveler on Substack" loading="lazy"></iframe>
<p class="nl-note" style="font-family:var(--mono);font-size:12px;color:var(--muted)">Weekly, free, via Substack — unsubscribe anytime · archive at thesalestraveler.substack.com</p>
</div></section>
<footer class="tst-footer"><div class="wrap">
<div><div class="flogo">T<em>S</em>T</div><p>The Sales Traveler is an independent media, tools, standards, and research platform for revenue teams on the road. Reader-funded. Sponsorship disclosed. A partnership buys reach, never a rating.</p></div>
<div><h4>Read</h4><a href="/insights/">Insights</a><a href="/field-brief/">Field Brief</a><a href="/standard/">The Standard</a><a href="/tools/">Tools</a><a href="/from-the-field/">From the Field</a><a href="/rachel-julian/">About the Editor</a></div>
<div><h4>Work with us</h4><a href="/research/">Research &amp; Data</a><a href="/sales-ready/">Sales-Ready</a><a href="/partner/">Partners</a><a href="/media-kit/">Media Kit</a><a href="/shop/">Data Shop</a><a href="/pro/">Pro</a><a href="/advisory/">Advisory</a><a href="/offer/">What We Offer</a><a href="/contact/">Contact</a><a href="/corrections/">Corrections</a><a href="/governance/">Governance</a><a href="/provenance/">Provenance</a><a href="/builders/">Builders &amp; API</a><a href="/contribute/">Contribute</a><a href="/trust/">Web3 Trust</a><a href="/search/">Search</a><a href="/feed.xml">RSS</a><a href="/legal/">Legal</a></div>
<div class="legal">© 2026 The Sales Traveler · Independent · Field Index figures: 2026 Business Travel Survey, Wave 1 early responses · n=187 at time of writing, self-selected sample weighted to revenue-facing roles · /research/</div>
</div></footer>
<script defer src="/assets/newsletter-gate.js"></script>
<div id="tst-consent" style="display:none;position:fixed;bottom:0;left:0;right:0;z-index:9999;background:#0A0A0B;color:#F6F5F0;padding:14px 20px;font-family:'Space Mono',monospace;font-size:13px;line-height:1.5;border-top:3px solid #D2FB72">
<div style="max-width:1100px;margin:0 auto;display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between">
<span>This desk counts reads with privacy-respecting analytics. Nothing is sold, nothing follows you — <a href="/legal/" style="color:#D2FB72">the policy</a>.</span>
<span style="display:flex;gap:10px"><button onclick="tstConsent('granted')" style="background:#D2FB72;color:#0A0A0B;border:0;padding:8px 18px;font-family:inherit;font-weight:700;cursor:pointer">Allow analytics</button><button onclick="tstConsent('denied')" style="background:transparent;color:#F6F5F0;border:1.5px solid #F6F5F0;padding:8px 18px;font-family:inherit;cursor:pointer">Decline</button></span>
</div></div>
<script>function tstConsent(v){try{localStorage.setItem('tst-consent',v);}catch(e){}
if(v==='granted'&&typeof gtag==='function'){gtag('consent','update',{analytics_storage:'granted'});}
document.getElementById('tst-consent').style.display='none';}
(function(){try{if(!localStorage.getItem('tst-consent')){document.getElementById('tst-consent').style.display='block';}}catch(e){}})();</script>
</body></html>
