Reverie LogoReverie
KarakterCeritaFiturKreatorBlog
MasukDaftar
Dokumentasi
Dokumentasi

Welcome to Reverie

Thoughtful AI character platform. Chat, write, build, earn.

See what shipped this week →
Reverie documentation

Start here

Getting started
Getting started
Account setup
Your first conversation
Finding characters
Importing your history
Glossary

Chatting

Chatting
The chat screen
Side panel & settings

Steering a reply

Slash commands
Guiding a reply
Reply suggestions
First-response enhancement
Reasoning mode
Comparing two replies

Shaping the conversation

Personas
Scenarios
How memory works
Forking conversations
Group chats
Proactive messages

Managing your chats

Managing conversations
Sharing a conversation
Troubleshooting chat

Voice, images & video

Voice, images & video
Voice, images & video
Voice calls
Reading messages aloud
Voice Studio
Generating images
Image to video
Stickers

Worlds & long-form

Worlds & long-form
Worlds & long-form
World Books

Stories

Story mode
Writing a story

Novels

Novel mode
Directing prose
Writing styles
Chat to novel

Creating characters

Creating characters
Creating characters

Three ways to build

Character quick start
Conversational builder
Visual builder
Importing characters

Making it good

Writing a character
Advanced settings
Prompt fields
Preset personas
Image guidelines

Shipping it

Test drive
Publishing a character
Reviews & creator notes
Plugins
Plugins
Using plugins
Creating plugins

Community

Community
Community
Discovery
Moments
Hashtags
Collections
Following creators
Scene snapshots
Safety & reporting

Earning

Creator hub
Creator hub
Becoming a creator
Revenue streams
Direct support
Withdrawals
Creator analytics
Creator posts
Creator messages
Campaigns
Bounties

Your account

Account
Account
Your profile
Security
Content preferences
Appearance
Notifications
Data & privacy
Reports & appeals
Getting help
Billing
Billing
Subscriptions
Credits
Referrals
Gift cards & codes
Rewards
Rewards
Daily check-in
Lucky draw
Achievements
Titles, frames & themes
Reverie Wrapped

Beyond the app

Integrations
Integrations
Reverie Labs
Discord bot
Telegram bot
Open API
API keys

Reference

Reference
Reference
Models
Choosing a model
Free models
Limits
Keyboard shortcuts
Reverie LogoReverie

Platform obrolan & roleplay karakter AI. Impikan, ciptakan, obrolan dengannya.

Twitter·Discord·Tentang·Kontak

Produk

FiturTemaAI RoleplayIde RoleplayAI RPGChat AI dengan MemoriKarakterCeritaKoleksi pilihanMomenKenanganPembuat Karakter AIPencipta Karakter VisualWorld BooksPlugin AI RoleplayMode CeritaPenulis Novel AIChat ke novelTantangan KarakterPencapaianReverie Wrapped

Jelajahi

Obrolan AI NSFWChat AI Tanpa FilterPacar AIPacar AI (Pria)Teman AIGrup Chat AIPersona AIPanggilan Suara AIKloning Suara AIModel AIPercabangan ObrolanSlash CommandGenerator Cerita AIAI yang Menyapa DuluanPesan Tak TerbatasHashtagKreator

Bandingkan

Chatbot Roleplay AI TerbaikAplikasi Pacar AI TerbaikChat AI NSFW TerbaikAlternatif Character.AIvs Character.AIvs Janitor AIvs Chai AIvs SpicyChatvs Crushon.AIvs Polybuzz.AIvs Chub AIvs SillyTavernvs Talkie AIvs AI Dungeonvs Replikavs Moematevs Figgs AI

Sumber Daya

PanduanGlosariumUntuk KreatorAPI karakter AIImport KarakterPengimpor riwayat chatFAQBlogChangelogStatusHargaBot DiscordBot Telegram

Kategori

  • Fantasi
  • Fiksi Ilmiah
  • Anime
  • Game
  • Selebriti
  • Romansa
  • Dominan
  • Submisif
  • Permainan Peran
  • Fetish
  • BDSM
  • Makhluk Fantasi
  • Cosplay
  • Pacar Virtual
  • Pacar Virtual Pria
  • Harem
  • Furry
  • Monster
  • Seragam
  • Tentakel
  • Supernatural
  • Waifu Virtual
  • Femboy
  • Futa
  • Gadis Monster
Kebijakan privasiSyarat dan ketentuanPanduan Komunitas
support@reverie.im
651 N Broad St, Suite 206, Middletown, DE 19709, USA
© 2026 Reverie. All rights reserved.
Integrations

Open API

An OpenAI-compatible endpoint for your characters.

Reverie exposes an OpenAI-compatible Chat Completions endpoint. Point any OpenAI client at it, pass a Reverie API key, and use the model field to name a character or scenario instead of an LLM. Reverie keeps the conversation, the memories and the summaries on its side, so each request only needs your new message.

Any signed-in account can use it. There is no subscription tier, waitlist or feature switch involved — you need an API key, and that's all. Create one →

Base URL and auth

https://www.reverie.im/api/device/v1
Authorization: Bearer rk_...

Settings → More → API Keys shows the exact base URL for your deployment in the API Endpoint card, with a copy button.

This is a server-side API. Cross-origin browser requests are blocked — the endpoint only accepts Reverie's own origin, so a fetch from your web page will fail regardless of the key. Call it from a backend, and keep the key out of client code.

Quick start

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
}'

Settings → More → API Keys also has a request builder that generates these three snippets against one of your real keys and a real character.

The model field names a character

A bare character name does not work. model: "Luna" does not look up a character called Luna. It fails to match anything, falls through to the key's default character or your most recent chat, and you get a reply from a different character with no error. Always use the Name [shortid] form that GET /models returns.

Value of modelWhat answers
Luna [abc12345]The character or scenario whose ID ends with those 8 characters
A full character or scenario IDThat character or scenario
A Reverie model ID, e.g. deepseek-v4-flashSelects the LLM; the character comes from the key or your last chat
OmittedThe key's pinned character, otherwise your most recent chat

Details that decide whether a short ID resolves:

  • The [...] must be at the end of the string.
  • A suffix of 8 characters or fewer is matched only against characters you already have a chat with, on the web or through the API. A short ID for a character you have never opened falls through silently.
  • The scenario lookup only runs when the key is pinned to a character. With a global key, a short scenario ID can never resolve.
  • More than 8 characters is treated as a full ID.

Listing what you can talk to

curl https://www.reverie.im/api/device/v1/models \
  -H "Authorization: Bearer $REVERIE_API_KEY"

A global key returns your recent characters. A key pinned to a character returns that character's scenarios instead, or the character itself if it has none. Each entry looks like:

{
	"id": "Luna [abc12345]",
	"object": "model",
	"created": 1759200000,
	"owned_by": "character",
	"permission": [],
	"root": "<full character id>",
	"parent": null
}

Copy id straight into model. Errors from this endpoint use a plain error shape rather than the OpenAI envelope.

What the request body reads

Four fields are read. Everything else is accepted and silently discarded.

FieldTypeDefaultNotes
messagesarrayrequiredSee below — only part of it is used
modelstringoptionalCharacter, scenario or LLM, as above
streambooleantrueStreaming is the default, unlike the OpenAI API
temperaturenumber 0–2character's setting, else 0.8Out-of-range values are rejected

Ignored without warning: max_tokens, top_p, n, stop, presence_penalty, frequency_penalty, logit_bias, seed, user, response_format, tools, tool_choice, logprobs, stream_options.

How messages is handled:

  • system messages are dropped. Persona and behaviour come from the character's own fields, not from the request. Prompt fields →
  • There is no vision support. Content may be a string or a parts array, but only text parts are read; image parts are ignored.
  • Only the last user message is added to the conversation. Earlier user messages are ignored.
  • Assistant messages are used only for history sync (below).
  • An empty or whitespace-only last user message returns missing_user_message.

Responses

A non-streaming response is a normal chat.completion object. finish_reason is always stop — internal tool calls are never exposed — and the usage counters are zeros, so measure tokens from the usage statistics on the API keys page rather than from the response.

A streaming response is text/event-stream:

  1. Content chunks: chat.completion.chunk objects with delta.content. No initial delta: {"role": "assistant"} chunk is sent.
  2. A finish chunk, with finish_reason of stop, length or content_filter. Tool-call finishes are reported as stop.
  3. A usage chunk with an empty choices array.
  4. data: [DONE].

If generation fails mid-stream, the stream emits data: {"error": {...}} and then [DONE].

Conversation state

Reverie stores the conversation. One chat exists per key-and-character pair, it shows up in the web app alongside your other chats, and each turn is built from the character's system prompt and scenario, world book canon, long-term memories, rolling summaries, the character's narration style, response length and NSFW settings, a language lock from your account locale, and up to the last 250 messages, trimmed to the model's context window. Memory tools run when the model supports tools.

Because the server holds the history, you do not need to replay it.

Sending assistant messages can delete history. If your messages array contains assistant messages, Reverie takes the last one, looks for it among the 20 most recent stored messages, and — on a match — permanently deletes every message created after it, along with memories created after that point. If nothing matches, nothing is deleted. The length of your array is irrelevant. To avoid this entirely, send only the new user message.

Which LLM answers

The character decides, not the request — unless you name an LLM. Precedence, lowest to highest: the default chat model, then the character's own model setting, then a Reverie model ID passed as model, and finally the per-chat model preference you set in the web app, which wins over all of them. Models →

Errors

Errors from /chat/completions use the OpenAI envelope: {"error": {"message", "type", "param": null, "code"}}.

HTTPcodetypeCause
401invalid_api_keyinvalid_request_errorMissing or malformed Authorization, unknown key, or the key is inactive
401api_key_expiredinvalid_request_errorThe key is past its expiry
404scenario_not_foundinvalid_request_errorA scenario ID resolved but the scenario is gone
404character_not_foundinvalid_request_errorThe character is missing or deleted
404no_chat_historyinvalid_request_errorNo model, no pinned character, and no prior chat to fall back on
400missing_user_messageinvalid_request_errorNo non-empty user message
429rate_limit_exceededrate_limit_exceededFree-model window exhausted. Retry-After gives the seconds to wait
429insufficient_quotainsufficient_quotaNot enough credits for the request
502MODEL_EMPTY_RESPONSEserver_errorThe model finished cleanly with no text
variesprovider codeserver_errorGeneration failed upstream

Two cases fall outside that envelope: GET /models errors, and request bodies rejected by validation (an out-of-range temperature, for example) — both return a plain error shape.

Rate limits and quotas

There is no per-key rate limit, no concurrency cap and no request quota on this API. Two things bound your usage:

BoundValue
Credit balanceChecked before each request; failure returns insufficient_quota
Free model window15 messages per 3 hours, per account — ×3 on Pro (45), ×4 on Premium (60), ×5 on Ultimate (75)

The free-model window is shared with web chat, stories, novels and the bots — it is one allowance per account, not one per surface. Free models →

Reverie sends no outbound webhooks; there is nothing to subscribe to for completion events.

Importing characters

A second endpoint, POST /api/v1/characters/import, creates a character from a character card. It needs a key with the import scope, which is not the kind of key the settings page creates. API keys → and Import characters →

Related

  • API keys — create, pin, expire and monitor keys
  • Models — model IDs and credit multipliers
  • Limits — the other ceilings in the product
  • Credits — how requests are priced

On this page

Base URL and auth
Quick start
The model field names a character
Listing what you can talk to
What the request body reads
Responses
Conversation state
Which LLM answers
Errors
Rate limits and quotas
Importing characters
Related