Open API
आपके किरदारों के लिए OpenAI-संगत एंडपॉइंट।
Reverie एक OpenAI-संगत Chat Completions एंडपॉइंट देता है। किसी भी OpenAI क्लाइंट को उस पर मोड़िए, एक Reverie API की भेजिए, और model फ़ील्ड में LLM की जगह कोई किरदार या परिदृश्य लिखिए। बातचीत, यादें और सारांश Reverie अपनी तरफ़ रखता है, इसलिए हर अनुरोध में बस आपका नया संदेश चाहिए।
साइन इन किया कोई भी खाता इसे इस्तेमाल कर सकता है। न कोई सदस्यता स्तर है, न प्रतीक्षा सूची — आपको एक API की चाहिए, बस इतना ही। एक बनाएँ →
बेस URL और प्रमाणीकरण
https://reverie.im/api/device/v1
Authorization: Bearer rk_...सेटिंग्स → और देखें → API कीज़ में API Endpoint कार्ड पर सही बेस URL दिखता है, साथ में कॉपी बटन भी।
यह सर्वर-साइड API है। दूसरे ऑरिजिन से आने वाले ब्राउज़र अनुरोध रोक दिए जाते हैं, इसलिए आपकी अपनी वेब पेज से किया fetch की सही होने पर भी नाकाम रहेगा। इसे किसी बैकएंड से बुलाइए, और की को क्लाइंट कोड से बाहर रखिए।
जल्दी शुरू करें
curl --no-buffer https://reverie.im/api/device/v1/chat/completions \
-H "Authorization: Bearer $REVERIE_API_KEY" \
-H "Content-Type: application/json" \
--data-binary '{
"model": "Luna [abc12345]",
"messages": [
{
"role": "user",
"content": "Hi"
}
],
"stream": true,
"temperature": 0.8
}'सेटिंग्स → और देखें → API कीज़ में एक अनुरोध बिल्डर भी है, जो आपकी किसी असली की और किसी असली किरदार के साथ ये तीनों नमूने बना देता है।
model फ़ील्ड किरदार का नाम है
सिर्फ़ किरदार का नाम लिखने से काम नहीं चलता। model: "Luna" Luna नाम के किसी किरदार को नहीं ढूँढ़ता। वह किसी से मेल नहीं खाता, की के डिफ़ॉल्ट किरदार या आपकी सबसे हाल की चैट पर फिसल जाता है, और आपको किसी और किरदार का जवाब मिल जाता है — बिना किसी त्रुटि के। हमेशा वही नाम [छोटीID] शैली इस्तेमाल करें जो GET /models लौटाता है।
model का मान | कौन जवाब देता है |
|---|---|
Luna [abc12345] | वह किरदार या परिदृश्य जिसका ID उन 8 अक्षरों पर ख़त्म होता है |
| पूरा किरदार या परिदृश्य ID | वही किरदार या परिदृश्य |
कोई Reverie मॉडल ID, जैसे deepseek-v4-flash | LLM चुनता है; किरदार की से या आपकी पिछली चैट से आता है |
| न दिया गया हो | की से जुड़ा किरदार, वरना आपकी सबसे हाल की चैट |
छोटा ID हल होगा या नहीं, यह इन बातों से तय होता है:
[...]स्ट्रिंग के अंत में होना चाहिए।- 8 या उससे कम अक्षरों वाला प्रत्यय सिर्फ़ उन्हीं किरदारों से मिलाया जाता है जिनके साथ आपकी पहले से चैट है — वेब पर हो या API से। जिस किरदार को आपने कभी खोला ही नहीं, उसका छोटा ID चुपचाप ख़ाली चला जाता है।
- परिदृश्य की खोज तभी चलती है जब की किसी किरदार से जुड़ी हो। वैश्विक की के साथ छोटा परिदृश्य ID कभी हल नहीं होता।
- 8 से ज़्यादा अक्षर होने पर उसे पूरा ID मान लिया जाता है।
आप किससे बात कर सकते हैं, यह देखना
curl https://reverie.im/api/device/v1/models \
-H "Authorization: Bearer $REVERIE_API_KEY"वैश्विक की आपके हालिया किरदार लौटाती है। किसी किरदार से जुड़ी की उस किरदार के परिदृश्य लौटाती है, और अगर एक भी न हो तो ख़ुद किरदार। हर प्रविष्टि कुछ ऐसी दिखती है:
{
"id": "Luna [abc12345]",
"object": "model",
"created": 1759200000,
"owned_by": "character",
"permission": [],
"root": "<full character id>",
"parent": null
}id को सीधे model में कॉपी कर दीजिए। इस एंडपॉइंट की त्रुटियाँ OpenAI के लिफ़ाफ़े की जगह एक सादे त्रुटि रूप में आती हैं।
अनुरोध के मुख्य भाग से क्या पढ़ा जाता है
चार फ़ील्ड पढ़े जाते हैं। बाकी सब स्वीकार कर के चुपचाप गिरा दिया जाता है।
| फ़ील्ड | प्रकार | डिफ़ॉल्ट | टिप्पणी |
|---|---|---|---|
messages | सरणी | ज़रूरी | नीचे देखें — इसका सिर्फ़ एक हिस्सा काम आता है |
model | स्ट्रिंग | वैकल्पिक | ऊपर बताए अनुसार किरदार, परिदृश्य या LLM |
stream | बूलियन | true | OpenAI API से अलग, यहाँ स्ट्रीमिंग ही डिफ़ॉल्ट है |
temperature | 0–2 की संख्या | किरदार की सेटिंग, वरना 0.8 | सीमा से बाहर के मान अस्वीकार होते हैं |
बिना चेतावनी नज़रअंदाज़ होते हैं: max_tokens, top_p, n, stop, presence_penalty, frequency_penalty, logit_bias, seed, user, response_format, tools, tool_choice, logprobs, stream_options.
messages को कैसे बरता जाता है:
systemसंदेश गिरा दिए जाते हैं। व्यक्तित्व और व्यवहार किरदार के अपने फ़ील्ड से आते हैं, अनुरोध से नहीं। प्रॉम्प्ट फ़ील्ड →- दृष्टि का समर्थन नहीं है। सामग्री स्ट्रिंग भी हो सकती है और हिस्सों की सरणी भी, पर सिर्फ़
textहिस्से पढ़े जाते हैं; तस्वीर वाले हिस्से नज़रअंदाज़ हो जाते हैं। - बातचीत में सिर्फ़ आख़िरी
userसंदेश जुड़ता है। उससे पहले के उपयोगकर्ता संदेश नज़रअंदाज़ होते हैं। - सहायक संदेश सिर्फ़ इतिहास मिलाने के लिए इस्तेमाल होते हैं (नीचे देखें)।
- आख़िरी उपयोगकर्ता संदेश ख़ाली हो या सिर्फ़ स्पेस का हो तो
missing_user_messageलौटता है।
जवाब
बिना स्ट्रीमिंग वाला जवाब एक सामान्य chat.completion ऑब्जेक्ट होता है। finish_reason हमेशा stop रहता है — भीतरी टूल कॉल कभी बाहर नहीं दिखते — और usage के आँकड़े शून्य होते हैं, इसलिए टोकन जवाब से नहीं, API कीज़ पेज के उपयोग आँकड़ों से नापिए।
स्ट्रीमिंग वाला जवाब text/event-stream होता है:
- सामग्री के टुकड़े:
delta.contentवालेchat.completion.chunkऑब्जेक्ट। शुरुआत मेंdelta: {"role": "assistant"}वाला टुकड़ा नहीं भेजा जाता। - एक समापन टुकड़ा, जिसमें
finish_reasonstop,lengthयाcontent_filterहोता है। टूल कॉल से हुए समापनstopके रूप में बताए जाते हैं। - एक उपयोग टुकड़ा, जिसमें
choicesख़ाली सरणी होती है। data: [DONE].
अगर बीच स्ट्रीम में बनना नाकाम हो जाए, तो स्ट्रीम data: {"error": {...}} भेजती है और फिर [DONE]।
बातचीत की स्थिति
बातचीत Reverie सँभालता है। हर की-और-किरदार जोड़ी के लिए एक चैट होती है, वह वेब ऐप में आपकी बाकी चैट के साथ दिखती है, और हर बारी किरदार के सिस्टम प्रॉम्प्ट और परिदृश्य, वर्ल्ड बुक के तयशुदा विवरण, दीर्घकालिक यादों, चलते-फिरते सारांशों, किरदार की कथन शैली, जवाब की लंबाई और NSFW सेटिंग्स, आपके खाते की भाषा से आए भाषा-ताले, और मॉडल की कॉन्टेक्स्ट विंडो में जितना हालिया इतिहास समाए उतने से बनती है। मॉडल टूल समर्थन करता हो तो याददाश्त के टूल भी चलते हैं।
इतिहास सर्वर के पास है, इसलिए आपको उसे दोबारा भेजने की ज़रूरत नहीं।
सहायक संदेश भेजने से इतिहास मिट सकता है। अगर आपकी messages सरणी में सहायक संदेश हैं, तो Reverie उनमें से आख़िरी लेता है, उसे सहेजे गए 20 सबसे हालिया संदेशों में ढूँढ़ता है, और मिल जाने पर उसके बाद बने हर संदेश को — साथ में उस बिंदु के बाद बनी यादों को भी — हमेशा के लिए मिटा देता है। कुछ न मिले तो कुछ नहीं मिटता। आपकी सरणी कितनी लंबी है, इससे फ़र्क़ नहीं पड़ता। इससे पूरी तरह बचना हो तो सिर्फ़ नया उपयोगकर्ता संदेश भेजिए।
कौन-सा LLM जवाब देता है
यह किरदार तय करता है, अनुरोध नहीं — जब तक आप ख़ुद कोई LLM न बता दें। प्राथमिकता नीचे से ऊपर इस तरह है: डिफ़ॉल्ट चैट मॉडल, फिर किरदार की अपनी मॉडल सेटिंग, फिर model में भेजा गया Reverie मॉडल ID, और आख़िर में वेब ऐप में उस चैट के लिए तय की गई मॉडल पसंद, जो सब पर भारी पड़ती है। मॉडल →
त्रुटियाँ
/chat/completions की त्रुटियाँ OpenAI के लिफ़ाफ़े में आती हैं: {"error": {"message", "type", "param": null, "code"}}.
| HTTP | code | type | कारण |
|---|---|---|---|
| 401 | invalid_api_key | invalid_request_error | Authorization नदारद या ग़लत बना हुआ, की अनजानी, या की निष्क्रिय |
| 401 | api_key_expired | invalid_request_error | की की अवधि बीत चुकी है |
| 404 | scenario_not_found | invalid_request_error | परिदृश्य ID हल तो हुआ, पर वह परिदृश्य रहा ही नहीं |
| 404 | character_not_found | invalid_request_error | किरदार मौजूद नहीं है या मिटा दिया गया है |
| 404 | no_chat_history | invalid_request_error | न model, न कोई जुड़ा किरदार, और न पीछे लौटने लायक कोई पुरानी चैट |
| 400 | missing_user_message | invalid_request_error | कोई ग़ैर-ख़ाली user संदेश नहीं है |
| 429 | rate_limit_exceeded | rate_limit_exceeded | फ्री मॉडल की खिड़की ख़त्म। Retry-After बताता है कितने सेकंड रुकना है |
| 429 | insufficient_quota | insufficient_quota | इस अनुरोध के लिए क्रेडिट कम हैं |
| 502 | MODEL_EMPTY_RESPONSE | server_error | मॉडल ठीक-ठाक ख़त्म हुआ, पर कोई टेक्स्ट नहीं दिया |
| बदलता रहता है | प्रदाता का कोड | server_error | ऊपर की ओर बनाना नाकाम रहा |
दो सूरतें इस लिफ़ाफ़े से बाहर रहती हैं: GET /models की त्रुटियाँ, और जाँच में रद्द हुए अनुरोध (जैसे सीमा से बाहर का temperature) — दोनों सादा त्रुटि रूप लौटाते हैं।
दर सीमाएँ और कोटा
इस API पर न तो हर की के लिए दर सीमा है, न समानांतर अनुरोधों की हद, और न कोई अनुरोध कोटा। आपके इस्तेमाल को सिर्फ़ दो चीज़ें बाँधती हैं:
| बंधन | मान |
|---|---|
| क्रेडिट बैलेंस | हर अनुरोध से पहले जाँचा जाता है; कम पड़ने पर insufficient_quota लौटता है |
| फ्री मॉडल खिड़की | हर खाते के लिए हर 3 घंटे में 15 संदेश — Pro पर ×3 (45), Premium पर ×4 (60), Ultimate पर ×5 (75) |
फ्री मॉडल की खिड़की वेब चैट, कहानियों, उपन्यासों और बॉट्स के साथ साझा है — यह हर खाते के लिए एक हिस्सा है, हर जगह के लिए अलग-अलग नहीं। फ्री मॉडल →
Reverie बाहर कोई webhook नहीं भेजता; बनना पूरा होने की सूचना के लिए सदस्यता लेने को कुछ है ही नहीं।
किरदार आयात करना
एक दूसरा एंडपॉइंट, POST /api/v1/characters/import, किरदार कार्ड से किरदार बनाता है। इसके लिए आयात के दायरे वाली की चाहिए, और वह उस तरह की की नहीं है जो सेटिंग्स पेज बनाता है। API कीज़ → और किरदार आयात करना →