快速开始
使用 api.keykey.im 查询多语言词条、释义、读音、例句和结构化词典信息。
公开 API 无需认证。每个 IP 每天有 150 次免费配额,按北京时间每天 00:00 重置。
第一次查询
建议在公开查词场景启用 includeLocalDictionaryFallback=true。完整记忆卡片不存在时,接口仍可返回本地词典中的基础词形、释义和读音。
curl -G https://api.keykey.im/api/public/memory-card \
--data-urlencode 'word=hello' \
-d lang=en \
-d includeLocalDictionaryFallback=true
JavaScript / TypeScript
async function getMemoryCard(word, lang = 'en') {
const params = new URLSearchParams({
word,
lang,
includeLocalDictionaryFallback: 'true',
})
const response = await fetch(
`https://api.keykey.im/api/public/memory-card?${params}`,
{ cache: 'no-store' },
)
const payload = await response.json()
if (!response.ok || !payload.success) {
throw new Error(payload.error || `HTTP ${response.status}`)
}
console.log('展示词形:', payload.data.displayWord || payload.data.word)
console.log('完整释义:', payload.data.trans)
console.log('练习释义:', payload.data.practiceTrans)
console.log('剩余配额:', payload.rateLimit.remaining)
return payload.data
}
const card = await getMemoryCard('hello')
Python
import requests
def get_memory_card(word: str, lang: str = 'en'):
response = requests.get(
'https://api.keykey.im/api/public/memory-card',
params={
'word': word,
'lang': lang,
'includeLocalDictionaryFallback': 'true',
},
timeout=15,
)
payload = response.json()
if not response.ok or not payload.get('success'):
raise RuntimeError(payload.get('error', f'HTTP {response.status_code}'))
return payload['data']
card = get_memory_card('日本', 'ja')
print(card.get('notation'))
print(card.get('kanaReading'))
print(card.get('practiceWord'))
PHP
<?php
function getMemoryCard($word, $lang = 'en') {
$query = http_build_query([
'word' => $word,
'lang' => $lang,
'includeLocalDictionaryFallback' => 'true',
]);
$url = 'https://api.keykey.im/api/public/memory-card?' . $query;
$payload = json_decode(file_get_contents($url), true);
if (!$payload['success']) {
throw new Exception($payload['error'] ?? '查询失败');
}
return $payload['data'];
}
$card = getMemoryCard('bonjour', 'fr');
echo $card['displayWord'] ?? $card['word'];
?>
读取响应
新版本把词条身份、展示词形和练习输入分开,并提供完整/练习两套释义:
{
"success": true,
"data": {
"word": "日本",
"languageCategory": "ja",
"trans": ["日本"],
"phonetic": "nippon",
"phoneticSystem": "romaji",
"notation": "日本(にっぽん)",
"kanaReading": "にっぽん",
"practiceWord": "nippon",
"practiceAliases": ["nippon"],
"lexemeKey": "ja:日本:にっぽん",
"examples": [],
"cached": true
},
"rateLimit": {
"remaining": 149,
"limit": 150,
"reset": "2026-08-24T16:00:00.000Z"
}
}
reset 使用 ISO 8601;上例的 2026-08-24T16:00:00.000Z 对应北京时间 2026 年 8 月 25 日 00:00。
批量查询
一次查询多个词时,直接使用批量接口,不需要在客户端循环请求:
const response = await fetch(
'https://api.keykey.im/api/public/memory-card/batch-query',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
words: ['hello', 'world', 'study'],
languageCategory: 'en',
includeLocalDictionaryFallback: true,
definitionMode: 'practice',
}),
},
)
const payload = await response.json()