Documentation Index
Fetch the complete documentation index at: https://docs.dolphy.chat/llms.txt
Use this file to discover all available pages before exploring further.
What test mode is
Stripe-style separate keys for development. Test keys (dpy_test_*)
let you call every endpoint, get real responses from real models, and
verify your integration — without spending real credits.
Each test key gets a daily virtual pool of 100 credits that resets at
00:00 UTC. Calls bill against this pool, not your real credit balance.
Why we still call real models
We considered mocking responses (canned image bytes, fake SSE chunks), but mock outputs don’t help you test prompt quality, content filters, or streaming behavior. Real-model output makes test mode actually useful. The 100 credits/day cap means our exposure is ~$5/day per active test account — a fair marketing cost for getting devs onboarded.Get a test key
- dolphy.chat/settings/api-keys
- Click “New key” → choose dpytest… mode → name it
- Copy the plaintext key (shown once)
Use it
Identical to live keys — just swap theapiKey:
dolphy_test_mode: true at the top level so
your client code can branch (e.g., skip persisting a test image).
When the daily pool runs out
dpy_live_*
key for production traffic.
Differences from live keys
Live (dpy_live_*) | Test (dpy_test_*) | |
|---|---|---|
| Membership required | Yes | No |
| Bills against | Real credit balance | Daily virtual pool |
| Daily limit | Configurable per key | Fixed at 100 cr |
| Real model output | Yes | Yes (we actually call providers) |
| Refunds on failure | To real credits | To virtual pool |
| Webhook delivery | Yes | Yes |
Response includes dolphy_test_mode | No | Yes |
Mixed test + live
A single account can have both kinds of keys. Same 10-key limit applies. Test and live billing pools are separate — test usage never touches real credits, live usage never touches the virtual pool.Going to production
Once your integration works against a test key:- Create a
dpy_live_*key on the same account - Replace the
apiKeyvalue in your code - That’s it — same baseURL, same endpoints, same shapes