Skip to main content

docs — Public Documentation Standards

Customer-facing docs and API reference. Hosted via Mintlify. These standards are NEW — existing pages may not follow them yet. Reference pages that DO follow the standard: Catalog, Projects, Virtual Machines. Use those as examples.

Critical Rules

  1. api-reference/openapi.yaml is the single source of truth — update FIRST, then sync to raff-go → raff-cli → terraform-provider-raff
  2. Never include admin/internal endpoints or fields — public API only
  3. Auth: X-API-Key only — no JWT, no X-Account-ID, no admin keys
  4. Verify before publishing — check endpoint actually works, don’t blindly document
  5. Direct language — no marketing, no jargon, go straight to value. Short paragraphs (2-3 sentences max)
  6. Update changelog — when adding/changing any API endpoint, add dated entry to the product’s changelog page

Writing Style

  • Direct — “Create a VM” not “Virtual Machine Creation Guide”
  • Simple — make complex things simple, but still comprehensive
  • Action-oriented — lead with what the user can DO
  • No filler — cut “In order to”, “Please note that”, “It is important to”
  • Code examples — curl for API, yaml for Terraform, bash for CLI
  • Short paragraphs — 2-3 sentences. If longer, break it up.

4 Product Pillars

Snapshots and Backups are point-in-time artifacts of a VM (and eventually a Volume), not standalone storage products — they live under Virtual Machines.

Reference (3 sections)

Product Page Template

Each product follows the same 5-section taxonomy: Overview / Quickstart & guides / Concepts / Details / Troubleshooting. New users follow Overview top-down; lookup users hit Details or Troubleshooting via search. Identical on every product so it stops being a design decision. Canonical copyable templates live at:
  • docs/products/_template.mdx — Overview page
  • docs/products/_template-quickstart.mdx — task how-to
  • docs/products/_template-concept.mdx — explainer
  • docs/products/_template-details.mdx — spec sheet
  • docs/products/_template-troubleshooting.mdx — issue list
The Products tab uses nested sub-groups in docs.json: pillar group → product group → section group → pages. Sub-pages are reachable directly from the sidebar, not just via cards on the Overview page. See feedback_no_products_switcher.md — we deliberately do NOT use Mintlify’s navigation.products dropdown switcher.

Overview page (index.mdx)

The sidebar nested groups + the global Products anchor handle navigation back; no inline back-link needed. Screenshot convention. Every product Overview has a hero <Frame> and may add inline <Frame> blocks in quickstart/guide pages. Use the path /images/products/<pillar>/<product>/<name>.png and prefix the alt text with TODO: until the file exists. This makes outstanding screenshot work greppable.

Standard files per product

When a section has only 1 page, it can be a flat .mdx (e.g. troubleshooting.mdx); when it has multiple, it’s a folder. Both render the same in the sidebar group.

Changelog (single global page at /api-reference/changelog)

  • One changelog for everything — not per-product. Grouped by date → product section.
  • API version stays same until finalized (currently v1.0.0)
  • Each change has a date, not a version bump
  • When finalized → freeze, start next version
  • This is NOT the app release log (releases/vX.Y.Z.md)
  • Every entry has an emoji tag:
    • 🟢 Added — new endpoint or new parameter
    • 🔵 Updated — changed behavior or new param on existing endpoint (say WHICH part changed)
    • 🟡 Deprecated — still works but will be removed (warn users, tell them what to use instead)
    • 🔴 Removed — endpoint or parameter deleted, no longer available
    • 🟣 Fixed — bug fix on existing endpoint
  • Group by date → section (product + reference type):
  • Section format: {Product} — {Reference Type} where reference type is: API, CLI, or Terraform

API Reference Rules

Before Adding an Endpoint

  1. Endpoint must actually work in the backend — don’t document unimplemented features
  2. Must be public (customer-facing) — no admin-only endpoints
  3. If it returns internal fields, strip them first

POST Endpoints — Prerequisites

Every POST endpoint must clearly state what the user needs to fetch first:

Each Endpoint Page

  • Method + path
  • Description (1-2 sentences)
  • Prerequisites (what to fetch first)
  • Parameters table (required/optional, type, description, example)
  • Request example (curl)
  • Response example (actual JSON)
  • Error codes specific to this endpoint

Mintlify Conventions

  • Pages: .mdx format
  • Navigation: docs.json
  • API endpoints: auto-generated from openapi.yaml
  • Components: <Card>, <CardGroup>, <CodeGroup>, <Tabs>, <Accordion>, <Note>, <Warning>
  • Icons: use Mintlify icon names (e.g. icon="plus", icon="server")

Quick Commands

Sync Order

When you change the API spec:
  1. Edit api-reference/openapi.yaml
  2. Add/update MDX pages if needed
  3. Update product changelog page with dated entry
  4. Test locally: npx mintlify dev
  5. After merging: sync downstream (raff-go → CLI → Terraform)
Last modified on May 11, 2026