messageRequiredMain badge text. Maximum 128 characters.
Default: —Every plan is $0. Finance has stopped returning our calls. See pricing
Query and path endpoints, eleven rendering styles including three fixed-size classics with auto-scaling vector text, exact 50–300% sizing, adjustable letter spacing, four color controls, Unicode-aware width, immutable cache headers, ETags, and practical examples.
Tiny Badge returns a deterministic SVG image from the label, message, style, size, letter spacing, and colors encoded in the request URL. Unicode graphemes are measured with go-runewidth and UAX #29 segmentation, successful responses use long-lived immutable caching and content-derived ETags, and the same URL always describes the same badge.
https://badge-api.gosuda.org Every example on this page is ready to use against the live Tiny Badge service.
Use query parameters when text contains spaces, punctuation, or a literal .svg suffix.
GET /badge.svg
HEAD /badge.svg
https://badge-api.gosuda.org/badge.svg?label=build&message=passing&style=flatbar&size=125&letterSpacing=0.5Use the shorter path form for simple label and message values.
GET /badge/:label/:message
HEAD /badge/:label/:message
https://badge-api.gosuda.org/badge/release/stable.svgUse _ as the path label for a badge without a left segment.
/badge/_/available.svgThe path form removes a final .svg suffix. The query form preserves it.
messageRequiredMain badge text. Maximum 128 characters.
Default: —labelOptionalLeft-side badge text. Maximum 64 characters.
Default: EmptystyleOptionalSelects one of the eleven rendering styles.
Default: flatsizeOptionalScales the whole badge from 50 to 300 percent. Integer values only.
Default: 100letterSpacingOptionalAdds -1 to 3 SVG pixels between grapheme clusters. Decimal values are accepted.
Default: 0labelColorOptionalBackground color for the label segment.
Default: 555555colorOptionalBackground color for the message segment.
Default: 44cc11labelTextColorOptionalText color for the label segment.
Default: fffffftextColorOptionalText color for the message segment.
Default: ffffffSpaces and punctuation must be URL encoded. For example, ready to ship becomes ready%20to%20ship.
letterSpacing is measured in SVG user units: one unit is one output pixel at 100% scale. Nonzero spacing replaces the fixed word artwork in matching click-here and best-viewed reference phrases with adjustable vector text.
flat20 px, gently rounded, and the default.
flat-squareThe flat style with square corners.
plasticA compact badge with a highlight layer.
roundA taller capsule with fully rounded ends.
outlineA framed surface with a brighter inner edge.
neonA focused glow around each color segment.
glassA layered sheen with a quiet border.
flatbarA 28 px uppercase bar inspired by larger badge styles.
old-schoolOld School 80×15: a fixed split-panel button with customizable colors and resolution-independent text that automatically shrinks to fit each panel.
click-hereClick Here 88×31: the supplied raised gray artwork for its reference phrase, with high-resolution auto-fit vector text for custom copy.
best-viewedBest Viewed 88×31: the supplied BEST rail and Chrome artwork, with separately auto-scaled vector text for both custom lines.
The API uses 3-digit or 6-digit hexadecimal values without the leading #.
labelColor=292724&color=d6ef53&labelTextColor=ffffff&textColor=292724The maker keeps colors internally as RGB. Hex, HSL, and OKLCH channel inputs are converted to RGB before the URL is assembled.
If a leading # is included, encode it as %23 so it does not become a URL fragment.
brightgreengreenyellowgreenyelloworangeredbluegreygraylightgreylightgraysuccessimportantcriticalinformationalinactive<img src="https://badge-api.gosuda.org/badge.svg?label=build&message=passing" alt="Build: passing">curl -o badge.svg 'https://badge-api.gosuda.org/badge.svg?label=build&message=passing&style=flatbar'Successful requests return an SVG image with long-lived immutable caching and a content-derived ETag.
Content-Type: image/svg+xml; charset=utf-8
Cache-Control: public, max-age=315360000, immutable
CDN-Cache-Control: public, max-age=315360000, immutable
Surrogate-Control: public, max-age=315360000, immutable
Access-Control-Allow-Origin: *
ETag: "<content hash>"Send the ETag in If-None-Match. An unchanged badge returns 304 Not Modified without a response body.
Invalid input returns 400 Bad Request with Cache-Control: no-store.
messageRequired and limited to 128 characters.
labelOptional and limited to 64 characters.
styleMust match one of the documented style names.
sizeMust be an integer percentage from 50 through 300.
letterSpacingMust be a decimal number from -1 through 3.
colorsMust be a supported name or a 3-digit or 6-digit hex value.
GET /healthz → 200 OK → ok