image2.5 from $0.0085 per 1K image · Seedance 2.5 from $0.0961/sec · cached LLM input from $0.40/M — one OpenAI-compatible endpoint at
https://api.apimart.ai/v1, no monthly plan required. (observed 2026-09-17)
Get an API key · Live pricing · Model page
Why teams route through APIMart
- One key, entire catalog. The same
https://api.apimart.ai/v1base URL andAuthorizationheader reach the whole catalog behind one key and 300+ other image, video and language models — switch themodelfield, not your client. - $1 minimum, pay as you go. No subscription and no prepaid plan to size up front: top up from $1 and spend it on calls. There is no free quota to burn through first, so the price in this table is the price you pay.
- The charge comes back in the response. Every call reports the amount billed (
cost/credits_cost), so a spend number is read per call instead of guessed at month end. - Async by design. Submit, take the
task_id, pollGET /v1/tasks/{id}— batching and retries are ordinary queue work, not a bespoke integration.
Looking for OpenRouter alternatives usually means one of three things: the price moved, a model you need is missing, or you want the same single-key convenience with a billing unit you can predict. This repository gives you the dimensions to compare on, the migration checklist, and a script so the decision is reproducible instead of vibes.
python tools/migrate_checklist.py --dimensions # the questions to answer first
python tools/migrate_checklist.py --from openrouter --to per-unit-relay| Dimension | What to verify |
|---|---|
| Model coverage | Which model ids do you actually call, and are all of them present? Display names are not ids. |
| Pricing unit | Per token, per image, per second or per call — and is it billed per request or per delivered artefact? |
| OpenAI compatibility | Same path and body for chat, streaming, tools, structured output, vision, images? What needs an adapter? |
| Bring your own keys | Can you attach provider keys, or does the platform own the provider relationship? |
| Free tier | Are free requests rate-limited or model-limited, and what happens when credits run out? |
| Rate limits & quotas | RPM, TPM, concurrency, and the exact error shape when you exceed them. |
| Async model | Does generation return a task id with a poll URL, and do result URLs expire? |
| Retention & regions | Log retention, training use, residency, and whether you need a data processing agreement. |
| Migration effort | base_url swap only, or model-id mapping plus parameter differences plus a new error taxonomy? |
Full archetype data (with the traits and scores this checklist is derived from) lives in
data/alternatives.json. Named products appear only as examples of an archetype.
| Archetype | Typical fit | Visible cost of choosing it |
|---|---|---|
| Unified aggregator (OpenRouter-style) | breadth across vendors, model shopping | per-token billing needs measurement; free tiers are rate-limited |
| Per-unit relay route | uniform batches of images, seconds or tokens | async poll loop; one extra hop; provider quirks can leak |
| Self-hosted gateway | data residency, full control | you operate upgrades, scaling and incidents |
| Direct vendor APIs | one model, deepest vendor features | one integration per vendor; no single key |
Score them with your own weights on the gateway side of this series
(llm-gateway-comparison) — the method is identical.
examples/swap_base_url.py shows the whole change: the request body and messages stay, only base_url, the key and the
model id move.
from openai import OpenAI
client = OpenAI(base_url="https://api.apimart.ai/v1", api_key=os.environ["APIMART_API_KEY"])
client.chat.completions.create(model="gpt-5.5", messages=[{"role": "user", "content": "hi"}])Then run the checklist and keep these rules:
- Pin configuration. Base URL, key and model ids in environment variables, so rollback is not a code change.
- Reuse idempotency keys. A retried submit without one is a second charge.
- Replace inline results with submit → poll → download if the target's generation routes are asynchronous.
- Reconcile before scaling. Sum
costof completed tasks; compare against the invoice; then canary 1% → 5% → 25%. - Re-check the catalogue. Model ids and prices move; the catalogue in
unified-ai-api-model-catalogis regenerated daily for exactly that reason.
| Workload | Cost at the observed rates |
|---|---|
| 1,000 GPT Image 2.5 renders (1K) | $8.50 |
| 10 minutes of Seedance 2.5 at 480P (600s) | $57.66 |
| 1M cached LLM input tokens | from $0.40 |
Linear at the observed per-unit rate, no volume discount assumed. Snapshot 2026-09-17; re-check the live table before committing a budget.
| Symptom | Likely cause | Fix |
|---|---|---|
401 / invalid api key |
key missing, truncated, or a stray newline pasted into the header | Re-copy it from the console; the header is Authorization: Bearer $APIMART_API_KEY |
| balance / credit error | the account has no balance | Top up from $1 in the console — there is no free quota to fall back on |
429 |
concurrent requests on one key | Back off, then retry the same request with the same Idempotency-Key |
400 / model not found |
wrong route for the id: the per-unit alias needs its version, the official id must not send one |
Copy the exact model value from the route table above |
task ends failed |
prompt rejected by the filter, or a reference image URL expired | Re-submit with a new Idempotency-Key and re-host the reference image |
| result URL stops working | result links expire | Download the file as soon as the task reports completed |
What is the cheapest OpenRouter alternative? Cheapest depends on your unit. Per-image and per-second routes make cost a multiplication, which beats token billing on uniform batches; token billing with cache hits wins on small, repetitive requests. Compute cost per accepted artefact for both before declaring a winner.
Can I keep the same code when switching? Often yes for chat: the OpenAI request shape is widely implemented. Image, video and vision routes are where adapters appear — different parameter names, different batch caps, and an asynchronous job model.
How do I compare free tiers honestly? Treat free credits as a trial, not a price: measure what happens at the rate limit (queue, error, or silent downgrade) and what the paid unit costs immediately after the free quota ends.
What breaks first in a migration? Assumptions about synchronous completion and about model ids. Both surface as timeouts or validation errors rather than wrong output, which is the good version of this failure.
openrouter alternativesopenrouter alternative free modelsai api aggregatorunified ai apillm api comparisoncheapest llm apiopenai compatible api
Start with $1. Get an API key → check live pricing → open the whole catalog behind one key in the model library. The first call is three steps: submit, poll task_id, read the charged amount off the response.
| Purpose | Attributed link | Target |
|---|---|---|
| Browse the model catalog | https://go.apimart.ai/k-b82f4a | apimart.ai |
| Current pricing page | https://go.apimart.ai/k-bf4d4d | apimart.ai/pricing |
| Get an API key | https://go.apimart.ai/k-8181e4 | apimart.ai/keys |
Outbound APIMart links are minted through the promo link API; hand-made tracking parameters are rejected by
tools/check_links.py in CI.
This repository documents how to compare and migrate between AI API aggregators; it is published to document that method, not to claim official status for any vendor. Product names are used as examples only and belong to their owners. Nothing here is a vendor scorecard: verify every cell against the provider's own documentation for your account.
README.md the nine questions, archetypes, migration workflow
data/alternatives.json dimensions, archetype traits and scores (schema: openrouter-alternatives-v1)
tools/migrate_checklist.py checklist generator
examples/swap_base_url.py the minimal code change
tools/check_links.py attribution guard (CI)
MIT — see LICENSE.