Changelog
What changed on the Graine platform, newest first — agents, memory and people, calls and booking, the API, the dashboard, the in-app SDKs, billing, and security and access.
Everything that changed on the Graine platform, newest first. Each entry is dated the day the change went live for every workspace (India Standard Time), says what it means for you, and links to the page that covers it. This page is updated with every release.
Unless an entry says otherwise, a change works on that day for every agent and app. An entry that needs a newer in-app SDK says Requires SDK with the version; Live, no upgrade means your app gets it without an update. For each SDK version, line by line, see the in-app SDK changelog.
5 November 2026
Agents
- Copy an agent to a sub-account. An Admin can now copy an agent into any active sub-account, from the agent's More menu or the ⋯ menu on its card. The copy is a new draft with a new agent ID, so anything using the old ID must be pointed at it; the original isn't changed. Knowledge bases, tool tokens, the webhook, phone numbers and other things that belong to your workspace stay behind, and the dialog lists them. See Sub-accounts.
- Agents remember more of a call, and can use it in the reply. What a person says is now remembered even when they hang up or interrupt before the agent finishes replying, or when the language switches on that turn. When someone on a phone call refers to an earlier conversation, the agent now has time to look it up and use it in that very reply: it holds that reply up to 0.8 seconds, at most three times a call. It also recognises many more ways of saying so, in English, Hindi and eleven other Indian languages. Other turns are not slowed down. Memory.
- Agents read their knowledge base more reliably on calls. Documents read page by page, scans and Indian-language PDFs included, now save properly. An agent or flow step with several knowledge bases gets the best passages from all of them, not just from the first. Connecting or removing a knowledge base no longer changes an agent's reply length or temperature.
- Hinglish mode. For Hindi callers who mix in English: on Sarvam Saaras v3 and v4, Deepgram Flux (Multilingual)
and AssemblyAI
universal-3-6-pro, a switch in Voice Settings and in a flow agent's Voice tab keeps English words in English in the transcript, so the agent reads "order", not "ऑर्डर". Off until you turn it on; alsohinglish_modein the API. Speech recognition. - The go-live check applies to the API too. Where Require a passing test run before an agent goes
live is on, making an agent live through the API (
"status": "ACTIVE"onPATCHorPUT /v2/agents/{agent_id}, or onPOST /v2/agents) is refused just as Go live is in the dashboard:409, error1201, with the reason, and nothing in the request is saved. A go-live waiting for approval is checked again when it is approved. Off unless an admin switched it on; agents that are already live are not changed. See Go-live check.
Billing
- A chat nobody wrote in is no longer charged. A text chat that closes without a single message from the customer now costs nothing, such as a chat window opened and left. A chat that closes by itself when idle now counts as the one session it was, not two. Plans.
Security and access
- Move someone from your team into a sub-account. Team → Move to sub-account opens People & access with the person filled in, and shows where they go and the role they hold there, starting from the role they hold now, and says plainly what can't carry over. Keep them on your team as well, or remove them: their new place is confirmed first, and if it can't be, nothing changes for them. Where your organization reviews sub-account changes, another Admin approves it first. See Moving someone into a sub-account.
Calls and booking
- A call that can't ring today says so when it is booked. Once someone has been rung as many times today as
Ring each user at most allows, a call booked for later today used to be accepted and then never rang. The
booking is now refused with
daily_ring_limitand a sentence your app or agent can use. The day is the person's own. Arrives with the next server update. - A scheduled call knows who it rang, even if the app hasn't said yet. A ring can wake your app before it says who the user is, and the call then ran with memory off. On the phone Graine rang, the call now runs as the person it was booked for, when the booking allowed memory. An agent that requires verified users or server tokens is unchanged. Arrives with the next server update.
- A call with no sound says so. When the SDK ends a call because no audio played on the phone, Call History and its export now say No sound on the phone instead of Customer hung up right away. Arrives with the next server update.
- An app is rung only with its own push credentials. A phone rings only with the push credentials saved
for its own app (its bundle ID or package name). An app with none of its own, such as a second app that uses
an agent of the same workspace, used to be told calls ring there because the workspace held another app's,
so it offered booking for calls that could never ring. It is now told they don't: it offers no booking
(
rings_not_set_up), and a booking it sends anyway is refused instead of ending asno_device. See Each app rings with its own credentials.
Dashboard
- See which phone and which SDK a conversation ran on. Call History now shows the platform and SDK version on each in-app conversation, and its details and Execution Logs add the app version, the app, the push environment, the time zone and the user's other devices. The export has the same columns. An older conversation shows the phone that was rung or the user's latest device with the version it reports now, and says now, so a phone that has updated since does not label its old calls with the newer SDK. Execution Logs.
- A booked call that was not rung says why. Call History read Too late to ring for all of them, including calls held back by the daily ring limit, a recent decline, the calling window or quiet hours, or the agent being off. Each now says its own reason, and the daily limit names its setting, Ring each user at most.
- People & access says what went wrong. A dropped connection showed "Failed to fetch", and a list that couldn't be read said you had no sub-accounts. It now says no answer came back, and offers Try again.
- Team and People & access work on a phone. On a narrow screen the buttons on a Team row left no room for the person's name, and on People & access the Give access button ran off the screen. The row now stacks and the buttons wrap.
- The Sub-accounts list fits the screen. Each row's buttons pushed Open and the ⋯ menu past the edge of the table on a laptop; they now wrap inside it.
In-app SDKs
- A call on an iPhone whose audio would not start now recovers. The phone's audio unit could fail to start, and the call then ended after about 5 seconds with nothing heard. The SDK now asks for it again at once, while the agent's greeting waits. Requires SDK 0.14.11 (iOS) or 0.14.12 (Kotlin Multiplatform). What changed in 0.14.11 and 0.14.12
- A Kotlin Multiplatform app says when Xcode links an older iOS SDK.
inapp-kmpand the iOS SDK are separate dependencies, so updating Kotlin does not update the iOS SDK, and the app builds and runs either way. The older SDK's bugs stay with it, such as calls that connect with no sound.callSetupProblemsnow reportsios_sdk_olderwith both versions and the fix, and the same sentence goes to the Xcode console at launch. Requires SDK 0.14.11 (Kotlin Multiplatform) and 0.14.10 (iOS and Android). What changed in 0.14.10 and 0.14.11
4 November 2026
Agents
- Link a person's IDs from their page, callers included. Linked IDs now sits on a person's Overview, and an Admin can use it for someone found by their phone number too: link their email or user ID, and their memories are found by any of them. Memory. Live, no upgrade.
- A knowledge base answers in the caller's language. Someone asking in Hindi, Hinglish, Tamil, Telugu, Bengali, Marathi, Kannada, Gujarati or Malayalam now finds the right passage in a document written in English, and the other way round, and in long documents the answer is found more often too. Nothing to set and nothing to upload again. Arrives with a coming server update.
- A speech model is never paired with a language it can't hear. A save that puts a recognition model with a caller language it doesn't recognise, through the dashboard or the API, is refused with a message saying what the model recognises — for example, Deepgram Nova 2 with Tamil. Agents already saved that way keep saving their other settings. Speech recognition. Live, no upgrade.
- Tell people they're talking to an AI. In an agent's Compliance settings, AI notice has two switches: Say it is an AI and Say the conversation may be recorded. The agent then says so before anything else, on calls, web calls and chats, in its own language, and What the agent says first shows the exact opening line for each of its languages. Off by default; an agent without it opens exactly as before. See Tell people they are talking to an AI.
- Workspace rules for agents. Workspace settings → Agents: an Admin can require every agent to say it is an AI (new agents start with it on, and it can't be turned off while required), and start new agents with personal-data redaction on. Both are off until an Admin turns them on; existing agents are not changed.
- Require a passing test run before an agent goes live (optional). Workspace settings → Require a passing test run before an agent goes live lets an admin make Go live wait for the agent's latest test run (Evals) to pass. When it is on and the latest run failed, is still running, or doesn't exist, Go live is refused and the dialog says which. It is off until an admin switches it on, agents that are already live are not changed, and the check looks at the latest run only, so run an agent's tests again after editing it. See Go-live check.
API
- Deepgram Flux settings in the API.
speech_recognitionon/v2/agentstakes Flux's turn-taking:eot_threshold,eager_eot_threshold,eot_timeout_msandlanguage_hints, each now listed with its range in the API reference. A value Deepgram wouldn't accept is refused with422, error1001, and the reason, and nothing is saved. Listing agents shows a Flux agent's settings, as reading the agent does. Live, no upgrade.
Billing
- Every unpaid invoice has a due date, and payment reminders go out by themselves. Billing now says when each invoice is due: Due 5 Nov, Due today, Overdue by 4 days. The due date is the invoice date plus your payment terms (15 days unless we agreed otherwise) and is printed on the invoice beside the terms. A tax invoice is emailed to you when it is issued, with the invoice attached, and reminded three days before it is due, on the day, and 3, 7, 14 and 30 days after; only the latest reminder that is due is ever sent. Pay online in the email opens that invoice on Billing. Invoices that are already unpaid are not chased automatically: we check each one first, so nobody is reminded about an invoice they have paid by bank transfer.
- Choose who invoices and reminders go to. Billing → Invoice emails lists the addresses invoices and reminders go to and who is copied. Admins can change both lists; with none set, an invoice goes to the address on it, else to your Admins.
- Billed monthly by invoice. A workspace that is billed by invoice (arranged with us) calls on a credit limit instead of prepaid credit. Its Wallet reads Billed monthly by invoice · Credit limit · Available, a GST invoice for the month's calls is raised once the month is over, paying it gives the credit limit back, and the statement lists each movement as Credit line. Its low-credit email speaks of the credit limit and the open invoices, not of a top-up. A sub-account is never billed this way.
Security and access
- Clearer about who runs a sub-account. Team and Sub-accounts now say how to make someone an Admin of everything or of one sub-account. Someone invited as an Admin becomes an Admin of your sub-accounts as soon as they accept. A sub-account with nobody to run it says No Admin yet, with a way to fix it. See Admins and sub-accounts.
- Opening credits say they're in dollars. New sub-account shows your balance and the amount in rupees, and says before you press Create when it's more than you have.
- The Security log keeps a year. Its rows are now kept for a year instead of 30 days, Time can show the last 90 days or the whole year, and a request ID is looked for across the whole year. See Security log.
- Cloning a voice records the speaker's consent. Clone a voice in the Voice Library now asks whose voice it is: your own, or someone else's with their permission (their name, and optionally where the permission is kept). Your confirmation is kept beside the voice with who confirmed it and when, and a clone is refused without it. Voice Studio asks the same before a clone or a Pro voice is made, and keeps the confirmation the same way. Voices cloned before keep working.
- The memory settings say what Verified users protects. Where you choose how an agent recognises people in your app and website (Agent → Memory → Settings), a notice now says plainly that until Verified users is on, anyone with your app's key and a person's ID can reach that person's history and memory. Nothing else changes.
- Sign-in and sign-up are rate limited. Asking for a sign-in code, entering one, opening a sign-in link and creating an account are each limited per email address and per network address, the same way signing in with a password already was. A person signing in never notices; a script trying codes or sending them to many inboxes is stopped and told when to try again (Too many attempts just now. Try again in 10 minutes.).
- Business verification. Compliance now says where your business stands: not verified yet, under review, verified, or not approved with the reason in full and Fix and resubmit. Give the company's CIN and its certificate, and the GSTIN and its certificate if you have one; the numbers are checked as you type, a file must be a PDF of up to 4 MB, and one request is reviewed at a time. You are emailed the decision. Invoices are made out to the verified company, and Billing → Tax details shows the verification status.
- Sign in with an emailed code. People given access to sub-accounts have no password, so the sign-in form now offers Email me a sign-in code: enter the code, then pick the workspace, with a parent and its sub-accounts grouped. Someone given access is emailed to say so. Opening a sub-account no longer stops password sign-in from working in your own workspace, and the workspace menu, the Sub-accounts page and the bar at the top of a sub-account all open a workspace the same way, taking the code in place.
- Sub-accounts are run from one page. Create a sub-account (safe to retry), see its status and set-up steps, suspend and resume it, close it, issue a new API key (shown once), see its people and its usage, and set its guaranteed calling lines and limit. Inside a suspended sub-account every page says so, and every refused call, web call or chat says it was suspended by the parent, not that credit ran out. Spend on your credits counts toward a sub-account that uses them. Sub-accounts
- A second Admin can approve sub-account changes. With Sub-account changes need a second Admin on in the approval settings, creating, suspending, closing, moving credits for, re-keying or changing the lines of a sub-account, and giving people access to sub-accounts, wait for another Admin: Sent for approval as request #12. The request shows what approving does, and the person who asked reveals a new key once from it.
- Approvals are emailed. A request that needs your review, a mention, and a decision on your own request now reach you by email as well as in your Approvals inbox. An email goes only to an active member of the workspace it concerns.
- The Team page works for large teams and custom roles. More than 100 people are listed, changed and removed correctly; re-sending an invite keeps its role, custom roles included; a custom role always holds the permissions it needs to see its own page; Builder, Billing and Analyst are starting points for a new role; the agent picker offers every agent; and a change to who is an Admin reaches the sub-accounts at once instead of at the next hourly sync. Team roles
- Every screen follows the role, and a person limited to some agents sees only theirs. Reading calls, recordings, call grades, evals and embed settings now checks the live role everywhere. A recording plays only from its own call in your workspace.
- Two-step verification with an authenticator app. Turn it on for yourself on Security → Sign-in and access, or require it for everyone in the workspace. A requirement applies at each person's next sign-in; nobody is signed out, and API keys are not affected. Team shows who has it on. Secure your workspace. Live, no upgrade.
- Access review. Download everyone with access and every API key (first characters and last four only) as CSV or JSON, with roles, agents, sub-accounts, two-step, last sign-in and who invited each person. Access review. Live, no upgrade.
- Removing someone takes their keys with them. Their sessions end, the API keys they created are revoked and the apps they connected are disconnected; your other Admins are told. Live, no upgrade.
- Activity log with proof, security notices, sign out everywhere. Export the activity log with its hash chain and a check of it; read Graine's security notices to your workspace; end every session of yours at once. Graine support's visits to your workspace now show in the activity log. Live, no upgrade.
- Workflow steps that call Graine act only in your workspace. A Graine step in a workflow (place a call, check a call, transfer, read results) uses the API key set on that step and always acts in the workspace that owns the workflow. A step without its own key now stops with Add your workspace's API key to this step instead of running. Add a key from API keys to each such step.
Calls and booking
- A call waiting for a call limit shows when it will go. A workflow's call or a call booked for a time that
Before a call is placed holds back now shows its new
time in Call History and
GET /v2/calls, instead of the moment it was held back. Live, no upgrade. - Default calling hours for new campaigns. Workspace settings → Default calling hours lets an admin give every new campaign calling hours automatically: when it is on, a campaign or batch created without hours of its own, usually through the API, calls between 9:00 am and 9:00 pm (pre-filled, India time; change either) every day, instead of at any hour. A campaign that sets its own hours keeps them, existing campaigns are not changed, and the setting is off until an admin switches it on. A campaign that has no calling hours now says so on its page. See Default calling hours.
- Call History says why a call was not placed. A call refused for want of credit now reads Not placed with the reason, and every reason says it cost nothing: not enough credits, the parent organisation is out of credits, the sub-account reached its monthly limit, or the sub-account is suspended by its parent.
- The SDKs' calls setup check names the app. When Graine can't ring a phone,
callSetupProblemssays the agent's workspace has no push credentials for this app's bundle ID or package name, instead of "for this agent". Requires SDK 0.14.9 (iOS and Android) or 0.14.10 (Kotlin Multiplatform). What changed in 0.14.9 and 0.14.10
Website agent
- The first conversation waits for your sign-in's token. If your page identifies a visitor before it has their
identity token and fetches it with
identityTokenRefresher, the website agent now asks for the token as soon as the visitor shows interest, so an agent with Verified users on can answer their first conversation verified instead of anonymously; requests about the visitor (their memories, booked calls, past sessions, a workflow) wait up to 10 seconds for it. Website loader 1.6.1; In your app. Live, no upgrade.
Dashboard
- A call's charge says Pending until it lands. A call's cost arrives shortly after it ends. Until then Call history showed a dash that read "the call never connected", on a call that plainly had. It now says Pending; press Sync to see the charge. Your balance in the sidebar also updates by itself every minute while the page is open.
- Saving to a knowledge base works with the name you choose, and says why when it can't. A name another workspace had already used was refused, a name with a space failed with only "Upload failed", and a file with nothing readable in it showed as a success. A name is now your workspace's own, spaces become hyphens, and a refused save says why and adds nothing.
- Confirmations and errors show. The messages after saving a role, changing the team, submitting business verification, opening a workspace, or using the admin desks were not being displayed. They are.
- An agent's "Are you still there?" delay starts at 1 second. The sliders offered 0 to 20 seconds but the platform takes 1 to 300, and an agent saved below the floor could not be cloned.
- An agent shows your push credentials read-only. Calls & scheduling (and Embed & Widgets → Calls) showed the workspace's push credentials as a form, so they looked like the agent's own: a new agent seemed to arrive with whatever app the workspace already rang, and replacing them there changed them for every agent. Each agent now lists the workspace's apps and their status, and Manage in Workspace settings opens Workspace settings → In-app calling, the one place they are added, replaced and removed.
- The "In-app calling stopped" notification opens your push credentials. When Apple or Google refuses your app's push credentials, the notification opened a page that doesn't exist. It now opens Workspace settings → In-app calling, in the inbox and in the browser notification.
Trust Center
- What erasure, retention and offboarding reach. They cover our main database and recording storage. A copy of each call is also kept in a separate working store, with no expiry, and they do not remove it. The Trust Center and its documents now say so. Live, no upgrade.
- New business calls are stored encrypted. From 4 November 2026, the transcript, summary, analysis, extracted answers and tool-call logs of each new business call are encrypted in our primary database, under one platform-wide key. Calls stored before that date and call recordings keep our providers' encryption at rest, and the copies our services keep outside the call record are not covered by this layer. You see your calls as before. See the Trust Center. Live, no upgrade.
- The Trust Center's documents are approved. Our founder, Rishabh Bhanot, approved the policies and documents on 3 November 2026. The fifteen open documents (the privacy notice, how to make a data request, the grievance policy, the security overview and the rest) now read in full at graine.ai/trust, each with a PDF. The policies and other locked documents are still shared on request under a confidentiality agreement, and the data processing agreement stays a draft until counsel has reviewed it. Live, no upgrade.
- Vulnerability reports are acknowledged within 2 business days (it was 3), as the Vulnerability Disclosure Policy now says.
- Call recordings are stored in the United Kingdom. Our pages and documents said France (Paris). The storage provider names this region "United Kingdom"; the same region code is Paris at another cloud provider, which is where the mistake came from. Nothing moved: only the name was wrong. The Trust Center, the Sub-processor List, the privacy policy and these docs now say the United Kingdom. Live, no upgrade.
3 November 2026
Trust Center and privacy
- A public Trust Center. graine.ai/trust says where each framework stands (SOC 2 and ISO/IEC 27001 are in progress, and we hold no report or certificate), lists 66 controls in five categories (data, network, application, endpoint and corporate security) with their status and the SOC 2, ISO/IEC 27001 and DPDP references each serves (Implemented or In progress), the policies and documents we share on request, and every subprocessor with what it handles and where. A location we have not confirmed says "On request". Live, no upgrade.
- Documents, open and locked. An approved open document reads at
/trust/documents/<name>; a draft says "Being finalised". Policies and other documents that are not public are shared on request, under a confidentiality agreement. - A security page and a Grievance Officer. /security is the short version: facts, agreements, how we handle your data, what stays yours to do on your calls, and plain answers. /grievance-officer says who answers a complaint about personal data and by when.
- Cookie choices. Analytics and the support chat on graine.ai load only after you agree, one choice for each, and Cookie settings in the footer changes it at any time.
- Privacy requests with a reference number. The privacy policy is rewritten for India's DPDP Act and the GDPR, and its request form (access, correction, deletion, withdrawing consent, a complaint) gives a reference number. We acknowledge within 2 working days, aim to reply within 30 days, and never take longer than 90.
- Claims corrected. Some pages and help texts said more than we hold: a TRAI and DoT "compliant" label, "DPDP-ready by default", an availability percentage, and a certification card in an older docs folder. Each now says what is true. The PII Redaction help now lists exactly what it removes (email addresses, card numbers, Aadhaar and PAN numbers, phone numbers and IBAN-style numbers) and says it is off by default, and the security page says the application's own encryption layer is built but not yet switched on for the shared cloud.
Agents
- Deepgram Flux. In Voice Settings, choose Deepgram and then Flux (English), or Flux (Multilingual) for Hindi, English and eight more languages, under Recognition model. Flux listens for the end of a sentence rather than for a fixed silence, so the agent replies sooner without talking over a caller who pauses mid-thought. Its Turn-taking is a choice of Quick, Balanced or Patient, with the exact settings under More settings. Agents keep their current model until you choose Flux. Speech recognition. Live, no upgrade.
- Each speech model shows what it supports. The caller languages and settings in Voice Settings, each language's editor and the flow builder now follow the chosen model: Nova 3 adds Bengali, Gujarati, Kannada, Marathi, Punjabi, Tamil, Telugu and Urdu; Nova 2 offers Hindi and English; Saarika v2.5 its eleven languages. A model or engine that can't recognise the agent's language is shown but can't be chosen. Pause Before Replying and Keyword boosting appear only for the models that use them, and Words it should expect now works on every Saaras model. Speech recognition. Live, no upgrade.
- Languages on an agent with a persona. An agent with a persona decides each move itself, to a persona or another language, so its Languages tab no longer shows settings that don't apply to it (when to switch, Jev and language detection) and says When the agent decides instead. Its switch line now reads Line it says when it leaves a language, which is when the agent says it. Language detection. Live, no upgrade.
Billing
- A payment that goes through after a failed attempt is credited. If a card was declined and the payment then went through (a retry on the payment page, or the bank confirming it later), the credits were not added. They now are, once. A payment whose amount doesn't match what was ordered is held for our team to check instead of being credited. Live, no upgrade.
Website agent
- What you set in the dashboard is what visitors get. What visitors get and Opens on (Embed & Widgets → Appearance) now reach your website: a chat-only agent shows only the chat, a voice-only agent only the call, and the one you chose opens first. Before, every website showed both, starting on the call. A snippet can still narrow what is offered, never add what you turned off, and a voice-only agent's launcher reads Talk to us unless you gave it your own words. Embed on your website. Live, no upgrade.
- One tag, and almost nothing until it is used. The install snippet is now one
asynctag that never holds your page up and works from the<head>or a tag manager. A page whose visitors never open the agent loads the small loader and nothing else: the chat loads when a visitor shows interest (a pointer over the launcher, a tap) and is ready by the time it opens. The loader itself is a third of the size and is cached. Snippets you already pasted keep working. Install. Live, no upgrade. - A conversation follows the visitor across your site. A visitor mid-chat who follows a link finds the conversation where they left it, and the agent carries on without greeting them again: same tab, within 30 minutes of the last message, identified or not. Nothing is opened until they write again, so moving between pages costs nothing, and a link in the agent's reply to a page of your own site opens in the same tab. When a visitor moves to another page. Live, nothing to change on your site.
- Better on phones. A compact chat now opens as a sheet on a phone and stays above the keyboard while the visitor types, instead of a small window the keyboard covered. Live, no upgrade.
- More room for the conversation. Once a conversation starts, the header shrinks to one line with the Call / Chat switch at its end. A long reply no longer scrolls the visitor's own question out of view, the message box grows to five lines (Shift+Enter for a new line), and product cards without a picture no longer show an empty grey box. Live, no upgrade.
- Never a broken widget. A component the agent sends with data it cannot draw now shows the agent's own sentence for it, and the rest of the chat carries on; before, the whole widget could stop with an error. Live, no upgrade.
- Keyboard and screen readers. Opened from the keyboard, the panel takes focus; Escape inside it closes it and puts focus back on the launcher. The launcher says what pressing it will do, shows a dot for a reply that came while the panel was closed or a call still going, and the frame is named after your agent. While a call is going, leaving the page asks first. Live, no upgrade.
- For developers: website loader 1.6.0.
load({ mode })now chooses among what the agent's settings allow and can no longer add a conversation they leave out;load({ start })andload({ preload })are new, and the one-tag install takes any option as adata-attribute. The widget's frame now loads when a visitor shows interest, so a page that drives the widget from its own script straight away passespreload: true. Line by line: SDK changelog. Live, no upgrade.
Data and privacy
- A do-not-call list for your workspace. A number on it is never dialled — by a campaign, a retry, a follow-up, the API, a scheduled call or a workflow — and a contact on it is counted as Do not call, not as a failure. Add numbers, upload a CSV, or let the people who say "don't call me again" be added for you. Data and privacy. Live, no upgrade.
- Data requests. Record what someone you call asks for, see what you hold about them, export it, correct it or erase it, with due dates. Data requests. Live, no upgrade.
- Retention. Admins can choose how long recordings, transcripts and contact data are kept; empty keeps everything, as before. Retention. Live, no upgrade.
Workflows
- Times in a run read in your time. A run's What it knows showed stored moments as their raw UTC value
(
2026-11-01T15:02:48+00:00); they now read in your own time, like the rest of the run (1 Nov, 20:32:48), with the exact stored value on hover. Live, no upgrade.
In-app SDKs
- New components save again. Creating a component on Web components failed with an error in a workspace that had already created one since August, and the component created before it couldn't be shown by the agent. Every new component is now saved with its own name for the agent to call, and the ones saved without one get theirs. Showing components. Live, no upgrade.
1 November 2026
Agents
- Event paths from the path's panel. In the flow builder, a path can now wait for an event: select it, choose Event under When to take it, and type the event's name. When your server sends that event to the live call, the call takes the path and the next step speaks first. Before, event paths could only be added as text. Events. Live, no upgrade.
- One list for an agent's tools. Agent → Integrations & Tools → Tools now lists every tool the agent has — API calls and MCP servers — each with its name, kind and one line on what it does, with Edit and Remove. Add tool opens an editor beside the page with plain fields (when to use it, the request, the inputs the agent gathers) and the whole tool as JSON behind Definition (JSON); it says what is missing before a save. Tools you already have are listed as they are. A flow agent has the same list and editors in the flow builder's Tools tab, with the steps that may use each tool. See Agent tools. Live, no upgrade.
- The AI model you choose stays chosen. Saving Keyword boosting after changing an agent's AI model put the agent back on the model it had when you opened the page, while the editor kept showing the new one, so calls ran on the old model. Saving keywords now changes only the keywords. If an agent's calls don't match the model its page shows, choose the model again. Live, no upgrade.
- Memory settings in the flow builder. A flow agent's memory is now set in the flow builder, under Settings › Memory: the switch, the memory settings and the people it remembers, the same as in the agent editor. Changes there are saved at once. Memory in a flow. Live, no upgrade.
Memory and people
- A person's linked IDs. Agent → Memory → People → a person → Settings lists the IDs the
person is known by: the kind (user ID, email, phone number or your own field), how and when each was
linked, and the main ID their memory is kept under. Only a fingerprint of each ID is stored, never the ID.
A sign-in your app proves with an ID token now also links the email and phone number its issuer verified
(
email_verifiedorphone_number_verifiedtrue), so the person's memory is found by those too. One person, several IDs. Live, no upgrade.
In-app SDKs
- Components made with Start blank show in iOS and Android apps. A component you build from blocks on the Web components page — headings, text, pictures, dividers and buttons — showed only its fallback sentence in the SDKs' own views on a phone. It is now drawn there in the component's look, and a button in it answers the agent as the dashboard's preview does. An app that draws components in its own design can read the blocks too. Requires SDK 0.14.8 (iOS and Android) or 0.14.9 (Kotlin Multiplatform). What changed in 0.14.8 and 0.14.9
29 October 2026
Billing
- Billing corrections are made by our team. The Billing page no longer shows a Billing corrections panel. When a call was charged less than it should have been, our team finds it and applies the correct charge; nothing else on the Billing page changes. Live, no upgrade.
Agents
- One place for an agent's languages. Agent → Languages now lists every language at a glance — its voice, its speech recognition, where its instructions come from, its name and the line it says on switching in — with Calls start in and Switches language above. Add a language and its voice and speech recognition start from the agent's own when they speak it; edit one language without touching the others; remove one; or start calls in another, with a warning when it has no instructions of its own yet. An agent with one language adds its second here, in one step. Voice Settings now edits the voice and speech recognition of the language calls start in, and says so. Live, no upgrade.
- Testing an agent in the dashboard works again. The chat and the web call on an agent's page, and in a flow agent's Test area, were refused with "You don't have access to chat with this agent" since 27 October, for everyone. They now connect with a short-lived pass the dashboard issues for your own agent, so your session never leaves Graine's servers. Anyone whose role can place calls can test: Admins, Members, and a custom role that includes it. View only can't. Someone whose access is limited to some agents can test those. Live, no upgrade.
Workflows
- Pick the caller ID from your numbers. A workflow's Call step lists your Phone numbers for its Caller ID, with Chosen for you to let Graine pick one, instead of a box to type a number in, so the number is always one of yours as your Phone numbers page lists it. Live, no upgrade. The Call step
In-app SDKs
- Kotlin Multiplatform 0.14.8. An app that draws the agent's components itself can honour everything the Web
components page sets: draw each one in its own design with the look the dashboard gave it (
GraineComponent.style), the content blocks of one built with Start blank (blocks), and what a tap does in the app — open a screen or run an action (onSelect, filled bytapFor) — with its pictures arriving as full URLs; and show that the agent is answering the user's choice, from the tap until the agent's first words (Graine.componentAwaitingReply). iOS and Android stay at 0.14.7. Requires SDK 0.14.8 (Kotlin Multiplatform). What changed in 0.14.8
28 October 2026
Security and access
- Security log. Every check an agent makes is logged: when, which check (Only my apps, Verified app, Verified user, Server token, Bot check, Key or Allowed domains), the result (Allowed, Verified, Refused, Anonymous, or Would be refused while a switch is report-only), why in plain English, the app ID and platform, a one-way install reference, the country, and which part of the agent — chat, call, memory or booking. Kept 30 days: filter by time, check, result and app ID, and download as CSV. For one agent under Embed & Widgets → Install → Your app and your users → What we've seen → Security log, and for every agent under Security → Security log. Admins only. It never logs IP addresses, user IDs, names, phone numbers, emails, tokens, proofs or keys. Live, no upgrade. Security log
- The Security log has its own page. Security → Security log, beside the Overview tab: every agent's log, filtered by agent as well as by time, check, result and app ID, with the filters in the page's address so you can share a view. The Overview keeps the five latest rows, and each agent's own log opens the full page filtered to that agent. Live, no upgrade. Security log
- Pages in the Security log. 25, 50 or 100 rows a page, 1–50 of N (counted up to 10,000), and Previous and Next — on the Security log page and in each agent's log. Live, no upgrade.
- A tidier Security log. A refused request is one row: the check that refused it. A pass, or a report-only or anonymous result, is one row per install and check every 10 minutes, whichever part of the agent it came from — report-only and anonymous ones with a count (×N). An app's start-up request shows its install once the app has proven itself, and a request that doesn't name its app now reads The request didn't say which app it is (an SDK older than 0.14.4, or not an app at all) — in What we've seen too. Live, no upgrade. How rows are grouped
- Every change to the security settings, in the same log. Which member changed what, and their role — never a secret or a key. Live, no upgrade.
- Each Security log row in full. Click a row — or press Enter on its time — for a panel with what it
means and what to do, every detail with a plain label (the switch at the time, how the app or the
person was proven, a server token's scopes, the app version when the app sends it), how the request
was decided check by check (✓, ✗ or Report only), and shortcuts to everything from the same install,
app or check, the agent's security settings, and Copy as JSON. A change shows before → after. Every
answer carries an
X-Graine-Request-Idheader — the panel's Request ID — so a report from an app or a page can be matched to its row. Live, no upgrade. One row in full - Find a request's rows by its ID. Paste the request ID from an error into the Security log's search box — on the Security log page or in an agent's own log — to see that request's rows, across all 30 days; a row's panel has Show every row of this request. Live, no upgrade. The request ID
- New guides to secure an agent. Which way to prove your users — server tokens for sensitive data such as health or money, your sign-in's ID token with no server code, or a signed user ID; what a JWKS URL is, and how to check yours; why every agent your app uses needs its own lock; and a checklist to test it end to end.
Calls and booking
- Replacing push credentials. Replace, in Workspace settings → In-app calling and on each agent under
Calls & scheduling, now asks only for what changes, on iOS and Android. Leave the Team ID, the Key ID or the
key file blank and the saved one stays, so changing the environment or checking saved credentials again no
longer means uploading the key again. A new key's Key ID is read from Apple's
AuthKey_….p8file name. A refused save says why in a pop-up as well as on the card. Uploadinggoogle-services.jsonin place of a service-account key says which file is needed. Every ring uses the credentials saved at that moment, so calls already booked use a replaced key from their next ring. Live, no upgrade. In-app calling
Billing
- Payment and invoicing policy. How you pay, on one page. Prepaid credit is the default and is payable in advance: new calls, chats and campaigns stop when the balance runs out, and a call in progress is never cut off. Invoiced accounts, by agreement, are invoiced on the 1st of each month for the previous month's usage, and straight away whenever usage not yet invoiced reaches the account's credit limit. Amounts invoiced on credit are due within 15 days of the invoice date, and this period is not extended. Late payment charges of 18% per annum are levied on any undisputed amount unpaid after the due date, and if an invoice is still unpaid once the 15 days have passed, service may be suspended, after an email to the billing contact, until it is paid. We may ask for a security deposit. Invoices issued from 29 October 2026 carry these terms, and the Terms of Service now state them too. Payment and invoicing policy
In-app SDKs
- iOS, Android and Kotlin Multiplatform 0.14.7. The SDK's background preparation of the next call now waits for an identity token that is still on its way, as conversations have since 0.14.6, so a launch no longer shows in the Security log as an anonymous user. Answering a call that rings never waits. Requires SDK 0.14.7. What changed in 0.14.7
- iOS, Android and Kotlin Multiplatform 0.14.6. When your app identifies a user before their identity token
arrives and sets
identityTokenRefresher, the SDK now waits up to 10 seconds for the token before the user's first conversation or request, so an agent with Verified users on answers them verified instead of anonymously. The refresher's 30-second limit counts per user, and a device registered without the token registers again once it arrives. Answering a call that rings never waits. Flutter, React Native and the website loader stay at 0.14.4. Requires SDK 0.14.6. What changed in 0.14.6
Billing
- Our prices, in public. graine.ai/pricing lists them: pay as you go is ₹6 per connected minute, all-in — speech recognition, the agent's voice, the AI model and telephony, for phone calls and for calls in your app or on your website — billed per second from your prepaid balance, and a text chat is ₹10 per session of up to 5 minutes. Prices exclude GST; outside India, billing is in US dollars at the equivalent rate. Enterprise plans — a lower rate for a monthly commitment, invoiced billing, deployment on your own servers — are quoted by our team. Your workspace's own rates stay on its Billing page.
27 October 2026
Security and access
- Your app and your users. Per agent, under Embed & Widgets → Install → Your app and your users: list your iPhone and Android apps so only they can use the agent's key; have the app prove it is your genuine build with App Attest or Play Integrity; and prove who each user is with a signed user ID from your server or your own sign-in's ID token. Each starts report-only — What we've seen shows what would be refused — and is enforced only after you confirm. Debug builds keep working with registered debug tokens. Chats, calls, booking, memory and past conversations all follow the same rules. Requires SDK 0.14.4. Secure your agent
- Each agent's security settings stay that agent's. They apply to everything opened with the agent's key, its web calls included; someone with access to selected agents sees and changes them for those agents only; changing them takes Admin rights (edit agents and manage integrations) and writes one activity-log entry per change; a copied agent starts with none of them and no secrets; and a deleted agent's signed-user-ID secrets stop proving anyone. Live, no upgrade.
- A verified user is verified for one agent. Proving a user to one agent no longer counts for another agent in the
workspace, and changing an agent's sign-in settings (its secret, sign-in fields or method) takes effect for its users at
once; nobody is signed out by the change. A deleted agent gets no server tokens (
409, code1203), and only someone with access to every agent can replace the workspace's push or Play Integrity credentials. Live, no upgrade. - The Security page. Workspace → Security shows every agent's protection in one place — apps, verified app, verified users, websites, devices per user and memory — the sub-accounts you can open, two-step sign-in, API keys and the access log, with a link to fix each gap. Secure your workspace
- Server tokens. Your server mints a short-lived token for each signed-in user with your secret API key
(
POST /v2/client-tokens: one agent, one user, the scopes the app may use, at most an hour), and your app hands it to the SDK throughtokenProvider. Turn on Agent → Embed & Widgets → Install → Server tokens, report-only first; once enforced, the publishable key alone opens nothing. A token that expires never ends a chat or call in progress. Requires SDK 0.14.4 (React Native 0.47.3, website loader 1.5.0). Server tokens · API reference - Rotate the publishable key without breaking anything. Embed & Widgets → Install → Keys: create a new
key while the old one keeps working, see when each was last used, revoke the old one report-only and then refuse it
(
key_revoked). Replace now still refuses every other key at once. Thekey_revokedcode requires SDK 0.14.4. Rotating the publishable key - Website bot check. An invisible Cloudflare Turnstile or reCAPTCHA Enterprise check before a website visitor's chat or call starts, verified by Graine; the secret is kept sealed and never shown again. Report-only first; while the provider is down, report-only lets visitors through and enforce waits for it, never interrupting a conversation. Requires website loader 1.5.0. Website bot check
- How Graine handles your keys. A page for security reviewers: how the push credentials Graine rings your app's users with, and your Play Integrity credential, are encrypted, kept write-only, scoped, validated, audited, monitored, rotated and revoked; how to give Graine a key for one app only; and what is coming next, including keyless access to Google. How Graine handles your keys
In-app SDKs
- iOS and Kotlin Multiplatform 0.14.5. The chat's status and a native call's phase now use the same words as every
other SDK (
connectedwhere it saidonline, a chat that gave up saysfailed); an event your app reports reaches the agent on a native call too (iOS, and Kotlin Multiplatform on iPhone); andreportEventrefuses an event over 8 KB instead of sending it.onlinestill compiles. Android, Flutter, React Native and the website loader stay at 0.14.4. Check your code if aswitchorwhenlists every chat status without a default. What changed in 0.14.5
26 October 2026
Security and access
- TLS 1.2 and 1.3 only, and HSTS on every response. The API and the chat and call connections no longer accept older TLS versions, and browsers are told to use HTTPS for every request, with protective headers on every response. Security
- In-app conversations are limited by device, never by network address. Many phones share one address on mobile networks, and a phone that switches between Wi-Fi and mobile data reconnects at once. A limit only ever refuses a new conversation, with a code that names it — never one in progress. A message over 4,000 characters is shortened instead of ending the chat, and the burst that arrives when a network recovers gets through. Live, no upgrade. In-app chat and calls
- The security page covers in-app chat and calls. Connection tickets, device binding, verified apps and users, what memory never stores, retention, where data is processed, and where each certification stands. Security
Memory and people
- The memory guide, with screenshots. Where to switch memory on for a prompt agent and for a flow agent, the lines that make each use what it remembers, and a flow path that branches on what is known. Prompt agents and flow agents · Memory in a flow
Calls and booking
- Scheduled calls are found by customer. Agent → Calls & scheduling → Scheduled calls, and Embed & Widgets → Calls, now look up one customer's booked calls by their identifier instead of loading every booked call, so the tab opens at once even on an agent with thousands of bookings. Booking a call shows that customer's calls with the new one. Scheduled calls from the dashboard
- Steadier voice calls on weak networks. A network drop of a few seconds no longer restarts or ends a call on your website or in your app's voice bar: the call carries on when the network returns. A call now shows as connected only once the agent can be heard, and the connection quality it reports is the last few seconds, not the whole call. Live, no upgrade. On a weak network · In-app SDK changelog
- WebRTC calls stay connected through weak and changing networks. On your website and in your app's voice bar, a call whose connection drops or switches networks is reconnected inside the same call, a call answered without audio is reconnected before it moves to the standard path, and slow or UDP-blocking networks get more time and a relay over TCP and TLS. Live, no upgrade. On a weak network · In-app SDK changelog
Workflows
- Workflows. Automate outreach as steps, under Build → Workflows: call a contact with any of your agents, read what the call found, wait, choose a path, try again later, send the contact to your own systems with an HTTP request and wait for your system to answer back, send a WhatsApp message, an SMS or an email, or run one of your automations. Runs start one at a time with Test run, from a list, from your system through a trigger URL or the API, or by themselves when a call ends. A call a workflow places meets every check any call meets: your balance, the agent being on, its calling hours and your lines. Eight samples to start from. Live, no upgrade. Workflows · Samples · Workflows API
- Outreach workflows reach people of your app. A Call step can ring the person
your app signed in, in your app — now, or at a time it books, which they see
among their upcoming calls — and the run hears how the call ended, declined and
missed rings included. A workflow can also start by itself when a call in your
app, a call on your website or a chat ends, for the person your app signed in.
Three new samples: Ring in the app, then try again; Book a call in their app;
After a chat, follow up. A booked call whose time passes before it can ring is
failedwithexpired_unrung, not "not answered". Live, no upgrade. In their app · Start when a call ends - Your app starts a workflow. Turn on Your app can start this on a
workflow, and your app's
startWorkflowstarts it for the user it signed in — with the fields you allow, never anyone else, and never twice for one tap. Your app never chooses where a run calls, texts or emails: a verified user is reached at their own phone or email, anyone else through your own records. Requires SDK 0.14.4. Start from your app · startWorkflow
In-app SDKs
- Actions take lists and objects. An in-app action's argument can now be a list or an object, such as a set of answers or a whole plan. The Actions panel keeps each argument exactly as written or imported, and warns before saving anything a model provider would refuse. Live, no upgrade. Declare an action
25 October 2026
Agents
- Context: see what your agent reads, and keep it within a budget. Every prompt and flow agent has a Context section, right after Memory. It shows what the model reads on each turn (instructions, remembered facts, the app screen, knowledge passages, the conversation, tool results) and how big a typical and the largest turn were over the last 7 or 30 days. Choose Measure only, Keep within a budget (older tool results are cleared first, then the oldest exchanges; the latest six always stay) or Off. Context
- What the agent knew, on every conversation. A conversation in Call History shows how much each part of the model's requests carried and what a budget trimmed. Execution logs now label the stored prompt as the agent's prompt when the call ran, and say what else each turn read. What the agent knew
- Shorten long conversations. On agents and flows that use a GPT-5.4 model, turn it on with a token count (30,000 by default): once a conversation is that long, its earlier part is condensed, so long calls and chats keep replying quickly. It works for agents with a knowledge base too. Models in the flow builder
- Pronunciation lists for ElevenLabs and Cartesia voices. Tell a voice how to say a word, as a list of "Word" and "Say it as" lines, in the agent editor's Voice Settings and the flow builder's Voice & languages. On a multilingual agent, each language can have its own list. Voice & languages
- Knowledge-base agents on GPT-5.4. An agent with a knowledge base on a GPT-5.4 model now replies the way a prompt agent on the same model does, with the agent's own reasoning effort and service tier. Answer from your documents
- Automatic language switching on phone calls. On phone calls and WebRTC calls, the language detector now hears enough of the caller to decide, so a multilingual agent switches language there as it does elsewhere. A multilingual call also connects only the languages it uses. Agent languages in the API
Memory and people
- Each conversation makes the next one smarter. After a conversation an agent remembers, the platform notes where things stand with the person: the topic, how it ended, anything left open, promises and their due dates, and the language they prefer. Every agent in your workspace with memory on starts the next conversation from there, on any channel, and a multilingual agent opens it in the person's language. Flow rules can branch on what was noted. What the agent reads about a person · Branch a flow on it
- What works. Agent → Memory → What works shows, by topic, how often each approach worked and the one the agent uses: an approach reaches the agent once it has been tried 5 times and worked at least half the time. A first conversation with someone new starts with the approach that usually works for this agent. It is never about any one person. Where to see it
- People: one person's whole context. Find a person by the identifier your app sends or a caller's phone number, from the new People page in the sidebar or from Agent → Memory → People, and open their panel: Overview (what is known and the facts kept), Map (facts, conversations and promises, with what replaced what), History (what changed, newest first, each linked to its conversation) and Settings (with Reset devices). People is a search, never a list, so it stays fast with any number of people; only current facts are listed as facts. The memory settings
- Why a conversation wasn't remembered. Each conversation in Call History is marked Remembered or Not remembered, with the reason (the device limit, no user ID from the app, an unsigned session, the person opted out, no caller number and others) and what to change. One that hit the device limit offers Reset devices right there. Troubleshooting memory
- Forget erases everything. Forget this person now also erases everything
noted about the person, and for someone your app identifies by phone number,
forgetMemory()in your app erases what was remembered from their earlier phone calls too, as the dashboard already did. Live, no upgrade. Forgetting - Agents use memory better. They pick up what was left open or promised and confirm it before acting on it, use known preferences without asking again, never read memory out, and on a phone call raise nothing personal until it is clear the same person answered. A full brief keeps what was learned first, such as a name or a language; the last exchange of a call the agent ends is remembered too; filler like "ok" is not saved; and memories older than your retention setting are deleted within a day. Make the agent use what it remembers
API
- People and context.
POST /v2/people/contextreturns what your workspace noted about a person (recent topics and outcomes, open items, promises, preferred language) and the facts the agent remembers, looked up by your own identifier.GET /v2/agents/{agent_id}/what-worksreturns, by topic, how often each approach worked and the one in use. Both take a key with thecalls:readscope. People context · What works
Billing
- Text chats are charged per session. A text chat, in your app or on your website with no voice at all, is charged per session of up to 5 minutes, counted to its last message, at the chat price on your Billing page. Talk and calls are unchanged: per minute. Chat spend is its own usage category, Text chats. Text chats, Talk and calls
Security and access
- Remembered details stay on trusted devices. A device beyond a person's Devices per user no longer receives their remembered details at the start of a conversation. Installs and devices
23 October 2026
Agents
- A warning before a language replaces your prompt. After a switch, a language's instructions are the agent's whole prompt. When they are far shorter than the opening language's, such as a greeting typed into the box, both language editors now say so and suggest copying and translating the main prompt.
22 October 2026
Agents
- Choose when an agent may switch language. On an agent with two or more languages, choose When the caller speaks one of them (the default) or Only when the caller asks, in Voice Settings, Languages and the flow builder's Voice tab. Every save keeps each language's own prompt, voice, lines and settings; a language you remove takes its lines with it; Odia is one language however it was saved. Agent languages in the API
- See which languages a call spoke. A call's details read, for example, "Started in Hindi · switched to English at 0:42", with why each switch happened, and the execution log shows each switch at its moment.
- A tool's wait line in each language. On a multilingual agent, what the agent says while a tool runs can be one line per language. Turning on call transfer no longer replaces the agent's other tools. The Tools area
Calls and booking
- Start a call in one of the agent's languages. Send
agent_languagein a call's variables and the call, greeting included, opens in that language. A language the agent doesn't have is refused before anything is dialled, and a list upload leaves that row out and says why. Create a call
In-app SDKs
- Past sessions, and a chat that closes with its screen.
chat.pastSessionslists the signed-in user's earlier sessions with the agent, newest first, andsessionTranscript(id)returns one in full. A chat session now closes 15 seconds after its screen closes (chatCloseDelaySecondschanges it), so a chat nobody is looking at is never an open, billed session. Requires SDK 0.14.3 (React Native 0.47.2, website loader 1.4.2). Call History now words a chat as a chat: Chat closed, Closed after inactivity, Agent ended the chat. Live, no upgrade. Past sessions · SDK changelog
Billing
- Credit alerts for every Admin. Every Admin is emailed when the balance falls below your workspace's low-balance threshold, set on the Billing page (₹500 unless you change it; 0 turns it off), and as soon as calls stop for lack of credit, each alert once. A workspace still on its signup credit gets no low-balance warning until its first top-up, unless it sets its own threshold. When the account runs out of credit
Security and access
- Sub-accounts are created in seconds. Creating a sub-account now finishes within seconds, is safe to retry, and never leaves a half-made workspace. Sub-accounts
- Custom roles hold. A change to a custom role reaches everyone who holds it, and a role includes what its permissions need to see. Team roles
21 October 2026
Memory and people
- Chats in your app are remembered. Conversations in your app over the standard connection (every chat, and Talk or calls not on WebRTC) now carry the signed-in user. They are remembered, and a reopened chat continues where it left off instead of starting over with a new welcome; New conversation starts afresh without touching memory. Live, no upgrade. Coming back to a conversation
In-app SDKs
- Every screen yours to draw. Every state and action the SDK's own screens use
is now public on every platform, and on websites with
headless, so your app can draw its own chat, voice bar, call screen and booking picker while the SDK keeps the connection, the audio and the calls. Calls start on the loudspeaker, and each call reports why it ended. Requires SDK 0.14.0; 0.14.1 adds voice levels on every platform and the call's transcript on Android and Kotlin Multiplatform. Your own UI · SDK changelog
Billing
- A simpler Wallet tab. The Wallet tab shows your balance, recharge, the summary cards and one bar per day of what was spent, with that day's calls and minutes. The split by category, channel and agent stays on the Statement and the invoices. The wallet and the credit ledger
- Pay an invoice online. Pay online on a due invoice now works, including for workspaces on a free plan.
20 October 2026
Agents
- Suggested replies. Turn on Suggested replies for an agent and its text chats offer replies the customer can tap, sent as their own message; the agent's test chat shows them too. Requires SDK 0.13.0. Replies your assistant suggests
- A fixed line can end the call. In a flow, a fixed line with no paths can hang up once it has played: Hang up after this line. Hang up after the line
- Sarvam Bulbul v4 Flash voices. 148 Bulbul v4 Flash voices can be picked, are saved on their own model and preview as chosen. Voice & languages
- No limit on the number of agents. A workspace can create as many agents as it needs; the cap of 100 is gone. Create an agent
- A saved agent applies to the next call. After a save, every new call uses the saved agent at once, instead of some calls keeping the old greeting for a few minutes. Save
- Calls end cleanly. The agent's closing reply plays out before the call hangs up, a caller who hangs up during a flow's closing line is recorded as hanging up, and agents with a knowledge base now detect voicemail when their Voicemail setting is on. Everything that can end a call
Memory and people
- Memory look-up and Forget answer reliably. Agent → Memory → People,
Forget this person, and the SDK's
memories()andforgetMemory()no longer fail as unavailable. Live, no upgrade. Show a customer what is remembered - Current facts, ready sooner. An agent recalls only a person's current facts, so a fact that was replaced never reaches it beside its replacement, and a conversation starts faster because the person's memory is prepared in advance. Memory turned on for an agent always applies to its conversations in your app and on your website. Live, no upgrade. How memory works
Calls and booking
- Out of credits, not an error. A call refused because the wallet is empty reads Out of credits in Call History: not placed, nothing charged, and never counted as a failed attempt. When the account runs out of credit
- In-app calls answer on the first dial. A tapped call in your app is answered on its first dial, with the greeting ready the moment the call opens, instead of a longer "Connecting…" and the occasional redial. Live, no upgrade; SDK 0.13.1 also waits for the server before redialling. How in-app calls work
Dashboard
- How each in-app call connected. The execution log of every in-app call shows its Connection card: setup, answer and first-word times, packet loss, jitter, round trip and a good, fair or poor rating. Requires SDK 0.11.0 in apps. Connection
- How the customer rated a chat. When the agent ends a chat and the customer rates it, the rating shows on the conversation's Call History row, its details and the execution log. Requires SDK 0.13.0. When your assistant ends the chat
In-app SDKs
- Design the call screen and the chat window in the Garage. The call screen: layouts, backdrops, rings, the agent's voice, captions, buttons and a look for each moment (Requires SDK 0.12.0). The chat window: ten styles and every piece on its own, from the header and bubbles to the wallpaper, composer, welcome and rating (Requires SDK 0.13.0). A design saved before looks exactly as it did. The call screen · The chat window
- Prompt variables on your website.
GraineAgent.setVariables()andcurrentVariables()set and read the variables the next conversation carries, while the page is open (website loader 1.3.0). Live, no upgrade. Website reference
Billing
- Receipts carry the tax invoice. A payment's confirmation email attaches the tax invoice as it was issued, and a payment whose confirmation never came back is still credited, invoiced and receipted. The wallet and the credit ledger
19 October 2026
In-app SDKs
- Calls connect faster, and report how they connected.
prepareCall()makes the next call ready before the tap, and nothing touches the microphone before the dial. Requires SDK 0.11.0. App launches no longer count against an agent's call budget, so a busy app can't crowd out real calls. Live, no upgrade. SDK changelog
18 October 2026
Agents
- The flow builder, reorganised. Settings has tabs (The agent, Models, Voice & languages, On the call, Knowledge, Embed & Widgets, Advanced), and Advanced offers Raw flow, Raw call settings and Raw tools. The step panel reads What this step does, Where it goes next and Fine-tune this step; a step's own model overrides the agent's setting by setting; Transfer the call is a step action; the time zone has a picker; and each variable's type is set in Variables. The step panel
In-app SDKs
- A stalled WebRTC dial is redialled after half a second. Requires SDK 0.10.3 (React Native 0.44.3, calls 0.5.3); 0.10.2 was withdrawn the same day. SDK changelog
Billing
- Who is paying, and a real invoice. The recharge dialog asks for the payer's phone and email, which banks expect, and an online payment now files a real tax invoice and sends a receipt. The wallet and the credit ledger
15 October 2026
Agents
- Voicemail detection is your choice. Detection runs only when the agent's Voicemail setting is on, and new agents start with it off. An agent that already had it on is unchanged. Everything that can end a call
Calls and booking
- Booked calls, and Graine ringing your app. Customers book a call from your app, the agent books one during a conversation, or your team books one from the dashboard. At the time, Graine rings the customer's phone through your app, within the agent's calling window in the customer's time zone, and rings once more after a missed call when you set it. Your app's push credentials are added once for the whole workspace, and Ring now tests the whole path. Scheduled calls · Graine rings your app
- Webhooks for calls Graine rang.
call_declined,call_missedandcall_expired. Event types - Choose how in-app calls carry their audio. In-app call audio, in Agent → Calls & scheduling and Embed & Widgets → Calls: WebRTC (recommended) or Standard. WebRTC calls need SDK 0.9.0 with its WebRTC module. Calls over WebRTC
- Live lines count conversations. The live card reads, for example, "3 in conversation of 20 lines · 33 dialling", and average length is per connected call. How to see your lines
- Upcoming says who each booked call is for. The identifier, who booked it (the app, the agent or your team) and why. In Call History
API
- Request limits doubled. Placing calls and reading calls each allow 1,200 requests a minute. Limits by group of endpoints
In-app SDKs
- The booking sheet, WebRTC calls and the setup check. 0.8.0 adds the SDK's own booking sheet; 0.9.0 makes calls over WebRTC in both directions, with the same features on every SDK; 0.10.0 asks for call permissions and tells you what setup is missing; 0.10.1 registers for pushes on Android by itself. Each needs its SDK version or later. Booking a call from your app · SDK changelog
Billing
- Web calls are priced as web calls. A conversation in a browser or your app, WebRTC included, is filed under Web and carries no telephony charge. Text chats, Talk and calls
Security and access
- Push credentials in a secrets vault. Your app's push credentials are kept in a secrets vault, apart from your workspace's other data. What Graine stores
14 October 2026
Memory and people
- Every person remembered by who they are. Choose Who is the user? in the agent's memory settings (user ID, email, phone number or a custom field) and the agent remembers each person by that identifier, a phone caller by their number, never mixing people, with a limit on devices per person. Identity · Memory
Calls and booking
- Lines count conversations. Your line limit counts calls in conversation, and numbers ring beside them: when fewer people answer, more numbers ring per free line. Calls ringing beside your lines
Dashboard
- A self-hosted dashboard. For deployments on your own infrastructure, the dashboard runs as a container on your servers. Your compute, our control plane
In-app SDKs
- Users, memory and booking in every SDK. 0.7.0 brings
identify(), memory, booked calls and Graine's rings to every SDK, several agents in one app (one conversation at a time), and a chat window that opens Compact, Large or Full screen. Requires SDK 0.7.0. Several agents · Window size · SDK changelog
13 October 2026
Calls and booking
- Each phone network is paced on its own. Campaigns dial at the pace each phone network carries, so one network's trouble never holds up the others; a call turned away for pace never uses up a contact's free requeues; retries and follow-ups wait their turn the same way; and the campaign page's Limited by names what actually holds a campaign. A new Concurrency page explains how many calls run at once, what waits and how lines are shared. Concurrency
11 October 2026
Agents
- Collected fields, defined. In a flow, a value a path collects can say what it
means and which answers it takes, and the values collected reach the call record
and every call webhook as
collected_fields. Values picked up during the call
In-app SDKs
- Calls follow the headset, and hold for a phone call. iOS and Android 0.6.1 and 0.6.2, Flutter 0.6.2 and 0.6.3, React Native 0.40.2 and calls 0.1.1. A new guide explains how in-app calls work end to end. How in-app calls work · SDK changelog
10 October 2026
Agents
- Flow agents. Build an agent as a flow of steps and paths, under Build → Flow agents: a canvas builder, four templates, checks that match the platform's, undo and redo, saved versions with Restore, import and export, a Variables panel, a knowledge base per step, test calls and chats, Embed & Widgets and Clone. Flow agents
- Events into a live call. Your server sends an event into a live call with an
API key,
POST /v2/calls/{execution_id}/events, and the flow takes the path that waits for it. Events
API
- Flow agents through the API.
agent_kindandflowon every agent read and write, with the same key as any agent. Flow API
In-app SDKs
- Calls like WhatsApp. The customer calls your agent from your app, and the agent rings the customer: CallKit and VoIP pushes on iPhone, the ring and the call screen on Android. Requires SDK 0.6.0 on iOS and Android; Flutter 0.6.1 and React Native calls 0.1.0 use the same call engine. In-app calling
Security and access
- Sub-accounts. An enterprise account can run separate workspaces for its teams, regions or clients, each with its own agents, calls, team and credits. Your Admins create and fund them from the Sub-accounts page; a sub-account calls from your numbers at your prices, under your approval rules, and runs on its own wallet or on your credits with an optional monthly limit. Sub-accounts
- Custom roles and agent access. Admins can build roles from the permissions and limit a person to some agents, across agents, calls, campaigns and the API. Nobody can grant more than they hold. Team roles
9 October 2026
In-app SDKs
- WebRTC on your website. High-quality (WebRTC) voice now works on customer websites; before, it quietly fell back to the standard connection. Live, no upgrade. SDK changelog
7 October 2026
Agents
- Who made and changed each agent. Agent tiles say who created, last edited and approved an agent, and when, and the Agents page filters by creator. An Admin can edit a live agent directly and switch it off from the editor, and a failed save says why.
- When held calls ring. Choose how calls held outside the calling window are spread once it opens: across the window (the default), early in the window, or as soon as it opens. Stage by stage
API
- The reference matches the API. Every webhook event, status and sub-status is documented as sent, every keyed answer carries its rate-limit headers, and deleting a knowledge-base document removes it from search. Webhook payloads
Billing
- Billing as a wallet. Usage for any range of days, quick recharge, a balance below zero shown as below zero, and Payments & invoices with what was paid online and against invoices. The wallet and the credit ledger
- Running out of credit. A call that already connected is charged in full, even past zero; new calls stop at zero and resume on their own after a top-up; and a campaign paused for credit says Paused — out of credits, with a way to add credits. When the account runs out of credit
Security and access
- Roles: Admin, Member and View only. Invite people at a role and move them between roles. Each role sees only the pages it may use, View only changes nothing, and an API key a Member creates is limited to member scopes. Team roles
- The activity log. Admins see who did what and when (people, API keys and the platform's own actions, refused attempts included), with an integrity check and a CSV export. The activity log
- Approvals. In a workspace that reviews changes, a Member's request to take an
agent live, change a live agent or start a campaign waits for an Admin, as with a
pull request: an inbox, notifications, comments and reviewers, and the change
applied exactly as approved. Through the API, a held request answers
202. Approvals
6 October 2026
Dashboard
- A new look. A new design across the dashboard.
In-app SDKs
- Gateway, six new designs and your logo whole. Gateway is the default design for new embeds, and your logo is fitted whole on its plate. Calls on mobile data no longer hang when the network has dropped (Live, no upgrade), and the voice bar says where a slow connect is (Requires SDK 0.5.0, React Native 0.40.0). Design · SDK changelog
1 October 2026
Agents
- Voice Library. Clone your own voice into a private library from 10 to 60 seconds of recording, or add a public Cartesia voice by its ID, test it with your own text, and pick it in any agent's voice settings. Your library is yours alone: nobody else in the workspace can list your cloned voices or give them to an agent. Voice & languages

