I signed up for OpenRouter like everyone else: one key, tons of models, no separate OpenAI/Anthropic accounts. Worked great, honestly. But a few weeks into actually building stuff, I noticed I kept hitting the same wall over and over.
Text was never the whole thing. I'd be building something that needed a script generated, then a thumbnail for it, then maybe read it out loud. OpenRouter gave me one key for the text part. Then I was back to three more provider docs, three more auth headers, three more bills, for the parts that weren't text.
And the pricing thing bugged me more than I expected it to. OpenRouter passes through whatever the provider charges plus a fee, which is fair, but it meant I could never just... know what a feature cost. I'd want to tell myself "this thing costs about X per use" before I shipped it, not find out after the fact from an invoice.
The "switch providers with one line" thing is real for text, but that's where it stopped for me. The second I needed an image or a voice, I was reading new docs again like it was day one.
And the free models on OpenRouter are genuinely nice for messing around, but the rate limits are tight enough that I never wanted to actually build a real feature on top of one and then have to migrate off it later.
So at some point I just got annoyed enough to fix it for myself. That's Apiarium: one key, same request shape, across text (GPT, Claude, Gemini), images, text-to-speech, and transcription. Credits instead of pass-through pricing so I can actually look at a number before shipping something instead of after. Video generation is coming soon too.
To be clear, I don't think OpenRouter is bad at what it does. If you just want the biggest catalog of text models to poke at, it's still probably the better call. It just wasn't enough for what I kept building.
fetch('https://api.apiarium.dev/llm', {
method: 'POST',
headers: { Authorization: 'Bearer KEY' },
body: JSON.stringify({
model: 'claude-sonnet', // or gpt-4o, gemini
messages: [{ role: 'user', content: 'Hi' }]
})
})
If you've run into the same thing, needed more than just text, or wanted to know what something would cost before you shipped it, I'm curious how you dealt with it. Did you keep everything on separate providers, build your own abstraction, or just decide the extra complexity wasn't worth solving?
If you're curious what I ended up building, it's at apiarium.dev.
Top comments (0)