<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Animesh Gupta</title>
    <description>The latest articles on DEV Community by Animesh Gupta (@animesh_gupta_705a19fc6f8).</description>
    <link>https://dev.to/animesh_gupta_705a19fc6f8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4028051%2F087450b9-cdc7-44c8-90aa-7d1e006a7602.png</url>
      <title>DEV Community: Animesh Gupta</title>
      <link>https://dev.to/animesh_gupta_705a19fc6f8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/animesh_gupta_705a19fc6f8"/>
    <language>en</language>
    <item>
      <title>Giving an AI Agent Real-World Buying Power in India: One API for Local Supply</title>
      <dc:creator>Animesh Gupta</dc:creator>
      <pubDate>Tue, 14 Jul 2026 04:54:37 +0000</pubDate>
      <link>https://dev.to/animesh_gupta_705a19fc6f8/giving-an-ai-agent-real-world-buying-power-in-india-one-api-for-local-supply-2f1m</link>
      <guid>https://dev.to/animesh_gupta_705a19fc6f8/giving-an-ai-agent-real-world-buying-power-in-india-one-api-for-local-supply-2f1m</guid>
      <description>&lt;p&gt;When developers start building AI agents that can "do things in the real world," the conversation usually gets to tool-calling fast. Give your agent a function, it calls the function, done. What the tutorials don't cover is what happens when the function needs to reach actual Indian local supply — a service provider in a specific city, a retail shop with live inventory, a hotel with room availability, a ride or bus booking — and do it reliably, across categories, in production.&lt;/p&gt;

&lt;p&gt;That gap between "agent can call a function" and "agent can actually purchase local supply in India" is where most projects stall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Indian Local Supply Is Structurally Hard to Access
&lt;/h2&gt;

&lt;p&gt;Indian commerce at the local level is deeply fragmented. The supply you care about — neighbourhood services, local retail, accommodation inventory, mobility options — is distributed across dozens of provider rails, each with different APIs, authentication schemes, catalog formats, and order lifecycle semantics.&lt;/p&gt;

&lt;p&gt;To build an agent (or any platform feature) that can search for a plumber in Bangalore, compare hotel rooms in Jaipur, order a product from a local retailer, and book a cab — you would need direct integrations with each rail separately. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple API contracts to negotiate and maintain&lt;/li&gt;
&lt;li&gt;Different auth flows per provider category&lt;/li&gt;
&lt;li&gt;Non-uniform catalog structures (what "search" returns looks different for retail vs. services vs. mobility)&lt;/li&gt;
&lt;li&gt;Different order lifecycle primitives per domain (services have RFQ flows; retail has add-to-cart; mobility has select-then-confirm; accommodation has availability-then-book)&lt;/li&gt;
&lt;li&gt;No unified way to express agent-friendly intents like "find options, get a quote, confirm if acceptable"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a single-domain product, this is manageable. For any platform that wants to span categories — or for an AI agent that should be able to handle whatever the user asks for — it becomes an integration tax that compounds with every new domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "Agentic Commerce" Actually Requires
&lt;/h2&gt;

&lt;p&gt;The standard e-commerce API mental model (search → add to cart → checkout) doesn't map cleanly onto all supply categories. Services need RFQ flows — you describe what you need, the provider quotes a price, and you confirm if the quote is acceptable. Mobility needs a select-then-confirm pattern with dynamic pricing. Accommodation needs real-time availability queries with rate holds. Retail can work closer to the traditional cart model, but catalog freshness and local inventory make it different from a global e-commerce API.&lt;/p&gt;

&lt;p&gt;For an AI agent to handle these flows gracefully, it needs primitives that match how supply actually works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt; — express intent across category-appropriate dimensions (location, service type, dates, product category, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RFQ / Item Selection&lt;/strong&gt; — identify specific provider options from search results&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quote&lt;/strong&gt; — get binding or indicative pricing from a specific provider on a specific requirement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Order&lt;/strong&gt; — initiate and confirm an order with terms agreed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status / Lifecycle&lt;/strong&gt; — track, cancel, or modify within the provider's allowed windows&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These five primitives, unified across categories, are what make a supply API genuinely agent-friendly rather than just another REST API with a search endpoint bolted on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Integration Tax: What Maintaining Multiple Direct Rails Actually Costs
&lt;/h2&gt;

&lt;p&gt;Imagine you're building a travel assistant agent. You want it to handle hotels, rides, and inter-city buses in India. Naively, that's three separate integration projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One with each hotel inventory source (each with its own availability format, rate structure, and booking confirmation flow)&lt;/li&gt;
&lt;li&gt;One with each ride platform (each with its own fare estimation API and trip-confirmation webhook)&lt;/li&gt;
&lt;li&gt;One with bus aggregator APIs (each with their own seat map format and PNR generation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each integration takes weeks to build correctly, and ongoing maintenance cost is real — API versions change, providers update auth schemes, catalog formats drift. When you're building an agent, you want to spend your time on the agent's reasoning, not on keeping a fragile integration layer alive.&lt;/p&gt;

&lt;p&gt;The same tax applies to platforms embedding commerce features — a business operations platform that wants to let users book a service, a marketplace that wants to surface local retail, a B2B procurement tool that wants to reach verified suppliers. Each new supply category is another integration project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Single Agentic-Commerce API Should Look Like
&lt;/h2&gt;

&lt;p&gt;The value proposition of a supply aggregation API is straightforward: one integration, consistent primitives, supply spanning categories. But the implementation details matter a lot for whether it's genuinely usable for agent workflows.&lt;/p&gt;

&lt;p&gt;What matters for developer and agent use:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consistency across categories.&lt;/strong&gt; Search should work with the same call structure whether you're looking for a service provider or a retail product. Order primitives should be predictable regardless of whether you're booking accommodation or a local delivery. Agents need deterministic interfaces — category-specific quirks should be handled by the API layer, not by the agent's reasoning loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quote-before-commit flows.&lt;/strong&gt; Many supply categories in India require getting a price quote before committing to an order. An agent that skips this and tries to jump straight to checkout will fail in practice. The API needs to expose RFQ/quote as first-class steps, not hide them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured responses agents can act on.&lt;/strong&gt; Not just human-readable text — structured JSON responses that an agent can parse, compare across options, and use to make decisions. Price, availability, provider metadata, terms all need to be machine-readable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honest error semantics.&lt;/strong&gt; When supply isn't available, when a provider is offline, when a quote expires — the API should return structured errors that an agent can handle gracefully, not generic 500s.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bino Supply API: One API for India Local Supply
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bino Supply API&lt;/strong&gt; (public surface: &lt;a href="https://boni.one/api-hub" rel="noopener noreferrer"&gt;boni.one/api-hub&lt;/a&gt;) is being built as a single agentic-commerce API giving developers, platforms, and AI agent builders access to Bino-native Indian local supply across categories — services, retail, accommodation, mobility, and more — through one consistent interface.&lt;/p&gt;

&lt;p&gt;The intent is to solve the integration tax described above: instead of maintaining direct rails per supply category, you integrate once and get search, RFQ, quote, and order flows across categories through one API with consistent primitives.&lt;/p&gt;

&lt;p&gt;A few things worth being direct about:&lt;/p&gt;

&lt;p&gt;This is an emerging API, not a mature scaled platform. It is being packaged and positioned for early developers and builders who want to build on top of Indian local supply without the integration overhead. If you're building an AI agent that needs real-world purchasing capability in India, or a platform that wants to embed commerce features across categories, Bino Supply API is worth evaluating as a foundation — not as a fully-proven production scale infrastructure (yet).&lt;/p&gt;

&lt;p&gt;The right early adopters are teams building agent workflows where India supply access is a required capability, platforms evaluating how to add agentic commerce features, and developers exploring what search-to-order across India's local economy can look like when it's API-accessible.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Think About When Evaluating This as Infrastructure
&lt;/h2&gt;

&lt;p&gt;If you're a developer evaluating supply APIs for India, the questions that matter:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coverage:&lt;/strong&gt; Which categories are live vs. in-progress? For a general-purpose agent, breadth matters more than depth in any single category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primitive consistency:&lt;/strong&gt; Can you learn one API shape and apply it across categories, or is each category a different integration effectively?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quote/RFQ support:&lt;/strong&gt; Does the API expose this as a first-class step, or do you have to build around it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured responses:&lt;/strong&gt; Are catalog items, pricing, and availability returned in formats an agent can directly consume and compare?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lifecycle support:&lt;/strong&gt; Can you track, cancel, and modify orders through the API, or does post-order management fall back to provider-specific flows?&lt;/p&gt;

&lt;p&gt;Bino Supply API is being built around these questions as the design constraints. If you're early enough in your build to be evaluating infrastructure choices, it's worth looking at the API hub and getting in contact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Giving an AI agent real-world buying power in India is a supply aggregation and API design problem more than a model problem. The model can reason about what the user wants; the hard part is giving it clean, consistent, category-spanning access to actual Indian supply through agent-friendly primitives.&lt;/p&gt;

&lt;p&gt;Bino Supply API is one approach to this problem — a single API for search, RFQ, quotes, and order flows across local services, retail, accommodation, and mobility in India. It's an early-stage platform being built for developers who want to stop maintaining direct rails per supply category and start building on top of India's local economy through one consistent interface.&lt;/p&gt;

&lt;p&gt;If you're building in this space, explore what's available at &lt;a href="https://boni.one/api-hub" rel="noopener noreferrer"&gt;boni.one/api-hub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>machinelearning</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Give Your LiveKit, Vapi, or Retell Voice Agent a Real Indian (+91) Phone Number</title>
      <dc:creator>Animesh Gupta</dc:creator>
      <pubDate>Tue, 14 Jul 2026 04:52:21 +0000</pubDate>
      <link>https://dev.to/animesh_gupta_705a19fc6f8/how-to-give-your-livekit-vapi-or-retell-voice-agent-a-real-indian-91-phone-number-am6</link>
      <guid>https://dev.to/animesh_gupta_705a19fc6f8/how-to-give-your-livekit-vapi-or-retell-voice-agent-a-real-indian-91-phone-number-am6</guid>
      <description>&lt;h2&gt;
  
  
  The problem: your voice agent is ready, but India won't pick up
&lt;/h2&gt;

&lt;p&gt;You have a working voice AI agent — maybe built on LiveKit Agents, Vapi, or Retell — and you need it to be reachable on a real Indian phone number. Not a virtual number from a gray-market SIM reseller. Not a US Twilio number with unreliable India routing. A legitimate +91 business inbound number that your users can call from any Indian mobile or landline.&lt;/p&gt;

&lt;p&gt;Here is what the standard path looks like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find a licensed Indian telecom operator or ITSP (Internet Telephony Service Provider).&lt;/li&gt;
&lt;li&gt;Submit KYC documents, company registration proof, sometimes a signed LOA (Letter of Authorization).&lt;/li&gt;
&lt;li&gt;Wait days or weeks for number provisioning.&lt;/li&gt;
&lt;li&gt;Receive SIP credentials — if you are lucky, a vague PDF with no webhook documentation.&lt;/li&gt;
&lt;li&gt;Figure out on your own how to bridge that SIP trunk to your agent framework.&lt;/li&gt;
&lt;li&gt;Hope the number actually works for inbound calls from BSNL, Jio, and Airtel.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most developers building voice AI side projects or SaaS products hit a wall at step 2. And even teams that get through provisioning discover that Indian telecom providers have almost zero developer-friendly tooling: no webhook endpoints, no call logs via API, no programmable routing rules.&lt;/p&gt;

&lt;p&gt;This article explains the underlying telecom concept (DID routing), how it should connect to a voice AI agent, and what a developer-first approach looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a DID, and how does inbound call routing actually work?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DID&lt;/strong&gt; stands for Direct Inward Dialing. It is a phone number leased from a telecom carrier that, instead of connecting to a physical phone line, routes inbound calls over SIP (Session Initiation Protocol) to a destination you configure — a SIP URI, a media server, a WebRTC gateway, or an HTTP webhook.&lt;/p&gt;

&lt;p&gt;The routing chain for a typical voice AI agent looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Caller dials +91 XXXXX XXXXX
         |
   Telecom PSTN (Jio, Airtel, BSNL)
         |
   ITSP / DID provider  &amp;lt;-- this is the layer most teams lack
         |
   SIP trunk or webhook  &amp;lt;-- where your code takes over
         |
   Your voice agent (LiveKit, Vapi, Retell, Asterisk, etc.)
         |
   AI model + TTS/STT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ITSP layer is the piece that turns a PSTN call into something a developer can interact with. A good DID provider exposes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;SIP endpoint&lt;/strong&gt; you can point at a media server (LiveKit SIP, FreeSWITCH, Asterisk)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;webhook&lt;/strong&gt; that fires when a call arrives, letting you dynamically decide routing (transfer, drop to IVR, connect to agent)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call detail records&lt;/strong&gt; accessible via API so you can build billing logic or debug dropped calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback routing&lt;/strong&gt; so calls do not silently fail if your agent is down&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most Indian telecom providers expose none of this. They provision the number and give you a SIP trunk — full stop. The webhook layer, the fallback logic, and the call logs are your problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Indian numbers specifically are harder than US numbers
&lt;/h2&gt;

&lt;p&gt;If you have built voice agents targeting the US market, you are used to Twilio, Vonage, or Plivo — providers that are developer-first from day one with REST APIs, webhooks, and SDKs.&lt;/p&gt;

&lt;p&gt;India has structural differences:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regulatory layer.&lt;/strong&gt; Inbound business numbers in India require TRAI-compliant provisioning. The operator must verify the entity behind the number. This is not optional — it is what makes the number legitimate and ensures it works across all Indian carriers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PSTN interconnect complexity.&lt;/strong&gt; India has fragmented carrier interconnects. A number that works on Jio may not route cleanly from BSNL or a rural landline without proper carrier agreements on the ITSP side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No developer-first incumbents.&lt;/strong&gt; The large Indian telecom operators (Airtel Business, Jio Enterprise) are built for enterprise customers with long contract cycles, not for a developer who wants to spin up a number over a weekend.&lt;/p&gt;

&lt;p&gt;The result is that most voice-AI developers building for the Indian market either skip inbound entirely, use SMS fallback, or cobble together offshore numbers with unreliable India routing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a clean DID-to-agent connection looks like
&lt;/h2&gt;

&lt;p&gt;The ideal flow for a voice AI agent on an Indian number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;provisioned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;verified&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(handled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;provider)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Inbound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;arrives&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;DID&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Provider&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;fires&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;webhook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;POST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;URL:&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"call_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+919..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+9198..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;webhook&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;responds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;routing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;instruction:&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"connect"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sip:agent@your-livekit-host"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="err"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;--&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"connect"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"wss://your-retell-agent"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Media&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bridged;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;agent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;handles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;conversation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ends;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;CDR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;record&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;available&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;via&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;API&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With LiveKit specifically, you would run the LiveKit SIP component pointed at the DID provider's outbound SIP trunk, and use the webhook to trigger agent dispatch. With Vapi or Retell, you configure the inbound SIP URI in their dashboard and the DID provider terminates to it.&lt;/p&gt;

&lt;p&gt;The critical insight: the DID provider only needs to answer the call and deliver it to your SIP/webhook endpoint. Your agent framework handles everything after that. The hard part is finding an Indian provider that actually exposes that clean hand-off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Boni Voice API: the developer path for Indian DIDs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Boni Voice API&lt;/strong&gt; (&lt;a href="https://boni.one/apis/voice" rel="noopener noreferrer"&gt;boni.one/apis/voice&lt;/a&gt;) is built exactly for this gap. It provides dedicated Indian (+91) inbound business numbers with developer-oriented routing.&lt;/p&gt;

&lt;p&gt;What the API surface covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;India DID provisioning&lt;/strong&gt; (&lt;a href="https://boni.one/apis/voice/india-did" rel="noopener noreferrer"&gt;boni.one/apis/voice/india-did&lt;/a&gt;): get a +91 number assigned to your account, configured for inbound routing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhook routing&lt;/strong&gt;: point the number at an HTTP endpoint. Boni fires a webhook on inbound calls so your service decides in real time what happens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SIP routing&lt;/strong&gt;: connect to a SIP URI — LiveKit SIP, Asterisk, FreeSWITCH, or a hosted provider like Vapi/Retell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LiveKit connector&lt;/strong&gt; (&lt;a href="https://boni.one/apis/voice/livekit" rel="noopener noreferrer"&gt;boni.one/apis/voice/livekit&lt;/a&gt;): native integration for teams running LiveKit Agents who want to skip the SIP plumbing and go directly to agent dispatch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call logs&lt;/strong&gt;: inbound call records accessible so you can build audit trails or debug routing failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback handling&lt;/strong&gt;: Boni manages what happens when your agent endpoint is unreachable, so callers do not hit dead air.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pricing starts at &lt;strong&gt;Rs 500/month per number&lt;/strong&gt; — within range for a side project or early-stage SaaS. Onboarding is assisted beta; you get in via WhatsApp (link on the product pages above) so a human helps you through initial setup and KYC, which keeps the provisioning compliant without requiring you to negotiate directly with a telecom operator.&lt;/p&gt;

&lt;p&gt;The KYC requirement is not optional — it is the same requirement that makes the number legitimate. Boni handles that layer on your behalf.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Voice AI developers&lt;/strong&gt; building phone agents targeting Indian users who need a reachable +91 inbound number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI agencies&lt;/strong&gt; deploying customer service or IVR agents for Indian businesses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS platforms&lt;/strong&gt; that include phone-channel features and need to provision numbers programmatically for their customers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n / no-code automation builders&lt;/strong&gt; who want to trigger voice agent flows from inbound Indian calls via webhook.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LiveKit / Vapi / Retell users&lt;/strong&gt; who have the agent working and just need the Indian number layer sorted.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://boni.one/apis/voice" rel="noopener noreferrer"&gt;boni.one/apis/voice&lt;/a&gt; or directly &lt;a href="https://boni.one/apis/voice/india-did" rel="noopener noreferrer"&gt;boni.one/apis/voice/india-did&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use the WhatsApp CTA on the page to start the assisted onboarding.&lt;/li&gt;
&lt;li&gt;Complete number provisioning (KYC handled with Boni's help).&lt;/li&gt;
&lt;li&gt;Configure your webhook URL or SIP URI in the Boni dashboard.&lt;/li&gt;
&lt;li&gt;Start receiving calls on your +91 number routed to your agent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are on LiveKit, the dedicated connector page at &lt;a href="https://boni.one/apis/voice/livekit" rel="noopener noreferrer"&gt;boni.one/apis/voice/livekit&lt;/a&gt; covers the specific integration steps.&lt;/p&gt;

&lt;p&gt;Getting a legitimate Indian inbound number for a voice agent is genuinely hard today. The problem is not technical — it is the opaque telecom layer sitting between PSTN and your code. Once that layer exposes a clean webhook or SIP hand-off, the rest is standard agent development. That is the gap Boni Voice API is built to close.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>voice</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
