Pick Your Dance Partner
Inkstone is a “bring your own key” app. It doesn’t come with an AI baked in. Instead, you connect it to any provider that speaks the OpenAI API format, which at this point is most of them. This means you choose based on what matters to you: price, model quality, content policies, speed, or even running something locally on your own hardware.
Here’s who’s on the card and what they bring to the floor.
Supported Providers
OpenRouter
The buffet. One API key gets you access to Anthropic (Claude), Google (Gemini), Meta (Llama), OpenAI, and dozens more. If you don’t know which model you want yet, or you want to try several without managing separate accounts for each, OpenRouter is where you start. The breadth is genuinely staggering. The trade-off is that you’re adding a middleman, which can mean slightly higher latency on some models, but for most people the convenience is worth it.
Get your key: openrouter.ai/keys
DeepSeek
The workhorse that doesn’t charge workhorse prices. DeepSeek’s models punch well above their weight for both casual conversation and immersive roleplay, and they do it at rates that make you double-check the pricing page to make sure you read it right. They also support a reasoning mode where the model shows its thinking process before responding, which is fascinating to watch and occasionally useful for understanding why a scene went in a particular direction.
Get your key: platform.deepseek.com/api_keys
Z.AI
Fast, affordable, and quietly good at creative work. Z.AI’s coding plan endpoint was designed for structured output, but it turns out that “structured and detailed” translates remarkably well to roleplay. Responses tend to be expressive and thorough. It follows the same API format as everything else, so there’s nothing special to configure.
Get your key: z.ai/manage-apikey/apikey-list
NanoGPT
Pay-as-you-go similar to OpenRouter. You load credit, you spend credit, you’re done. NanoGPT offers access to many models with transparent per-token pricing, which makes it a good fit if you want to experiment with different models without committing to a monthly plan. Think of it as the prepaid phone of AI providers.
Get your key: nano-gpt.com/api
OpenAI
The one everybody’s heard of. GPT models are powerful, well-documented, and backed by extensive infrastructure. They’re also the most likely to politely decline your creative writing requests, especially if those requests involve anything remotely edgy. OpenAI has the tightest content guardrails of any provider on this list. If your stories stay well within mainstream fiction territory, the quality is excellent. If they don’t, you’ll find yourself negotiating with a model that has very firm opinions about what it will and won’t write.
Get your key: platform.openai.com/api-keys
Custom Endpoint
Any service that implements the OpenAI chat completion API format works here. This covers local models (Ollama, LM Studio, KoboldCpp, and the like), proxies and relays that forward requests to other providers, and private deployments of your own hosted models. If it accepts the same request shape and returns the same response shape, Inkstone will talk to it.
URL: Whatever you want
Setting Up a Provider
The first time you open Inkstone, it walks you through this. Choose a provider, paste your API key, pick a model (or tap “Fetch” to browse what’s available), test the connection, and you’re in. The whole thing takes about a minute if you already have an API key ready.
API Key Security
Your API key is stored in platform-native secure storage (Android’s Encrypted SharedPreferences). It lives outside the app’s database entirely. The only time it leaves your device is inside the Authorization header of requests to the provider you’ve configured. It goes nowhere else. It doesn’t appear in logs. It’s excluded from exports.
Model Selection
Tap the “Fetch” button next to the model field and Inkstone queries your provider for every model it offers. The results appear in a searchable dialog with smart ranking: exact name matches float to the top, partial matches follow, and your currently selected model is pinned at the very top so you don’t lose track of it.
Saved Configurations (Presets)
Presets let you save your entire API setup under a name and switch between them instantly.
Configure your URL, key, and model. Tap “Save Current Configuration.” Give it a name. Done. Each preset stores its own API key separately in secure storage, so switching presets is genuinely switching everything, not just the model name with the same credentials underneath. Long-press a preset to delete it.
This is particularly useful if you keep different providers for different purposes. Your serious writing model, your fast-and-cheap brainstorming model, your local model for when the internet is being unreliable. One tap to switch contexts entirely.
How API Calls Work
The sequence behind the curtain
When you send a message, here’s what happens.
Prompt Assembly
Inkstone assembles the full prompt: your system prompt, character definitions, active lorebook entries, and conversation history, all packed into a messages array.
Request Formation
It sends that to your provider in the OpenAI chat completion format, along with your generation parameters (Temperature, Top-P, Max Tokens) and the stream flag.
Response Delivery
If streaming is on, the response arrives chunk by chunk via Server-Sent Events, each piece rendered as it lands. If streaming is off, the full response arrives in one piece.
Save & Display
Either way, it gets saved and displayed.
What Gets Sent
The model name, the messages array (system prompt, your messages, AI responses), Temperature, Top-P, Max Tokens, and the stream flag. That’s it.
What Doesn’t Get Sent
Your API key travels only in the Authorization header. That header goes to your configured provider and nowhere else.
Token Counting
Inkstone estimates token usage with a character-based heuristic: roughly one token per four characters, plus a 5% safety margin. This isn’t a perfect count (perfect counting requires loading a full tokenizer, which is slow and model-specific), but it’s fast and accurate enough to give you a reliable sense of how much context you’re using.
If your provider includes actual token usage in its response, Inkstone picks that up and uses the real numbers instead.
Connection Testing
The “Test Connection” button in API Settings sends a quick request to verify your setup works. Success means the API is reachable and your key is valid. Failure shows you the specific error, whether that’s a wrong key, an unreachable URL, or something else. If you haven’t entered a key yet, it’ll remind you to do that first.
Always test after changing your setup. It takes two seconds and prevents the specific frustration of typing out a perfect opening message only to get an authentication error in response.
Troubleshooting
| Problem | Likely Cause | Fix |
|---|---|---|
| “Authentication Failed” | Wrong or expired API key | Get a new key from your provider |
| “Connection Failed” | Wrong URL or provider is down | Double-check the base URL; try the provider’s website |
| “Too Many Requests” | Rate limited | Wait a moment and try again |
| “Conversation Too Long” | Context exceeds model limit | Reduce context window size, start a new chat, or enable summaries |
| Models won’t fetch | Provider doesn’t support /models endpoint | Type the model name manually |
| Local model won’t connect | Wrong port or model not loaded | Check your local server is running and the URL matches |
Use ← → to navigate between pages