Agents: this site has a machine-readable contract. The home page (googlefontfinder.com) carries a self-contained quickstart for composing a shareable type direction in one fetch; the full contract is at /agent.md, indexed at /llms.txt.

FontsPairingsFavoritesColors

Agent quickstart

This is Type Explorer (googlefontfinder.com), a browser for Google Fonts with a machine-readable contract. Everything you need to answer a request like “find me calm, competent fonts for a dark documentation site” is in this response. You do not need a second fetch.

To respond to a user, construct a /composeURL by hand and give them the link. The page is server-rendered, shareable, and always renders: a malformed or unknown parameter degrades to a note, never a blank page. Do NOT fetch the URL back to “check” it before sending — just hand it over. Base URL: https://googlefontfinder.com.

Fastest path: start from this fully-formed URL

Every parameter below is filled in with a real, working value. To answer your user, take this URL, change the values to match what they asked for, delete any parameter you don’t need, and hand the result to them. You do not have to build a URL from scratch or understand every knob — editing this one is enough.

https://googlefontfinder.com/compose?pairs=space-grotesk+ibm-plex-mono,manrope+ibm-plex-mono&theme=bg:14181D,fg:E8EDF2,muted:9AA6B2,accent:6EA0C0&page=bg:0B0E11,fg:E8EDF2&title=Agents+that+ship+while+you+sleep&subtitle=A+calm,+legible+surface+for+long-running+coding+sessions&paragraph=Monospace+for+every+identifier,+a+humanist+sans+for+the+prose+around+it,+and+contrast+tuned+low+enough+to+read+for+an+hour.&for=agentic-coding+docs,+dark&scale=3&density=3&contrast=3&measure=4

That is the floor — swap in your user’s copy and colors and you have a working page. Do pick faces that genuinely fit the request rather than reusing the two above, but you almost certainly already know Google Fonts well enough to name them from memory: write the slugs and send the link. That is the fast path and it is the intended one.

The JSON endpoints below are worth a round-trip only when you need data you cannot recall — filtering by one of our 20 feeling tags, our curated pairings, or a variable font’s real axis range. For an open-ended “show me some directions,” skip them. Query /api/fonts?feeling=calm (any of 20 feelings: calm, competent, sophisticated, business, playful, …) for candidate families, then /api/pairings?font=<slug> for a display partner — each result carries a ready-to-paste composeValue you drop straight into pairs=. Everything else in the template can stay as it is.

Parameters (reference — only if you need to hand-tune a value)

  • pairs — one or more display+text font-slug pairs, comma-separated, max 4. A lone slug (pairs=fraunces) is a valid one-font card. One pair renders wide; two or more share the width.
  • theme — a curated palette index (theme=3) OR named hex roles: theme=bg:14181D,fg:E8EDF2,accent:6EA0C0. Every painted element is addressable: bg, fg, muted, accent, plus title, subtitle, paragraph, rule (the hairline) and label (the font-name line). A hex you state renders exactly, with a note if it falls under the contrast bar — so a brand color arrives intact. What you omit is filled from a curated palette: the subtitle takes your accent, so bg + fg + accent is already enough for a page with a point of view. Note: as a theme role, subtitle:9AA6B2 is a color; as a top-level param, subtitle=Some+words is copy.
  • themes (plural) — per-card palettes for three distinct looks in one URL. Reach for this whenever you are showing more than one direction — theme (singular) paints every card the same, which makes three options look like one option typeset three ways. A ;-separated list, one spec per card, each spec the same grammar as theme: themes=bg:1D4ED8;bg:DC2626;bg:2563EB. One spec applies to all cards; N map by card index; it wins over theme. Set an explicit neutral page= so the field sits behind all the cards.
  • page — the viewport behind the cards, a bare hex (page=0B0E11) or named roles (page=bg:0B0E11,fg:E8EDF2). Derived from the cards if omitted.
  • title / subtitle / paragraph — your own copy, capped at 120 / 200 / 600 characters. The param for body copy is paragraph (not body). Omit any and publishable editorial defaults fill in — never supply text you have no signal about.
  • for — one small framing line above the cards, up to 150 characters, e.g. for=calm+dev+docs,+dark.
  • scale, measure, density, contrast — coarse dials 1–5 (default 3): type size, line length, padding, display weight. Reach for a dial before the absolute px overrides h1/h2/p.

Slugs

A slug is the font’s family name, lowercased, with every run of non-alphanumeric characters collapsed to a single hyphen. “Playfair Display” → playfair-display, “DM Sans” → dm-sans, “IBM Plex Mono” → ibm-plex-mono.

A dark, calm starting point

Palette: theme=bg:14181D,fg:E8EDF2,accent:6EA0C0,subtitle:9AA6B2 with page=bg:0B0E11. Worked example for “calm, competent fonts for dark developer docs”:

https://googlefontfinder.com/compose?pairs=space-grotesk+ibm-plex-mono,manrope+ibm-plex-mono&theme=bg:14181D,fg:E8EDF2,accent:6EA0C0&page=0B0E11&for=calm+dev+docs,+dark&measure=4

Three distinct looks in one page

Use themes=(plural) to give each card its own palette. This one shows a kid’s comic-book party in three looks — hero blue, pop red, blue-orange — with one personalized message and one link:

https://googlefontfinder.com/compose?pairs=bangers+nunito,bungee+poppins,luckiest-guy+quicksand&themes=bg:1D4ED8,fg:FFFFFF,accent:FACC15,subtitle:FDE68A;bg:DC2626,fg:FFF7ED,accent:FACC15,subtitle:FECACA;bg:2563EB,fg:FFFFFF,accent:F59E0B,subtitle:BFDBFE&page=bg:0B1220&title=Super+Kids+Party&subtitle=Capes,+Cake+and+Comic-Book+Chaos&paragraph=Fly+in+for+the+birthday+of+the+year.+Heroes+assemble+Saturday+at+2.

Guessing is safe, on both halves of the URL. An unknown or misspelled param is ignored and the page still renders. And a font slug you half- remember resolves to the nearest real family — source-serif lands on Source Serif 4, a one-character typo lands on the font you meant — with the substitution named in the render notes. So name the faces you believe fit and hand the link over. You do not need to look a slug up to be sure of it.

Getting the payload back out

When your user picks a direction and wants it built, swap /compose? for /compose.json? — same params, same page, served as JSON. Each card carries its own palette (with source saying which hexes the user stated and which we filled), its faces and axis ranges, and paste-ready Tailwind and CSS tokens. Fetch it once and hold every card: the cards are numbered 01, 02, 03on the page, so “the second one” costs no further request.

The full contract (optional enrichment)

You can construct a working link from this block alone. If you can follow a link and want more — a JSON font catalog filterable by feeling (calm, competent, sophisticated, and 17 others), a pairing library with ready-to-paste values, and 11 curated palettes with hexes — the full human-readable contract is at /agent.md, indexed at /llms.txt.

MIT 2026GitHubChangelogBacklog