{"uid":"cap_IoXKKVzCkmV4XgiqURZAx","slug":"duo-data-utilities-text-slugifier-dacbd631","name":"Duo Data Utilities – Text Slugifier","description":"Turn arbitrary text into a URL-safe slug. Decomposes accents, transliterates German umlauts, Scandinavian and Turkish letters, the ligatures that lose meaning under plain NFD, and Cyrillic (Russian, Ukrainian, Belarusian, Bulgarian, Serbian, Macedonian; language from lang or inferred from the letters). Lowercases, collapses separators, truncates on a word boundary. Returns the slug plus what was removed.","url":"https://api.duoleads.com/v1/text/slug?utm_source=zero.xyz","method":"GET","headers":{},"bodySchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input"],"properties":{"input":{"type":"object","required":["type","method"],"properties":{"type":{"type":"string","const":"http"},"method":{"enum":["GET"],"type":"string"},"queryParams":{"type":"object","required":["text"],"properties":{"max":{"type":"string","default":"96","pattern":"^[+-]?\\d+$","maxLength":64,"description":"Maximum slug length 1-512, default 96. Truncates at the last complete word."},"case":{"enum":["lower","preserve","upper"],"type":"string","default":"lower","maxLength":64,"description":"lower (default), preserve or upper."},"lang":{"type":"string","maxLength":16,"description":"ISO 639-1 code for locale-sensitive folding (de: ü->ue) and the Cyrillic table (ru, uk, be, bg, sr, mk). Default locale-neutral; for Cyrillic the language is then inferred from letters unique to Ukrainian, Belarusian, Serbian or Macedonian, else Russian BGN/PCGN letters with ISO 9 (accents folded) for the rest."},"text":{"type":"string","maxLength":2048,"description":"Text to slugify, at most 2048 characters."},"separator":{"enum":["-","_",".",""],"type":"string","default":"-","maxLength":64,"description":"Separator: - (default), _, . or empty."}}}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","required":["ok","route","version","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","required":["slug","length","truncated","source_length","transliterated","removed"],"properties":{"slug":{"type":"string"},"length":{"type":"integer"},"removed":{"type":"string"},"truncated":{"type":"boolean"},"source_length":{"type":"integer"},"transliterated":{"type":"array","items":{"type":"object","required":["from","to"],"properties":{"to":{"type":"string"},"from":{"type":"string"}}}}}},"meta":{"type":"object","required":["request_id","computed_at","price_usd","deterministic","disclaimer"],"properties":{"sources":{"type":"array","items":{"type":"object","required":["id","version","published"]}},"price_usd":{"type":"string"},"disclaimer":{"type":"string"},"request_id":{"type":"string"},"computed_at":{"type":"string","description":"RFC 3339 UTC with milliseconds"},"deterministic":{"type":"boolean"}}},"route":{"const":"/v1/text/slug"},"version":{"type":"string"}}}}}}},"responseSchema":{"type":"json","example":{"ok":true,"data":{"slug":"creme-brulee-aeroeskoebing-strasse-42","length":37,"removed":"—,","truncated":false,"source_length":36,"transliterated":[{"to":"ae","from":"Æ"},{"to":"oe","from":"ø"},{"to":"ss","from":"ß"}]},"meta":{"price_usd":"0.05","disclaimer":"Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms","request_id":"01K6B7Q4ZC8H3F2M9WXR5TYN0D","computed_at":"2026-09-28T12:00:00.000Z","deterministic":true},"route":"/v1/text/slug","version":"1.0.0"}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.05","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.05/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_BRsjfVVIvH6IyyqJjUD5X","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.05","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Converts arbitrary text into a URL-safe slug with locale-aware transliteration, accent decomposition, separator options, length truncation, and stop-word removal.","exampleAgentPrompt":"Can you slugify the text 'Crème Brûlée – Ærøskøbing Straße 42' for me using a hyphen separator, keeping it under 60 characters, lowercase, with German locale folding?","exampleUseCases":[{"title":"SEO permalink generation for blog","prompt":"I'm publishing a blog post titled 'Über die Straße: Müller's Café & the Ærø Island Story' — can you turn that into a URL slug with hyphens, lowercase, max 80 characters, using German locale so umlauts like ü and ß are properly handled?"},{"title":"Product URL slug for e-commerce","prompt":"I need a clean URL slug for our product 'Crème de la Crème™ — Special Édition (2024)' — use underscores as separators, preserve case, and keep it under 50 characters."},{"title":"Filename sanitization for CMS assets","prompt":"Convert the article title 'Türkçe Haber: İstanbul'da Yeni Gelişmeler!' into a URL-safe slug using Turkish locale so the dotless i is handled correctly, with dot separators and a max length of 64."}],"resultDescription":"Returns a JSON object containing the generated slug string, its character length, a list of characters that were removed during processing, a boolean indicating whether truncation occurred, the original source text length, and an array of transliteration mappings showing which characters were converted and to what.","failureModes":["Text exceeds 2048 character limit — request rejected","Invalid max length value outside 1–512 range — validation error","Unsupported language code — may fall back to locale-neutral processing","Empty text input — may return empty slug or error","Unsupported separator character — validation error"],"whenToPreferThis":"Choose this endpoint when you need deterministic, locale-aware slug generation from internationalized text — especially when dealing with German umlauts, Scandinavian letters (Æ, Ø, Å), Turkish dotless-i, or ligatures that break under plain NFD normalization. It is preferable over generic slugify libraries when you need fine-grained control over separator character, maximum length with word-boundary truncation, case preservation, and visibility into exactly what was removed or transliterated during conversion.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-02T01:23:42.796Z","isFirstParty":false,"canonicalSlug":"duo-data-utilities-text-slugifier-dacbd631"}