@font-face block generated from the font file: family, weight, style, stretch and unicode-range read from the font

$0.005 USDC per call · Business, finance and compliance · POST /api/v1/font-face-css · Id font-face-css

Reads a font you supply as base64 (up to 2 MB, any of TTF, OTF, WOFF, WOFF2) and writes an @font-face rule for the URLs you will serve it from, for an agent or build step generating CSS: font-family from the name table, font-weight from OS/2 (or the fvar wght range of a variable font), font-style, font-stretch, and unicode-range from the cmap. Names and URLs are escaped as CSS strings. It does not host, convert or subset the font, does not check that your URLs serve the format you name, does not read collections (.ttc), and a font whose OS/2 fsType forbids embedding fails with no CSS.

What you get

A correct @font-face rule (including variable-font ranges and unicode-range) without hand-reading the name and OS/2 tables.

Call it

Send the JSON body below to https://agents.writerslogic.com/api/v1/font-face-css. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.

curl -i -X POST https://agents.writerslogic.com/api/v1/font-face-css \
  -H 'content-type: application/json' \
  -d '{"fontBase64":"AAEAAAAJAAAAAAAAT1MvMgAAAAAAAACcAAAAYGNtYXAAAAAAAAAA/AAAADxnbHlmAAAAAAAAATgAAACEaGVhZAAAAAAAAAG8AAAANmhoZWEAAAAAAAAB9AAAACRobXR4AAAAAAAAAhgAAAAUbG9jYQAAAAAAAAIsAAAADG1heHAAAAAAAAACOAAAACBuYW1lAAAAAAAAAlgAAAEyAAQCWAGQAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQADAAEAAAAMAAQAMAAAAAgAAAAAAAAAQQBCAOn//wAAAEEAQgDp////wP/A/xsAAQAAAAAAAAAAAAEAZAAAA4QCvAACAAABAQEAZAGQAZAAAAK8/UQAAAAAAQAAAAADIAK8AAQAAAEBAAEAAAAAAAHCAV7+ogAAArwAAP6i/qIAAAEAAAAAAMgAZAACAAABAQEAAABkAGQAAABk/5wAAAD//wBkAAAETAMgACMAAQAAAAAAAwADAMgCvAAAAAEAAAABAAAAAAAAXw889QAAA+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAyD/OABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUB9AAAA+gAAAMgAAABLAAAA+gAAAAAAAAAEAAkADQAQgABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgBOAAMAAQQJAAEAFAAAAAMAAQQJAAIADgAUAAMAAQQJAAQAJAAiAAMAAQQJAAYAIgBGAAMAAQQJAA0ARgBoAAMAAQQJAA4ANgCuAFMAeQBuAHQAaAAgAFMAYQBuAHMAUgBlAGcAdQBsAGEAcgBTAHkAbgB0AGgAIABTAGEAbgBzACAAUgBlAGcAdQBsAGEAcgBTAHkAbgB0AGgAUwBhAG4AcwAtAFIAZQBnAHUAbABhAHIAUwB5AG4AdABoAGUAdABpAGMAIAB0AGUAcwB0ACAAZgBvAG4AdAAsACAAcAB1AGIAbABpAGMAIABkAG8AbQBhAGkAbgAuAGgAdAB0AHAAcwA6AC8ALwBlAHgAYQBtAHAAbABlAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAAA=","sources":[{"url":"/fonts/synth-sans.woff2","format":"woff2"},{"url":"/fonts/synth-sans.woff","format":"woff"}]}'

Input

FieldTypeRequiredDescription
fontBase64string; length 8..2796204yesBase64 of a .ttf, .otf, .woff or .woff2 file (not a .ttc collection), up to 2 MB.
sourcesarray<object>; max 4 itemsyesOne entry per file you serve, best format first.
fontDisplaystring; one of "auto", "block", "swap", "fallback", "optional"noDefault swap.
familystring; length 1..200noOverrides the family name read from the font.
includeUnicodeRangebooleannoDefault true; omitted automatically for fonts with more than 300 cmap ranges.

Example request body

{
  "fontBase64": "AAEAAAAJAAAAAAAAT1MvMgAAAAAAAACcAAAAYGNtYXAAAAAAAAAA/AAAADxnbHlmAAAAAAAAATgAAACEaGVhZAAAAAAAAAG8AAAANmhoZWEAAAAAAAAB9AAAACRobXR4AAAAAAAAAhgAAAAUbG9jYQAAAAAAAAIsAAAADG1heHAAAAAAAAACOAAAACBuYW1lAAAAAAAAAlgAAAEyAAQCWAGQAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQADAAEAAAAMAAQAMAAAAAgAAAAAAAAAQQBCAOn//wAAAEEAQgDp////wP/A/xsAAQAAAAAAAAAAAAEAZAAAA4QCvAACAAABAQEAZAGQAZAAAAK8/UQAAAAAAQAAAAADIAK8AAQAAAEBAAEAAAAAAAHCAV7+ogAAArwAAP6i/qIAAAEAAAAAAMgAZAACAAABAQEAAABkAGQAAABk/5wAAAD//wBkAAAETAMgACMAAQAAAAAAAwADAMgCvAAAAAEAAAABAAAAAAAAXw889QAAA+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAyD/OABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUB9AAAA+gAAAMgAAABLAAAA+gAAAAAAAAAEAAkADQAQgABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgBOAAMAAQQJAAEAFAAAAAMAAQQJAAIADgAUAAMAAQQJAAQAJAAiAAMAAQQJAAYAIgBGAAMAAQQJAA0ARgBoAAMAAQQJAA4ANgCuAFMAeQBuAHQAaAAgAFMAYQBuAHMAUgBlAGcAdQBsAGEAcgBTAHkAbgB0AGgAIABTAGEAbgBzACAAUgBlAGcAdQBsAGEAcgBTAHkAbgB0AGgAUwBhAG4AcwAtAFIAZQBnAHUAbABhAHIAUwB5AG4AdABoAGUAdABpAGMAIAB0AGUAcwB0ACAAZgBvAG4AdAAsACAAcAB1AGIAbABpAGMAIABkAG8AbQBhAGkAbgAuAGgAdAB0AHAAcwA6AC8ALwBlAHgAYQBtAHAAbABlAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAAA=",
  "sources": [
    {
      "url": "/fonts/synth-sans.woff2",
      "format": "woff2"
    },
    {
      "url": "/fonts/synth-sans.woff",
      "format": "woff"
    }
  ]
}

Result

The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.

FieldTypeRequiredDescription
statusstring; one of "pass", "fail", "unknown", "unsupported"nopass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass.
cssone ofno
familyone ofno
weightone ofno
styleone ofno
stretchone ofno
variablebooleannoTrue when the font has an fvar table.
axesarray<object>no
unicodeRangeone ofno
unicodeRangeCountone ofno
licenceone ofno
witnessesarray<object>no
versionsobjectnoEvery semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile).
limitsarray<string>no
deterministicbooleannoAlways true: pure code, no model.

Pay and connect

Available through: x402 (USDC on Base), MCP. MCP clients reach it through the identifier-text-kit package.

Machine-readable