Get your API key
One key, then point your agent at satuapps.com/v1 and keep the harness you already built.
Create your key
This account does not have a key yet. Creating one takes a moment and the key is shown once.
Keep the key on a server you control. Never put it in a browser, a mobile app, or a public repository.
Set Mirai as your agent brain with a prompt
Copy a prompt and paste it into Hermes, OpenClaw, Cursor, VS Code, OpenCode, or any other agent harness. That harness then uses satuapps.com/v1 with your key.
No key on this page yet, so the prompt uses YOUR_MIRAI_API_KEY. Create a key first, then copy again so the live token is filled in.
A Mirai key starts with mirai- and is sent as Authorization Bearer. It is not sent as x-api-key.
Writes ~/.hermes/config.yaml so Hermes calls Mirai as a custom provider.
Goal: make this Hermes instance call Satuapps Mirai as its model backend, while keeping every tool, skill, personality, and platform setting you already have.
Work until ~/.hermes/config.yaml is written and a verify call succeeds. Do not stop after describing the change.
Exact file: ~/.hermes/config.yaml
On this machine that is $HOME/.hermes/config.yaml. MERGE into that file. Do not replace the whole file. Do not delete tools, skills, personalities, platforms, or plugins.
The model id field in Hermes is model.default, not model.model. Set all four of these keys:
model:
provider: custom
default: "mirai-1"
base_url: "https://satuapps.com/v1"
api_key: "YOUR_MIRAI_API_KEY"
context_length: 200000
Also add a named provider so you can switch to mirai-2 without rewriting the endpoint. MERGE this block; keep any other providers already listed:
providers:
mirai:
name: Satuapps Mirai
api: https://satuapps.com/v1
api_key: "YOUR_MIRAI_API_KEY"
transport: chat_completions
default_model: mirai-1
context_length: 200000
models:
mirai-1:
context_length: 200000
mirai-2:
context_length: 500000
Exact CLI (run these in order, then show the values with hermes config get):
hermes config set model.provider custom
hermes config set model.base_url https://satuapps.com/v1
hermes config set model.api_key YOUR_MIRAI_API_KEY
hermes config set model.default mirai-1
hermes config set model.context_length 200000
hermes config get model.provider
hermes config get model.base_url
hermes config get model.default
Default model is mirai-1. Use mirai-2 when you want the stronger model:
hermes config set model.default mirai-2
The api_key must be a Mirai key from Commerce Keys. A live Mirai key starts with mirai-. Do not paste a kitchen endpoint key. A key that starts with sk- is the wrong kind.
Every request must go to https://satuapps.com/v1 with header Authorization: Bearer YOUR_MIRAI_API_KEY. There is no other base path. After GET /v1/models you may set model.default to mirai-1, mirai-2, or another public id from that list. Transport is chat_completions. Do not set transport to responses.
Verify, in this order. Keep going until both succeed.
1. List models:
curl -sS https://satuapps.com/v1/models -H "Authorization: Bearer YOUR_MIRAI_API_KEY"
You must see mirai-1 and mirai-2 in the JSON. If the key is rejected, stop and tell the user the key is wrong. Do not invent a different URL.
2. Tiny chat completions:
curl -sS https://satuapps.com/v1/chat/completions -H "Authorization: Bearer YOUR_MIRAI_API_KEY" -H "Content-Type: application/json" -d '{"model":"mirai-1","messages":[{"role":"user","content":"ping"}]}'
Expect JSON with choices[0].message.content. Then send one Hermes user message ping with model mirai-1 and confirm a reply arrives.
What not to do:
- Do not switch provider or base_url to any other vendor endpoint.
- Do not invent a different base path. Not /v1/chat, not /api, not a host other than satuapps.com.
- Do not leave YOUR_MIRAI_API_KEY in the file if a live key was given. Write the live key.
- Do not wipe ~/.hermes/config.yaml. Merge only the model and providers.mirai keys.
- Do not finish until the file is saved and the verify curl returns models plus a ping reply.Full manual tutorial
Step by step from official docs. Steps marked unverified were not run as a live session on this machine.
1. Open the Hermes config file
CheckedExact file: ~/.hermes/config.yaml ($HOME/.hermes/config.yaml). Official Hermes docs: this is the primary config. MERGE. Do not replace the whole file.
Official docs: https://github.com/NousResearch/hermes-agent/blob/main/website/docs/user-guide/configuration.md
2. Set provider custom and the chat completions URL
CheckedWrite model.provider: custom, model.default: mirai-1 or mirai-2 (not model.model), model.base_url: https://satuapps.com/v1, model.api_key: YOUR_MIRAI_API_KEY. The key is a Mirai key (it starts with mirai-). Do not paste a key that starts with sk-. Official providers page shows provider: custom plus base_url for a chat completions endpoint. Do not use Responses.
Official docs: https://github.com/NousResearch/hermes-agent/blob/main/website/docs/integrations/providers.md
3. Or use the CLI
Checkedhermes config set model.provider custom then hermes config set model.base_url https://satuapps.com/v1 then hermes config set model.api_key KEY then hermes config set model.default mirai-1. hermes config --help on Hermes Agent v0.20.0 lists get, set, path.
4. Confirm the written values
Checkedhermes config get model.provider, hermes config get model.base_url, hermes config get model.default. Expect custom, https://satuapps.com/v1, and mirai-1 or mirai-2.
5. Ping the API
Unverifiedcurl -sS https://satuapps.com/v1/models -H "Authorization: Bearer YOUR_MIRAI_API_KEY" then a tiny POST /v1/chat/completions with a model id from that list (mirai-1 or mirai-2). A live Hermes chat turn was not run in this recipe.
After the key
- 1. Point base_url at satuapps.com/v1
- 2. Send the key as a Bearer token
- 3. Keep everything else in your stack as it is
What it costs
Mirai 1 is $0.10 per million input tokens and $0.80 output. Mirai 2 is $0.50 and $1.50. No tiers and no minimum.
See full pricing