Skip to main content
In five minutes you send four requests and place one real phone call. Calls are billed at your plan’s tier. Every new workspace starts on T5, ₹5 a minute, and the example call below ran there.
If you are a partner, Start building is the longer version of this page. It has the same first call, plus your first campaign and the go-live checklist.
You need: a secret key, a phone number you are allowed to call, and a public HTTPS URL for webhooks (ngrok is fine while you build).
1

Create a key

Open the sandbox. There is nothing to sign up for, and you can look around first. When you are ready, go to Developers and press Create key.The first time, the console asks for your work email. We send you an access code and a confirmation link. Open the link, press Continue to your workspace, then press Create key again. If we already gave you an access code, press Have an access code? and enter it instead of your email.You get three things on the spot:The key is shown once. We store only its SHA-256, so we cannot recover a lost key; you rotate it instead. Keep both secrets in your secret manager and out of git.You can rotate and revoke keys on the same page. Rotating issues the replacement before it revokes the old key, so there is never a moment when neither key works. Deploy the new key, then revoke the old one.Every request on this page goes to the sandbox at https://sandbox.voice.miraiminds.co. Once your company has gone live, send the same requests to https://prod.voice.miraiminds.co. On the production address, a key from a workspace that has not gone live is refused with 403 production_workspace_required.Check that it works:
2

Create an agent

An agent is the reusable configuration a call runs: its prompt, opening line, voice, language and limits. You create it once and use it for thousands of calls.
201 Created
Keep that id.
That prompt is the minimum that works. Before you run it at volume, read the prompting guide. It covers prompt structure, the Hinglish rules and how to end a call cleanly.
3

Place a call

variables fill the {{placeholders}} in system_prompt and first_message. webhook_url is where lifecycle events land.
202 Accepted
202 means the call is accepted but not yet connected, so the phone has not rung. Poll GET /v2/calls/{id}, or better, wait for the webhook.
4

Receive the webhook

We POST a signed JSON event to your webhook_url at each lifecycle transition. Verify the signature before you trust the body.
The final event for a connected call:
POST https://example.com/mirai/webhook
96 seconds is billed as 10 blocks of 10 seconds. On T5 that is ₹8.34, which leaves ₹191.66 of the starting ₹200. Blocks are whole and rounded up, with a one-block minimum.

Next

  • In Python, pip install --extra-index-url https://sandbox.voice.miraiminds.co/pypi/simple mirai-voice gives you the same four requests as mirai.agents.create / mirai.calls.create, with idempotency, retries and signature verification already handled.
  • Campaigns: upload a list and let the platform dial it, with windows, retries, budgets and a report.
  • Webhooks: every event type, retries and replay protection.
  • Calls: statuses, ended_reason, transcripts, recordings and abort.
  • Billing & tiers: the price ladder and what a minute costs.
  • Limits: rate limits, concurrency and India calling-window rules.

Troubleshooting the first call