Partner & reseller APIs
IVR Solutions partners get one REST API to onboard end-clients and run everything for them — KYC, numbers, agents, flows, WhatsApp and billing.
# Register a new client and trigger OTP + KYC curl -X POST https://api.ivrsolutions.in/partnerclients/register \ -H "Authorization: Bearer PARTNER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Acme Corp", "email": "ops@acme.com", "mobile": "9876543210", "password": "••••••••", "country_code": "+91" }' → 200 OK { "status": 200, "message": "OTP sent to email and mobile", "data": { "request_id": "req_8f3a21" } }
Bridge a rider and a driver, a buyer and a seller, a patient and a clinic — over your DID, so neither party ever sees the other’s real number. The mapping lives only inside the session, so once the job’s done the link is gone. It’s the privacy layer behind Uber- and Ola-style “contact the driver” calling.
Authenticate with your partner key, then provision a client end to end. Every call is live and testable below.
Create a client and kick off OTP + KYC verification.
Open → POST /partnerclients/buy_didSearch and buy a DID virtual number for your client.
Open → POST /partnerclients/add_agentCreate agents with extensions and assign a DID.
Open → POST /partnerclients/add_client_creditsTop up balance and extend client validity.
Open →Ten capability groups across 48 endpoints — everything a reseller needs to onboard and operate end-clients.
Register clients, send and verify email/mobile OTP, and list or activate accounts.
Complete KYC end to end — PAN, Aadhaar OTP and GST verification, then accept.
Search by region, buy, assign and remove DID numbers for any client.
Create, edit and delete agents, assign DIDs and manage schedules and availability.
Build basic IVR flows, map them to DIDs and wire up WSS voice bots.
Link WhatsApp numbers, set schedules, top up credits and pull transactions.
The partner endpoints compose into complete client journeys — onboarding to billing.
/partnerclients/register, then /verify_otp./verify_pan → /aadhar_otp + /aadhar_verify./verify_gst or /skip_gst./preview_kyc then /accept_kyc./partnerclients/buy_did./partnerclients/add_agent./partnerclients/create_basic_flow./partnerclients/map_flow_did./partnerclients/add_client_credits./partnerclients/wallet_balance./partnerclients/wallet_transactions./partnerclients/update_status.48 REST endpoints, grouped by capability. Expand any call for its parameters and example payloads, or test them live in Postman.
Settings → API token — or Integrations → API documentation — and send it as a Bearer token in the Authorization header.
No endpoints match .
Onboard new clients and complete KYC — registration, OTP, PAN, Aadhaar and GST verification.
Start onboarding a new client — the first step of partner-led signup.
How it works: Pass the client's name, email, mobile, password and country_code (optional promo). The platform creates a pending client and sends OTPs to verify the email and mobile, returning a request_id for the next step.
Use it for self-serve client signup from your own portal or sales flow.
| namerequired | string | |
| emailrequired | string | |
| mobilerequired | string | |
| passwordrequired | string | |
| country_coderequired | string | |
| promo | string |
{
"name": "Acme Corp",
"email": "ops@acme.com",
"mobile": "9876543210",
"password": "SecurePass@123",
"country_code": "+91",
"promo": "WELCOME10"
}
Verify the email and mobile OTPs sent during registration.
How it works: Pass the request_id with the mobileotp and emailotp the client received. Successful verification moves onboarding on to the KYC steps.
Use it for confirming contact details before KYC and account creation.
| request_idrequired | string | |
| mobileotprequired | string | |
| emailotprequired | string |
{
"request_id": "req_8f3a21",
"mobileotp": "123456",
"emailotp": "654321"
}
Resend a verification OTP if the client didn't receive it.
How it works: Pass the request_id and the type (email or mobile) to trigger a fresh code.
Use it for recovering from expired or undelivered OTPs during signup.
| request_idrequired | string | |
| typerequired | string |
{
"request_id": "req_8f3a21",
"type": "both"
}
Verify the client's business PAN as part of KYC.
How it works: Pass the temp_client_id, the pan number and the business type btype; the platform validates it against records.
Use it for meeting KYC requirements for business clients during onboarding.
| temp_client_idrequired | string | |
| panrequired | string | |
| btyperequired | string |
{
"temp_client_id": "tmp_5521",
"pan": "ABCDE1234F",
"btype": "company"
}
Send an Aadhaar OTP to begin individual KYC.
How it works: Pass the temp_client_id and aadhar_num; an OTP is sent to the Aadhaar-linked mobile and a reference is returned for verification.
Use it for Aadhaar-based KYC for individual or proprietor clients.
| temp_client_idrequired | string | |
| aadhar_numrequired | string |
{
"temp_client_id": "tmp_5521",
"aadhar_num": "123412341234"
}
Verify the Aadhaar OTP to complete Aadhaar KYC.
How it works: Pass the temp_client_id, the otp and the ref from the previous step to confirm the Aadhaar identity.
Use it for completing the Aadhaar leg of client KYC.
| temp_client_idrequired | string | |
| otprequired | string | |
| refrequired | string | reference_id from aadhar_otp |
{
"temp_client_id": "tmp_5521",
"otp": "123456",
"ref": "ref_99812"
}
Verify the client's GST number.
How it works: Pass the temp_client_id and gst_num; the platform validates the GSTIN and links it to the client.
Use it for capturing GST details for tax-registered business clients.
| temp_client_idrequired | string | |
| gst_numrequired | string |
{
"temp_client_id": "tmp_5521",
"gst_num": "29ABCDE1234F1Z5"
}
Skip GST verification when the client isn't GST-registered.
How it works: Pass the temp_client_id to mark GST as not applicable and continue onboarding.
Use it for onboarding small or unregistered clients who have no GSTIN.
| temp_client_idrequired | string |
{
"temp_client_id": "tmp_5521"
}
Review all collected KYC details before final submission.
How it works: Pass the temp_client_id to get a summary of the captured PAN, Aadhaar and GST data for confirmation.
Use it for showing a confirmation screen before the client account is created.
| temp_client_idrequired | string |
{
"temp_client_id": "tmp_5521"
}
Accept the KYC and create the live client account.
How it works: Pass the temp_client_id and the client's signature; the platform finalizes KYC and converts the pending record into an active client.
Use it for completing onboarding and going live with a new client.
| temp_client_idrequired | string | |
| signature | string | base64 |
{
"temp_client_id": "tmp_5521",
"signature": "data:image/png;base64,iVBORw0K..."
}
List and manage the clients under your partner account.
List all clients under your partner account.
How it works: Call the endpoint to get every client with their ID, status and basic details.
Use it for building a client dashboard or picking a client_id for other calls.
Get the full profile of a single client.
How it works: Pass the client_id in the path to retrieve that client's details, status and configuration.
Use it for showing or editing one client's account.
| client_idrequired | string · path | client_id |
Activate or deactivate a client account.
How it works: Pass the client_id and the new status; a deactivated client can't use the platform until reactivated.
Use it for suspending clients for non-payment or pausing inactive accounts.
| client_idrequired | string | |
| statusrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"status": "1"
}
List registrations that started but haven't completed KYC.
How it works: Call the endpoint to get the temp (pending) clients still in onboarding.
Use it for following up on incomplete signups and chasing stalled KYC.
Search, buy, assign and remove DID (virtual) numbers for your clients.
List the regions where DID numbers are available.
How it works: Call the endpoint to get the regions you can search for numbers in.
Use it for driving a region selector before searching DIDs for a client.
Search for DID numbers available to assign to a client.
How it works: Pass the client_id, country_code, region and an optional search_pattern; the API returns matching available numbers.
Use it for letting clients pick a local or vanity number during setup.
| client_idrequired | string | |
| country_coderequired | string | |
| pattern | string | |
| search_pattern | string | |
| region | string |
{
"client_id": "CLIENTAPIKEY12345",
"country_code": "+91",
"pattern": "4310",
"search_pattern": "contains",
"region": "1"
}
Buy a DID and assign it to a client.
How it works: Pass the client_id, the chosen number and country; the platform provisions the DID and links it to that client.
Use it for giving a client their first number or expanding their inventory.
| client_idrequired | string | |
| numberrequired | string | |
| countryrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"number": "+911143104501",
"country": "IN"
}
Remove (unlink) a DID from a client.
How it works: Pass the client_id and the did_no; the number is released from that client.
Use it for reclaiming numbers from churned clients or correcting assignments.
| client_idrequired | string | |
| did_norequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"did_no": "+911143104501"
}
List the DID numbers assigned to a client.
How it works: Pass the client_id in the path to get all of that client's DIDs and their status.
Use it for auditing a client's numbers and choosing one to configure.
| client_idrequired | string · path | client_id |
Set working hours and holidays for a client's DID numbers.
Get a DID's working hours, timezone and holidays.
How it works: Pass the client_id and did_id to retrieve the number's schedule.
Use it for showing current office hours before editing them.
| client_idrequired | string | |
| did_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"did_id": "331"
}
Set a DID's working hours and timezone.
How it works: Pass the client_id, did_id, timezone and working_hours; calls outside these hours follow your off-hours handling.
Use it for enforcing business hours on a client's inbound number.
| client_idrequired | string | |
| did_idrequired | string | |
| timezonerequired | string | |
| working_hours | object | Working hours keyed by day, e.g. {"mon":{"open":"09:00","close":"18:00"}} |
{
"client_id": "CLIENTAPIKEY12345",
"did_id": "331",
"timezone": "Asia/Kolkata",
"working_hours": {
"mon": {
"open": "09:00",
"close": "18:00"
}
}
}
Add a holiday to a DID's schedule.
How it works: Pass the client_id, did_id, a holiday name and date; the number is treated as closed that day.
Use it for blocking public holidays and one-off closures.
| client_idrequired | string | |
| did_idrequired | string | |
| namerequired | string | |
| daterequired | string | YYYY-MM-DD |
{
"client_id": "CLIENTAPIKEY12345",
"did_id": "331",
"name": "Acme Corp",
"date": "2025-08-15"
}
Remove a holiday from a DID's schedule.
How it works: Pass the client_id and the holiday_id to delete it.
Use it for correcting a mistaken holiday or reopening a date.
| client_idrequired | string | |
| holiday_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"holiday_id": "12"
}
Create, edit, delete and assign DIDs to a client's agents.
Create an agent under a client account.
How it works: Pass the client_id with the agent's name, email, phonenumber, password and extension (plus options like did_num, is_webrtc, dial_preference and permission_group). The agent is provisioned to take calls.
Use it for onboarding a client's call-centre team programmatically.
| client_idrequired | string | |
| namerequired | string | |
| emailrequired | string | |
| phonenumberrequired | string | |
| passwordrequired | string | |
| extension | string | |
| reporting_manager | string | |
| manager | string | |
| is_webrtc | string | |
| dial_preference | string | |
| did_num | string | |
| permission_group | string |
{
"client_id": "CLIENTAPIKEY12345",
"name": "Acme Corp",
"email": "ops@acme.com",
"phonenumber": "9876543210",
"password": "SecurePass@123",
"extension": "2101",
"reporting_manager": "1",
"manager": "1",
"is_webrtc": "1",
"dial_preference": "1",
"did_num": "+911143104501",
"permission_group": "2"
}
Update an existing agent's details or settings.
How it works: Pass the client_id and agent_id with any fields to change — name, extension, did_num, is_webrtc, permission_group and more.
Use it for reassigning extensions, updating contact details or changing permissions.
| client_idrequired | string | |
| agent_idrequired | string | |
| namerequired | string | |
| emailrequired | string | |
| phonenumberrequired | string | |
| passwordrequired | string | |
| extension | string | |
| reporting_manager | string | |
| manager | string | |
| is_webrtc | string | |
| dial_preference | string | |
| did_num | string | |
| permission_group | string |
{
"client_id": "CLIENTAPIKEY12345",
"agent_id": "4821",
"name": "Acme Corp",
"email": "ops@acme.com",
"phonenumber": "9876543210",
"password": "SecurePass@123",
"extension": "2101",
"reporting_manager": "1",
"manager": "1",
"is_webrtc": "1",
"dial_preference": "1",
"did_num": "+911143104501",
"permission_group": "2"
}
Remove an agent from a client account.
How it works: Pass the client_id and agent_id; the agent is deactivated (status set to 0) and can no longer take calls.
Use it for offboarding agents who've left a client's team.
| client_idrequired | string | |
| agent_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"agent_id": "4821"
}
Change the DID tied to a client's agent.
How it works: Pass the client_id, the agent_ext and the did_num; the agent's outbound caller ID updates.
Use it for giving agents local caller IDs or moving numbers between them.
| client_idrequired | string | |
| agent_extrequired | string | |
| did_numrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"agent_ext": "2101",
"did_num": "+911143104501"
}
Manage agent working hours and live availability.
Get an agent's availability schedule.
How it works: Pass the client_id and agent_id to retrieve their working hours and timezone.
Use it for reviewing an agent's shift before editing it.
| client_idrequired | string | |
| agent_idrequired | string | SipUsers.id |
{
"client_id": "CLIENTAPIKEY12345",
"agent_id": "4821"
}
Set an agent's availability schedule.
How it works: Pass the client_id, agent_id, timezone and working_hours; calls route to the agent only during these hours.
Use it for defining agent shifts and routing windows.
| client_idrequired | string | |
| agent_idrequired | string | |
| timezonerequired | string | |
| working_hours | object | Working hours keyed by day, e.g. {"mon":{"open":"09:00","close":"18:00"}} |
{
"client_id": "CLIENTAPIKEY12345",
"agent_id": "4821",
"timezone": "Asia/Kolkata",
"working_hours": {
"mon": {
"open": "09:00",
"close": "18:00"
}
}
}
Set an agent online or offline right now.
How it works: Pass the client_id, agent_id and the available flag to flip their live status.
Use it for wiring agent presence to your own dashboard or break button.
| client_idrequired | string | |
| agent_idrequired | string | |
| availablerequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"agent_id": "4821",
"available": "1"
}
Get every agent for a client with their live availability.
How it works: Pass the client_id to see which agents are online, offline or on a call.
Use it for a live wallboard of agent presence.
| client_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345"
}
Build and map basic IVR call flows for a client.
Create a basic IVR call flow for a client.
How it works: Pass the client_id, a flow_name, the target agent_ext, the did_no and an optional recording_id. The platform builds a simple routing flow for that number.
Use it for standing up quick call routing for a client without the full flow builder.
| client_idrequired | string | |
| flow_namerequired | string | |
| agent_extrequired | string | |
| did_no | string | defaults to client's primary DID |
| recording_id | string | welcome message recording ID |
{
"client_id": "CLIENTAPIKEY12345",
"flow_name": "Support Flow",
"agent_ext": "2101",
"did_no": "+911143104501",
"recording_id": "2207"
}
Edit a client's basic call flow.
How it works: Pass the client_id and flow_id with fields to change — flow_name, recording_id, transfer_to, agent_ext or a wss_bot_id to route to a voice bot.
Use it for retuning routing, greetings or bot handoff for a client.
| client_idrequired | string | |
| flow_idrequired | string | |
| flow_name | string | |
| recording_id | string | |
| transfer_to | string | |
| agent_ext | string | |
| wss_bot_id | string |
{
"client_id": "CLIENTAPIKEY12345",
"flow_id": "10045",
"flow_name": "Support Flow",
"recording_id": "2207",
"transfer_to": "2101",
"agent_ext": "2101",
"wss_bot_id": "77"
}
Attach a call flow to a client's DID number.
How it works: Pass the client_id, the flow_id and the did_no; inbound calls to that number then run the flow.
Use it for activating a flow on a number, or swapping which flow a number uses.
| client_idrequired | string | |
| flow_idrequired | string | |
| did_norequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"flow_id": "10045",
"did_no": "+911143104501"
}
Configure WSS voice bots used inside call flows.
Create or update a WSS voice bot for a client.
How it works: Pass the client_id, a bot_name, the wss_url (with optional api_url/wss_header) and to_be_used; pass an id to update an existing bot. Flows can then route calls to this bot.
Use it for wiring a client's AI/WebSocket bot into their call flows.
| client_idrequired | string | |
| bot_namerequired | string | |
| to_be_usedrequired | string | |
| id | string | for update |
| api_url | string | |
| wss_url | string | |
| wss_header | string |
{
"client_id": "CLIENTAPIKEY12345",
"bot_name": "Lead Bot",
"to_be_used": "voice",
"id": "77",
"api_url": "https://example.com/bot",
"wss_url": "wss://example.com/stream",
"wss_header": "Authorization: Bearer xyz"
}
List all WSS voice bots configured for a client.
How it works: Pass the client_id in the path to get each bot with its ID and settings.
Use it for showing a bot picker when building call flows.
| client_idrequired | string · path | client_id |
Get a single WSS voice bot's configuration.
How it works: Pass the client_id and the bot id to retrieve its URLs and headers.
Use it for inspecting or pre-filling a bot's settings before editing.
| client_idrequired | string | |
| idrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"id": "77"
}
Delete a WSS voice bot from a client.
How it works: Pass the client_id and the bot id; it's removed and can no longer be used in flows.
Use it for cleaning up unused or deprecated bots.
| client_idrequired | string | |
| idrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"id": "77"
}
Link WhatsApp numbers and manage their schedules and holidays.
Link a WhatsApp Business number to a client.
How it works: Pass the client_id, the phone_number_id, access_token, display_number and verified_name; the WhatsApp number is connected for the client.
Use it for adding WhatsApp as a channel for a client.
| client_idrequired | string | |
| phone_number_idrequired | string | |
| access_tokenrequired | string | |
| display_number | string | |
| verified_name | string |
{
"client_id": "CLIENTAPIKEY12345",
"phone_number_id": "1029384756",
"access_token": "EAAG...",
"display_number": "+911143104501",
"verified_name": "Acme Corp"
}
List a client's linked WhatsApp numbers.
How it works: Pass the client_id to get every WhatsApp DID and its status.
Use it for managing a client's WhatsApp channels.
| client_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345"
}
Unlink a WhatsApp number from a client.
How it works: Pass the client_id and the wa_did_id; the number is disconnected.
Use it for removing a deprecated or migrated WhatsApp number.
| client_idrequired | string | |
| wa_did_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"wa_did_id": "45"
}
Set working hours for a client's WhatsApp number.
How it works: Pass the client_id, wa_did_id, timezone and working_hours to define when the number is active.
Use it for enforcing business hours on WhatsApp conversations.
| client_idrequired | string | |
| wa_did_idrequired | string | |
| timezonerequired | string | |
| working_hours | object | Working hours keyed by day, e.g. {"mon":{"open":"09:00","close":"18:00"}} |
{
"client_id": "CLIENTAPIKEY12345",
"wa_did_id": "45",
"timezone": "Asia/Kolkata",
"working_hours": {
"mon": {
"open": "09:00",
"close": "18:00"
}
}
}
Get a WhatsApp number's schedule.
How it works: Pass the client_id and wa_did_id to retrieve its working hours, timezone and holidays.
Use it for reviewing WhatsApp availability before editing.
| client_idrequired | string | |
| wa_did_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"wa_did_id": "45"
}
Add a holiday to a WhatsApp number's schedule.
How it works: Pass the client_id, wa_did_id, a holiday name and date to mark it closed.
Use it for blocking holidays on WhatsApp channels.
| client_idrequired | string | |
| wa_did_idrequired | string | |
| namerequired | string | |
| daterequired | string | YYYY-MM-DD |
{
"client_id": "CLIENTAPIKEY12345",
"wa_did_id": "45",
"name": "Acme Corp",
"date": "2025-08-15"
}
Remove a holiday from a WhatsApp number's schedule.
How it works: Pass the client_id and holiday_id to delete it.
Use it for correcting or reopening a WhatsApp closure date.
| client_idrequired | string | |
| holiday_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345",
"holiday_id": "12"
}
Check balances, pull transactions, add credits and extend client validity.
Pull a client's wallet transaction history.
How it works: Pass the client_id with optional filters — page, limit, expense_type, start_date, end_date, did — to page through debits and credits.
Use it for billing dashboards, statements and usage reconciliation.
| client_idrequired | string | |
| page | integer | |
| limit | integer | |
| expense_type | string | |
| start_date | string | YYYY-MM-DD |
| end_date | string | YYYY-MM-DD |
| did | string |
{
"client_id": "CLIENTAPIKEY12345",
"page": "",
"limit": "",
"expense_type": "call",
"start_date": "2025-08-01",
"end_date": "2025-08-31",
"did": "+911143104501"
}
Check a client's current wallet balance and account expiry.
How it works: Pass the client_id to get the live balance and validity date.
Use it for showing balance widgets and triggering low-balance top-ups.
| client_idrequired | string |
{
"client_id": "CLIENTAPIKEY12345"
}
Add credits and/or extend a client's validity.
How it works: Pass the client_id, a credit amount and/or a new valid_till date; the wallet and expiry update immediately.
Use it for top-ups, plan renewals and promotional credit.
| client_idrequired | string | |
| valid_till | string | Y-m-d H:i:s |
| credit | string | numeric > 0 |
{
"client_id": "CLIENTAPIKEY12345",
"valid_till": "2025-12-31 23:59:59",
"credit": "500"
}
These endpoints are a starting point, not a ceiling. Tell us your requirement — new endpoints, custom payloads, bespoke call flows — and our team will build it to fit how you work.