Criyx V1
Lowest price
- ₹25,000 plan
- ₹2.5 / min
- ₹50,000 plan
- ₹2 / min
- 200–300 ms latency
- 1 voice
- Instructions, voice & tools
- Memory and telephony built in
- Call forwarding
- Inbound and outbound on one number
Everything Criyx does and how each feature works, from creating your first voice agent to running campaigns.
Criyx is an AI automation company. We build services that take over repetitive business work, and our main product is voice AI agents: agents that answer and make phone calls for your business, in your words, any hour of the day.
Calls are billed per minute, rounded up to the next whole minute (1:01 counts as 2 minutes).
The next five sections walk through each flow in detail.
V1 is the quickest way to get a calling agent live, at the lowest price.
V2 is set up exactly like V1, with premium voices and a faster response.
V3 opens a full workspace. Each part of the agent has its own tab.
A batch makes the same agent call a list of contacts. V1 and V2 agents use batches.
A campaign is built for V3 agents. It carries each contact's own details into the call.
You choose a model per agent. Each one can take both inbound and outbound calls on the same number.
Lowest price
Premium voices
Most capable
In V3 the instructions page is split into clear parts, so each thing the agent must do has a place. The greeting is required: you cannot publish without it.
Variables such as the caller's name can be used inside the instructions and the greeting, for example “Hi {{caller_name}}”. Add them once and the agent fills them in on each call.
Forwarding charge: a V3 agent with call forwarding switched on costs ₹1 extra per minute on every call of that agent, not only the forwarded ones, from the moment you publish it. That is ₹5 per minute on the 50K plan and ₹5.5 per minute on the 25K plan.
External telephony charge: a V3 agent that uses an additional telephony provider costs ₹2 extra per minute, on every call of that agent, starting from the moment you publish the agent with that number. Until then the normal rate applies. The V3 rate goes from ₹4.5 to ₹6.5 per minute on the 25K plan, and from ₹4 to ₹6 per minute on the 50K plan. Agents that do not use it are billed at the normal rate.
| Feature | Criyx V1 | Criyx V2 | Criyx V3 |
|---|---|---|---|
| Best for | Low-cost, fast calling | Natural, premium voices | Full agent workspace |
| Voices | 1 voice | All premium voices | 176 voices with gender, language and use-case tags |
| Languages | Hindi, English, Punjabi, Bengali, Tamil, Multilingual | 12 languages and Multilingual | 12 languages, or All languages |
| Instructions, voice & tools | |||
| Memory & telephony built in | |||
| Structured instructions (role, rules, dos & don'ts) | |||
| Knowledge base | |||
| Pronunciation dictionary (import / export) | |||
| Variables (caller name and more) | |||
| Calls forwarded to a human | |||
| Batches & campaigns | |||
| Inbound and outbound on one number | |||
| Test call: inbound | |||
| Test call: outbound | |||
| Latency | 200–300 ms | 100–200 ms | under 100 ms |
| Ready to try? | Try now | Try now | Try now |
Pay once, get the same amount in credits, use them for 30 days. Unused credits expire after 30 days. Prices are per minute. Rupee prices are exclusive of 18% GST, which is added at payment.
25,000 credits · 30 days
| Model | Per minute | Minutes |
|---|---|---|
| Criyx V1 | ₹2.5 | 10,000 |
| Criyx V2 | ₹3.5 | 7,142 |
| Criyx V3 | ₹4.5 | 5,555 |
| V3 with call forwarding | ₹5.5 | 4,545 |
| V3 with an external telephony provider | ₹6.5 | 3,846 |
Each rate includes ₹0.5 per minute of telephony.
50,000 credits · 30 days
| Model | Per minute | Minutes |
|---|---|---|
| Criyx V1 | ₹2 | 25,000 |
| Criyx V2 | ₹3 | 16,666 |
| Criyx V3 | ₹4 | 12,500 |
| V3 with call forwarding | ₹5 | 10,000 |
| V3 with an external telephony provider | ₹6 | 8,333 |
Each rate includes ₹0.5 per minute of telephony.
Each agent needs its own number for inbound and outbound calls. A number costs ₹300 for 30 days, you can hold up to 30, and one number serves one agent. Numbers renew by autopay.
Add money that never expires. It is used only when your plan or phone numbers renew, and you always get exactly the credits listed. Rupee prices are exclusive of 18% GST, added at payment.
Store up to 75,000 credits in one top-up
| Credits added | You pay |
|---|---|
| 25,000 credits | ₹25,000 + 18% GST |
| 50,000 credits | ₹50,000 + 18% GST |
| 75,000 credits | ₹75,000 + 18% GST |
Store up to 1,00,000 credits in one top-up
| Credits added | You pay |
|---|---|
| 50,000 credits | ₹50,000 + 18% GST |
| 1,00,000 credits | ₹1,00,000 + 18% GST |
Phone numbers have their own wallet: top up for at least 3 numbers at ₹300 each. It pays number renewals first, and gives a new agent its number.
Everything you do in the dashboard for a V1, V2 or V3 agent, you can do with the API: create and edit agents, place calls, run batches, read every call with its transcript and recording, read your plan and credits, and get a webhook the moment a call or batch happens. Your customers only ever see your name; Criyx stays behind the API.
| Field | Type | What it does |
|---|---|---|
| plan: "basic" (Criyx V1) | agent | Lowest price. One voice (Praveshika). Languages: Hindi, English, Punjabi, Bengali, Tamil and Multilingual. Instructions, outputs, memory, call forwarding. |
| plan: "core" (Criyx V2) | agent | Everything in V1, with every premium voice. Voices are checked by plan: a V1 agent cannot use a V2 voice, and a V2 agent cannot use the V1 voice. |
| Number | per agent | Each agent has ONE number, used for both inbound and outbound calls. It is shown as outDid on the agent. |
| Same API | both | Create, edit, call, batch and call-history endpoints are identical for V1 and V2. Only plan and the voice list differ. |
First read the languages and voices for the plan, then create the agent with their ids.
| Field | Type | What it does |
|---|---|---|
| name | string | Required. Up to 120 characters. |
| plan | basic | core | basic is V1, core is V2. Defaults to basic. |
| languageId, voiceId | uuid | From /agents/options for the plan. The voice and the language must belong to the plan, otherwise you get 400. Leave them out and the agent starts on Hindi with Praveshika (V1) or Aanchal (V2). They cannot be cleared later. |
| instructions | string | What the agent is and how it talks. Plain text. |
| outputFields | { key, description }[] | Details you want back from each call, such as the caller's name. Up to 30. They come back as callOutput. |
| outputInstructions | string | How to fill the output fields. |
| sayHello | boolean | Whether the agent speaks first. |
| allowInterruption, minUserSpeechToInterrupt | boolean, seconds | Let the caller cut in, and how long they must speak first. |
| requiredSilenceAfterSpeech, allowedSilenceBeforeNudge, allowedSpeechBeforeNudge | seconds | Pause and nudge timing. |
| maxCallDurationMins | 1 to 120 | The call ends at this length. |
| voicemailMsg, callDurationExceedMessage | string | What is said when voicemail answers, and when the call runs too long. |
| memoryEnabled, memoryInstructions | boolean, string | Let the agent remember a caller, and what to remember. |
| allowCallTransfer, transferDestinationPhone | boolean, 10-digit string | Forward the call to a person when asked. |
| GET | /agents | Your agents (page, pageSize). |
| GET | /agents/:id | One agent with its full setup: instructions, outputs, memory, language, voice, call forwarding, outDid and inDid. |
| PATCH | /agents/:id | Change any of the create fields. Send only what changes. An empty string clears voicemailMsg and callDurationExceedMessage. |
| DELETE | /agents/:id | Delete the agent. |
| GET | /agents/:id/summary | Calls, minutes and important calls for the last 7 days. |
Use criyxCallId to read the call, its transcript and its recording once it has ended.
A batch makes one agent call a list of people. It is created as a Draft and calls nobody until you start it.
| POST | /batches/contacts/validate | Check a list first: valid rows, invalid rows with the reason, and duplicates. |
| POST | /batches | Create a batch with its contacts and settings. Returns status Draft. |
| POST | /batches/:id/start | Start calling. The body can carry settings, or be {}. |
| POST | /batches/:id/stop | Stop a running batch. |
| GET | /batches | Your batches and their progress. |
| GET | /batches/:id | One batch: status, completion, call stats, schedule, retries. |
| PATCH | /batches/:id | Rename: { batchName }. |
| PATCH | /batches/:id/settings | Change schedule, retries or concurrency before starting. |
| GET · POST | /batches/:id/contacts | List contacts with their status, or add one: { contact_name, contact_phone, country_code? }. |
| PATCH · DELETE | /batches/:id/contacts/:contactId | Edit or remove a contact. |
| DELETE | /batches/:id | Delete the batch. |
| GET | /calls?batchId=:id | Every call the batch made, with outcome, transcript and recording. |
| Field | Type | What it does |
|---|---|---|
| contacts | array, 1 to 10,000 | contact_name (required: letters, spaces and periods only), contact_phone (10 digits for India, or any number with country_code). |
| settings.schedule | object | days (1 Monday to 7 Sunday), start_time and end_time as HH:MM, and a timezone such as Asia/Kolkata. Calls only go out inside this window. |
| settings.maxRetries | 0 to 20 | How many times to try again when nobody picks up. |
| settings.retryAfterHrs | hours | How long to wait before a retry. |
| settings.maxConcurrentCalls | 1 to 100 | How many calls run at the same time. |
Then poll GET /batches/:id for progress, and read the calls it made with GET /calls?batchId=:id.
| GET | /calls | Call history. Filters: agentId, batchId, status, direction (inbound or outbound), search, page, pageSize. |
| GET | /calls/:id | One call: outcome, times, duration, credits, output fields, transcript and recording. |
| GET | /calls/:id/transcript | The whole conversation as turns of { role, content }. |
| GET | /calls/:id/recording | Whether a recording exists, its status and a link to the audio. |
| GET | /calls/:id/audio | The recording itself. Supports Range for seeking. Add ?download=1 to get it as a file. |
When the customer on a finished call asks not to be called again (in English, Hindi or Hinglish), or is abusive or talks about something illegal, Criyx flags the call and its number for 30 days, the time calls are kept. A flag is a recommendation only: nothing is blocked, and what you do next is your decision.
| GET | /flags | Every number that is flagged right now. |
| POST | /flags/check | { numbers: [...] } returns the ones that are flagged. Check before you call or add numbers to a batch. |
| POST | /flags | { callId, type } flags a call's number by hand. type is do_not_call or abusive_illegal. |
| DELETE | /flags/:id | Clears the flag of that number. |
Your plan, credits and phone numbers are bought in the Criyx dashboard (Billing), because paying takes the Razorpay popup in a browser. With the API key you read everything you need to run your own billing: how many credits are left, what each call used, and the plan rates.
| GET | /billing/packages | The 25K and 50K plans: price, per-minute rates for V1 and V2, GST, and your current plan. |
| GET | /billing/account | Your plan, days left, numbers you own, and when each number renews. |
| GET | /billing/balance | Credits left and the account status. |
| GET | /billing/transactions | Credit history for the last 30 days: every call's usage and every credit added. |
| GET | /dashboard/summary | The numbers behind your dashboard: credits, calls, minutes, usage by day. |
Add a URL once and Criyx sends your server a POST the moment something happens to a V1 or V2 agent. You never have to poll for call results.
| GET | /webhooks/endpoints | Your webhook URLs. |
| POST | /webhooks/endpoints | Add a URL: { url, events? }. Leave events out to receive every event. The secret is returned once. |
| DELETE | /webhooks/endpoints/:id | Remove a URL. |
| Field | Type | What it does |
|---|---|---|
| call.started | event | A call was placed with POST /calls (or from the dashboard). data: callId, agentId, agentName, toNumber, countryCode. |
| call.answered | event | A call was picked up and has finished. Sent just before call.completed. |
| call.completed | event | A call has finished. Also used for a call nobody picked up: read data.outcome (Completed or Unanswered). |
| call.failed | event | The call could not be made (outcome Failure or Invalid). |
| batch.started | event | You started a batch. data: batchId, name, agentId, status, totalContacts. |
| batch.completed | event | A batch is no longer running (finished or stopped). Read data.status. |
| batch.failed | event | A batch ended with a failure status. |
| campaign.started, campaign.completed, campaign.failed | event | The same moments for a V3 campaign. data: campaignId, name and status. |
| V3 call events | note | call.started comes from POST /calls. call.answered, call.completed and call.failed follow when the call ends, with callId, status and campaignId when the call belongs to a campaign. |
V3 agents are the fastest and the most natural. They work with the same key, the same calls, the same webhooks and the same billing as V1 and V2. The difference is that a V3 agent is set up in its workspace and goes live when you publish it.
| GET | /agents/options?provider=premium | The languages and voices a V3 agent can use. |
| GET | /agents/voice-preview | Listen to a voice before you choose it. |
| POST | /agents | Create the agent with plan: premium. It is a draft until published. |
| GET | /agents/:id/workspace | The whole setup: instructions, voice, memory, knowledge, variables, pronunciations, inbound and publish state. |
| PATCH | /agents/:id/workspace | Change name, description or any part of config. Send only what changes. Lists (variables, knowledge sources, pronunciations) are replaced as a whole. |
| POST | /agents/:id/publish | Make the current setup live. Run it again after every change. |
| POST | /agents/:id/test | Check the setup and run your tools once before real calls. Body: { variables, includeToolTests }. |
| GET | /agents/:id/tools | The tools the agent can call during a conversation. |
| POST | /agents/:id/tools | Add a tool: a web address of yours the agent calls to look something up or save something. |
| PATCH | /agents/:id/tools/:toolId | Change a tool. |
| DELETE | /agents/:id/tools/:toolId | Remove a tool. |
| POST | /agents/:id/tools/:toolId/test | Run one tool with sample values. |
| POST | /agents/:id/inbound | Connect, pause or resume the inbound number. Body: { action: "deploy" | "pause" | "resume" }. |
| GET | /phone-numbers | The numbers you can attach to a V3 agent. |
| POST | /calls | Place one call (see Calls). variables fill the agent's variables for that call. |
| GET | /calls, /calls/:id, /calls/:id/transcript, /calls/:id/recording | Same call history, transcript and recording as V1 and V2. |
| GET | /campaigns, /campaigns/:id | Your campaigns and one campaign with its progress. |
| POST | /campaigns | Create a campaign: a V3 agent calls a list of people. It is scheduled the moment it is created and starts by itself at startAt, or when the calling window opens. |
| POST | /campaigns/contacts/validate | Check a list of contacts before you create the campaign. |
| PATCH | /campaigns/:id and /campaigns/:id/settings | Rename it, or change schedule, retries and how many calls run at once. |
| POST | /campaigns/:id/start, /campaigns/:id/stop | Stop ends the campaign. Start resumes a paused campaign; a campaign that is still waiting for its time cannot be started earlier. |
| GET, POST, PATCH, DELETE | /campaigns/:id/contacts | Read, add, edit and remove the people in a campaign. |
| DELETE | /campaigns/:id | Delete a campaign. |
| Field | Type | What it does |
|---|---|---|
| config.instructions | object | role, objective, personality, conversation, businessRules, dos, donts, escalation, closing, additional. Plain text. At least a role or an objective (20 characters) is needed to publish. |
| config.voice | object | language, voice (a name from /agents/options), speed, pitch, greeting, allowInterruption, maxCallDurationMins (1 to 60), temperature, backgroundSound, voicemailEnabled, voicemailMessage (up to 1000 characters), nudgeEnabled, nudges (up to 5 of {seconds, message}) and endAfterNudges. The greeting is the first thing every caller hears and is required to publish. |
| config.memory | object | enabled and contextTurns: how many of the latest turns the agent keeps in mind. |
| config.variables | { key, value, description }[] | Values the agent can use as {{key}} in its instructions and greeting. Up to 50. A call can override them with variables. |
| config.knowledge.sources | { id, name, type, content | fileName + fileBase64 }[] | Documents the agent searches while it talks. Text, PDF, TXT, MD, CSV, DOC or DOCX, up to 1.5 MB together. Editing a source replaces its old text. |
| config.pronunciations | { Language: { word: how to say it } } | How the agent says names and words. Up to 500 words. |
| config.inbound | object | phoneNumber, startTime, endTime, allowedDays (1 to 7), timezone, transferEnabled and transferNumber (10 digits for India, or the country code first). |