{"openapi":"3.1.0","info":{"title":"Stemmer API","version":"1.0.0","description":"Reduce words to their linguistic root (stem) with the classic Snowball stemming algorithms — running → run, fishing → fish, nationalization → nation — across 24 languages including English, German, French, Spanish, Italian, Portuguese, Dutch, Russian, Arabic, Finnish, Swedish and more. Stem a whole text (every word, returning both the per-word mapping and the fully stemmed text) or a single word. Stemming is the core normalisation step behind search engines, query expansion, text indexing, keyword matching and NLP preprocessing. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. Distinct from sentiment/NLP analysis and fuzzy string matching.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/stemmer-api","description":"oanor gateway"}],"tags":[{"name":"Stem"},{"name":"Reference"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/stem":{"get":{"operationId":"get_v1_stem","tags":["Stem"],"summary":"Stem all words in a text","description":"","parameters":[{"name":"text","in":"query","required":true,"description":"Text to stem","schema":{"type":"string"},"example":"The runners were running quickly"},{"name":"language","in":"query","required":false,"description":"english|german|french|… (default english)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":5,"stems":[{"stem":"the","word":"The"},{"stem":"runner","word":"runners"},{"stem":"were","word":"were"},{"stem":"run","word":"running"},{"stem":"quick","word":"quickly"}],"language":"english","stemmed_text":"the runner were run quick"},"meta":{"timestamp":"2026-06-02T16:51:51.064Z","request_id":"52712adc-f6f6-418a-81a6-414b43e865cd"},"status":"ok","message":"Stem all words in a text","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/word":{"get":{"operationId":"get_v1_word","tags":["Stem"],"summary":"Stem a single word","description":"","parameters":[{"name":"word","in":"query","required":true,"description":"Word to stem","schema":{"type":"string"},"example":"nationalization"},{"name":"language","in":"query","required":false,"description":"english|german|french|… (default english)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"stem":"nation","word":"nationalization","language":"english"},"meta":{"timestamp":"2026-06-02T16:51:51.177Z","request_id":"58b6b524-6964-40d8-92ca-2ec08a0a8158"},"status":"ok","message":"Stem a single word","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/languages":{"get":{"operationId":"get_v1_languages","tags":["Reference"],"summary":"Supported languages","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":24,"languages":["arabic","armenian","basque","catalan","czech","danish","dutch","english","finnish","french","german","hungarian","italian","irish","norwegian","porter","portuguese","romanian","russian","spanish","slovene","swedish","tamil","turkish"]},"meta":{"timestamp":"2026-06-02T16:51:51.282Z","request_id":"cae6c265-8373-4287-8d5c-2242c2df1f08"},"status":"ok","message":"Supported languages","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"auth":"none upstream; this gateway requires x-api-key","name":"Stemmer API","note":"Reduce words to their root form. /v1/stem?text=running quickly&language=english stems every word and returns the stemmed text; /v1/word?word=fishing for a single word; /v1/languages lists the 15+ supported languages (english, german, french, spanish, russian, …). Stemming powers search indexing, query expansion and NLP preprocessing. Instant, nothing stored. Distinct from sentiment/NLP analysis and fuzzy string matching.","source":"Local Snowball stemming (snowball-stemmers) — no key, no upstream","endpoints":4},"meta":{"timestamp":"2026-06-02T16:51:51.386Z","request_id":"0e465530-8160-42d9-a572-cda4e60f6c71"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":1100,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":280,"monthly_call_quota":9500,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2240,"monthly_call_quota":142000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5840,"monthly_call_quota":730000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/stemmer-api"}