Açık API
Karakterleriniz için OpenAI uyumlu bir uç nokta.
Reverie, OpenAI uyumlu bir Chat Completions uç noktası sunar. Herhangi bir OpenAI istemcisini buraya yöneltin, bir Reverie API anahtarı geçirin ve model alanında bir LLM yerine bir karakter ya da senaryo adı verin. Konuşmayı, anıları ve özetleri Reverie kendi tarafında tuttuğu için her isteğin taşıması gereken tek şey yeni mesajınızdır.
Oturum açmış her hesap kullanabilir. Abonelik kademesi de bekleme listesi de yok — bir API anahtarı gerekir, hepsi bu. Bir tane oluşturun →
Temel URL ve kimlik doğrulama
https://www.reverie.im/api/device/v1
Authorization: Bearer rk_...Ayarlar → Daha fazla → API Anahtarları, API Endpoint kartında tam temel URL'yi kopyalama düğmesiyle birlikte gösterir.
Bu, sunucu tarafında bir API'dir. Farklı kaynaktan gelen tarayıcı istekleri engellenir; bu yüzden kendi web sayfanızdan atılan bir fetch, anahtar doğru olsa da başarısız olur. Onu bir arka uçtan çağırın ve anahtarı istemci kodunun dışında tutun.
Hızlı başlangıç
curl --no-buffer https://www.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
}'Ayarlar → Daha fazla → API Anahtarları ayrıca bir istek oluşturucu içerir; gerçek anahtarlarınızdan biriyle ve gerçek bir karakterle bu üç parçayı üretir.
model alanı bir karakteri adlandırır
Yalnızca karakter adı yazmak işe yaramaz. model: "Luna", Luna adlı bir karakteri aramaz. Hiçbir şeyle eşleşmez, anahtarın varsayılan karakterine ya da en son sohbetinize düşer ve hiçbir hata almadan başka bir karakterden yanıt alırsınız. Her zaman GET /models'in döndürdüğü Ad [kısaid] biçimini kullanın.
model değeri | Kim yanıtlar |
|---|---|
Luna [abc12345] | ID'si o 8 karakterle biten karakter ya da senaryo |
| Tam bir karakter veya senaryo ID'si | O karakter ya da o senaryo |
Bir Reverie model ID'si, örn. deepseek-v4-flash | LLM'i seçer; karakter anahtardan ya da son sohbetinizden gelir |
| Boş bırakılmış | Anahtara sabitlenmiş karakter, yoksa en son sohbetiniz |
Kısa bir ID'nin çözülüp çözülmeyeceğini belirleyen ayrıntılar:
[...]dizginin sonunda olmalıdır.- 8 karakter ya da daha kısa bir sonek, yalnızca hâlihazırda sohbetiniz olan karakterlerle karşılaştırılır; web'de olsun, API üzerinden olsun. Hiç açmadığınız bir karakterin kısa ID'si sessizce boşa düşer.
- Senaryo araması yalnızca anahtar bir karaktere sabitlenmişken çalışır. Genel bir anahtarla kısa senaryo ID'si asla çözülemez.
- 8 karakterden uzunu tam ID sayılır.
Kimlerle konuşabileceğinizi listelemek
curl https://www.reverie.im/api/device/v1/models \
-H "Authorization: Bearer $REVERIE_API_KEY"Genel bir anahtar son karakterlerinizi döndürür. Bir karaktere sabitlenmiş anahtar ise o karakterin senaryolarını, hiç senaryosu yoksa karakterin kendisini döndürür. Her kayıt şöyle görünür:
{
"id": "Luna [abc12345]",
"object": "model",
"created": 1759200000,
"owned_by": "character",
"permission": [],
"root": "<full character id>",
"parent": null
}id değerini doğrudan model alanına kopyalayın. Bu uç noktanın hataları OpenAI zarfı yerine yalın bir hata biçimi kullanır.
İstek gövdesinden neler okunur
Dört alan okunur. Geri kalan her şey kabul edilip sessizce atılır.
| Alan | Tür | Varsayılan | Notlar |
|---|---|---|---|
messages | dizi | zorunlu | Aşağıya bakın — yalnızca bir kısmı kullanılır |
model | dizgi | isteğe bağlı | Yukarıdaki gibi karakter, senaryo ya da LLM |
stream | boole | true | OpenAI API'sinin aksine, burada varsayılan akıştır |
temperature | 0–2 arası sayı | karakterin ayarı, yoksa 0.8 | Aralık dışı değerler reddedilir |
Uyarı vermeden yok sayılanlar: max_tokens, top_p, n, stop, presence_penalty, frequency_penalty, logit_bias, seed, user, response_format, tools, tool_choice, logprobs, stream_options.
messages nasıl işlenir:
systemmesajları atılır. Kişilik ve davranış, istekten değil, karakterin kendi alanlarından gelir. Prompt alanları →- Görüntü desteği yoktur. İçerik bir dizgi ya da parçalardan oluşan bir dizi olabilir, ama yalnızca
textparçaları okunur; görsel parçalar yok sayılır. - Konuşmaya yalnızca son
usermesajı eklenir. Daha önceki kullanıcı mesajları yok sayılır. - Asistan mesajları yalnızca geçmişi eşitlemek için kullanılır (aşağıya bakın).
- Boş ya da yalnızca boşluktan oluşan son kullanıcı mesajı
missing_user_messagedöndürür.
Yanıtlar
Akışsız yanıt, sıradan bir chat.completion nesnesidir. finish_reason her zaman stop'tur — içerideki araç çağrıları dışarıya hiç yansımaz — ve usage sayaçları sıfırdır; bu yüzden tokenları yanıttan değil, API anahtarları sayfasındaki kullanım istatistiklerinden ölçün.
Akışlı yanıt bir text/event-stream'dir:
- İçerik parçaları:
delta.contenttaşıyanchat.completion.chunknesneleri. Baştakidelta: {"role": "assistant"}parçası gönderilmez. finish_reasondeğeristop,lengthya dacontent_filterolan bir bitiş parçası. Araç çağrısıyla gelen bitişlerstopolarak bildirilir.choicesdizisi boş olan bir kullanım parçası.data: [DONE].
Üretim akışın ortasında başarısız olursa akış data: {"error": {...}} yayar, ardından [DONE] gelir.
Konuşmanın durumu
Konuşmayı Reverie saklar. Her anahtar-karakter çifti için tek bir sohbet vardır, web uygulamasında diğer sohbetlerinizin yanında görünür ve her tur şunlardan kurulur: karakterin sistem promptu ve senaryosu, world book kanonu, uzun vadeli anılar, biriken özetler, karakterin anlatım tarzı, yanıt uzunluğu ve NSFW ayarları, hesap dilinizden gelen bir dil kilidi ve modelin bağlam penceresine sığdığı kadar yakın geçmiş. Model araçları destekliyorsa bellek araçları da çalışır.
Geçmişi sunucu tuttuğu için onu yeniden göndermenize gerek yok.
Asistan mesajı göndermek geçmişi silebilir. messages diziniz asistan mesajları içeriyorsa Reverie sonuncusunu alır, onu saklanan en yeni 20 mesaj arasında arar ve eşleşme bulursa ondan sonra oluşturulmuş her mesajı, o noktadan sonra oluşan anılarla birlikte kalıcı olarak siler. Hiçbir şey eşleşmezse hiçbir şey silinmez. Dizinizin uzunluğunun önemi yoktur. Bundan büsbütün kaçınmak için yalnızca yeni kullanıcı mesajını gönderin.
Hangi LLM yanıtlar
Buna istek değil karakter karar verir — siz bir LLM adı vermedikçe. Öncelik, en düşükten en yükseğe: varsayılan sohbet modeli, sonra karakterin kendi model ayarı, sonra model olarak geçirilen Reverie model ID'si ve en sonunda web uygulamasında o sohbet için belirlediğiniz model tercihi; bu sonuncusu hepsini geçer. Modeller →
Hatalar
/chat/completions hataları OpenAI zarfını kullanır: {"error": {"message", "type", "param": null, "code"}}.
| HTTP | code | type | Nedeni |
|---|---|---|---|
| 401 | invalid_api_key | invalid_request_error | Authorization eksik ya da bozuk, anahtar tanınmıyor veya anahtar etkin değil |
| 401 | api_key_expired | invalid_request_error | Anahtarın süresi dolmuş |
| 404 | scenario_not_found | invalid_request_error | Senaryo ID'si çözüldü ama senaryo ortada yok |
| 404 | character_not_found | invalid_request_error | Karakter yok ya da silinmiş |
| 404 | no_chat_history | invalid_request_error | Ne model, ne sabitlenmiş bir karakter, ne de geri dönülecek eski bir sohbet var |
| 400 | missing_user_message | invalid_request_error | Boş olmayan hiçbir user mesajı yok |
| 429 | rate_limit_exceeded | rate_limit_exceeded | Ücretsiz model penceresi tükendi. Retry-After kaç saniye bekleneceğini verir |
| 429 | insufficient_quota | insufficient_quota | İstek için yeterli kredi yok |
| 502 | MODEL_EMPTY_RESPONSE | server_error | Model düzgün bitirdi ama hiç metin üretmedi |
| değişken | sağlayıcı kodu | server_error | Üretim yukarı tarafta başarısız oldu |
İki durum bu zarfın dışında kalır: GET /models hataları ve doğrulamanın reddettiği istek gövdeleri (örneğin aralık dışı bir temperature) — ikisi de yalın bir hata biçimi döndürür.
Hız sınırları ve kotalar
Bu API'de anahtar başına hız sınırı, eşzamanlılık tavanı ve istek kotası yoktur. Kullanımınızı yalnızca iki şey sınırlar:
| Sınır | Değer |
|---|---|
| Kredi bakiyesi | Her istekten önce denetlenir; yetmezse insufficient_quota döner |
| Ücretsiz model penceresi | Hesap başına 3 saatte 15 mesaj — Pro'da ×3 (45), Premium'da ×4 (60), Ultimate'ta ×5 (75) |
Ücretsiz model penceresi web sohbeti, hikâyeler, romanlar ve botlarla ortaktır — her yüzey için ayrı değil, hesap başına tek bir haktır. Ücretsiz modeller →
Reverie dışarıya webhook göndermez; üretimin bittiğini öğrenmek için abone olunacak bir şey yoktur.
Karakter içe aktarma
İkinci bir uç nokta olan POST /api/v1/characters/import, bir karakter kartından karakter oluşturur. İçe aktarma kapsamı olan bir anahtar ister ve bu, ayarlar sayfasının oluşturduğu türden bir anahtar değildir. API anahtarları → ve Karakter içe aktarma →
İlgili
- API anahtarları — anahtar oluşturma, sabitleme, süre verme ve izleme
- Modeller — model ID'leri ve kredi çarpanları
- Sınırlar — üründeki diğer tavanlar
- Krediler — isteklerin fiyatlandırılması