<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>GroundTruth — The 2026 US Tariff &amp; Landed Cost API for AI Agents</title>
<meta name="description" content="One MCP/REST call returns the current, source-backed total US duty rate—every stacked layer, MPF/HMF and landed cost—so your AI agent stops guessing 2026 tariffs.">
<link rel="canonical" href="https://dytsk9wrfv.page.coze.site/groundtruth.html">
<meta property="og:type" content="website">
<meta property="og:title" content="GroundTruth — The 2026 US Tariff API for AI Agents">
<meta property="og:description" content="Current, source-backed US tariff and landed cost for AI agents via MCP + REST. Every stacked duty layer, MPF/HMF, no HTS code needed.">
<meta property="og:url" content="https://dytsk9wrfv.page.coze.site/groundtruth.html">
<meta name="twitter:card" content="summary_large_image">
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"SoftwareApplication","name":"GroundTruth","applicationCategory":"DeveloperApplication","operatingSystem":"Cloud, MCP","description":"Current, source-backed 2026 US tariff and landed cost API for AI agents (MCP + REST).","offers":[{"@type":"Offer","price":"0","priceCurrency":"USD"},{"@type":"Offer","price":"240","priceCurrency":"USD"},{"@type":"Offer","price":"790","priceCurrency":"USD"}]}
</script>
<style>
:root{--bg:#0a0e14;--panel:#121826;--line:#1f2937;--txt:#e5e9f0;--mut:#93a1b5;--brand:#4ade80;--brand2:#22d3ee}
*{box-sizing:border-box}body{margin:0;font:16px/1.6 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--txt)}
a{color:var(--brand2);text-decoration:none}
.wrap{max-width:1080px;margin:0 auto;padding:0 20px}
header{padding:18px 0;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:sticky;top:0;background:rgba(10,14,20,.9);backdrop-filter:blur(8px);z-index:5}
.logo{font-weight:800;font-size:18px;display:flex;align-items:center;gap:8px}
.logo i{width:10px;height:10px;border-radius:50%;background:var(--brand);box-shadow:0 0 12px var(--brand);display:inline-block}
nav a{margin-left:18px;color:var(--mut);font-size:14px}nav a:hover{color:#fff}
.hero{padding:84px 0 56px;text-align:center}
.tag{display:inline-block;font-size:12.5px;color:var(--brand);border:1px solid #1c4330;background:#0e2a1d;border-radius:999px;padding:5px 13px;margin-bottom:22px;letter-spacing:.3px}
h1{font-size:clamp(30px,5vw,52px);line-height:1.12;margin:0 auto 18px;max-width:820px;font-weight:800;letter-spacing:-.5px}
h1 span{background:linear-gradient(90deg,var(--brand),var(--brand2));-webkit-background-clip:text;background-clip:text;color:transparent}
.sub{color:var(--mut);font-size:18px;max-width:680px;margin:0 auto 30px}
.cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn{display:inline-block;padding:13px 24px;border-radius:10px;font-weight:700;font-size:15px;cursor:pointer;border:1px solid var(--line)}
.btn.p{background:linear-gradient(90deg,var(--brand),var(--brand2));color:#04130c;border:0}
.btn.g{background:transparent;color:var(--txt)}
.stats{display:flex;gap:34px;justify-content:center;margin-top:44px;flex-wrap:wrap;color:var(--mut);font-size:14px}
.stats b{display:block;color:#fff;font-size:24px}
section{padding:60px 0;border-top:1px solid var(--line)}
h2{font-size:28px;margin:0 0 8px;letter-spacing:-.3px}.lead{color:var(--mut);margin:0 0 34px;max-width:680px}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px}
.card .ic{font-size:24px}.card h3{margin:10px 0 6px;font-size:17px}.card p{margin:0;color:var(--mut);font-size:14.5px}
.code{background:#0b1119;border:1px solid var(--line);border-radius:12px;padding:20px;overflow:auto;font:13.5px/1.6 ui-monospace,Menlo,Consolas,monospace;color:#cbe6ff;margin-top:18px}
.code .k{color:#82aaff}.code .s{color:#c3e88d}.code .c{color:#5b6b80}
.tiers{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.tier{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px;display:flex;flex-direction:column}
.tier.pop{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand)}
.tier h4{margin:0;font-size:15px;color:var(--mut);font-weight:600}.price{font-size:32px;font-weight:800;margin:8px 0 2px}.price small{font-size:13px;color:var(--mut);font-weight:400}
.tier ul{list-style:none;padding:0;margin:16px 0;font-size:13.5px;color:var(--mut)}.tier li{padding:5px 0;border-top:1px dashed var(--line)}
.tier .btn{margin-top:auto;text-align:center;padding:10px;font-size:14px}
.wait{background:linear-gradient(135deg,#0e2a1d,#0b2230);border:1px solid #1c4330;border-radius:18px;padding:40px;text-align:center}
.wait h2{border:0}form{display:flex;gap:10px;max-width:480px;margin:22px auto 0;flex-wrap:wrap;justify-content:center}
input[type=email],select{flex:1;min-width:240px;padding:13px 16px;border-radius:10px;border:1px solid var(--line);background:#0b1119;color:#fff;font-size:15px}
.modal{position:fixed;inset:0;background:rgba(3,7,13,.72);display:none;align-items:center;justify-content:center;padding:20px;z-index:50}
.modal .card{background:#0e1622;border:1px solid var(--line);border-radius:16px;max-width:440px;width:100%;padding:28px}
.modal .card h3{margin:0 0 6px}
.modal .card p.note{font-size:13.5px;margin:0 0 18px;color:var(--mut)}
.modal label{display:block;font-size:13px;color:var(--mut);margin:12px 0 6px}
.modal select,.modal input{width:100%;box-sizing:border-box}
.modal .row{display:flex;gap:10px;margin-top:20px}
.modal .row .btn{flex:1;text-align:center}
.orderok{display:none;text-align:center;padding:10px 0}
.orderok h3{margin-bottom:8px}
.note{font-size:13px;color:var(--mut);margin-top:12px}
.okmsg{color:var(--brand);font-weight:700;margin-top:14px;display:none}
footer{padding:36px 0;border-top:1px solid var(--line);color:var(--mut);font-size:13.5px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px}
@media(max-width:820px){.grid{grid-template-columns:1fr}.tiers{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.tiers{grid-template-columns:1fr}}
</style>
</head>
<body>
<header><div class="wrap" style="display:flex;align-items:center;justify-content:space-between;width:100%">
  <div class="logo"><i></i> GroundTruth</div>
  <nav><a href="#why">Why</a><a href="#api">API</a><a href="#pricing">Pricing</a><a href="/tariff-landed-cost-calculator.html">Live demo</a><a href="https://winter-river-47fc.contentforge-press.workers.dev/account">My account</a></nav>
</div></header>

<div class="hero"><div class="wrap">
  <span class="tag">FLAGSHIP: 2026 US TARIFF &amp; LANDED COST · MCP + REST</span>
  <h1>The <span>US tariff</span> facts layer your AI agent can trust</h1>
  <p class="sub">One call returns the current, source-backed total US duty rate—every stacked layer plus MPF/HMF and landed cost—so your agent stops guessing tariffs and importers get an answer without an HTS code.</p>
  <div class="cta">
    <a class="btn p" href="#wait">Get early access</a>
    <a class="btn g" href="/tariff-landed-cost-calculator.html">Try the live demo →</a>
  </div>
  <div class="stats">
    <div><b>13</b>Product categories</div>
    <div><b>2</b>MCP tools</div>
    <div><b>100%</b>Source-linked</div>
    <div><b>&lt;5 min</b>To first call</div>
  </div>
</div></div>

<section id="why"><div class="wrap">
  <h2>Why GroundTruth</h2>
  <p class="lead">LLMs hallucinate the thing that changes most—stacked 2026 US tariffs and MPF/HMF. GroundTruth anchors them in maintained, attributable customs facts.</p>
  <div class="grid">
    <div class="card"><div class="ic">🎯</div><h3>Answers, not links</h3><p>We return structured, computed results with units and sources—no scraping, no guessing from a page of search links.</p></div>
    <div class="card"><div class="ic">🔄</div><h3>Always current</h3><p>Official rates are monitored and the data store is recompiled on change. Refresh the deployment to propagate.</p></div>
    <div class="card"><div class="ic">🧩</div><h3>MCP &amp; REST</h3><p>Drop it into Claude, Cursor, ChatGPT via MCP, or call the JSON HTTP API from any app.</p></div>
    <div class="card"><div class="ic">🏛️</div><h3>Stacked 2026 tariffs</h3><p>MFN + forced-labor + Section 301/232 + MPF/HMF in one result, with confidence and a clear disclaimer.</p></div>
    <div class="card"><div class="ic">🔌</div><h3>One-click adopt</h3><p>Clear schemas, quickstarts and copy-paste code get developers to a successful call in minutes.</p></div>
    <div class="card"><div class="ic">🛡️</div><h3>Accountable</h3><p>Every value carries an effective date, verification status and official source URL.</p></div>
  </div>
  <p class="lead" style="margin-top:18px;font-size:15px">Need more? One-time credit top-ups at $25 / $99 / $499 — pay only for what you use. Annual plans billed once via card, bank transfer or Payoneer.</p>
</div></section>

<section id="api"><div class="wrap">
  <h2>One call. The full economics.</h2>
  <p class="lead">Ask “how much duty and landed cost for a Bluetooth speaker from China?” and get the complete breakdown.</p>
  <div class="code"><pre><span class="c"># POST /mcp  (MCP tools/call)</span>
{
  <span class="k">"method"</span>: <span class="s">"tools/call"</span>,
  <span class="k">"params"</span>: { <span class="k">"name"</span>: <span class="s">"compute_tariff"</span>, <span class="k">"arguments"</span>: {
    <span class="k">"product_description"</span>: <span class="s">"bluetooth speaker"</span>,
    <span class="k">"origin_code"</span>: <span class="s">"CN"</span>,
    <span class="k">"declared_value"</span>: <span class="s">50000</span>,
    <span class="k">"arrival_mode"</span>: <span class="s">"ocean"</span>,
    <span class="k">"freight"</span>: <span class="s">3500</span>, <span class="k">"broker_fee"</span>: <span class="s">250</span>
  }}
}
<span class="c"># → total_duty_rate 0.625 · duty 31250 · landed 85235.70</span></pre></div>
  <p class="note">Tools: <code>list_tariff_categories · compute_tariff</code></p>
</div></section>

<section id="pricing"><div class="wrap">
  <h2>Simple, developer-first pricing</h2>
  <p class="lead">Start free, no credit card. Upgrade when your agent runs in production.</p>
  <div class="tiers">
    <div class="tier"><h4>Free</h4><div class="price">$0</div><ul><li>1,000 calls / month</li><li>MCP + REST</li><li>Community support</li></ul><a class="btn g" href="#wait">Start free</a></div>
    <div class="tier"><h4>Pro</h4><div class="price">$240<small>/year</small></div><ul><li>50,000 calls / month</li><li>Higher rate limits</li><li>Email support</li></ul><a class="btn g" data-plan="Pro" href="#">Choose Pro</a></div>
    <div class="tier pop"><h4>Business · popular</h4><div class="price">$790<small>/year</small></div><ul><li>250,000 calls / month</li><li>Change webhooks</li><li>Priority support</li></ul><a class="btn p" data-plan="Business" href="#">Choose Business</a></div>
    <div class="tier"><h4>Enterprise</h4><div class="price">$3,000<small>+</small></div><ul><li>High volume + SLA</li><li>Invoiced, bank / Payoneer</li><li>Custom sources</li></ul><a class="btn g" data-plan="Enterprise" href="#">Contact us</a></div>
  </div>
</div></section>

<section id="wait"><div class="wrap">
  <div class="wait">
    <h2>Get early access</h2>
    <p class="lead" style="margin:0 auto">Be first when the public API and managed MCP endpoint go live. Launch-week pricing included.</p>
    <form id="wf">
      <input type="email" id="em" placeholder="you@company.com" required>
      <button class="btn p" type="submit">Join the waitlist</button>
    </form>
    <div class="okmsg" id="ok">You’re on the list — we’ll email you at launch. 🎉</div>
    <p class="note">No spam, ever. Unsubscribe anytime.</p>
  </div>
</div></section>

<div class="modal" id="orderModal">
  <div class="card">
    <div id="orderFormWrap">
      <h3>Get your GroundTruth plan</h3>
      <p class="note">Tell us where to send your secure payment link. Most links are delivered within a few hours; your API key is activated right after payment.</p>
      <form id="orderForm">
        <input type="hidden" id="op">
        <label>Plan</label>
        <select id="pp">
          <option value="Pro — $240/year">Pro — $240/year · 50k calls/mo</option>
          <option value="Business — $790/year">Business — $790/year · 250k calls/mo</option>
          <option value="Top-up — $25">Top-up — $25</option>
          <option value="Top-up — $99">Top-up — $99</option>
          <option value="Top-up — $499">Top-up — $499</option>
          <option value="Enterprise — custom">Enterprise — custom (invoiced)</option>
        </select>
        <label>Work email</label>
        <input type="email" id="oe" placeholder="you@company.com" required>
        <div class="row">
          <button type="button" class="btn g" id="cancelOrder">Cancel</button>
          <button type="submit" class="btn p">Request payment link</button>
        </div>
      </form>
    </div>
    <div class="orderok" id="orderOk">
      <h3>Request received 🎉</h3>
      <p class="note" style="margin:0">We’ll email your secure payment link shortly. Your key activates right after payment.</p>
    </div>
  </div>
</div>

<footer><div class="wrap" style="display:flex;justify-content:space-between;width:100%;flex-wrap:wrap;gap:10px">
  <div>© 2026 GroundTruth. Commerce facts for AI agents.</div>
  <div><a href="/tariff-landed-cost-calculator.html">Tariff calculator</a> · <a href="/">Seller tools</a> · <a href="/realproof.html">RealProof</a></div>
  <div><a href="/gt-privacy.html">Privacy</a> · <a href="/gt-terms.html">Terms</a> · <a href="/gt-refund.html">Refunds</a> · <a href="mailto:contentforge.press@outlook.com">Contact</a></div>
</div></footer>

<script>
(function(){
  // Orders + waitlist are emailed to us via Web3Forms. Set the access key once.
  var W3F_KEY="0d90a2d8-493d-417d-86d9-672bbe602c32";
  function notify(payload,done){
    if(!W3F_KEY){ if(done)done(); return; }
    var f=new FormData();
    f.append("access_key",W3F_KEY);
    Object.keys(payload).forEach(function(k){f.append(k,payload[k]);});
    fetch("https://api.web3forms.com/submit",{method:"POST",body:f})
      .then(function(){if(done)done();}).catch(function(){if(done)done();});
  }

  // ---- Waitlist ----
  var form=document.getElementById("wf"), ok=document.getElementById("ok");
  form.addEventListener("submit",function(e){
    e.preventDefault();
    var email=document.getElementById("em").value.trim();
    var local=JSON.parse(localStorage.getItem("gt_waitlist")||"[]");
    if(local.indexOf(email)<0)local.push(email);
    localStorage.setItem("gt_waitlist",JSON.stringify(local));
    notify({subject:"GroundTruth waitlist signup",email:email,from:"waitlist"},function(){
      form.style.display="none"; ok.style.display="block";
    });
  });

  // ---- Order modal ----
  var modal=document.getElementById("orderModal"),
      pp=document.getElementById("pp"),
      oe=document.getElementById("oe"),
      of=document.getElementById("orderForm"),
      ow=document.getElementById("orderFormWrap"),
      ook=document.getElementById("orderOk");
  function openOrder(plan){
    ow.style.display="block"; ook.style.display="none";
    if(plan){ for(var i=0;i<pp.options.length;i++){ if(pp.options[i].value.indexOf(plan)===0){pp.selectedIndex=i;break;} } }
    oe.value="";
    modal.style.display="flex";
  }
  function closeOrder(){ modal.style.display="none"; }
  document.querySelectorAll('a[data-plan]').forEach(function(a){
    a.addEventListener("click",function(e){ e.preventDefault(); openOrder(a.getAttribute("data-plan")); });
  });
  document.getElementById("cancelOrder").addEventListener("click",closeOrder);
  modal.addEventListener("click",function(e){ if(e.target===modal)closeOrder(); });
  of.addEventListener("submit",function(e){
    e.preventDefault();
    var plan=pp.value, email=oe.value.trim();
    var orders=JSON.parse(localStorage.getItem("gt_orders")||"[]");
    orders.push({plan:plan,email:email,at:new Date().toISOString()});
    localStorage.setItem("gt_orders",JSON.stringify(orders));
    notify({subject:"New GroundTruth order: "+plan,plan:plan,email:email,from:"order",replyto:email},function(){
      ow.style.display="none"; ook.style.display="block";
    });
  });
})();
</script>
</body>
</html>
