{"id":"font-face-css","title":"@font-face block generated from the font file: family, weight, style, stretch and unicode-range read from the font","description":"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.","roi":"A correct @font-face rule (including variable-font ranges and unicode-range) without hand-reading the name and OS/2 tables.","audience":"business","package":"identifier-text-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/font-face-css","path":"/api/v1/font-face-css","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["fontBase64","sources"],"properties":{"fontBase64":{"type":"string","minLength":8,"maxLength":2796204,"description":"Base64 of a .ttf, .otf, .woff or .woff2 file (not a .ttc collection), up to 2 MB."},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["url","format"],"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"Where you will serve this file; written into url(). Quotes, backslashes and control characters are escaped."},"format":{"type":"string","enum":["woff2","woff","truetype","opentype"],"description":"The format() hint for that file."}}},"maxItems":4,"minItems":1,"description":"One entry per file you serve, best format first."},"fontDisplay":{"type":"string","enum":["auto","block","swap","fallback","optional"],"description":"Default swap."},"family":{"type":"string","minLength":1,"maxLength":200,"description":"Overrides the family name read from the font."},"includeUnicodeRange":{"type":"boolean","description":"Default true; omitted automatically for fonts with more than 300 cmap ranges."}}},"resultSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: 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."},"css":{"anyOf":[{"type":"string"},{"type":"null"}]},"family":{"anyOf":[{"type":"string"},{"type":"null"}]},"weight":{"anyOf":[{"type":"string","description":"A single weight or a `min max` range."},{"type":"null"}]},"style":{"anyOf":[{"type":"string","enum":["normal","italic"]},{"type":"null"}]},"stretch":{"anyOf":[{"type":"string"},{"type":"null"}]},"variable":{"type":"boolean","description":"True when the font has an fvar table."},"axes":{"type":"array","items":{"type":"object","properties":{"tag":{"type":"string"},"min":{"type":"number"},"default":{"type":"number"},"max":{"type":"number"}}}},"unicodeRange":{"anyOf":[{"type":"string"},{"type":"null"}]},"unicodeRangeCount":{"anyOf":[{"type":"integer","description":"Ranges the cmap collapses to."},{"type":"null"}]},"licence":{"anyOf":[{"type":"object","description":"What the font file itself declares about embedding (OS/2 fsType and name IDs 13/14). A declaration in the file, not legal advice and not a licence.","properties":{"declared":{"type":"boolean","description":"False when the font has no OS/2 table, so no embedding permission is declared."},"fsType":{"anyOf":[{"type":"integer"},{"type":"null"}]},"restricted":{"type":"boolean","description":"fsType bit 0x0002: the vendor forbids embedding."},"previewPrintOnly":{"type":"boolean","description":"fsType permission 0x0004 alone: preview and print embedding only."},"ambiguous":{"type":"boolean","description":"Conflicting permission bits (for example restricted with another bit set) or the deprecated bit 0; the OS/2 specification does not give one answer."},"noSubsetting":{"type":"boolean"},"bitmapOnly":{"type":"boolean"},"license":{"anyOf":[{"type":"string","description":"name ID 13"},{"type":"null"}]},"licenseUrl":{"anyOf":[{"type":"string","description":"name ID 14"},{"type":"null"}]}}},{"type":"null"}]},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"outputSchema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: 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."},"css":{"anyOf":[{"type":"string"},{"type":"null"}]},"family":{"anyOf":[{"type":"string"},{"type":"null"}]},"weight":{"anyOf":[{"type":"string","description":"A single weight or a `min max` range."},{"type":"null"}]},"style":{"anyOf":[{"type":"string","enum":["normal","italic"]},{"type":"null"}]},"stretch":{"anyOf":[{"type":"string"},{"type":"null"}]},"variable":{"type":"boolean","description":"True when the font has an fvar table."},"axes":{"type":"array","items":{"type":"object","properties":{"tag":{"type":"string"},"min":{"type":"number"},"default":{"type":"number"},"max":{"type":"number"}}}},"unicodeRange":{"anyOf":[{"type":"string"},{"type":"null"}]},"unicodeRangeCount":{"anyOf":[{"type":"integer","description":"Ranges the cmap collapses to."},{"type":"null"}]},"licence":{"anyOf":[{"type":"object","description":"What the font file itself declares about embedding (OS/2 fsType and name IDs 13/14). A declaration in the file, not legal advice and not a licence.","properties":{"declared":{"type":"boolean","description":"False when the font has no OS/2 table, so no embedding permission is declared."},"fsType":{"anyOf":[{"type":"integer"},{"type":"null"}]},"restricted":{"type":"boolean","description":"fsType bit 0x0002: the vendor forbids embedding."},"previewPrintOnly":{"type":"boolean","description":"fsType permission 0x0004 alone: preview and print embedding only."},"ambiguous":{"type":"boolean","description":"Conflicting permission bits (for example restricted with another bit set) or the deprecated bit 0; the OS/2 specification does not give one answer."},"noSubsetting":{"type":"boolean"},"bitmapOnly":{"type":"boolean"},"license":{"anyOf":[{"type":"string","description":"name ID 13"},{"type":"null"}]},"licenseUrl":{"anyOf":[{"type":"string","description":"name ID 14"},{"type":"null"}]}}},{"type":"null"}]},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]},"example":{"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"}]},"openapiOperation":{"operationId":"font_face_css","summary":"@font-face block generated from the font file: family, weight, style, stretch and unicode-range read from the font","description":"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.\n\nPrice: 0.005 USDC on Base (x402).","x-x402-price-usdc":"0.005","x-x402-amount":"5000","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-audience":"business","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/font-face-css","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["fontBase64","sources"],"properties":{"fontBase64":{"type":"string","minLength":8,"maxLength":2796204,"description":"Base64 of a .ttf, .otf, .woff or .woff2 file (not a .ttc collection), up to 2 MB."},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["url","format"],"properties":{"url":{"type":"string","minLength":1,"maxLength":2048,"description":"Where you will serve this file; written into url(). Quotes, backslashes and control characters are escaped."},"format":{"type":"string","enum":["woff2","woff","truetype","opentype"],"description":"The format() hint for that file."}}},"maxItems":4,"minItems":1,"description":"One entry per file you serve, best format first."},"fontDisplay":{"type":"string","enum":["auto","block","swap","fallback","optional"],"description":"Default swap."},"family":{"type":"string","minLength":1,"maxLength":200,"description":"Overrides the family name read from the font."},"includeUnicodeRange":{"type":"boolean","description":"Default true; omitted automatically for fonts with more than 300 cmap ranges."}}},"example":{"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"}]}}}},"responses":{"200":{"description":"Paid result with provenance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: 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."},"css":{"anyOf":[{"type":"string"},{"type":"null"}]},"family":{"anyOf":[{"type":"string"},{"type":"null"}]},"weight":{"anyOf":[{"type":"string","description":"A single weight or a `min max` range."},{"type":"null"}]},"style":{"anyOf":[{"type":"string","enum":["normal","italic"]},{"type":"null"}]},"stretch":{"anyOf":[{"type":"string"},{"type":"null"}]},"variable":{"type":"boolean","description":"True when the font has an fvar table."},"axes":{"type":"array","items":{"type":"object","properties":{"tag":{"type":"string"},"min":{"type":"number"},"default":{"type":"number"},"max":{"type":"number"}}}},"unicodeRange":{"anyOf":[{"type":"string"},{"type":"null"}]},"unicodeRangeCount":{"anyOf":[{"type":"integer","description":"Ranges the cmap collapses to."},{"type":"null"}]},"licence":{"anyOf":[{"type":"object","description":"What the font file itself declares about embedding (OS/2 fsType and name IDs 13/14). A declaration in the file, not legal advice and not a licence.","properties":{"declared":{"type":"boolean","description":"False when the font has no OS/2 table, so no embedding permission is declared."},"fsType":{"anyOf":[{"type":"integer"},{"type":"null"}]},"restricted":{"type":"boolean","description":"fsType bit 0x0002: the vendor forbids embedding."},"previewPrintOnly":{"type":"boolean","description":"fsType permission 0x0004 alone: preview and print embedding only."},"ambiguous":{"type":"boolean","description":"Conflicting permission bits (for example restricted with another bit set) or the deprecated bit 0; the OS/2 specification does not give one answer."},"noSubsetting":{"type":"boolean"},"bitmapOnly":{"type":"boolean"},"license":{"anyOf":[{"type":"string","description":"name ID 13"},{"type":"null"}]},"licenseUrl":{"anyOf":[{"type":"string","description":"name ID 14"},{"type":"null"}]}}},{"type":"null"}]},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]}}}},"400":{"description":"Invalid request (no payment consumed)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Invalid X-API-KEY","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Payment required or invalid","content":{"application/json":{"schema":{"type":"object","description":"x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"code":{"type":"string"},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}},"extensions":{"type":"object"}}}}}},"502":{"description":"Upstream failure; the payment is released or not settled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"links":{"docs":"https://agents.writerslogic.com/docs/font-face-css/","docsJson":"https://agents.writerslogic.com/docs/font-face-css.json","sample":"https://agents.writerslogic.com/api/v1/samples/font-face-css","openapi":"https://agents.writerslogic.com/openapi.json","catalog":"https://agents.writerslogic.com/api/v1/catalog","verifyProvenance":"https://agents.writerslogic.com/api/v1/verify-provenance","index":"https://agents.writerslogic.com/docs/index.json"}}