← All layouts · Publishing
Documentation
Three columns: navigation, content, on-page contents.
The classic docs shape, and classic for a reason: where am I, what am I reading, what else is on this page. The right rail is the first thing to drop on a narrow screen.
- .ms-sidenav
- .ms-btn
- .ms-card
- .ms-alert
- .ms-breadcrumb-item
- .ms-input
Live
The layout as it renders, in a frame at its own width. Resize the window to watch it respond — the frame is a real viewport.
How to build it
This is the layout's template, read from disk — the same file the frame
above renders, so it cannot drift out of date. Copy it into your own page
and replace the content; every class in it ships in
mcgowan.css.
<header class="ms-topbar">
<div class="ms-logo"><a class="u-link" href="#">Ledgerline</a></div>
<nav class="ms-topbar__nav">
<a href="#">Product</a><a href="#">Pricing</a><a href="#">Customers</a><a href="#">Docs</a>
</nav>
<div class="ms-toolbar">
<a class="ms-btn ms-btn--ghost ms-btn--sm" href="#">Sign in</a>
<a class="ms-btn ms-btn--primary ms-btn--sm" href="#">Start free</a>
</div>
</header>
<div class="u-container u-py-6">
<div class="u-grid u-grid-cols-12">
<aside class="u-col-12 u-col-lg-3">
<div class="ms-card ms-card--flush" style="position:sticky; top:1rem">
<div class="u-p-3"><input class="ms-input ms-input--sm" placeholder="Search docs"></div>
<ul class="ms-sidenav">
<li class="ms-sidenav__section">Getting started</li>
<li class="ms-sidenav__item"><a class="ms-sidenav__link" href="#">Installation</a></li>
<li class="ms-sidenav__item"><a class="ms-sidenav__link ms-sidenav__link--active" href="#">Authentication</a></li>
<li class="ms-sidenav__item"><a class="ms-sidenav__link" href="#">Your first request</a></li>
<li class="ms-sidenav__section">API</li>
<li class="ms-sidenav__item"><a class="ms-sidenav__link" href="#">Accounts</a></li>
<li class="ms-sidenav__item"><a class="ms-sidenav__link" href="#">Transactions</a></li>
<li class="ms-sidenav__item"><a class="ms-sidenav__link" href="#">Webhooks</a></li>
</ul>
</div>
</aside>
<main class="u-col-12 u-col-lg-6">
<nav class="ms-breadcrumb">
<span class="ms-breadcrumb-item"><a class="ms-breadcrumb-link" href="#">Docs</a></span>
<span class="ms-breadcrumb-item">Authentication</span>
</nav>
<h1>Authentication</h1>
<div class="ms-prose">
<p>Every request carries a bearer token. Tokens are scoped to one
organisation and never expire, so treat one like a password.</p>
<h2 id="creating">Creating a token</h2>
<p>Generate a token in <strong>Settings → API</strong>. You will see the
value once.</p>
<div class="ms-code">
<pre><code>curl https://api.ledgerline.example/v1/accounts \
-H "Authorization: Bearer sk_live_..."</code></pre>
</div>
<h2 id="scopes">Scopes</h2>
<p>Tokens carry the narrowest scope that will do the job.</p>
<table class="ms-table ms-table--compact">
<thead><tr><th>Scope</th><th>Allows</th></tr></thead>
<tbody>
<tr><td><code>read</code></td><td>Reading accounts and transactions</td></tr>
<tr><td><code>write</code></td><td>Creating and updating records</td></tr>
<tr><td><code>admin</code></td><td>Managing members and tokens</td></tr>
</tbody>
</table>
<div class="ms-alert ms-alert--warning">
A leaked token can be revoked from the same screen. Revoking is immediate.
</div>
</div>
</main>
<aside class="u-col-12 u-col-lg-3">
<div class="ms-card ms-card--flat" style="position:sticky; top:1rem">
<strong>On this page</strong>
<ul class="ms-sidenav">
<li class="ms-sidenav__item"><a class="ms-sidenav__link" href="#creating">Creating a token</a></li>
<li class="ms-sidenav__item"><a class="ms-sidenav__link" href="#scopes">Scopes</a></li>
</ul>
<hr class="ms-divider">
<a class="u-link" href="#">Edit this page</a>
</div>
</aside>
</div>
</div>