{"info":{"title":"JSONBucket","version":"32766aa"},"openapi":"3.1.0","paths":{"/v1/airports":{"get":{"description":"Search by name or city, filter by country, or find the airports nearest a coordinate.","operationId":"get-v1-airports","parameters":[{"description":"Match on airport name or municipality","example":"stockholm","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"ISO 3166-1 alpha-2 country code","example":"SE","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"description":"Latitude,longitude to sort by distance from","example":"59.33,18.06","in":"query","name":"near","required":false,"schema":{"type":"string"}},{"description":"Set to true to return only airports with scheduled service","example":"true","in":"query","name":"scheduled","required":false,"schema":{"type":"boolean"}},{"description":"Maximum results, 1-200","example":"5","in":"query","name":"limit","required":false,"schema":{"default":"20","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"airports":[{"iata":"ARN","icao":"ESSA","name":"Stockholm Arlanda Airport","type":"large airport","municipality":"Stockholm","country":"SE","region":"SE-AB","continent":"EU","latitude":59.651901,"longitude":17.9186,"elevation_ft":137,"scheduled_service":true}],"count":1,"total":1}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Search airports","tags":["Data"]}},"/v1/airports/{code}":{"get":{"operationId":"get-v1-airports-code","parameters":[{"description":"Three-letter IATA or four-letter ICAO code","example":"ARN","in":"path","name":"code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"iata":"ARN","icao":"ESSA","name":"Stockholm Arlanda Airport","type":"large airport","municipality":"Stockholm","country":"SE","region":"SE-AB","continent":"EU","latitude":59.651901,"longitude":17.9186,"elevation_ft":137,"scheduled_service":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Look up an airport by IATA or ICAO code","tags":["Data"]}},"/v1/badge":{"get":{"description":"The familiar two-tone README badge, rendered server-side as SVG. Drop the URL straight into a Markdown image tag.","operationId":"get-v1-badge","parameters":[{"description":"Left-hand text","example":"build","in":"query","name":"label","required":false,"schema":{"default":"build","type":"string"}},{"description":"Right-hand text","example":"passing","in":"query","name":"value","required":true,"schema":{"type":"string"}},{"description":"Right-hand colour: a name like brightgreen, or any hex value","example":"brightgreen","in":"query","name":"color","required":false,"schema":{"default":"brightgreen","type":"string"}},{"description":"Left-hand colour","example":"#555","in":"query","name":"label_color","required":false,"schema":{"default":"#555","type":"string"}},{"description":"flat or square","example":"flat","in":"query","name":"style","required":false,"schema":{"default":"flat","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"note":"Returns image/svg+xml. Embed with ![build](/v1/badge?label=build\u0026value=passing)"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate an SVG status badge","tags":["Generate"]}},"/v1/case":{"get":{"description":"Returns every common case style at once, so you can pick the one you needed without asking twice.","operationId":"get-post-v1-case","parameters":[{"description":"Text to convert. Alternatively POST it as the body.","example":"hello world example","in":"query","name":"text","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"camel":"helloWorldExample","constant":"HELLO_WORLD_EXAMPLE","dot":"hello.world.example","input":"hello world example","kebab":"hello-world-example","lower":"hello world example","pascal":"HelloWorldExample","sentence":"Hello world example","snake":"hello_world_example","title":"Hello World Example","upper":"HELLO WORLD EXAMPLE"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Convert between naming conventions","tags":["Text"]},"post":{"description":"Returns every common case style at once, so you can pick the one you needed without asking twice.","operationId":"get-post-v1-case","parameters":[{"description":"Text to convert. Alternatively POST it as the body.","example":"hello world example","in":"query","name":"text","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"text/plain":{"example":"parseHTTPResponse"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"camel":"helloWorldExample","constant":"HELLO_WORLD_EXAMPLE","dot":"hello.world.example","input":"hello world example","kebab":"hello-world-example","lower":"hello world example","pascal":"HelloWorldExample","sentence":"Hello world example","snake":"hello_world_example","title":"Hello World Example","upper":"HELLO WORLD EXAMPLE"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Convert between naming conventions","tags":["Text"]}},"/v1/cidr":{"get":{"description":"Expands a CIDR block into its network address, broadcast address, usable host range and host count. Works for IPv4 and IPv6.","operationId":"get-v1-cidr","parameters":[{"description":"Network in CIDR notation","example":"192.168.1.0/24","in":"query","name":"cidr","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"broadcast_address":"192.168.1.255","cidr":"192.168.1.0/24","first_usable":"192.168.1.1","is_private":true,"last_usable":"192.168.1.254","netmask":"255.255.255.0","network_address":"192.168.1.0","prefix_length":24,"total_addresses":"256","usable_hosts":"254","version":"IPv4","wildcard_mask":"0.0.0.255"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Subnet calculator","tags":["Network"]}},"/v1/color/contrast":{"get":{"description":"Returns the ratio and whether it clears WCAG 2.1 AA and AAA for normal and large text. This is the calculation people most often get wrong by hand — the channel values need linearising first.","operationId":"get-v1-color-contrast","parameters":[{"description":"Text colour","example":"#767676","in":"query","name":"foreground","required":true,"schema":{"type":"string"}},{"description":"Background colour","example":"#ffffff","in":"query","name":"background","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"background":"#ffffff","foreground":"#767676","passes":{"aa_large":true,"aa_normal":true,"aaa_large":true,"aaa_normal":false},"ratio":4.54,"ratio_label":"4.54:1","verdict":"Passes AA for all text, AAA for large text only."}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"WCAG contrast ratio between two colours","tags":["Color"]}},"/v1/color/convert":{"get":{"operationId":"get-v1-color-convert","parameters":[{"description":"Hex (#2f6feb), rgb(47,111,235), hsl(220,83%,55%) or a CSS colour name","example":"#2f6feb","in":"query","name":"color","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"cmyk":{"c":80,"k":7.8,"m":52.8,"y":0},"css":{"hex":"#2f6feb","hsl":"hsl(219.6, 82.5%, 55.3%)","oklch":"oklch(0.573 0.199 261.8)","rgb":"rgb(47, 111, 235)"},"hex":"#2f6feb","hsl":{"h":219.6,"l":55.3,"s":82.5},"hsv":{"h":219.6,"s":80,"v":92.2},"input":"#2f6feb","is_dark":false,"luminance":0.1797,"nearest_css_name":"royalblue","oklch":{"c":0.199,"h":261.8,"l":0.573},"rgb":{"b":235,"g":111,"r":47}}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Convert a colour between every common notation","tags":["Color"]}},"/v1/color/palette":{"get":{"operationId":"get-v1-color-palette","parameters":[{"description":"Hex (#2f6feb), rgb(47,111,235), hsl(220,83%,55%) or a CSS colour name","example":"#2f6feb","in":"query","name":"color","required":true,"schema":{"type":"string"}},{"description":"complementary, analogous, triadic, tetradic, monochromatic or shades","example":"triadic","in":"query","name":"scheme","required":false,"schema":{"default":"analogous","type":"string"}},{"description":"Colours to return for monochromatic and shades, 2-12","example":"5","in":"query","name":"count","required":false,"schema":{"default":"5","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"colors":[{"hex":"#2f6feb","rgb":"rgb(47, 111, 235)","role":"base"},{"hex":"#eb2f6f","rgb":"rgb(235, 47, 111)","role":"triadic 1"},{"hex":"#6feb2f","rgb":"rgb(111, 235, 47)","role":"triadic 2"}],"input":"#2f6feb","scheme":"triadic"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate a harmonious palette from one colour","tags":["Color"]}},"/v1/countries":{"get":{"description":"250 countries and territories with ISO codes, capital, region, population, area, currency, languages and calling code.","operationId":"get-v1-countries","parameters":[{"description":"Case-insensitive match on name, official name or capital","example":"swed","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Filter by region or subregion","example":"Europe","in":"query","name":"region","required":false,"schema":{"type":"string"}},{"description":"Maximum results, 1-250","example":"10","in":"query","name":"limit","required":false,"schema":{"default":"50","type":"integer"}},{"description":"Results to skip, for paging","example":"0","in":"query","name":"offset","required":false,"schema":{"default":"0","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":1,"countries":[{"name":"Sweden","official_name":"Kingdom of Sweden","iso2":"SE","iso3":"SWE","capital":"Stockholm","region":"Europe","subregion":"Northern Europe","population":10569709,"population_year":2024,"area_km2":450295,"currency_code":"SEK","currency_name":"Swedish krona","currency_symbol":"kr","languages":["Swedish"],"calling_code":"+46","tld":".se","flag":"🇸🇪","latitude":62,"longitude":15,"un_member":true,"independent":true}],"offset":0,"total":1}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Search the country reference dataset","tags":["Data"]}},"/v1/countries/{code}":{"get":{"operationId":"get-v1-countries-code","parameters":[{"description":"ISO 3166-1 alpha-2 or alpha-3 code","example":"SE","in":"path","name":"code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"name":"Sweden","official_name":"Kingdom of Sweden","iso2":"SE","iso3":"SWE","capital":"Stockholm","region":"Europe","subregion":"Northern Europe","population":10569709,"population_year":2024,"area_km2":450295,"currency_code":"SEK","currency_name":"Swedish krona","currency_symbol":"kr","languages":["Swedish"],"calling_code":"+46","tld":".se","flag":"🇸🇪","latitude":62,"longitude":15,"un_member":true,"independent":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Look up one country by ISO code","tags":["Data"]}},"/v1/currencies":{"get":{"description":"Codes, names and minor units — how many decimal places the currency actually has. JPY has none; KWD has three. Getting this wrong is a classic source of rounding bugs. These are static facts, not exchange rates.","operationId":"get-v1-currencies","parameters":[{"description":"Match on code or name","example":"krona","in":"query","name":"q","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":1,"currencies":[{"code":"SEK","name":"Swedish Krona","numeric":"752","minor_units":2,"symbol":"kr"}],"total":178}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"ISO 4217 currency reference","tags":["Reference"]}},"/v1/decode/{scheme}":{"get":{"operationId":"get-post-v1-decode-scheme","parameters":[{"description":"base64, base64url, hex, url or html","example":"base64","in":"path","name":"scheme","required":true,"schema":{"type":"string"}},{"description":"Encoded input. Alternatively POST it as the request body.","example":"aGVsbG8gd29ybGQ=","in":"query","name":"text","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"input":"aGVsbG8gd29ybGQ=","output":"hello world","scheme":"base64"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Decode text","tags":["Encoding"]},"post":{"operationId":"get-post-v1-decode-scheme","parameters":[{"description":"base64, base64url, hex, url or html","example":"base64","in":"path","name":"scheme","required":true,"schema":{"type":"string"}},{"description":"Encoded input. Alternatively POST it as the request body.","example":"aGVsbG8gd29ybGQ=","in":"query","name":"text","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"input":"aGVsbG8gd29ybGQ=","output":"hello world","scheme":"base64"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Decode text","tags":["Encoding"]}},"/v1/delay/{seconds}":{"get":{"description":"Holds the response open for the requested number of seconds, for testing client timeouts. Capped at 10 seconds.","operationId":"get-v1-delay-seconds","parameters":[{"description":"Seconds to wait, 0-10 (fractions allowed)","example":"2","in":"path","name":"seconds","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"example":{"delay_seconds":2,"slept_ms":2001}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Respond after a delay","tags":["Inspect"]}},"/v1/echo":{"get":{"description":"Returns the method, path, query, headers and body exactly as this server received them. The quickest way to find out what your client, proxy or CDN is actually sending.","operationId":"get-post-v1-echo","responses":{"200":{"content":{"application/json":{"example":{"body":"","body_length":0,"client_ip":"203.0.113.42","headers":{"Accept":"application/json","User-Agent":"curl/8.5.0"},"host":"api.example.com","method":"GET","path":"/v1/echo","protocol":"HTTP/1.1","query":{"hello":"world"}}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Echo the request back to you","tags":["Inspect"]},"post":{"description":"Returns the method, path, query, headers and body exactly as this server received them. The quickest way to find out what your client, proxy or CDN is actually sending.","operationId":"get-post-v1-echo","responses":{"200":{"content":{"application/json":{"example":{"body":"","body_length":0,"client_ip":"203.0.113.42","headers":{"Accept":"application/json","User-Agent":"curl/8.5.0"},"host":"api.example.com","method":"GET","path":"/v1/echo","protocol":"HTTP/1.1","query":{"hello":"world"}}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Echo the request back to you","tags":["Inspect"]}},"/v1/emoji":{"get":{"description":"The full Unicode emoji list with names, groups and codepoints. Leave the query empty and set random=true for a random pick.","operationId":"get-v1-emoji","parameters":[{"description":"Match on name, group or subgroup","example":"rocket","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Restrict to one group","example":"Food \u0026 Drink","in":"query","name":"group","required":false,"schema":{"type":"string"}},{"description":"Return a random selection instead of the first matches","example":"true","in":"query","name":"random","required":false,"schema":{"type":"boolean"}},{"description":"Maximum results, 1-200","example":"5","in":"query","name":"limit","required":false,"schema":{"default":"20","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":1,"emoji":[{"emoji":"🚀","name":"rocket","group":"Travel \u0026 Places","subgroup":"transport-air","codepoints":"U+1F680"}],"total":3944}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Search emoji by name","tags":["Reference"]}},"/v1/encode/{scheme}":{"get":{"operationId":"get-post-v1-encode-scheme","parameters":[{"description":"base64, base64url, hex, url or html","example":"base64","in":"path","name":"scheme","required":true,"schema":{"type":"string"}},{"description":"Input text. Alternatively POST the raw bytes as the request body.","example":"hello world","in":"query","name":"text","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"input":"hello world","output":"aGVsbG8gd29ybGQ=","scheme":"base64"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Encode text","tags":["Encoding"]},"post":{"operationId":"get-post-v1-encode-scheme","parameters":[{"description":"base64, base64url, hex, url or html","example":"base64","in":"path","name":"scheme","required":true,"schema":{"type":"string"}},{"description":"Input text. Alternatively POST the raw bytes as the request body.","example":"hello world","in":"query","name":"text","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"input":"hello world","output":"aGVsbG8gd29ybGQ=","scheme":"base64"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Encode text","tags":["Encoding"]}},"/v1/facts/random":{"get":{"operationId":"get-v1-facts-random","parameters":[{"description":"How many facts to return, 1-50","example":"3","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}},{"description":"Restrict to one category","example":"space","in":"query","name":"category","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"categories":["biology","computing","space"],"count":1,"facts":[{"id":1,"category":"space","text":"A day on Venus is longer than its year: it rotates once every 243 Earth days but orbits the Sun every 225."}]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Random facts from a curated collection","tags":["Data"]}},"/v1/fake/address":{"get":{"operationId":"get-v1-fake-address","parameters":[{"description":"en or sv","example":"sv","in":"query","name":"locale","required":false,"schema":{"default":"en","type":"string"}},{"description":"How many records to generate, 1-100","example":"3","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"addresses":[{"city":"Fairview","country":"United States","country_code":"US","postcode":"97204","region":"Oregon","street":"42 Maple Avenue"}],"count":1,"locale":"en"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate fake addresses","tags":["Fake"]}},"/v1/fake/company":{"get":{"operationId":"get-v1-fake-company","parameters":[{"description":"en or sv","example":"sv","in":"query","name":"locale","required":false,"schema":{"default":"en","type":"string"}},{"description":"How many records to generate, 1-100","example":"3","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"companies":[{"domain":"cobaltfoundry.example.com","email":"hello@cobaltfoundry.example.com","employees":240,"founded":2011,"industry":"Manufacturing","name":"Cobalt Foundry Ltd."}],"count":1,"locale":"en"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate fake companies","tags":["Fake"]}},"/v1/fake/person":{"get":{"description":"Placeholder records for seeding a database or filling a demo. Every value is invented: email domains are RFC 2606 reserved names, so nothing here can reach a real person.","operationId":"get-v1-fake-person","parameters":[{"description":"en or sv","example":"sv","in":"query","name":"locale","required":false,"schema":{"default":"en","type":"string"}},{"description":"How many records to generate, 1-100","example":"3","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}},{"description":"Restrict to female or male given names","example":"female","in":"query","name":"sex","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":1,"locale":"sv","people":[{"address":{"city":"Uppsala","country":"Sweden","country_code":"SE","postcode":"752 37","region":"Uppsala","street":"Björkgatan 14"},"email":"astrid.lindqvist@example.com","first_name":"Astrid","full_name":"Astrid Lindqvist","job_title":"Data Engineer","last_name":"Lindqvist","phone":"+46 70 123 45 67","sex":"female","username":"astrid.lindqvist"}]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate fake people","tags":["Fake"]}},"/v1/hash":{"get":{"description":"Returns every digest in one response, so you do not have to guess which one you needed. POST the raw body to hash bytes that do not survive a query string.","operationId":"get-post-v1-hash","parameters":[{"description":"Input text. Alternatively POST the raw bytes as the request body.","example":"hello world","in":"query","name":"text","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"crc32":"0d4a1185","input_length":11,"md5":"5eb63bbbe01eeed093cb22bb8f5acdc3","sha1":"2aae6c35c94fcfb415dbe95f408b9ce91ee846ed","sha256":"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Hash text with several algorithms at once","tags":["Encoding"]},"post":{"description":"Returns every digest in one response, so you do not have to guess which one you needed. POST the raw body to hash bytes that do not survive a query string.","operationId":"get-post-v1-hash","parameters":[{"description":"Input text. Alternatively POST the raw bytes as the request body.","example":"hello world","in":"query","name":"text","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"text/plain":{"example":"hello world"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"crc32":"0d4a1185","input_length":11,"md5":"5eb63bbbe01eeed093cb22bb8f5acdc3","sha1":"2aae6c35c94fcfb415dbe95f408b9ce91ee846ed","sha256":"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Hash text with several algorithms at once","tags":["Encoding"]}},"/v1/headers":{"get":{"operationId":"get-v1-headers","responses":{"200":{"content":{"application/json":{"example":{"count":3,"headers":{"Accept":"*/*","Accept-Encoding":"gzip","User-Agent":"curl/8.5.0"}}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"The request headers you sent","tags":["Inspect"]}},"/v1/health":{"get":{"description":"Always returns 200 while the process is serving. Suitable as a load balancer or container health probe.","operationId":"get-v1-health","responses":{"200":{"content":{"application/json":{"example":{"status":"ok"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Liveness check","tags":["Meta"]}},"/v1/holidays":{"get":{"description":"Computed from calendar rules, including the Gregorian Easter algorithm, so any year works without a lookup table. Statutory holidays and widely observed non-statutory days are distinguished.","operationId":"get-v1-holidays","parameters":[{"description":"ISO 3166-1 alpha-2 code; see the supported list in the response","example":"SE","in":"query","name":"country","required":true,"schema":{"type":"string"}},{"description":"Year to compute, 1900-2200; defaults to the current year","example":"2026","in":"query","name":"year","required":false,"schema":{"type":"integer"}},{"description":"Include non-statutory days such as Christmas Eve","example":"false","in":"query","name":"include_observances","required":false,"schema":{"default":"true","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":2,"country":"SE","holidays":[{"date":"2026-01-01","local_name":"Nyårsdagen","name":"New Year's Day","observance":false,"weekday":"Thursday"},{"date":"2026-04-03","local_name":"Långfredagen","name":"Good Friday","observance":false,"weekday":"Friday"}],"supported_countries":["DE","DK","FI","FR","GB","NL","NO","SE","US"],"year":2026}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Public holidays for a country and year","tags":["Data"]}},"/v1/http/status":{"get":{"description":"What each code means and which RFC defines it. For a server that actually returns a code, use /v1/status/{code} instead.","operationId":"get-v1-http-status","parameters":[{"description":"Single code to look up","example":"418","in":"query","name":"code","required":false,"schema":{"type":"integer"}},{"description":"Restrict to a class: 1xx, 2xx, 3xx, 4xx or 5xx","example":"4xx","in":"query","name":"class","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":1,"statuses":[{"code":418,"name":"I'm a Teapot","spec":"RFC 2324","description":"An April Fools' joke from the Hyper Text Coffee Pot Control Protocol, kept alive by tradition."}]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"HTTP status code reference","tags":["Reference"]}},"/v1/ip":{"get":{"description":"Returns the address the request arrived from. Behind a reverse proxy this reads X-Forwarded-For, but only when the immediate peer is a configured trusted proxy.","operationId":"get-v1-ip","parameters":[{"description":"json or text; text returns the bare address for shell use","example":"text","in":"query","name":"format","required":false,"schema":{"default":"json","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"ip":"203.0.113.42","is_loopback":false,"is_private":false,"version":"IPv4"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Your public IP address","tags":["Network"]}},"/v1/ip/validate":{"get":{"description":"Reports the version and every special-use range the address falls in — private, loopback, link-local, multicast, CGNAT or documentation.","operationId":"get-v1-ip-validate","parameters":[{"description":"IPv4 or IPv6 address","example":"100.64.0.1","in":"query","name":"ip","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"ip":"100.64.0.1","is_cgnat":true,"is_documentation":false,"is_global_unicast":true,"is_link_local":false,"is_loopback":false,"is_multicast":false,"is_private":false,"scope":"carrier-grade NAT (RFC 6598)","valid":true,"version":"IPv4"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Classify an IP address","tags":["Network"]}},"/v1/jokes/random":{"get":{"operationId":"get-v1-jokes-random","parameters":[{"description":"How many to return, 1-20","example":"2","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}},{"description":"programming, sysadmin or dad","example":"programming","in":"query","name":"category","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"categories":["dad","programming","sysadmin"],"count":1,"jokes":[{"id":1,"category":"programming","setup":"Why do programmers prefer dark mode?","punchline":"Because light attracts bugs."}]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Random jokes","tags":["Data"]}},"/v1/jwt/decode":{"post":{"description":"Splits the token and decodes its header and payload, expanding the standard time claims. The signature is NOT verified — this tells you what a token says, never whether to trust it. POST only, so tokens stay out of browser history and proxy logs.","operationId":"post-v1-jwt-decode","requestBody":{"content":{"text/plain":{"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"claims":{"expires_at":"2018-01-18T02:30:22Z","is_expired":true,"issued_at":"2018-01-18T01:30:22Z"},"header":{"alg":"HS256","typ":"JWT"},"payload":{"iat":1516239022,"name":"Ada Lovelace","sub":"1234567890"},"signature":"SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c","signature_verified":false}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Decode a JWT without verifying it","tags":["Encoding"]}},"/v1/languages":{"get":{"operationId":"get-v1-languages","parameters":[{"description":"Match on code or name","example":"swed","in":"query","name":"q","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":1,"languages":[{"alpha3":"swe","alpha2":"sv","name":"Swedish","french_name":"suédois"}],"total":487}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"ISO 639 language codes","tags":["Reference"]}},"/v1/lorem":{"get":{"operationId":"get-v1-lorem","parameters":[{"description":"Number of paragraphs, 1-50","example":"2","in":"query","name":"paragraphs","required":false,"schema":{"default":"3","type":"integer"}},{"description":"Sentences per paragraph, 1-30","example":"4","in":"query","name":"sentences","required":false,"schema":{"default":"5","type":"integer"}},{"description":"If set, return exactly this many words instead, 1-2000","example":"25","in":"query","name":"words","required":false,"schema":{"default":"0","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"paragraphs":["Lorem ipsum dolor sit amet, consectetur adipiscing elit."],"text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","word_count":8}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate placeholder text","tags":["Text"]}},"/v1/math/convert":{"get":{"description":"Covers length, mass, temperature, data, time, speed, area, volume, pressure and energy. Binary and decimal data prefixes are distinct: a MB is 1,000,000 bytes and a MiB is 1,048,576.","operationId":"get-v1-math-convert","parameters":[{"description":"Quantity to convert","example":"100","in":"query","name":"value","required":true,"schema":{"type":"number"}},{"description":"Source unit","example":"km","in":"query","name":"from","required":true,"schema":{"type":"string"}},{"description":"Target unit, in the same category","example":"mi","in":"query","name":"to","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"category":"length","formatted":"62.137119 mi","from":"km","from_name":"kilometre","result":62.137119,"to":"mi","to_name":"mile","value":100}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Convert between units of measurement","tags":["Math"]}},"/v1/math/units":{"get":{"operationId":"get-v1-math-units","parameters":[{"description":"Restrict to one category","example":"length","in":"query","name":"category","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"categories":["area","data","energy","length"],"units":{"length":[{"name":"kilometre","symbol":"km"}]}}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"List the units available for conversion","tags":["Math"]}},"/v1/mime":{"get":{"operationId":"get-v1-mime","parameters":[{"description":"File extension, with or without the dot","example":"webp","in":"query","name":"extension","required":false,"schema":{"type":"string"}},{"description":"Media type to look up extensions for","example":"image/png","in":"query","name":"type","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":1,"types":[{"type":"image/webp","extensions":["webp"]}]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Look up MIME types by extension or type","tags":["Reference"]}},"/v1/password":{"get":{"description":"Memorable passwords are drawn from the EFF short diceware list; random ones from a character set. Entropy is computed from the actual pool size, so you can see what you are really getting.","operationId":"get-v1-password","parameters":[{"description":"memorable or random","example":"memorable","in":"query","name":"type","required":false,"schema":{"default":"memorable","type":"string"}},{"description":"Words per memorable password, 3-12","example":"4","in":"query","name":"words","required":false,"schema":{"default":"4","type":"integer"}},{"description":"Characters per random password, 8-128","example":"20","in":"query","name":"length","required":false,"schema":{"default":"16","type":"integer"}},{"description":"Separator between words","example":".","in":"query","name":"separator","required":false,"schema":{"default":"-","type":"string"}},{"description":"How many to generate, 1-50","example":"3","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":2,"entropy_bits":41.4,"passwords":["acorn-drift-mocha-vivid","pouch-ridge-vocal-swan"],"pool_size":1295,"strength":"strong","type":"memorable"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate passwords with an honest entropy estimate","tags":["Random"]}},"/v1/ports":{"get":{"operationId":"get-v1-ports","parameters":[{"description":"Port number to look up","example":"443","in":"query","name":"port","required":false,"schema":{"type":"integer"}},{"description":"Service name to search for","example":"https","in":"query","name":"service","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":2,"ports":[{"port":443,"protocol":"tcp","service":"https","aliases":[]},{"port":443,"protocol":"udp","service":"https","aliases":[]}]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Well-known TCP and UDP ports","tags":["Reference"]}},"/v1/qr":{"get":{"description":"Returns SVG by default, which stays sharp at any size and embeds straight into HTML. Ask for png to get a raster image, or json to get the raw module grid and draw it yourself.","operationId":"get-post-v1-qr","parameters":[{"description":"Content to encode. Alternatively POST it as the body.","example":"https://example.com","in":"query","name":"text","required":true,"schema":{"type":"string"}},{"description":"svg, png or json","example":"svg","in":"query","name":"format","required":false,"schema":{"default":"svg","type":"string"}},{"description":"Image size in pixels, 64-1024","example":"256","in":"query","name":"size","required":false,"schema":{"default":"256","type":"integer"}},{"description":"Error correction: low, medium, high or highest","example":"high","in":"query","name":"level","required":false,"schema":{"default":"medium","type":"string"}},{"description":"Module colour","example":"#2f6feb","in":"query","name":"dark","required":false,"schema":{"default":"#000000","type":"string"}},{"description":"Background colour; use none for transparent","example":"none","in":"query","name":"light","required":false,"schema":{"default":"#ffffff","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"format":"json","level":"medium","modules":25,"note":"Set format=svg or format=png to receive the image itself.","text":"https://example.com"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate a QR code","tags":["Generate"]},"post":{"description":"Returns SVG by default, which stays sharp at any size and embeds straight into HTML. Ask for png to get a raster image, or json to get the raw module grid and draw it yourself.","operationId":"get-post-v1-qr","parameters":[{"description":"Content to encode. Alternatively POST it as the body.","example":"https://example.com","in":"query","name":"text","required":true,"schema":{"type":"string"}},{"description":"svg, png or json","example":"svg","in":"query","name":"format","required":false,"schema":{"default":"svg","type":"string"}},{"description":"Image size in pixels, 64-1024","example":"256","in":"query","name":"size","required":false,"schema":{"default":"256","type":"integer"}},{"description":"Error correction: low, medium, high or highest","example":"high","in":"query","name":"level","required":false,"schema":{"default":"medium","type":"string"}},{"description":"Module colour","example":"#2f6feb","in":"query","name":"dark","required":false,"schema":{"default":"#000000","type":"string"}},{"description":"Background colour; use none for transparent","example":"none","in":"query","name":"light","required":false,"schema":{"default":"#ffffff","type":"string"}}],"requestBody":{"content":{"text/plain":{"example":"https://example.com"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"format":"json","level":"medium","modules":25,"note":"Set format=svg or format=png to receive the image itself.","text":"https://example.com"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate a QR code","tags":["Generate"]}},"/v1/quotes/random":{"get":{"operationId":"get-v1-quotes-random","parameters":[{"description":"How many to return, 1-20","example":"2","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}},{"description":"Restrict to one tag","example":"computing","in":"query","name":"tag","required":false,"schema":{"type":"string"}},{"description":"Restrict to one author","example":"Dijkstra","in":"query","name":"author","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":1,"quotes":[{"id":1,"text":"Simplicity is prerequisite for reliability.","author":"Edsger W. Dijkstra","tags":["computing"]}],"tags":["business","computing","design","life"]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Random quotations","tags":["Data"]}},"/v1/random/number":{"get":{"operationId":"get-v1-random-number","parameters":[{"description":"Lower bound, inclusive","example":"1","in":"query","name":"min","required":false,"schema":{"default":"1","type":"integer"}},{"description":"Upper bound, inclusive","example":"6","in":"query","name":"max","required":false,"schema":{"default":"100","type":"integer"}},{"description":"How many to draw, 1-1000","example":"5","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":5,"max":6,"min":1,"numbers":[4,1,6,3,3]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Random integers in a range","tags":["Random"]}},"/v1/random/string":{"get":{"operationId":"get-v1-random-string","parameters":[{"description":"Characters to generate, 1-4096","example":"32","in":"query","name":"length","required":false,"schema":{"default":"16","type":"integer"}},{"description":"alnum, alpha, numeric or hex","example":"hex","in":"query","name":"charset","required":false,"schema":{"default":"alnum","type":"string"}},{"description":"How many strings, 1-1000","example":"2","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"charset":"alnum","count":2,"length":16,"strings":["k2Rm9xQpZ4vLd7Ta","B8nWc3yHs6Ug1Jre"]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Random string from a charset","tags":["Random"]}},"/v1/slugify":{"get":{"description":"Unicode-aware: accented letters are folded to their ASCII base (Skära becomes skara), and anything left over is dropped.","operationId":"get-post-v1-slugify","parameters":[{"description":"Text to slugify. Alternatively POST it as the body.","example":"Räksmörgås på Skärgården!","in":"query","name":"text","required":false,"schema":{"type":"string"}},{"description":"Character to join words with","example":"_","in":"query","name":"separator","required":false,"schema":{"default":"-","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"input":"Räksmörgås på Skärgården!","slug":"raksmorgas-pa-skargarden"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Turn text into a URL slug","tags":["Text"]},"post":{"description":"Unicode-aware: accented letters are folded to their ASCII base (Skära becomes skara), and anything left over is dropped.","operationId":"get-post-v1-slugify","parameters":[{"description":"Text to slugify. Alternatively POST it as the body.","example":"Räksmörgås på Skärgården!","in":"query","name":"text","required":false,"schema":{"type":"string"}},{"description":"Character to join words with","example":"_","in":"query","name":"separator","required":false,"schema":{"default":"-","type":"string"}}],"requestBody":{"content":{"text/plain":{"example":"Räksmörgås på Skärgården!"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"input":"Räksmörgås på Skärgården!","slug":"raksmorgas-pa-skargarden"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Turn text into a URL slug","tags":["Text"]}},"/v1/statistics/correlation":{"get":{"operationId":"get-post-v1-statistics-correlation","parameters":[{"description":"Comma-separated independent values","example":"1,2,3,4,5","in":"query","name":"x","required":true,"schema":{"type":"string"}},{"description":"Comma-separated dependent values, same length as x","example":"2,4,5,4,5","in":"query","name":"y","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":5,"interpretation":"strong positive","pearson":0.7746,"spearman":0.8208}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Pearson and Spearman correlation","tags":["Statistics"]},"post":{"operationId":"get-post-v1-statistics-correlation","parameters":[{"description":"Comma-separated independent values","example":"1,2,3,4,5","in":"query","name":"x","required":true,"schema":{"type":"string"}},{"description":"Comma-separated dependent values, same length as x","example":"2,4,5,4,5","in":"query","name":"y","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":"{\"x\": [1, 2, 3, 4, 5], \"y\": [2, 4, 5, 4, 5]}"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"count":5,"interpretation":"strong positive","pearson":0.7746,"spearman":0.8208}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Pearson and Spearman correlation","tags":["Statistics"]}},"/v1/statistics/histogram":{"get":{"description":"Returns bucket boundaries and counts, plus an ASCII bar for each bucket so the shape is readable straight from a terminal.","operationId":"get-post-v1-statistics-histogram","parameters":[{"description":"Comma-separated numbers, or POST {\"values\": [...]}","example":"1,2,2,3,3,3,4,4,5","in":"query","name":"values","required":false,"schema":{"type":"string"}},{"description":"Number of buckets, 1-100","example":"5","in":"query","name":"bins","required":false,"schema":{"default":"10","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"bin_width":0.8,"bins":5,"buckets":[{"bar":"██","count":1,"lower":1,"upper":1.8},{"bar":"████","count":2,"lower":1.8,"upper":2.6}],"count":9,"max":5,"min":1}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Bucket values into a histogram","tags":["Statistics"]},"post":{"description":"Returns bucket boundaries and counts, plus an ASCII bar for each bucket so the shape is readable straight from a terminal.","operationId":"get-post-v1-statistics-histogram","parameters":[{"description":"Comma-separated numbers, or POST {\"values\": [...]}","example":"1,2,2,3,3,3,4,4,5","in":"query","name":"values","required":false,"schema":{"type":"string"}},{"description":"Number of buckets, 1-100","example":"5","in":"query","name":"bins","required":false,"schema":{"default":"10","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":"{\"values\": [1, 2, 2, 3, 3, 3, 4, 4, 5]}"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"bin_width":0.8,"bins":5,"buckets":[{"bar":"██","count":1,"lower":1,"upper":1.8},{"bar":"████","count":2,"lower":1.8,"upper":2.6}],"count":9,"max":5,"min":1}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Bucket values into a histogram","tags":["Statistics"]}},"/v1/statistics/outliers":{"get":{"operationId":"get-post-v1-statistics-outliers","parameters":[{"description":"Comma-separated numbers, or POST {\"values\": [...]}","example":"1,2,3,4,5,100","in":"query","name":"values","required":false,"schema":{"type":"string"}},{"description":"iqr or zscore","example":"iqr","in":"query","name":"method","required":false,"schema":{"default":"iqr","type":"string"}},{"description":"IQR multiplier, or z-score cutoff when method=zscore","example":"1.5","in":"query","name":"threshold","required":false,"schema":{"default":"1.5","type":"number"}}],"responses":{"200":{"content":{"application/json":{"example":{"clean":[1,2,3,4,5],"count":6,"lower_bound":-2.375,"method":"iqr","outlier_count":1,"outliers":[100],"threshold":1.5,"upper_bound":9.625}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Find outliers by IQR or z-score","tags":["Statistics"]},"post":{"operationId":"get-post-v1-statistics-outliers","parameters":[{"description":"Comma-separated numbers, or POST {\"values\": [...]}","example":"1,2,3,4,5,100","in":"query","name":"values","required":false,"schema":{"type":"string"}},{"description":"iqr or zscore","example":"iqr","in":"query","name":"method","required":false,"schema":{"default":"iqr","type":"string"}},{"description":"IQR multiplier, or z-score cutoff when method=zscore","example":"1.5","in":"query","name":"threshold","required":false,"schema":{"default":"1.5","type":"number"}}],"requestBody":{"content":{"application/json":{"example":"{\"values\": [1, 2, 3, 4, 5, 100]}"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"clean":[1,2,3,4,5],"count":6,"lower_bound":-2.375,"method":"iqr","outlier_count":1,"outliers":[100],"threshold":1.5,"upper_bound":9.625}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Find outliers by IQR or z-score","tags":["Statistics"]}},"/v1/statistics/percentile":{"get":{"description":"Uses linear interpolation between the closest ranks, matching the default behaviour of NumPy and most statistics packages.","operationId":"get-post-v1-statistics-percentile","parameters":[{"description":"Comma-separated numbers. For large sets, POST {\"values\": [...]} instead.","example":"1,2,3,4,100","in":"query","name":"values","required":false,"schema":{"type":"string"}},{"description":"One or more percentiles in 0-100, comma-separated","example":"50,90,99","in":"query","name":"p","required":false,"schema":{"default":"50","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":5,"percentiles":{"50":3,"90":61.6,"99":96.16}}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Percentiles of a set of numbers","tags":["Statistics"]},"post":{"description":"Uses linear interpolation between the closest ranks, matching the default behaviour of NumPy and most statistics packages.","operationId":"get-post-v1-statistics-percentile","parameters":[{"description":"Comma-separated numbers. For large sets, POST {\"values\": [...]} instead.","example":"1,2,3,4,100","in":"query","name":"values","required":false,"schema":{"type":"string"}},{"description":"One or more percentiles in 0-100, comma-separated","example":"50,90,99","in":"query","name":"p","required":false,"schema":{"default":"50","type":"string"}}],"requestBody":{"content":{"application/json":{"example":"{\"values\": [1, 2, 3, 4, 100], \"p\": \"50,90,99\"}"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"count":5,"percentiles":{"50":3,"90":61.6,"99":96.16}}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Percentiles of a set of numbers","tags":["Statistics"]}},"/v1/statistics/regression":{"get":{"operationId":"get-post-v1-statistics-regression","parameters":[{"description":"Comma-separated independent values","example":"1,2,3,4,5","in":"query","name":"x","required":true,"schema":{"type":"string"}},{"description":"Comma-separated dependent values, same length as x","example":"2,4,5,4,5","in":"query","name":"y","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":5,"equation":"y = 0.6x + 2.2","intercept":2.2,"r":0.7746,"r_squared":0.6,"slope":0.6,"standard_error":0.4216}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Least-squares linear regression","tags":["Statistics"]},"post":{"operationId":"get-post-v1-statistics-regression","parameters":[{"description":"Comma-separated independent values","example":"1,2,3,4,5","in":"query","name":"x","required":true,"schema":{"type":"string"}},{"description":"Comma-separated dependent values, same length as x","example":"2,4,5,4,5","in":"query","name":"y","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":"{\"x\": [1, 2, 3, 4, 5], \"y\": [2, 4, 5, 4, 5]}"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"count":5,"equation":"y = 0.6x + 2.2","intercept":2.2,"r":0.7746,"r_squared":0.6,"slope":0.6,"standard_error":0.4216}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Least-squares linear regression","tags":["Statistics"]}},"/v1/statistics/summary":{"get":{"description":"Pass values in the query string for quick use, or POST a JSON body of the form {\"values\": [1, 2, 3]} for larger sets (up to 100,000 numbers).","operationId":"get-post-v1-statistics-summary","parameters":[{"description":"Comma-separated numbers. For large sets, POST {\"values\": [...]} instead.","example":"1,2,3,4,100","in":"query","name":"values","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":5,"iqr":2,"max":100,"mean":22,"median":3,"min":1,"population_stddev":38.642,"population_variance":1493.2,"q1":2,"q3":4,"range":99,"stddev":43.203,"sum":110,"variance":1866.5}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Descriptive statistics for a set of numbers","tags":["Statistics"]},"post":{"description":"Pass values in the query string for quick use, or POST a JSON body of the form {\"values\": [1, 2, 3]} for larger sets (up to 100,000 numbers).","operationId":"get-post-v1-statistics-summary","parameters":[{"description":"Comma-separated numbers. For large sets, POST {\"values\": [...]} instead.","example":"1,2,3,4,100","in":"query","name":"values","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":"{\"values\": [1, 2, 3, 4, 100]}"}},"required":false},"responses":{"200":{"content":{"application/json":{"example":{"count":5,"iqr":2,"max":100,"mean":22,"median":3,"min":1,"population_stddev":38.642,"population_variance":1493.2,"q1":2,"q3":4,"range":99,"stddev":43.203,"sum":110,"variance":1866.5}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Descriptive statistics for a set of numbers","tags":["Statistics"]}},"/v1/status/{code}":{"get":{"description":"Useful for exercising a client's error and retry paths. Any code between 200 and 599 is returned verbatim.","operationId":"get-v1-status-code","parameters":[{"description":"HTTP status code to return, 200-599","example":"503","in":"path","name":"code","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"description":"The server is temporarily overloaded or down for maintenance. Send Retry-After.","name":"Service Unavailable","status":503}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Respond with the status code you ask for","tags":["Inspect"]}},"/v1/time":{"get":{"description":"Returns the current instant rendered in the requested IANA timezone, with the calendar fields most callers end up computing themselves.","operationId":"get-v1-time","parameters":[{"description":"IANA timezone name","example":"Europe/Stockholm","in":"query","name":"tz","required":false,"schema":{"default":"UTC","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"abbreviation":"CEST","date":"2026-08-07","datetime":"2026-08-07T22:00:00+02:00","day_of_year":219,"is_dst":true,"iso_week":32,"iso_year":2026,"leap_year":false,"offset_seconds":7200,"time":"22:00:00","timezone":"Europe/Stockholm","unix":1786312800,"unix_ms":1786312800000,"utc_datetime":"2026-08-07T20:00:00Z","utc_offset":"+02:00","weekday":"Friday"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Current time in any timezone","tags":["Time"]}},"/v1/time/convert":{"get":{"operationId":"get-v1-time-convert","parameters":[{"description":"Instant to convert; defaults to now. RFC 3339, a unix timestamp, or a common date format","example":"2026-08-07T20:00:00Z","in":"query","name":"time","required":false,"schema":{"type":"string"}},{"description":"Timezone the input is in, when it carries no offset","example":"UTC","in":"query","name":"from","required":false,"schema":{"default":"UTC","type":"string"}},{"description":"Target IANA timezone","example":"Asia/Tokyo","in":"query","name":"to","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"day_changed":true,"from":{"abbreviation":"UTC","datetime":"2026-08-07T20:00:00Z","timezone":"UTC","utc_offset":"+00:00"},"input":"2026-08-07T20:00:00Z","to":{"abbreviation":"JST","datetime":"2026-08-08T05:00:00+09:00","timezone":"Asia/Tokyo","utc_offset":"+09:00"},"unix":1786233600}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Convert an instant between timezones","tags":["Time"]}},"/v1/time/cron":{"get":{"description":"Parses a standard five-field cron expression, or a @macro such as @daily, and returns a plain-English description plus the next fire times in the timezone you choose.","operationId":"get-v1-time-cron","parameters":[{"description":"Cron expression, five fields or an @macro","example":"*/15 9-17 * * 1-5","in":"query","name":"expr","required":true,"schema":{"type":"string"}},{"description":"IANA timezone the schedule runs in","example":"Europe/Stockholm","in":"query","name":"tz","required":false,"schema":{"default":"UTC","type":"string"}},{"description":"How many upcoming runs to return, 1-50","example":"5","in":"query","name":"count","required":false,"schema":{"default":"5","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"description":"Every 15 minutes, between 09:00 and 17:59, Monday through Friday","expression":"*/15 9-17 * * 1-5","fields":{"day_of_month":"*","day_of_week":"1-5","hour":"9-17","minute":"*/15","month":"*"},"next_runs":["2026-08-10T09:00:00+02:00","2026-08-10T09:15:00+02:00"],"timezone":"Europe/Stockholm"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Explain a cron expression and list its next runs","tags":["Time"]}},"/v1/time/diff":{"get":{"operationId":"get-v1-time-diff","parameters":[{"description":"Start instant","example":"2026-01-01T00:00:00Z","in":"query","name":"from","required":true,"schema":{"type":"string"}},{"description":"End instant; defaults to now","example":"2026-08-07T20:00:00Z","in":"query","name":"to","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"calendar":{"days":6,"hours":20,"minutes":0,"months":7,"years":0},"days":221.75,"from":"2026-01-01T00:00:00Z","hours":5322,"humanized":"7 months, 6 days","is_negative":false,"minutes":319320,"seconds":19159200,"to":"2026-08-07T20:00:00Z"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Duration between two instants","tags":["Time"]}},"/v1/time/parse":{"get":{"description":"Tries a long list of common layouts, including unix timestamps in seconds and milliseconds, and reports which one matched.","operationId":"get-v1-time-parse","parameters":[{"description":"Date or timestamp to parse","example":"7 Aug 2026 22:00","in":"query","name":"time","required":true,"schema":{"type":"string"}},{"description":"Timezone to assume when the input carries no offset","example":"Europe/Stockholm","in":"query","name":"tz","required":false,"schema":{"default":"UTC","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"input":"7 Aug 2026 22:00","matched_layout":"2 Jan 2006 15:04","rfc3339":"2026-08-07T22:00:00+02:00","timezone":"Europe/Stockholm","unix":1786136400,"weekday":"Friday"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Parse a messy date string","tags":["Time"]}},"/v1/time/zones":{"get":{"operationId":"get-v1-time-zones","parameters":[{"description":"Case-insensitive substring filter","example":"stockholm","in":"query","name":"q","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":2,"total":517,"zones":["Europe/Stockholm","Arctic/Longyearbyen"]}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"List IANA timezone names","tags":["Time"]}},"/v1/user-agent":{"get":{"description":"Parses the caller's User-Agent, or one supplied via ?ua=. Detection is heuristic — user agent strings are a pile of historical fiction — so treat the result as a strong hint rather than fact.","operationId":"get-v1-user-agent","parameters":[{"description":"User-Agent to parse instead of your own","example":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36","in":"query","name":"ua","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"browser":"Chrome","browser_version":"120.0","device":"desktop","is_bot":false,"os":"macOS","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Parse a User-Agent string","tags":["Inspect"]}},"/v1/uuid":{"get":{"description":"Version 4 UUIDs are fully random. Version 7 embeds a millisecond timestamp in the high bits, so they sort chronologically — useful as database keys.","operationId":"get-v1-uuid","parameters":[{"description":"UUID version: 4 or 7","example":"7","in":"query","name":"v","required":false,"schema":{"default":"4","type":"string"}},{"description":"How many to generate, 1-1000","example":"3","in":"query","name":"count","required":false,"schema":{"default":"1","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"count":2,"uuids":["1f7c4b2e-8a3d-4f19-9c07-2b5e6d81a4f3","9e2a10c5-7b64-4d8e-a3f1-05c9b7e24d68"],"version":4}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Generate UUIDs","tags":["Random"]}},"/v1/validate/iban":{"get":{"description":"Checks the country-specific length and the ISO 7064 mod-97 checksum, then splits out the bank and account parts.","operationId":"get-post-v1-validate-iban","parameters":[{"description":"IBAN, with or without spaces","example":"GB82 WEST 1234 5698 7654 32","in":"query","name":"value","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"bban":"WEST12345698765432","check_digits":"82","country":"GB","country_name":"United Kingdom","formatted":"GB82 WEST 1234 5698 7654 32","iban":"GB82WEST12345698765432","input":"GB82 WEST 1234 5698 7654 32","length":22,"valid":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Validate an IBAN","tags":["Validate"]},"post":{"description":"Checks the country-specific length and the ISO 7064 mod-97 checksum, then splits out the bank and account parts.","operationId":"get-post-v1-validate-iban","parameters":[{"description":"IBAN, with or without spaces","example":"GB82 WEST 1234 5698 7654 32","in":"query","name":"value","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"bban":"WEST12345698765432","check_digits":"82","country":"GB","country_name":"United Kingdom","formatted":"GB82 WEST 1234 5698 7654 32","iban":"GB82WEST12345698765432","input":"GB82 WEST 1234 5698 7654 32","length":22,"valid":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Validate an IBAN","tags":["Validate"]}},"/v1/validate/isbn":{"get":{"operationId":"get-post-v1-validate-isbn","parameters":[{"description":"ISBN-10 or ISBN-13, hyphens allowed","example":"978-0-13-235088-4","in":"query","name":"value","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"input":"978-0-13-235088-4","isbn10":"0132350882","isbn13":"9780132350884","prefix":"978","type":"ISBN-13","valid":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Validate an ISBN and convert between ISBN-10 and ISBN-13","tags":["Validate"]},"post":{"operationId":"get-post-v1-validate-isbn","parameters":[{"description":"ISBN-10 or ISBN-13, hyphens allowed","example":"978-0-13-235088-4","in":"query","name":"value","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"input":"978-0-13-235088-4","isbn10":"0132350882","isbn13":"9780132350884","prefix":"978","type":"ISBN-13","valid":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Validate an ISBN and convert between ISBN-10 and ISBN-13","tags":["Validate"]}},"/v1/validate/luhn":{"get":{"description":"Verifies the Luhn check digit and names the issuing scheme from the leading digits. Nothing is stored or logged — the query string never reaches the access log — but send test numbers, not live ones.","operationId":"get-post-v1-validate-luhn","parameters":[{"description":"Digit string, spaces and hyphens allowed","example":"4111 1111 1111 1111","in":"query","name":"value","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"check_digit":"1","digits":16,"input":"4111 1111 1111 1111","scheme":"Visa","valid":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Luhn checksum and card scheme detection","tags":["Validate"]},"post":{"description":"Verifies the Luhn check digit and names the issuing scheme from the leading digits. Nothing is stored or logged — the query string never reaches the access log — but send test numbers, not live ones.","operationId":"get-post-v1-validate-luhn","parameters":[{"description":"Digit string, spaces and hyphens allowed","example":"4111 1111 1111 1111","in":"query","name":"value","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"check_digit":"1","digits":16,"input":"4111 1111 1111 1111","scheme":"Visa","valid":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Luhn checksum and card scheme detection","tags":["Validate"]}},"/v1/validate/personnummer":{"get":{"description":"Handles personnummer, samordningsnummer (coordination numbers, where the day has 60 added) and organisationsnummer, all of which carry a Luhn check digit. Send test numbers only.","operationId":"get-post-v1-validate-personnummer","parameters":[{"description":"10 or 12 digits, hyphen or plus optional","example":"811218-9876","in":"query","name":"value","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"age":44,"birth_date":"1981-12-18","century_assumed":true,"formatted":"811218-9876","input":"811218-9876","normalized":"198112189876","type":"personnummer","valid":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Validate a Swedish personnummer or organisationsnummer","tags":["Validate"]},"post":{"description":"Handles personnummer, samordningsnummer (coordination numbers, where the day has 60 added) and organisationsnummer, all of which carry a Luhn check digit. Send test numbers only.","operationId":"get-post-v1-validate-personnummer","parameters":[{"description":"10 or 12 digits, hyphen or plus optional","example":"811218-9876","in":"query","name":"value","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"age":44,"birth_date":"1981-12-18","century_assumed":true,"formatted":"811218-9876","input":"811218-9876","normalized":"198112189876","type":"personnummer","valid":true}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Validate a Swedish personnummer or organisationsnummer","tags":["Validate"]}},"/v1/version":{"get":{"operationId":"get-v1-version","responses":{"200":{"content":{"application/json":{"example":{"build_date":"2026-08-07T20:00:00Z","commit":"a1b2c3d","version":"v0.1.0"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid parameter"},"429":{"description":"Rate limit exceeded"}},"summary":"Build information","tags":["Meta"]}}},"servers":[{"url":"https://jsonbucket.com"}],"tags":[{"name":"Time"},{"name":"Network"},{"name":"Inspect"},{"name":"Random"},{"name":"Generate"},{"name":"Fake"},{"name":"Text"},{"name":"Encoding"},{"name":"Color"},{"name":"Statistics"},{"name":"Math"},{"name":"Validate"},{"name":"Data"},{"name":"Reference"},{"name":"Meta"}]}
