# immit Developer API > immit's English and Japanese dictionary over one REST API, with a free tier and a key in a minute. Base URL: https://api.immit.co ## Docs ### Getting started From nothing to the first JSON in five minutes. An immit account, a key, a curl, an entry. #### Make an account and a key Sign in to immit, open the [console](https://immit.co/developers/console) and create a key. Name it after the thing that will hold it. The secret is shown once; the console keeps only its first twelve characters, so copy it into your secret store before you close the dialog. #### Call `/v1/me` Every request carries the key as a bearer token. The first call proves the key and shows you the account's tier and quota. #### Look a word up The headword is UTF-8, percent-encoded. A headword that differs only in case, or another spelling of the same word, resolves to the entry, and the canonical headword comes back in the response. #### Search A query matches a headword prefix, an inflected surface form and, for Japanese, a reading, so 食べました finds 食べる and たべ finds it too. The order is immit's own ranking, the same the apps use. #### Read the headers Two limits, both the account's over every key: a burst a minute and a quota a UTC day. Every response carries where you stand. Over either one is a 429 with `retry-after`, and a refused request is not counted. [Rate limits and quotas](https://immit.co/developers/docs/rate-limits) has the table. ### Authentication One header, one key, one account. What a key is, where it may live and how it is refused. #### The header Every request to `/v1` carries a key as a bearer token. A session cookie or an immit account token is refused on `/v1`. Only a key authenticates, and a key authenticates nothing else: it can reach no page, no setting and no flashcard of the account that holds it. #### What a key is A key is a credential on your developer account and nothing more. The tier, the quota and the burst are the account's, shared by every key of it: two apps on two keys share what the tier sells. Make as many keys as you have things that hold one, name each after that thing, and revoke the ones you stop using. A key starts with `ik_live_` and is followed by forty-three URL-safe characters. The console shows the first twelve, enough to tell keys apart. There is no test-mode key; the free tier is the sandbox. #### Rotating a key Create a new key, move your clients to it, then revoke the old one. Revoking never touches the plan, since the subscription hangs on the account and not on the key. A revoked key keeps its row and its usage in the console so the history stays whole. #### Where a key may live On a server, in a CLI, in a worker, in an agent that runs on your machine. `/v1` answers any origin with the `Authorization` header allowed, so a page can call it directly, which is exactly why a key in a page is a key leaked. Never ship a key in a browser or in a client application. Proxy the call through your own server. Origin-restricted publishable keys are a later shape, not this one. #### How a key is refused - unauthorized: No bearer at all, or a bearer that is not a key. - api_key_invalid: A well-formed `ik_live_` bearer that immit never issued. A typo reads as this, not as a generic 401. - api_key_revoked: The key was revoked from the console. - api_key_suspended: A person at immit suspended the key, after an email. #### Checking a key [`GET /v1/me`](https://immit.co/developers/reference/me) returns the key's name, the account's tier and quota, and today's usage. It is the call to make from a deploy script, and it counts like any other. ### Rate limits and quotas Two limits on two clocks, both the account's. The headers that say where you stand, and what a 429 looks like. #### Two limits **The burst** is a number of requests a minute. It is counted per serving node, so with two nodes an account can briefly reach twice its number. That is accepted and said here rather than paid for with a shared counter. **The quota** is a number of requests a UTC day. It is a hard cap: over it, every request answers 429 until midnight UTC, and nothing is ever billed for the excess. Tiers are flat prices. Both belong to the account and are shared by every key of it. A request refused for either limit is not counted, so a client stuck on 429 does not spend its day on them. #### The headers - x-ratelimit-limit: The tier's requests a minute. - x-ratelimit-remaining: Left in this minute on this node. - x-ratelimit-reset: Seconds until the minute window ends. - x-quota-limit: The tier's requests a day. - x-quota-remaining: Left today, this request counted. - x-quota-reset: Seconds until midnight UTC. - retry-after: On 429 only: seconds until the limit that refused you clears. #### The tiers Each tier's burst and quota are on the [pricing page](https://immit.co/developers/pricing), read from the same table the API enforces, and on every response in `x-ratelimit-limit` and `x-quota-limit`. #### What a 429 says Back off on `retry-after`. For the day's quota the honest answer is to stop until the reset, or to move up a tier, which applies at once. #### Caching on your side A keyed entry response is `Cache-Control: private, max-age=3600` with an ETag, since a shared cache serving your hits would serve them unmetered. Send `If-None-Match` and a 304 costs you nothing to parse, though it still counts as a request. Cache entries on your own server by language and headword; the data changes slowly and `updated_at` says when an entry did. A client that caches rarely meets the quota at all. ### Errors One shape for every error, with a code to branch on and a detail for your logs. #### The shape Branch on `code`. It is stable and machine-readable, and new codes are only ever added. `detail` is English prose for a log line; never render it to your users. `source.pointer` appears on a refused path parameter and points at it. #### Every code /v1 returns - unauthorized: when: No key on the request.; what: Send the bearer. - api_key_invalid: when: Not a key immit issued.; what: Check the paste. - api_key_revoked: when: Revoked in the console.; what: Use the key that replaced it. - api_key_suspended: when: Suspended by a person at immit.; what: Read the email, write back. - not_found: when: No entry, spelling or case variant matches the headword.; what: Search instead; the user may have met an inflection the search resolves. - rate_limited: when: The burst a minute is used.; what: Wait `retry-after` seconds. - quota_exceeded: when: The day's quota is used.; what: Wait for midnight UTC or move up a tier. - invalid_param: when: A parameter is not what the spec says: a lang of fra, a limit that is not a number. A limit over 25 is capped, not refused.; what: Read `detail`, and `source.pointer` when it names the parameter. - server: code: varies; when: immit's fault.; what: Retry with backoff; the status page says if it is more than a blip. #### Unknown codes A client that meets a code it does not know falls back to generic copy for its status. Codes are added under `/v1` without a version bump, like fields. ### Versioning Additive only under /v1. What that promise covers and what a breaking change would look like. #### The promise From the first external key, the shape of `/v1` only grows. A field is never removed or renamed, a type never narrows, an enum never loses a value. A removal or a rename is `/v2`. #### What can change without notice - field: A new field on any object. Ignore fields you do not know. - enum: A new value in an open enum. `relations[].kind` says so in the spec: synonym and antonym today, more kinds can follow. - code: A new error code. Fall back to generic copy by status. - operation: A new operation or a new optional parameter. - data: The data itself. Entries are refreshed, examples rewritten, ranks recomputed. `updated_at` moves. #### What cannot - required: A required field going away or becoming nullable. - meaning: A parameter changing meaning. - path: A path changing. #### Deprecation When `/v2` exists, `/v1` keeps answering for twelve months from the announcement, which goes out in the [changelog](https://immit.co/developers/changelog) and by email to every account with a live key. #### The contract The [v1 OpenAPI spec](https://immit.co/developers/openapi.yaml) is the contract. Every example on these pages is checked against the spec's schema when the site is built, so what you read here is what the server does. ### The entry shape Field by field. One shape for English and Japanese; what a language does not have is null or empty, never missing. #### Identity and rank An entry is one headword in one language. Homographs, words written the same with unrelated meanings, are one entry with a `homograph` number on every sense, inflection and pronunciation, so a client groups by it. `frequency_rank` is the entry's position in its language by corpus frequency; 1 is the most frequent. Null is unranked. [Ranking and paging](https://immit.co/developers/docs/ranking) has the bands immit draws from it. #### Senses A sense carries its part of speech in the entry's own language with translations of the label, a definition in that language, translations keyed by the other language with glosses and a qualifier, and parallel example pairs. An English entry's Japanese glosses carry kana readings, so a client can show furigana without a second lookup. #### Inflections Every form is a row with its text, the form's name and translation, a display sequence, and for Japanese a tone and a polarity and its own reading. A client never deinflects: look the surface up through search and the entry comes back with the table. #### Pronunciations and audio English rows carry IPA and a dialect; Japanese rows carry a kana reading and a pitch accent. Each row has `sounds`, playable `mp3_url`s with the voice and its gender. [Audio](https://immit.co/developers/docs/audio) says how to play them. #### Spellings and relations `spellings` are other written forms of the same word with a label, 喰べる for 食べる as rare kanji, and the texts that inflect them. `relations` are synonyms and antonyms hung on a sense and pointing at another entry of the same language. #### A whole entry The showcase on the [overview](https://immit.co/developers) renders 食べる beside its JSON, and the first request on [Getting started](https://immit.co/developers/docs/getting-started) fetches the same row. [Two languages, one shape](https://immit.co/developers/docs/languages) puts an English entry beside it field by field, and the [reference](https://immit.co/developers/reference/get-entry) lists every field with its type. ### Two languages, one shape What is null for which language and why. A client renders both with one component because the fields are the same. #### By field - pronunciations[].ipa: eng: `"wɔk"`; jpn: `null` - pronunciations[].reading: eng: `null`; jpn: `"たべる"`, kana - pronunciations[].accent: eng: `null`; jpn: `2`: the pitch drops after the second mora. `0` is heiban, no drop. - pronunciations[].dialect: eng: `"AmE"`; jpn: `null` - sounds[].alphabet: eng: `"ipa"`; jpn: `"phonetic"` - inflections[].tone: eng: `null`; jpn: `"plain"` or `"polite"`, null on forms with no distinction - inflections[].polarity: eng: `null` on all but a few negative forms; jpn: `"positive"` or `"negative"` - inflections[].pronunciations: eng: `[]` on most forms; jpn: one row with the form's reading - inflections[].form: eng: `"past tense"`, English; jpn: `"過去形"`, Japanese, with `form_translations.eng` - senses[].translations: eng: keyed `"jpn"`, glosses carry `readings`; jpn: keyed `"eng"`, readings empty - senses[].pos: eng: `"verb"`; jpn: `"動詞"`, with `pos_translations.eng` - spellings: eng: usually `[]`; jpn: other written forms, labelled #### Why null and not missing A client written against a Japanese entry parses an English one unchanged, and the reverse. Nothing is conditional on the language except what to show, and the entry says what to show by which fields are filled. It is also what makes the additive promise cheap to keep: the shape never forks by language. ### Ranking and paging How search orders its results, how the cursor works, and what the frequency rank means. #### The order Search is case-insensitive across the headword prefix, every inflected surface form and, for Japanese, the reading. Results come in rank order: an exact headword first, then an exact inflected surface or reading, then the prefix matches, and within each rank the more frequent entry before the less. Alphabetical order would lose the answer outright, since a short query's prefix matches outnumber the page. It is the same ranking immit's own apps use, so what your user sees first is what a learner on immit sees first. #### Paging A page is at most 25 entries; a larger `limit` is capped, not refused. `metadata.after` is the cursor for the next page and `metadata.before` for the previous; both are null at the ends. Pass one back as `after` or `before` with the same query. Without a query the list is in headword order. #### The frequency rank `frequency_rank` is the entry's place in its language by corpus frequency, 1 the most frequent, null unranked. immit's display bands are a reasonable default for a client: - Very common: eng up to 2000, jpn up to 2000 - Common: eng up to 8000, jpn up to 10000 - Uncommon: eng up to 20000, jpn up to 30000 - Rare: eng up to 50000, jpn up to 60000 - Very rare: eng beyond, jpn beyond ### Audio Every pronunciation row carries playable sound. Where it comes from and how to use it. #### The sounds array A pronunciation, and for Japanese each inflection's pronunciation, carries `sounds`: one object per voice with a playable `mp3_url`, the voice's name and gender, and the alphabet the voice was driven from, IPA for English and phonetic for Japanese. English entries carry two voices, Emma and Michael. Japanese entries carry Himari today. #### Playing it The URL is a public object on `storage.immit.co` and plays as is in an audio element or a native player. Play it directly or cache it on your side, at any scale; a sound fetch is not a request to `/v1` and never counts against the quota. #### Coverage Not every row has sound yet; an empty `sounds` is normal on a rare inflection. A client shows a speaker where the array is non-empty and nothing where it is empty. ### The MCP server (planned) The same two lookups as Model Context Protocol tools, so an agent builder adds the dictionary with one line of config and one key. #### Tools - search_entries: The entries page, the same JSON as GET /v1/dictionary/{lang}/entries - get_entry: The entry, the same JSON as GET /v1/dictionary/{lang}/entries/{headword} #### Configuration One entry in the agent's MCP config, the key in the environment. The package name is the shape to settle. #### Quota A tool call is a request. An agent that looks up every word of a paragraph spends the free tier fast, which is the honest reason the server exists: the free tier proves it, and the developer tier runs it. ### llms.txt and OpenAPI The whole reference in one fetch, and the spec a code generator reads. #### llms.txt [`/developers/llms.txt`](https://immit.co/developers/llms.txt) is the map: every docs page and operation, one line each with a link. [`/developers/llms-full.txt`](https://immit.co/developers/llms-full.txt) is the whole thing inline, the docs and the reference with real examples, generated from the same source as these pages. An agent that fetches it can write a working client from it alone. #### openapi.yaml [`/developers/openapi.yaml`](https://immit.co/developers/openapi.yaml) is the v1 spec: the three paths, the bearer scheme and the production server, OpenAPI 3.0. It is the contract behind the [additive promise](https://immit.co/developers/docs/versioning) and what the reference pages are generated from. Feed it to any client generator. #### No key needed All three files are public pages on immit.co, not `/v1` calls. They cost nothing and are cached for an hour. ## Reference ### Search entries GET https://api.immit.co/v1/dictionary/{lang}/entries Case-insensitive across headword prefix, spelling, inflected surface form, and (jpn) reading. Ordered by relevance: an exact headword or spelling, then an exact inflected surface or reading, then the prefix matches, each rank ordered by frequency, the most frequent first and the unranked last. Parameters: - lang (path, "eng" | "jpn", required): Language of the entries - query (query, string): Search query. Without it the page is the headword list in headword order - after (query, string): Cursor from metadata.after for the next page - before (query, string): Cursor from metadata.before for the previous page - limit (query, integer): Results per page, capped at 25 Response 200: DictionaryEntriesPage Errors: - 401 unauthorized, api_key_invalid, api_key_revoked, api_key_suspended: No key, or a key that is invalid, revoked or suspended. - 429 rate_limited, quota_exceeded: The burst or the day is used. Read `retry-after`. - 422 invalid_param: A parameter outside its type: a `lang` that is not `eng` or `jpn`, a `limit` that is not an integer. Example request: ```bash curl 'https://api.immit.co/v1/dictionary/jpn/entries?query=%E3%81%9F%E3%81%B9&limit=3' \ -H "Authorization: Bearer $IMMIT_API_KEY" ``` Example response (each entry abridged to four fields; the API returns full DictionaryEntry objects): ```json { "metadata": { "after": null, "before": null, "limit": 3 }, "entries": [ { "id": "9bebf0ab-36ee-4511-a271-f8d0a21efe31", "headword": "食べる", "lang": "jpn", "frequency_rank": 293 }, { "id": "9323df1f-0ad8-4b00-9e7c-275da917e3d4", "headword": "たべっ子どうぶつ", "lang": "jpn", "frequency_rank": 107140 }, { "id": "c7c50b63-cd93-4a09-9c9e-b737df9cccec", "headword": "食べつわり", "lang": "jpn", "frequency_rank": 160361 } ] } ``` ### Get an entry GET https://api.immit.co/v1/dictionary/{lang}/entries/{headword} Exact match on (lang, headword), then two fallbacks: a headword that differs from an entry only in case resolves to that entry, and a written form among an entry's spellings resolves to that entry (its canonical headword is in the response). The headword is UTF-8, percent-encoded — no fuzzy matching beyond case and spellings. Parameters: - lang (path, "eng" | "jpn", required): Language of the entry - headword (path, string, required): The headword, percent-encoded: 食べる is %E9%A3%9F%E3%81%B9%E3%82%8B on the wire Response 200: DictionaryEntry Errors: - 401 unauthorized, api_key_invalid, api_key_revoked, api_key_suspended: No key, or a key that is invalid, revoked or suspended. - 404 not_found: No entry, spelling or case variant matches. - 429 rate_limited, quota_exceeded: The burst or the day is used. Read `retry-after`. - 422 invalid_param: A parameter outside its type: a `lang` that is not `eng` or `jpn`, a `limit` that is not an integer. Example request: ```bash curl 'https://api.immit.co/v1/dictionary/jpn/entries/%E9%A3%9F%E3%81%B9%E3%82%8B' \ -H "Authorization: Bearer $IMMIT_API_KEY" ``` Example response: ```json { "id": "9bebf0ab-36ee-4511-a271-f8d0a21efe31", "updated_at": "2026-10-09T05:40:29.465156Z", "lang": "jpn", "inflections": [ { "id": "d3007e27-781c-4d01-b94f-839ab39d37d7", "text": "食べず", "form": "ず形", "pos": "動詞", "pronunciations": [ { "id": "0fcfea89-aa89-4437-9f03-c027f54bdf04", "accent": null, "reading": "たべず", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "negative", "homograph": 1, "form_translations": { "eng": "negative (-zu)" }, "form_sequence": 160 }, { "id": "b9d0afeb-2c14-42e9-8865-12c4c609dd83", "text": "食べたい", "form": "たい形", "pos": "動詞", "pronunciations": [ { "id": "12f2a5d5-c926-4175-91aa-c7bc81600d8b", "accent": null, "reading": "たべたい", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "desire (-tai)" }, "form_sequence": 140 }, { "id": "81aa4b88-3276-4e7a-9ccc-dcaef16e696a", "text": "食べたいです", "form": "たい形", "pos": "動詞", "pronunciations": [ { "id": "76442c5d-f6a0-4f93-9525-4e8d988775b9", "accent": null, "reading": "たべたいです", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "desire (-tai)" }, "form_sequence": 140 }, { "id": "980bb5ae-2767-48c5-807d-e5d2847285ca", "text": "食べたくない", "form": "たい形", "pos": "動詞", "pronunciations": [ { "id": "bea65d82-9c5d-481f-85dd-23c2943b1619", "accent": null, "reading": "たべたくない", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "desire (-tai)" }, "form_sequence": 140 }, { "id": "ba0c9e72-4389-4d71-a7a8-a9a30893d935", "text": "食べたくありません", "form": "たい形", "pos": "動詞", "pronunciations": [ { "id": "b8d4072b-13ea-4468-8fc6-6c2d8d11395e", "accent": null, "reading": "たべたくありません", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "desire (-tai)" }, "form_sequence": 140 }, { "id": "3cca7928-ba50-454d-aa1f-a5da32662755", "text": "食べたかった", "form": "たかった形", "pos": "動詞", "pronunciations": [ { "id": "c196455d-a6e7-4b04-a033-435825b26d53", "accent": null, "reading": "たべたかった", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "desire, past (-takatta)" }, "form_sequence": 150 }, { "id": "6fd6f488-71bf-46b0-9e69-4b793a8a402b", "text": "食べたかったです", "form": "たかった形", "pos": "動詞", "pronunciations": [ { "id": "3e722e3d-5bf6-44d3-84ae-e2654909fcd2", "accent": null, "reading": "たべたかったです", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "desire, past (-takatta)" }, "form_sequence": 150 }, { "id": "0fd05073-2deb-450b-bedd-6d0ca39bffb5", "text": "食べたくなかった", "form": "たかった形", "pos": "動詞", "pronunciations": [ { "id": "2fe31270-fa28-432f-b881-574dc6696a0d", "accent": null, "reading": "たべたくなかった", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "desire, past (-takatta)" }, "form_sequence": 150 }, { "id": "ff2a3e7b-2961-4c94-8d72-77cfb7edfa78", "text": "食べたくありませんでした", "form": "たかった形", "pos": "動詞", "pronunciations": [ { "id": "e00bff61-093b-4d49-b146-dc06e891a2af", "accent": null, "reading": "たべたくありませんでした", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "desire, past (-takatta)" }, "form_sequence": 150 }, { "id": "f5a3ab2f-c8ac-43b7-8e98-74047d9199bf", "text": "食べたら", "form": "たら形", "pos": "動詞", "pronunciations": [ { "id": "f548a558-991b-4df3-976f-8f2f86916ffd", "accent": null, "reading": "たべたら", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "positive", "homograph": 1, "form_translations": { "eng": "conditional (-tara)" }, "form_sequence": 100 }, { "id": "30694ead-b1d6-468c-b16a-ac667e62aa1e", "text": "食べなかったら", "form": "たら形", "pos": "動詞", "pronunciations": [ { "id": "cc0fd933-4d9f-41cb-ab4b-13b7785c690d", "accent": null, "reading": "たべなかったら", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "negative", "homograph": 1, "form_translations": { "eng": "conditional (-tara)" }, "form_sequence": 100 }, { "id": "94445fca-f0fc-4ae4-816c-3bbbcc8bb46f", "text": "食べて", "form": "て形", "pos": "動詞", "pronunciations": [ { "id": "b6076e71-ac79-43b1-bd1d-118db4e3543f", "accent": null, "reading": "たべて", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "positive", "homograph": 1, "form_translations": { "eng": "-te form" }, "form_sequence": 80 }, { "id": "86a4f56c-75d5-4ef1-89c0-b9bb157af1eb", "text": "食べなくて", "form": "て形", "pos": "動詞", "pronunciations": [ { "id": "65cbf2cb-30ae-4d27-8590-caee417cba49", "accent": null, "reading": "たべなくて", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "negative", "homograph": 1, "form_translations": { "eng": "-te form" }, "form_sequence": 80 }, { "id": "875b137d-cd06-49c1-9ea9-46a588e36140", "text": "食べぬ", "form": "ぬ形", "pos": "動詞", "pronunciations": [ { "id": "4fb5dad2-9069-4379-aa9e-08962610f802", "accent": null, "reading": "たべぬ", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "negative", "homograph": 1, "form_translations": { "eng": "negative (-nu)" }, "form_sequence": 170 }, { "id": "0f5832a3-ea88-4535-94d4-aaf58a6cecec", "text": "食べねば", "form": "ねば形", "pos": "動詞", "pronunciations": [ { "id": "ec935185-ff90-4efd-92f8-d9e2c781caed", "accent": null, "reading": "たべねば", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "negative", "homograph": 1, "form_translations": { "eng": "negative conditional (-neba)" }, "form_sequence": 180 }, { "id": "f032666c-a6d1-4789-8446-c5ee9bf32df9", "text": "食べれば", "form": "仮定形", "pos": "動詞", "pronunciations": [ { "id": "31216478-4629-4639-82e9-d293d36ba285", "accent": null, "reading": "たべれば", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "positive", "homograph": 1, "form_translations": { "eng": "conditional" }, "form_sequence": 90 }, { "id": "2c6c7830-3501-47f7-bc20-cbe676b79a5c", "text": "食べなければ", "form": "仮定形", "pos": "動詞", "pronunciations": [ { "id": "518c9dc4-82b8-427f-ac89-9c519d1ee780", "accent": null, "reading": "たべなければ", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": "negative", "homograph": 1, "form_translations": { "eng": "conditional" }, "form_sequence": 90 }, { "id": "cc06f056-3cd4-4389-98e1-6a749cc00f82", "text": "食べさせる", "form": "使役形", "pos": "動詞", "pronunciations": [ { "id": "30d4daa4-cef7-4970-a7bc-6139b7c138c0", "accent": null, "reading": "たべさせる", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "causative" }, "form_sequence": 70 }, { "id": "497bcc5d-55ae-418e-aa9b-2409e05614dc", "text": "食べさせます", "form": "使役形", "pos": "動詞", "pronunciations": [ { "id": "3543ee38-1260-4399-bc51-ffe2000d8fec", "accent": null, "reading": "たべさせます", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "causative" }, "form_sequence": 70 }, { "id": "afc2471c-27e7-42f7-882d-d79670f8c0a3", "text": "食べさせない", "form": "使役形", "pos": "動詞", "pronunciations": [ { "id": "9fd863f3-2043-4392-ac8d-b2d123b6c0d9", "accent": null, "reading": "たべさせない", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "causative" }, "form_sequence": 70 }, { "id": "c1f5f8ae-cab0-4eae-b869-23238532fd33", "text": "食べさせません", "form": "使役形", "pos": "動詞", "pronunciations": [ { "id": "2735b1fa-ac98-4c11-b39c-1810d138b546", "accent": null, "reading": "たべさせません", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "causative" }, "form_sequence": 70 }, { "id": "dda61e65-4ef0-4a8c-a574-56df9aa112f4", "text": "食べられる", "form": "受身形", "pos": "動詞", "pronunciations": [ { "id": "0572d64d-582f-4d32-808a-3cd5e88cc26a", "accent": null, "reading": "たべられる", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "passive" }, "form_sequence": 60 }, { "id": "31157d1c-e001-4add-a559-0ba665c18086", "text": "食べられます", "form": "受身形", "pos": "動詞", "pronunciations": [ { "id": "b187ff56-8c6c-4aa9-beda-93aa2183eaef", "accent": null, "reading": "たべられます", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "passive" }, "form_sequence": 60 }, { "id": "ff13ac7a-f36a-4c6c-856c-13278f5e371f", "text": "食べられない", "form": "受身形", "pos": "動詞", "pronunciations": [ { "id": "51ed6f29-d786-40cc-8da8-3812f974fec7", "accent": null, "reading": "たべられない", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "passive" }, "form_sequence": 60 }, { "id": "93443772-3850-4135-b5d6-d960f8428ce3", "text": "食べられません", "form": "受身形", "pos": "動詞", "pronunciations": [ { "id": "ac49bf4c-49aa-40ac-b9d1-7a1ee0f44994", "accent": null, "reading": "たべられません", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "passive" }, "form_sequence": 60 }, { "id": "172ce0e4-ad5c-4ec1-af27-1d906accaddb", "text": "食べられる", "form": "可能形", "pos": "動詞", "pronunciations": [ { "id": "8aa92569-3eb9-423a-8a44-fb6dd5e1105f", "accent": null, "reading": "たべられる", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "potential" }, "form_sequence": 50 }, { "id": "2930e78b-1153-4337-8aa2-56d2456c814d", "text": "食べられます", "form": "可能形", "pos": "動詞", "pronunciations": [ { "id": "9a3d0e09-0e02-4306-a6ac-99c71bcc533d", "accent": null, "reading": "たべられます", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "potential" }, "form_sequence": 50 }, { "id": "cfd77e08-3092-4c09-8320-1dc7157f6fc0", "text": "食べられない", "form": "可能形", "pos": "動詞", "pronunciations": [ { "id": "877d5bb9-889e-4a01-8457-7546f0e6cae2", "accent": null, "reading": "たべられない", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "potential" }, "form_sequence": 50 }, { "id": "e68f4d4b-cb33-4bb2-9b5f-03b93f571e7f", "text": "食べられません", "form": "可能形", "pos": "動詞", "pronunciations": [ { "id": "281615c5-030d-4c01-8c83-d528f53601a9", "accent": null, "reading": "たべられません", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "potential" }, "form_sequence": 50 }, { "id": "d5832ab1-8d1f-4f8f-84e2-ac08617afd83", "text": "食べろ", "form": "命令形", "pos": "動詞", "pronunciations": [ { "id": "ded7c16e-0884-4204-a078-a2479be0a68a", "accent": null, "reading": "たべろ", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "imperative" }, "form_sequence": 40 }, { "id": "16683f80-31a1-4273-b563-743bb29728e6", "text": "食べてください", "form": "命令形", "pos": "動詞", "pronunciations": [ { "id": "278db26f-c59f-43fa-9aef-3dc94dd75210", "accent": null, "reading": "たべてください", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "imperative" }, "form_sequence": 40 }, { "id": "b34fda99-ded4-45ba-b50c-7b209fedc4b0", "text": "食べるな", "form": "命令形", "pos": "動詞", "pronunciations": [ { "id": "1905faf5-e330-4173-aab3-79927b32ee43", "accent": null, "reading": "たべるな", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "imperative" }, "form_sequence": 40 }, { "id": "aaf747d0-2bea-4375-b009-86bcda0ace4b", "text": "食べよう", "form": "意向形", "pos": "動詞", "pronunciations": [ { "id": "1b94d237-1e7d-40b9-9373-a2eec16a8c29", "accent": null, "reading": "たべよう", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": null, "homograph": 1, "form_translations": { "eng": "volitional" }, "form_sequence": 30 }, { "id": "c4e2e0d9-b485-4fef-b7cd-23ab29c86e36", "text": "食べましょう", "form": "意向形", "pos": "動詞", "pronunciations": [ { "id": "6af7629f-0441-4808-bb54-4eb2efa8e054", "accent": null, "reading": "たべましょう", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": null, "homograph": 1, "form_translations": { "eng": "volitional" }, "form_sequence": 30 }, { "id": "ce3c78fe-e265-41bf-97d6-0b946fedc162", "text": "食べる", "form": "現在形", "pos": "動詞", "pronunciations": [ { "id": "e3e0185b-3cbd-44b5-b307-6a1054ec14bc", "accent": null, "reading": "たべる", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "present" }, "form_sequence": 10 }, { "id": "207cf0bc-5520-40d2-bac3-64e16d5e60d6", "text": "食べます", "form": "現在形", "pos": "動詞", "pronunciations": [ { "id": "28b33059-c157-4a46-b0ea-f3540a865ad5", "accent": null, "reading": "たべます", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "present" }, "form_sequence": 10 }, { "id": "f0f0aa3d-b71d-44e2-ac83-a41ed9960ed2", "text": "食べない", "form": "現在形", "pos": "動詞", "pronunciations": [ { "id": "c1cf5b73-d4bc-43c1-8f99-a8e20038a90f", "accent": null, "reading": "たべない", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "present" }, "form_sequence": 10 }, { "id": "d3ff25a0-d921-4d5e-9110-277515158bc5", "text": "食べません", "form": "現在形", "pos": "動詞", "pronunciations": [ { "id": "991a3b9f-ebb7-440a-824f-a5a078b3c91b", "accent": null, "reading": "たべません", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "present" }, "form_sequence": 10 }, { "id": "cc4d7de5-82d3-4bd3-9344-2b8691ad145a", "text": "食べ", "form": "連用形", "pos": "動詞", "pronunciations": [ { "id": "dbf00dd3-cc49-489f-9dc0-ae62c2cf5093", "accent": null, "reading": "たべ", "ipa": null, "dialect": null, "sounds": [] } ], "tone": null, "polarity": null, "homograph": 1, "form_translations": { "eng": "stem" }, "form_sequence": 130 }, { "id": "9dbbf298-de7c-4a2f-a123-c76f9d37b4ff", "text": "食べた", "form": "過去形", "pos": "動詞", "pronunciations": [ { "id": "6e742b8a-948c-4200-a572-8e09e051560e", "accent": null, "reading": "たべた", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "past" }, "form_sequence": 20 }, { "id": "85716e4c-06bc-418c-9a19-dbda46325104", "text": "食べました", "form": "過去形", "pos": "動詞", "pronunciations": [ { "id": "26d49c9b-2aa4-4b1e-8753-9fedf8cd0577", "accent": null, "reading": "たべました", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "positive", "homograph": 1, "form_translations": { "eng": "past" }, "form_sequence": 20 }, { "id": "62cdc385-3f10-43bf-9b0f-45e2c6b33579", "text": "食べなかった", "form": "過去形", "pos": "動詞", "pronunciations": [ { "id": "d5ba3457-beda-4951-be25-eebcf85adf87", "accent": null, "reading": "たべなかった", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "plain", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "past" }, "form_sequence": 20 }, { "id": "5aecaaff-6d4c-4ad9-992f-9ecc51c6b682", "text": "食べませんでした", "form": "過去形", "pos": "動詞", "pronunciations": [ { "id": "3bad9266-fc11-4ad4-adf7-6f369940e432", "accent": null, "reading": "たべませんでした", "ipa": null, "dialect": null, "sounds": [] } ], "tone": "polite", "polarity": "negative", "homograph": 1, "form_translations": { "eng": "past" }, "form_sequence": 20 } ], "spellings": [ { "label": "まれな漢字", "text": "喰べる", "homograph": 1, "label_translations": { "eng": "rare kanji" }, "inflection_texts": [ "喰べ", "喰べさせない", "喰べさせます", "喰べさせません", "喰べさせる", "喰べず", "喰べた", "喰べたい", "喰べたいです", "喰べたかった", "喰べたかったです", "喰べたくありません", "喰べたくありませんでした", "喰べたくない", "喰べたくなかった", "喰べたら", "喰べて", "喰べてください", "喰べない", "喰べなかった", "喰べなかったら", "喰べなくて", "喰べなければ", "喰べぬ", "喰べねば", "喰べました", "喰べましょう", "喰べます", "喰べません", "喰べませんでした", "喰べよう", "喰べられない", "喰べられます", "喰べられません", "喰べられる", "喰べるな", "喰べれば", "喰べろ" ] } ], "senses": [ { "id": "b7081c6b-11d7-4980-b1dd-99d330e03dad", "pos": "動詞", "definition": "食物を口に入れ、かんで飲み込む。", "translations": { "eng": { "glosses": [ { "id": "64fb9bf6-517a-4f46-8ff1-eb36c90bb8ec", "text": "to eat", "readings": [] }, { "id": "cf61d6c0-4d50-4c22-80ab-e1719747b562", "text": "to have (a meal)", "readings": [] } ], "qualifier": null } }, "examples": [ { "id": "578d5793-602f-44a9-baae-670e41838ff8", "sentences": [ { "id": "e12cfe2a-bb38-44de-acd6-d8a56d7f5c51", "text": "I try to eat vegetables every day.", "lang": "eng" }, { "id": "ccfa0d2c-2f78-4567-86ac-fa08f8a083ff", "text": "毎日野菜を食べるようにしている。", "lang": "jpn" } ] }, { "id": "ed64b8d3-1d61-407a-9b7e-8eaf08c583b9", "sentences": [ { "id": "a39ec9f7-6fb6-4ee7-af1f-f9fd422e6ceb", "text": "Have you had lunch yet?", "lang": "eng" }, { "id": "15c5f61d-5f10-4332-905a-45a1836b4b55", "text": "昼ご飯はもう食べましたか。", "lang": "jpn" } ] }, { "id": "195203bd-be9d-4767-acc2-9c27b0c4db28", "sentences": [ { "id": "259fc71e-00e8-43f2-9b81-d8cd5e91328c", "text": "When I was a child, I couldn't eat fish.", "lang": "eng" }, { "id": "cd714b64-bbc3-4db3-b64b-f0973029b2fa", "text": "子供のころは魚が食べられなかった。", "lang": "jpn" } ] } ], "homograph": 1, "pos_translations": { "eng": "verb" } }, { "id": "17dda7aa-20fc-48d8-a6d2-90f34b5eaacc", "pos": "動詞", "definition": "生活していく。暮らしを立てる。生計を営む。", "translations": { "eng": { "glosses": [ { "id": "387c9ec1-d1b0-49e0-a243-efb170a80efa", "text": "to make a living", "readings": [] }, { "id": "29f73bc3-aeaf-4a30-aedd-be3fab70295e", "text": "to live on", "readings": [] }, { "id": "cf6adc20-7b54-4c37-9419-a91c6c635de9", "text": "to get by", "readings": [] } ], "qualifier": null } }, "examples": [ { "id": "fc9b50a4-c19a-4d30-9c8a-b52e4b38a40b", "sentences": [ { "id": "d8855e6d-feed-4def-b1a5-5cac5d46b655", "text": "He makes a living from music.", "lang": "eng" }, { "id": "e4a65324-5597-4c57-9c2b-176484c78e83", "text": "彼は音楽で食べている。", "lang": "jpn" } ] }, { "id": "b1e67a85-5ddf-481d-a39f-3e3c5da8f807", "sentences": [ { "id": "3c386551-a307-4375-8d8e-9dcabb4c0aa3", "text": "A family of four can't get by on this salary.", "lang": "eng" }, { "id": "d4022b7e-24c7-4005-a0a1-d929c7516324", "text": "この給料では家族四人が食べていけない。", "lang": "jpn" } ] }, { "id": "46324b75-e601-4f8e-b4be-e0305f0cfd57", "sentences": [ { "id": "8209dabe-85c2-4b58-b309-323278840ede", "text": "It's hard to make a living from writing novels alone.", "lang": "eng" }, { "id": "7b2bf6d6-6442-4edd-9961-381a1278a0c1", "text": "小説を書くだけで食べるのは難しい。", "lang": "jpn" } ] } ], "homograph": 1, "pos_translations": { "eng": "verb" } } ], "relations": [ { "pos": "動詞", "kind": "synonym", "entry_id": "d2bf0807-33aa-434b-bfb0-d1b3ba4b2444", "headword": "食う", "homograph": 1, "sense_id": "b7081c6b-11d7-4980-b1dd-99d330e03dad" }, { "pos": "動詞", "kind": "synonym", "entry_id": "d625a5e9-5d64-4f01-994c-f11dcf4820e9", "headword": "召し上がる", "homograph": 1, "sense_id": "b7081c6b-11d7-4980-b1dd-99d330e03dad" }, { "pos": "動詞", "kind": "synonym", "entry_id": "d2bf0807-33aa-434b-bfb0-d1b3ba4b2444", "headword": "食う", "homograph": 1, "sense_id": "17dda7aa-20fc-48d8-a6d2-90f34b5eaacc" }, { "pos": "動詞", "kind": "synonym", "entry_id": "6fbea669-b9ed-4331-91c2-64da8154f9e8", "headword": "暮らす", "homograph": 1, "sense_id": "17dda7aa-20fc-48d8-a6d2-90f34b5eaacc" }, { "pos": "動詞", "kind": "synonym", "entry_id": "8373fe13-7158-4f59-88c2-e6d4655c25da", "headword": "生活", "homograph": 1, "sense_id": "17dda7aa-20fc-48d8-a6d2-90f34b5eaacc" } ], "pronunciations": [ { "id": "a92a963c-34c2-4cb4-ac3a-c992795b62d6", "accent": 2, "homograph": 1, "reading": "たべる", "ipa": null, "dialect": null, "sounds": [ { "id": "a4ad93cf-753a-49cd-b85c-71b6876a9497", "key": "sounds/01M45PR236JEQ21RS26407FZ32.mp3", "voice": "Himari", "mp3_url": "https://storage.immit.co/sounds/01M45PR236JEQ21RS26407FZ32.mp3", "gender": "female", "alphabet": "phonetic" } ] } ], "headword": "食べる", "frequency_rank": 293 } ``` ### The calling key GET https://api.immit.co/v1/me The key's name, the tier and quota of its account, and the account's requests this UTC day over every key, this one included. Authenticated by the key alone; a session or account token is refused. No parameters. Response 200: DeveloperMe Errors: - 401 unauthorized, api_key_invalid, api_key_revoked, api_key_suspended: No key, or a key that is invalid, revoked or suspended. - 429 rate_limited, quota_exceeded: The burst or the day is used. Read `retry-after`. Example request: ```bash curl 'https://api.immit.co/v1/me' \ -H "Authorization: Bearer $IMMIT_API_KEY" ``` Example response: ```json { "id": "5da1679e-9276-4409-8f7d-9ae52eac1f50", "name": "My app", "prefix": "ik_live_7XOk", "tier": "free", "inserted_at": "2026-11-03T23:58:33.778440Z", "today": { "requests": 1, "day": "2026-11-03", "remaining": 999 }, "quota": { "requests_per_day": 1000, "requests_per_minute": 60 }, "last_used_at": "2026-11-03T23:58:33.816368Z" } ``` ## Schemas ### DeveloperMe - id (string · uuid, required): The key's id - name (string, required) - prefix (string, required): The first characters of the key - tier ("free" | "developer" | "business", required): The account's tier, which every key of the account is served at - inserted_at (string · date-time, required) - last_used_at (string · date-time, required, nullable) - quota (DeveloperQuota, required) - today (DeveloperUsageToday, required) ### DeveloperQuota - requests_per_day (integer, required): The hard cap per UTC day; over it every request is 429 until midnight UTC - requests_per_minute (integer, required): The burst cap per minute, counted per node ### DeveloperUsageToday - day (string · date, required): The UTC day the counts are for - requests (integer, required): The account's requests over every key, which is what the quota counts - remaining (integer, required): Requests left today before the quota answers 429 ### DictionaryEntriesPage - entries (DictionaryEntry[], required) - metadata (object, required) - metadata.after (string, required, nullable): Cursor for the next page; null on the last - metadata.before (string, required, nullable): Cursor for the previous page; null on the first - metadata.limit (integer, required): The page size that was applied ### DictionaryEntry - id (string · uuid, required) - headword (string, required): The canonical headword. A case variant or a spelling in the request resolves to it - lang ("eng" | "jpn", required) - frequency_rank (integer, required, nullable): 1 is the most frequent entry of its language; null when unranked - updated_at (string · date-time, required): When the entry last changed; the entry's ETag is derived from it - inflections (DictionaryInflection[], required): Every form as a row, so a client never deinflects - senses (DictionarySense[], required) - pronunciations (DictionaryPronunciation[], required) - relations (DictionaryRelation[]): Always served. Not required, because a device parses entries stored before the field existed - spellings (DictionarySpelling[]): Always served. Not required, because a device parses entries stored before the field existed ### DictionaryExample - id (string · uuid, required) - sentences (DictionaryExampleSentence[], required) ### DictionaryExampleSentence - id (string · uuid, required) - lang ("eng" | "jpn", required) - text (string, required) ### DictionaryInflection - id (string · uuid, required) - form (string, required): The form name in the entry's language: て形, past tense - text (string, required): The surface form: 食べて, walked - homograph (integer, required) - polarity ("positive" | "negative", required, nullable): Set on Japanese forms and on a few English negative forms; null elsewhere - tone ("plain" | "polite", required, nullable): Japanese only; null on English rows - pos (string, required) - form_translations (object, required) - form_translations.eng (string, nullable) - form_translations.jpn (string, nullable) - form_sequence (integer, required): Display order of the form within the entry's table - pronunciations (DictionaryInflectionPronunciation[], required): The reading of this form; usually empty on English rows ### DictionaryInflectionPronunciation - id (string · uuid, required) - ipa (string, required, nullable): IPA on English rows; null on Japanese rows - reading (string, required, nullable): Kana reading on Japanese rows; null on English rows - dialect (string, required, nullable): AmE on English rows; null on Japanese rows - accent (integer, required, nullable): Pitch accent, Japanese only: the mora after which the pitch drops, 0 for heiban - sounds (DictionaryInflectionSound[], required) ### DictionaryInflectionSound - id (string · uuid, required) - key (string, required): The storage key behind the URL - mp3_url (string, required): Playable as is, and cacheable - voice (string, required): Himari, Emma or Michael - gender ("male" | "female", required) - alphabet ("ipa" | "phonetic", required) ### DictionaryPronunciation - id (string · uuid, required) - homograph (integer, required) - ipa (string, required, nullable): IPA on English rows; null on Japanese rows - reading (string, required, nullable): Kana reading on Japanese rows; null on English rows - dialect (string, required, nullable): AmE on English rows; null on Japanese rows - accent (integer, required, nullable): Pitch accent, Japanese only: the mora after which the pitch drops, 0 for heiban - sounds (DictionarySound[], required) ### DictionaryRelation A related word of one sense: another entry of the same language. homograph and pos are the sense's - sense_id (string · uuid, required) - homograph (integer, required) - pos (string, required) - kind (string, required): synonym or antonym; more kinds can follow - headword (string, required) - entry_id (string · uuid, required) ### DictionarySense - id (string · uuid, required) - pos (string, required): Part of speech in the entry's language: verb, 動詞 - definition (string, required): In the entry's own language - translations (DictionaryTranslations, required) - examples (DictionaryExample[], required): Parallel sentence pairs, one sentence per language - homograph (integer, required): Which homograph of the headword the sense belongs to - pos_translations (object, required) - pos_translations.eng (string, nullable) - pos_translations.jpn (string, nullable) ### DictionarySound - id (string · uuid, required) - key (string, required): The storage key behind the URL - mp3_url (string, required): Playable as is, and cacheable - voice (string, required): Himari, Emma or Michael - gender ("male" | "female", required) - alphabet ("ipa" | "phonetic", required) ### DictionarySpelling Another written form of the homograph: the same word, pronunciation and senses, written another way - homograph (integer, required) - text (string, required): Another written form of the same word: 喰べる for 食べる - label (string, required): What the spelling is beside the headword, in the entry's language - label_translations (object, required) - label_translations.eng (string, nullable) - label_translations.jpn (string, nullable) - inflection_texts (string[], required): The texts that inflect this spelling: lookup surfaces with no form ### DictionaryTranslations One key per language the sense is translated into: 'eng' on a Japanese entry, 'jpn' on an English one - {key} (object) - {key}.glosses (object[], required) - {key}.glosses[].id (string · uuid, required) - {key}.glosses[].text (string, required) - {key}.glosses[].readings (string[]): Kana readings of a Japanese gloss; empty when unknown - {key}.qualifier (object, required, nullable): A domain or register, such as 野球 on a baseball sense - {key}.qualifier.id (string · uuid, required) - {key}.qualifier.text (string, required) ### JsonError - errors (object[], required) - errors[].code (string, required): Stable machine-readable identifier for the error condition. Clients branch and translate on this; unknown codes must fall back to generic copy. - errors[].detail (string, required): Developer-facing English prose for logs and debugging. Never render it to users. - errors[].source (object) - errors[].source.pointer (string, required): JSON pointer to the request field the error is about, relative to the validated resource object (the value under the wrapper key, when the request body has one). ## Error bodies ### 401 with no key ```json { "errors": [ { "code": "unauthorized", "detail": "An API key is required" } ] } ``` ### 401 with a revoked key ```json { "errors": [ { "code": "api_key_revoked", "detail": "The API key is revoked" } ] } ``` ### 404 on a miss ```json { "errors": [ { "code": "not_found", "detail": "Not Found" } ] } ``` ### 422 on a bad parameter ```json { "errors": [ { "code": "invalid_param", "source": { "pointer": "/lang" }, "detail": "Invalid value for enum" } ] } ``` ### 429 over the burst ```json { "errors": [ { "code": "rate_limited", "detail": "The free tier allows 60 requests a minute" } ] } ``` ### 429 over the quota ```json { "errors": [ { "code": "quota_exceeded", "detail": "The free tier's 1000 requests a day are used; the quota resets at midnight UTC. A higher tier is at https://immit.co/developers/pricing" } ] } ``` ## Files - [openapi.yaml](https://immit.co/developers/openapi.yaml): The v1 OpenAPI 3.0 spec the reference is generated from - [llms-full.txt](https://immit.co/developers/llms-full.txt): The docs and the reference with real examples in one file - [llms.txt](https://immit.co/developers/llms.txt): This map - [Changelog](https://immit.co/developers/changelog): What changed under /v1, newest first - [Pricing](https://immit.co/developers/pricing): The tiers: a daily quota and a burst rate per account - [API terms](https://immit.co/developers/terms): The license the data is served under