GoHighLevel now connects even when you authorize from the agency: Ryvo turns that access into the sub-account you picked, asks which one if you picked several and keeps the connection alive on its own. If GoHighLevel rejects the authorization, the card shows its exact reason.
Your agents now sound more natural without you writing a thing: Ryvo adds guidance to the end of their prompt, on by default, and you control it from the new Naturalness section of the Builder.
Date and time: the agent knows the current day and time, with a calendar of the next two weeks. It books “on Thursday” or “the day after tomorrow” without mistakes and, when in doubt, confirms with the date.
Natural conversation: acknowledges without repeating itself, avoids robotic lines, uses contractions and asks the caller to repeat what it didn’t catch instead of guessing.
On calls: short replies with no lists or links read out loud; phone and reference numbers digit by digit; money with its currency; and email addresses confirmed by spelling them (“B as in boy”).
View text: each part shows the exact text your agent receives, in its language. If your prompt says otherwise, your prompt wins.
Agent time zone: automatic (your calling hours or the agent’s language) or the one you pick, without touching your calling hours.
Variables on calls:{{system__time_local}}, {{system__caller}} and {{system__channel}} are now filled in on voice calls too.
Safety net before the voice: even when the model writes bold text, lists or digits, your agent no longer reads them out wrong: Ryvo cleans the text right before the voice and says phone numbers, amounts, percentages and times like a person would.
Speaks while it checks: if a tool takes a while, the agent says “Let me check” instead of going silent.
Nods along while listening: it can drop an “uh-huh” or “mm-hmm” into a pause when someone talks for a while, without interrupting. Off by default.
Your business words: the transcriber understands your business and agent names better, because Ryvo passes them as keywords along with your pronunciation terms.
Also with Node: ask it to turn a part off or change the time zone.
What the builder marked as “Coming soon” now works: more control over the model, calls, tools and the web widget.
Model settings: in the LLM chip you pick the Fallback model (the platform’s, your own or none), the Reasoning effort and the Token cap per answer. On calls reasoning stays at Low at most, so the agent doesn’t go silent thinking.
Soft timeout: when the model takes longer than usual, the agent says a short phrase (“Let me check on that.”) so the line never feels dead.
Model patience: smart turn detection is now on, and you decide how long the agent waits before answering when the caller pauses.
Security and fallback on calls: the security rules and the phrase the agent declines with now apply to voice too.
Voicemail detection: on outbound calls, if a voicemail answers, the agent hangs up or leaves the message you write.
Greeting generated by the model: the first message can be written by the model on every call instead of a fixed text.
Generate with AI: when you create an agent, describe what you need and Ryvo builds the first draft.
A fuller test panel: you see the cost and tokens of every answer, and you can test with your own variable values without saving them.
Tools that speak up: each tool can say something while it runs (“One moment, let me check.”) and be marked so that talking over it doesn’t cut it.
Web widget: editable status texts, how many files the agent remembers, typing during the call and an indicator of what the agent is doing.
Faster and cheaper with Claude: calls reuse the cached prompt between turns.
You can now work on your agent without touching what answers the phone: save a draft, test it and publish it when it’s ready. And if something goes wrong, go back to any earlier version.
Save draft: the new button next to Publish (or Ctrl+S) saves what you see as a new version without publishing it. The chat test panel and the voice test use it right away, so you test your changes before anyone else hears them.
Know where you stand: the chip next to the name tells “Unsaved changes”, “Unpublished draft” and “Published” apart. “Discard draft”, in the Publish menu, brings the agent back to what is published without deleting anything.
Publish note: when you publish you can leave a line that explains the change, and it stays in the history.
Full history: every version shows who saved it and when, and every time it was published: who, from where (the builder, the API, MCP or Node) and with what note.
Compare any two versions: side by side, section by section or in JSON, or one version in full.
Restore as draft: brings an earlier version into the editor so you can keep working from it.
Publish again: puts an earlier version live in one click, with the same checks as Publish. Before it does, it tells you which tools changed since then.
Also through the API, MCP and CLI:POST /v1/agents/{id}/publish accepts version and note, and MCP adds list_agent_versions and get_agent_version.
GoHighLevel connects again. Our integrations provider replaced its GoHighLevel connector and the Connect button was failing; Ryvo now uses the new one. You also no longer type your sub-account id: it comes from the connection, and you pick the calendar and pipeline from a list.
Integrations with your apps (Google Calendar, HubSpot, GoHighLevel, Gmail, Slack and the rest) are now available on every plan, Pay as you go included. Connect your apps and switch on their actions in your agent builder without changing plans.
You can now pay for your plan and your top-ups in Mexican pesos as well as US dollars, at 20 pesos per dollar. Pick the currency in «Pay in» before entering your card, when you subscribe to a plan or top up your balance. You get the same credits in both currencies, and if your bank declines charges in US dollars, paying in pesos usually solves it.
If you start paying for a plan and don’t finish, your agents are no longer paused and you no longer get the agent paused email when that payment attempt expires.
In your agent’s test chat, both text and voice, you now see each tool it calls between the messages, with its status: running, done with how long it took, or failed.
Expressive voice no longer puts an audio tag in every reply: most replies carry none, never two in a row and never out of habit at the start, and the agent no longer clears its throat or pauses before speaking.
Node now connects your API tools to the key you saved instead of copying its reference as if it were the token, and builds GoHighLevel tools with its API v2 routes, such as looking up a contact by email.
Agents with an expressive voice no longer drop their voice: we removed the whisper and soft tags, which made replies nearly inaudible over the phone, and the agent no longer uses them when apologizing or on sensitive topics.
API tools that call GoHighLevel now send the Version header its API requires, and Node stores your sub-account locationId as a fixed value instead of letting the agent guess it.
The API, the MCP server and the CLI can now read and change an agent’s flow: GET returns its stages and connections, PATCH replaces or removes it, with the same rules as the Builder.
Node can now view and edit your agent’s conversation flow: ask it to add a stage, reorder stages or remove one, and it saves the change as a draft. If the change removes stages or changes where the conversation starts, it asks you to confirm first.
The flow canvas now has an “Analytics” button: see how many conversations entered the flow, how many reached the end and how many stopped midway, a funnel by stage showing which way each one left, and the list of executions with filters for date, channel, version, stage and result. Each row opens the conversation straight on its Workflow tab.
Your agent has an animated character, the same one in your web widget and across Ryvo, and you configure it.
Edit it from Agent: the agent’s avatar now shows next to its name in the Agent tab. Click it to change its shape, expression, background and color: it is the same character as your web widget, so the change shows in both places and goes out when you publish.
Any color: next to the default colors, the rainbow circle opens a picker to choose your own, and the eyes always stay readable.
The same character in the widget: your widget’s avatar is your agent’s animated character, the same one you see in Ryvo, and the preview shows it exactly as your visitors will see it.
The same across the dashboard: when you change an agent’s avatar and publish, the new character shows up across the dashboard: the agent list, the sidebar, calls and conversations. Inside the builder you see it change right away.
The canvas runs top to bottom, like a GoHighLevel workflow. It starts with “Add the first step” and every ”+” opens a catalog of ready-made steps (qualify, book, answer questions, hand off to a person) plus the tools from your integrations, inserted right where you clicked.
Each stage panel is organized into tabs: General, Tools and Connections. Override the agent’s prompt with a toggle, see the order in which connections are checked and change it, and duplicate or delete a step from the buttons that appear next to it.
Starts with the greeting: flows start the way a call does. The Start card shows whether the agent greets or waits for the customer to speak, and you edit the greeting right there. The first step only offers what can open a conversation (stages and looking up data before speaking), and handing off to a person lives on its own, under “At any time”.
Runs on your calls: flows now run on voice calls. The agent moves between the stages you drew based on your conditions, says your fixed messages, runs each step’s tools, and hangs up when it reaches the end.
Choose how it looks on your site: a round button, a card, or a card with a bigger window, in any of six positions, with your brand’s colors and sizes. Under Styling, every color and size goes by a plain name, like Background or Accent border.Colors are picked with a click: tap the swatch of any color and choose from the palette, or open the picker for any shade, with a saturation and brightness area, a hue slider and the hex code. If you have your brand’s exact code, you can still type it next to it.
Replace the widget’s texts with your own, in Spanish and English: the card’s question, the buttons, the message box and the end-of-conversation notice. Anything you leave empty keeps the default text, and the preview shows each language.The widget can show the picture you want: the agent’s avatar, an image already online on your site, or one you upload from the configurator (PNG, JPG or WebP, up to 2 MB).
The configurator saves itself: every change is saved as you edit, so you can leave and come back without losing anything. Your site changes when you click Publish, and an orange dot tells you when there are unpublished changes, with Review changes and Discard changes.Publish lives in a single button for the whole agent, web widget included. When you review changes you see in the same summary what changed in the prompt, the tools and the widget, and you can discard everything from there.
The interface: the widget can open by itself when your site loads, show the call transcript live, let visitors mute their microphone or switch the widget between Spanish and English, resize its window, and show the conversation ID at the end. Paste that ID into the Calls or Chats search to find the conversation.
Formatted replies and safe links: the agent’s replies show formatting (bold, lists, code) and their links can be opened, but only those on the domains you choose. Dangerous links like javascript: never open.
Document attachments: visitors can attach PDF, Word or text documents up to 2 MB and the agent reads them to answer. You choose whether it’s allowed and how many per conversation.
Terms and conditions: you can ask visitors to accept them before calling. Write them with formatting and links, and they’re asked again whenever you change them.
Ratings: when a call ends, the visitor can rate it from 1 to 5 stars and leave you a comment. You’ll see it in the call details, in Calls.
Shareable page: turn it on to get a page with your agent full screen that you can send by email, WhatsApp or social media, no website needed. Add a description and ask visitors to accept your terms before they talk.
Channels, as a list: in the builder, Channels is now a list showing each channel’s status with its settings one click away, and notices use the same toast as the rest of Ryvo.
The new Ryvo logo now shows on the sign-in and sign-up screens. The code from your authenticator app is also entered on a centered screen, just like the code we email you.
Calls and chats that ran with a workflow now have a «Workflow» tab in their detail: the workflow with the stages and connections the conversation went through highlighted, where it ended, and a timeline with every stage change, why it happened and the second it happened at.
You can now split a stage into two or more paths in one click: “Add branch” appears next to the selected step, and the ”+” below a stage stays even when it already has exits. Each branch shows its condition on its own line, and step and connection panels now have Save and Cancel buttons.
Your flows no longer jump stages on their own. A new connection from a conversation stage starts as “The agent decides” and asks you to describe when it should move on, and a stage whose only exit is “Always” can no longer be published, since it ended after a single turn and hung up the call.
As soon as a call ends, the breakdown shows what it cost: the exact total in credits, marked “not charged yet” until it’s applied to your plan or balance, usually within the hour.
When a call ends, the call detail no longer says it wasn’t recorded: it shows the recording is processing and the player appears on its own as soon as it’s ready, a few seconds later.
Voice agent background sounds are now real recordings of an office, a coffee shop and a street, plus a new one: busy street. You can preview them in the builder before picking one.
Voice agents on reasoning models like GPT-5 mini no longer overthink before speaking. Every model is measured as in a real call and asked for the least reasoning it accepts: GPT-5 mini went from over 2 seconds to under one to say its first word. The latency label comes from that measurement, and each call’s detail shows how long the model took to speak and how long it reasoned.
The sidebar got a refresh: Agents is its own section with aligned avatars, “More” opens a search with all your agents and their calls, section labels are no longer uppercase or collapsible, and the open tool shows in bold on a gray that stands out in light mode.
Node now has its own screen in the menu: write to it from a home page with shortcuts, attach files, pick up past conversations and watch the video of what it can do for you.
Agents on Eleven v3 or v4 voices now sound more human: they can laugh, whisper, sigh or sound excited with audio tags. Ryvo teaches the model when to use them, the Tags button inserts them into the prompt and the first message, and they show up in color as you type. On other voices they are removed before speaking, so they are never read out loud. If you want a neutral voice, turn off the Expressive voice switch.
You can now pick Gladia as the transcription engine for your voice agents. It is a premium engine, so the minute of agents that use it goes up 15%, and the builder’s price meter shows it before you publish. Other transcription engines keep their price.
Calls that never started no longer stay “in progress”
Calls that never got to start no longer show as “in progress” forever in your call history or in the API: they now show as failed. And if Twilio is slow to create an outbound call, the call now closes on its own as soon as Twilio reports how it ended.
Your number no longer stays busy after an early hang-up
If someone calls your number and hangs up before your agent gets to speak, the line now frees up within seconds. Before, it could stay busy for up to 17 minutes, and the next calls couldn’t get through in that time.
Agents can no longer go live with a model that can’t take calls
The builder no longer lets you pick a model your agent couldn’t take calls with, and it tells you why. Publishing also re-checks that the model, transcriber and voice you chose are still available, so a published agent never turns calls away without warning.
An unresponsive model no longer leaves the chat stuck thinking
If a chat agent’s model stops responding, the chat now switches to the backup model within seconds instead of staying stuck on thinking until the turn times out.
Your agent’s variables, such as your business name, now reach chats and the data your tools receive with their actual value. Before, a chat agent could receive them as unreadable text instead of their value.
If your chat agent has already replied in full and something fails while recording the charge, the chat no longer shows “An unexpected error occurred, try again”. That message invited people to resend and pay for a second reply.
ElevenLabs voices now sound more even from one sentence to the next. If you don’t set the voice’s stability, Ryvo uses 0.7 instead of the provider’s value, which made each sentence start in a different tone. You can change it in Fine voice tuning.
In your call history, every call now shows your agent’s name and avatar, the same one as on its page, and a call that just ended says “In progress” for a few seconds instead of “No answer”.
Each language model’s latency label now comes from its live measured response time, not its name. Models that think before they speak no longer show as “Low latency” when you pick your agent’s model.
Before connecting a phone number or placing calls, your account accepts the Calling and Data Processing Agreement from Settings, Legal. You can see who accepted it and when, and the full text lives at ryvo.so/calling-agreement.
Your web widget now has usage limits: set how many voice minutes and chat messages it can spend in 24 hours. If you don’t set them, the widget stays unlimited.
Every call your agents take is now recorded, in the voice test, your website widget and over the phone. Open any call to listen to it or download it. Recordings are kept for 7 days.
Log out now always signs you out, even when you are inside another account or have the dashboard open in several tabs. When you sign back in you start from your own account, not from the last one you were viewing.
Node no longer opens by itself: it only opens when you click its button. When you enter the agent builder the sidebar stays the way you left it, and if your sign-up conversation is waiting, the Node button shows a dot.
The dashboard looks clearer and more polished: more readable text in light and dark mode, roomier fields and buttons, new empty states and a guided tour that takes you to your first agent answering calls.
Node can now read your website or any page and save it to your knowledge base, and you can drag or attach files (PDF, Word, text) right in the conversation: Node assigns them to your agent.
Node can now import your Twilio number (you paste the token into a secure card, never the chat), place calls and launch campaigns from a CSV with the cost shown first, organize your knowledge base into folders, and manage your webhooks and stats.
We redesigned the agent builder: it now has a sidebar with every section, the price per minute broken down by piece (LLM, voice and transcription), voice and model browsers with filters, and a cleaner tools panel. Each agent also gets a unique animated avatar, and in Phones you can import a number with the “Import phone number” button.
Node in the agent builder, fluent in every integration
Node now lives inside the agent builder too, and your conversation follows you across screens. It understands every integration end to end: ask it to make your agent check availability in Google Calendar or log leads in HubSpot and it connects the app, sets the calendar and time zone, turns on the right actions, writes the instructions into your agent’s prompt and tests it against your real account. When it creates an agent it leaves you a button to open it, and the ring next to the chat shows how many credits you have left.
Node now bills by usage and thinks harder on hard tasks
Node now charges for the work it actually does: a short message costs less, and a big task like building an agent costs a bit more. For the hard jobs it switches to a more capable model, and every conversation shows how many credits it has used.
Node now answers “how do I…” questions with the steps from our guides, for example importing your Twilio number, and shares the link to the guide in your language.
Ryvo now checks every day for ElevenLabs library voices your agents no longer use, to free up room so a new voice doesn’t fail when you save your agent. Voices used by any published version or draft of an agent are never touched.
Your Builder agents can now live on your website. Copy a snippet from the Channels tab, paste it on your page and your visitors can chat or talk with your published agent from a bubble. You choose which domains can show it, and each conversation is billed like a web conversation.
You can now pick your agent’s voice from thousands of ElevenLabs, Cartesia and Deepgram voices, with search and filters for language, accent, gender and provider, and listen to each one before using it. Picking a voice sets the voice engine for you. Fallback voices are assigned automatically with the same gender and language, you can change them, and they no longer block publishing.
You now see what your agent’s voice minute costs before you publish it. The builder shows the price of the combination you picked, in credits and dollars, and updates as you change the language model or the voice. Every model in the lists shows what the minute would cost if you picked it, and the voice picker tells you when a voice changes the price. You can also get it through the API with GET /v1/pricing/voice-minute.
You can now connect Claude Code, Cursor, VS Code or Windsurf to your Ryvo account with the MCP server at mcp.ryvo.so, using the same API key. Your assistant can look up calls, conversations and stats, edit and publish agents, add documents and, once you confirm, place calls or launch campaigns, always within the key’s scopes and credit limit.
New Ryvo command line: install it with npm i -g @ryvo-so/cli and drive agents, calls, campaigns, webhooks and the knowledge base from your terminal. Human tables or --json for scripts, exit codes per error type, automatic retries, and a confirmation before any command that spends credits. ryvo mcp install connects the Ryvo MCP server to Claude Code, Cursor, VS Code or Windsurf without writing your key to any file.
Ryvo is now fully in English for English accounts: Node, call tables, the builder, public pages, messages and exports. New agents speak English by default with an English voice, and you can pick another language at any time. Portal URLs are now in English and the old ones redirect automatically.
An API key credit limit now also counts voice calls from your Agent Builder agents, and the counter for ElevenLabs calls started through the API adds up again.
If you use the dashboard in English, the error messages you get when creating, editing and publishing agents, choosing a language model and managing your team are now in English. The public API also returns agent validation errors in English (for example, a model outside your plan or an out-of-range temperature), with the same error codes as before.
The Get started screen now explains pay as you go the way it really works: usage is drawn from a balance you top up, your agent does not start without balance, voice minutes start at $0.14 USD and the minimum top-up is $25 USD. It used to suggest that saving a payment method was enough.
We removed the post-call WhatsApp summary from our plans. It was never available, so we took it off the plan cards, the comparison table and the docs, so each plan lists exactly what it includes. Your agent still answers WhatsApp messages when you connect your number.
We now tell you about your agent’s first conversation
When your agent handles its first real conversation, you now get the email letting you know. The notice that your agent was published also arrives reliably now.
An API key’s credit budget now also covers batch calls: a batch reserves the estimated cost of all its calls before it starts, and if real spending exhausts the budget, the remaining calls are cancelled. Two launches at the same time can no longer go over the budget, and POST /v1/batch-calls accepts Idempotency-Key so a retry never launches the same batch twice.
Phone calls made by your Builder agents are now recorded as completed, with their real duration and cost. Before, when the call ended on the phone side it could show up as failed and with no duration even though the agent did talk.
Your integration actions now follow the language you picked. With the portal in English, View actions shows the same names as the app’s guide, and the values GoHighLevel asks for are named the same in both places. Before, the guide said one thing and the screen said another.
Your Builder agents now send a webhook when each conversation starts and when it ends, with its duration and outcome. And you now pick from the portal which events your endpoint subscribes to, without writing to us.
You can now delete a document from your knowledge base and get its space back instantly, from the Knowledge base screen or from the agent builder. If other agents used it, we tell you which ones so you can remove it from their setup.
Plans now go further on voice: Starter includes 22,000 credits (about 183 minutes), Pro 99,000 (about 990) and Scale 299,000 (about 3,737). The extra minute drops to $0.14 on Pay as you go, $0.12 on Starter, $0.10 on Pro and $0.08 on Scale. The voice minute now depends on your agent’s voice and model: the Economy combo pays your plan’s rate, and the Standard, Premium and Max tiers multiply it by 1.75, 3 and 5.
Public API: 58 endpoints across the whole platform
The Ryvo public API now covers the whole platform: agents (create, configure, publish, versions), calls and conversations with transcript and audio, knowledge base with folders, phone numbers, batch calls, webhooks with retries, integrations, team, billing and logs. Every API key asks for per-resource scopes (for example calls:read or knowledge:write) and every list is cursor-paginated. The full reference lives at docs.ryvo.so/api-reference.
The public API now rate-limits with a token bucket: after being idle you can spend your per-minute limit in one burst, and if you run out you get capacity back within seconds instead of waiting for the next minute. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers so your integration can slow down before it gets a 429.
Plan cards now show voice minutes and dollars instead of credits, and each plan lists only what it adds on top of the previous one, under «Everything in Starter, plus:» and so on up the ladder.
Your Builder agents can now answer and make phone calls. Connect your Twilio number, assign it to the agent from the Channels tab and anyone who dials it will talk to your agent. You can also place calls from the Builder itself or through the API with POST /v1/calls. Calls show up in your history with their number and direction.
New voice library: Ryvo now syncs thousands of ElevenLabs, Cartesia and Deepgram voices in Spanish and English every day, and you can browse them through the API with GET /v1/voices, filtering by provider, language, gender and name. Voices that carry an extra provider fee are left out.
The sign-in and sign-up screens have a new look: a single centered module on black, framed by a textured square that stays put as you move through the steps. Your phone number now comes with a country picker and is verified with an SMS code before you continue.
Signup now ends with Node: tell it your website and what your agent should do, and Node reads the site, writes the prompt and leaves your agent ready to test. Every new account gets welcome credits for that conversation, and when you land in the dashboard it is open so you can pick up where you left off.
Node now interviews you to build your first agent: it asks what the agent should do, who it talks to and what it must collect, and you can watch its reasoning as it works.
An Idempotency-Key now belongs to your account: another customer using the same string no longer gets you a 409. Retrying a call can no longer dial twice because the record was lost, and the 429 error now has the same shape as every other API error (code, message and request_id) with a Retry-After of at least one second.
The event log in Settings now has five tabs: Calls, Chat, Sessions, Webhooks and API. Each one shows its own register (calls, chats, Engine sessions with tools and knowledge-base queries, webhook deliveries and requests to your API) with a type filter.
Tools is now in the menu, with shortcuts to add a webhook, a client tool or an integration, and a table for name, description, method, status and agent. API logs can be filtered by method, code, key, latency, user and dates.
You can now protect your account with two-step verification. In Settings › Security, turn on an authenticator app (Google Authenticator, 1Password, Authy) and from then on we ask for its 6-digit code every time you sign in. You can register up to two devices.
Home is now a board you can arrange however you like. Drag any widget by the handle at its top right and drop it where you want it; your layout saves itself. It ships with nine new widgets showing things you could not see before: what hours people call you, what data your agent managed to capture, how long it takes to answer, which tools it is using, and how your conversations ended this month.
The «Test» button on a tool’s detail now works: you type the values for each parameter and Ryvo calls your endpoint, showing you the request that went out and what your server answered, with its status code and how long it took. The request is real, it does not retry, and it does not count against your quota.
You can now test your webhook instead of guessing. In Settings > Webhooks, «Send a test event» fires a signed event at your endpoint and shows you the HTTP status, how long it took and what your server answered. It works before you create the webhook and on one you already saved.
A tool’s «Test» button now opens a window with the new tester: you type the values, call your endpoint and see the request that went out next to what your server answered, with its status code and its milliseconds. Calls stack up, so you can compare one attempt with the previous one.
You can now hover over any figure on the Home board and see the detail behind it. On Total cost each bar tells you what day it is, how many credits you spent and how many conversations there were; on Latency it explains what each measure means; and on Recent conversations you see the agent, the time and the summary without leaving the screen.
See what is left of your plan without leaving Home
The Total cost widget now tells you how many of this month’s credits you have left, with a bar that turns amber as you approach the limit and red when it runs out. Hover over it to see how many you have used, when your cycle started and how many voice minutes your plan includes.
The Home board now lays out properly on phone and tablet: widgets stack into a single column when the screen is narrow, instead of shrinking until the content gets cut off.
You can now choose which events fire your webhook. Your endpoint used to receive a fixed list you could not change; now, under Settings → Webhooks, you check the ones you care about and remove the ones you do not, both when creating the endpoint and later on. All six available events are grouped and shown with their technical name, so you know exactly what you will receive.
Connecting your system to Ryvo no longer means hunting for scattered details. Under Settings › API keys there is a new «Connect your app» block with a ready-to-copy example: you pick the agent and the identifier you need is already in there, along with the header that prevents duplicate calls if your system retries. And if you are not the one wiring it up, one button copies every detail into a message you can hand to your technical team.
Webhooks are being delivered again. Testing a URL from the portal returned “No se pudo conectar: Invalid IP address: undefined”, and no delivery ever reached its destination. That is fixed: the ping responds and events are delivered normally.
If your portal is in English, the Integrations screen was only half translated: the buttons and heading in English, and each app card still in Spanish. Every app description, its category and its status (connected, in progress, not connected) now follow the language you picked in Preferences. The Private keys label in the Settings menu does too.
Your knowledge base just got bigger: Starter goes from 10 to 30 MB and Pro from 50 to 100 MB, with no change to what a call costs. The public API and developer keys are also available from the Starter plan now, so you can trigger calls from your own systems without upgrading.
Every integration shows its actions, and you write the script
Open any connected integration and you get the full list of what your agent can do with that app, each action with the instruction the agent actually reads. That is also where you fill in whatever the app needs from you, like your GoHighLevel calendar: without it the action never reached the agent, and now you can see why. In the builder, actions show the app name and the action name instead of codes, and you can rewrite the “when should the agent use this” for each one in your own words.
GoHighLevel books appointments, and connects in one click
GoHighLevel now connects in one click, with no tokens to paste, and your agent can really book: it checks the open slots on your calendar and reserves the appointment against the contact, and it can reschedule or cancel too. It also looks up contacts by phone or email, sends messages over SMS, email or WhatsApp, opens and closes opportunities, and leaves notes on the record.
Your knowledge base now has folders. Create them under “Knowledge base”, drop in whatever belongs together and, when you set up an agent, point it at the whole folder: anything you add later gets picked up on its own, with nothing to republish. A meter at the top shows how much space you have used and your limit. Click a document name and its detail opens: when it was uploaded, how big it is, how many chunks it is indexed into, and which agents read it. For a web page you can re-read it whenever you want, or let us re-read it every week; if a week fails we tell you right there, and your agent keeps working from the last good version.
Adding things to your knowledge base works differently now. Click the upload area and a window asks whether you are adding a file, a web page or FAQs, then lets you pick the folder it goes into (or create one on the spot). Web pages no longer go in one at a time: we can read your sitemap or crawl the whole site and show you every page we found so you can tick the ones you want. And when you open a document, the detail panel is much wider and lets you read the content exactly as your agent reads it, whole or chunk by chunk.
Ryvo’s notifications now appear in the top right corner, out of the way of whatever you are doing, and they look cleaner. The ones that report a finished action, successful or not, carry a colored outline so you can tell them apart at a glance without reading them.
The guided tour no longer blocks the portal on mobile
On your phone, the guided tour no longer opens on top of you the moment you walk in. It used to cover the whole screen, and neither Node nor the portal buttons would respond to your taps. You can still start it whenever you want from your account menu.
The access code you get by email shows up in your inbox preview again, right next to the subject. Request it on your computer and read it on your phone without opening the email.
Your integrations arrive ready to use. Connect an app (GoHighLevel, Google Calendar, HubSpot, Gmail and the rest) and its actions show up on their own in your agent builder, switched off, so you turn on the ones you want. We also kept only the actions that genuinely work mid conversation, each with a description that tells the agent when to reach for it. Integrations are now available from the Starter plan.
The Agent panel now shows how many credits you have used today, what each message costs and how much you have left. When you confirm an action it also tells you whether that action carries a cost.
The model catalog is wider: you can now pick anything from the GPT-5.2 to GPT-6 families, including GPT-5.4 Mini, which a bug in our filter had been keeping off the list.
Settings cards show their border again in dark mode. Under Plan and credits, Usage and Integrations the blocks were barely distinguishable from the background; now each one has its outline and reads as a card of its own.
The agent builder is now where you choose which knowledge base documents each agent reads and when it reads them, with no trip to another screen. It warns you if you asked the agent to consult documents but ticked none, or if a document you assigned no longer exists.
You can upload to your knowledge base straight from the agent builder: a file (PDF, Word, text, Markdown or HTML) or the address of a web page. The document lands in your account and is assigned to the agent you are setting up.
In your agent’s knowledge base, every indexed document now shows how many chunks it holds. That is your confirmation it is ready for the agent to use mid conversation.
In your agent’s knowledge base you can choose how many chunks it gets back on each lookup (1 to 4, depending on your plan). Fewer chunks answer faster on calls, more chunks give richer context.
You can build your own tools from the agent builder: your own HTTPS endpoint plus the parameters the agent has to send. The tool becomes available to the agent when you publish, and you can delete it from its detail view. For now it is called without authentication headers.
Publishing an agent from the builder now starts with a review of what changes against the version that is answering calls: section by section, the published version on the left and your edits on the right, plus a JSON view. You publish once you have looked it over.
Sentiment, max call length, and a builder that reads better
The agent builder reads better: bigger, darker labels, legible hints and more air between settings. On top of that, “Post-call analysis” can now score customer sentiment (positive, neutral or negative, with an explanation) and “Call settings” lets you cap how long a call can run.
Pause your agent, browse version history, add tools from the builder
The agent builder now lets you add tools from the “Tools” section, pause and restart the agent with a switch in the header, and open the version history: every saved version with its date and author, which one is published and which one you are editing, a comparison of any version against the published one, and a way back to an earlier version without creating a new one.
The tools you build from the builder can now authenticate: Bearer or a custom header with your own key. The secret is stored encrypted, never shown again, and added by the server on every call; the tool detail tells you which scheme is in use without revealing the value.
The agent builder can now talk to your own language model: any endpoint compatible with the OpenAI API, using your key. The agent runs on your model and you pay that usage straight to your provider. Available on the Growth and Enterprise plans.
Voice agents now check the knowledge base whenever the conversation calls for it (“When needed” mode), just like chat agents do. That mode used to work on chat only; on calls, “Always” was the only option that did anything.
The portal and the admin panel have a new design: new typography, our own pixel icons, tables with a header, a row count and pagination, redesigned badges and empty states, and three new charts on Home: credits per conversation by month, credit usage over the last six months, and your agents’ success rate.
We warn you sooner. The usage alert in the sidebar shows up once you have spent 75% of your credits in the last 30 days, not when they are nearly gone: first an amber “High usage” notice and, if you keep climbing, the red “Running out of balance”. That gives you time to top up before anything stops.
You can create your account and sign in to Ryvo with GitHub, the same way you already could with Google. The button is on sign-up, on sign-in and when you accept a team invite.
The voice Engine panel is now a tool with a screen of its own. The ten panels that used to sit stacked in a single column are split across six tabs (Overview, Calls, Performance, Tests, History and Health), each with its own address, so you can share a link to the one you are looking at and reload it without losing your place.
The Engine’s Performance panel now shows at a glance where each turn spends its time (transcription, model, voice and transport) with a colored bar and a card per stage listing its milliseconds and its samples.
Agent menu: archive, share, duplicate, save as template
New options in every agent’s menu: archive it to get it off the list without losing it, share it with a read-only link, duplicate it, or save it as a template so your next agent starts faster.
Calls that never connected no longer show a red audio error. A busy or unanswered number used to open the player, ask for a recording that does not exist and report “Could not connect to the server”, which looked like a breakdown when it was only a lead who did not pick up. Those calls now explain that there is no recording because the call never connected, and they tell themselves apart: “No answer” in amber when the line was busy or nobody picked up (same as in ElevenLabs), and “Failed” in red only when something genuinely broke. The call detail also names the exact reason.
We fixed how your plan usage is counted. If your account runs on credits, the minutes you have spent are now deducted from the ones your plan includes instead of showing up as extra usage, and both the Plan and credits screen and the Usage screen report your balance in the same unit you are billed in.
Outgoing webhooks are available on every plan. Set your endpoint under Settings > Webhooks and receive your conversation events signed with HMAC, with automatic retries.
You can tune your auto top-up without leaving Settings > Usage: how much goes into your wallet and the balance that triggers it. That screen used to only switch it on and off, with the amounts living somewhere else.
The Ryvo team can now change your plan on the spot from the admin panel, with your subscription state live in front of them: the exact date and amount of your next charge, proration, payment method and any active discount. It used to be done outside the product, so a plan change took longer to show up in your account.
Support moved out of the sidebar and into your profile menu, in the top right. We also refreshed the menu icons, and notification preferences now use switches instead of checkboxes.
Know whether your agent’s instructions fit your plan
The portal now tells you whether your agent’s instructions fit your plan’s budget, with the actual numbers: how much they take up, how much your plan allows per conversation, and how much stays reserved for the knowledge base and the conversation history. It is a heads-up, not a block: you can still save.
When the main model provider goes down, Ryvo now serves your conversation through a backup route without eating into your turn quota or locking your account. A provider outage used to be able to leave an account locked even with the balance fully paid up.
We fixed a limit that blocked saving changes on agents with very long instructions. If your agent has a long prompt, you can edit it normally from the portal again.
In the admin panel, each customer’s Billing tab now lists credit purchases and top-ups alongside the subscription invoices, each with a downloadable receipt.
Your agent’s test console now connects over WebRTC, with better latency and steadier audio, and falls back to the previous connection automatically if it has to.
You can rename your agent straight from Ryvo, and the new name carries over to ElevenLabs. We also added an avatar next to the agent name in the “Recent calls” table and in the full call history, so you can spot it at a glance.
The first phase of the new portal design is live: a rebuilt sidebar with quick search (Cmd+K), a floating content panel, cleaner typography and colors, and polished light and dark themes across every section.
We rebuilt the agent setup wizard from scratch: 8 guided steps with your progress saved as you go, a new FAQ step where you can import your whole list from CSV, Excel, Word, your website or pasted text, and Ryvo can draft the missing answers for you with AI.
The admin panel is fully rebuilt: a dashboard with metrics you can act on and live system health, and every view (customers, agents, phone numbers, calls, reports, wallets, billing and settings) on the new design.
New profile menu in the portal: click your avatar to see your balance and plan minutes at a glance, switch theme, and get to settings, billing, team and support in one click.
Buying credits is new: pick the amount right on the page, with an estimate of how many call minutes it buys you on your plan, and set up auto top-up (threshold and amount) from the same balance card.
Test console with voice and chat on the agent page
New test console on your agent’s page: try it over the phone, through your browser microphone or by text chat, with a live transcript and session metrics (latency, duration and turns).
We fixed a problem where some team members saw a duplicate account when they signed back in, and another where finishing sign-up left the screen blank for a moment instead of taking you straight to your dashboard. Team sign-in and new account sign-up now run smoothly.
The admin panel can now open the onboarding form for EACH of a customer’s agents separately. On accounts with more than one agent, only the first one’s form was reachable.
Calls now show what actually happened: “No answer” (yellow) when the contact did not pick up or went to voicemail, and “Failed” (red) when the call could not be placed. They all used to read “Completed”.
The “Agent error” emails now go out only when there is a real detail to report, and never arrive blank. The noise of one email per call that failed to connect is gone.
We fixed a bug where some accounts could not invite more teammates or create a second agent even though their plan allowed it. Your plan limits are honored correctly now.
Team invites that expire no longer vanish from the list: they now show as “expired” under Settings > Team, and one click resends them with a link good for another 7 days.
New “Integrations” section in Settings: connect, disconnect or switch your Cal.com account, check which account you are connected as, and pick the event type your agent books into.
Book, reschedule and cancel appointments from the portal
You can create, reschedule and cancel appointments straight from the portal Calendar: the “New appointment” button and each appointment’s (···) menu open a live Cal.com slot picker.
Your agent can now book for you. Turn on “Book appointments” in the new “Tools” section of the portal and, mid call, your assistant can check your open slots and reserve the appointment in your Cal.com calendar with each person’s name and phone number. The appointment shows up in your Calendar right away. One click to enable, nothing to paste by hand.
We reorganized your account menu in the portal: your profile now sits at the top of the sidebar, and the light or dark theme switch appears when you hover your avatar.
We redesigned your agent configurator in the style of ElevenLabs: edit the prompt block by block (Personality, Tone, Goal, Guardrails and so on) or switch to advanced mode, pick the voice, the speed and the language yourself, and move through the settings from a contextual side menu.
We fixed plan activation: buying a plan now applies your included minutes automatically, unlocks the agent settings and shows up in the portal right away.
You can export your calls to CSV from /calls and /admin/llamadas. The export respects your active filters (date, status, duration) and your plan’s retention, and handles up to 50,000 rows per download.
The public changelog is live: follow every new feature, improvement and fix at docs.ryvo.so/changelog.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ryvo API","description":"Official documentation for the Ryvo public API. Connect your CRM, internal tools or automations to your AI voice agents.","colors":{"primary":"#171717","light":"#EDEDED","dark":"#171717"},"logo":{"light":"https://mintcdn.com/ryvo-3dab4d1a/PY7ordlJ2mPIeYcu/logo/ryvo-icon-light.svg?fit=max\u0026auto=format\u0026n=PY7ordlJ2mPIeYcu\u0026q=85\u0026s=3688aabefc727b14ef75567c1991b845","dark":"https://mintcdn.com/ryvo-3dab4d1a/PY7ordlJ2mPIeYcu/logo/ryvo-icon-dark.svg?fit=max\u0026auto=format\u0026n=PY7ordlJ2mPIeYcu\u0026q=85\u0026s=f93f30a722465f9ac23a04c12a3b2726"},"favicon":"https://mintcdn.com/ryvo-3dab4d1a/PY7ordlJ2mPIeYcu/favicon.svg?fit=max\u0026auto=format\u0026n=PY7ordlJ2mPIeYcu\u0026q=85\u0026s=2f10ad1739612a390107597b624a0773","appearance":{"default":"dark","strict":false},"navbar":{"links":[{"href":"https://app.ryvo.so","label":"Portal"},{"href":"mailto:team@ryvo.so","label":"Support"}],"primary":{"type":"button","label":"Create account","href":"https://ryvo.so"}},"footer":{"socials":{"x":"https://twitter.com/ryvocrm","linkedin":"https://www.linkedin.com/company/ryvo"}},"fonts":{"heading":{"family":"Geist","weight":600},"body":{"family":"Geist","weight":400}},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","default":true,"href":"introduction"},{"language":"es","navbar":{"links":[{"href":"https://app.ryvo.so","label":"Portal"},{"href":"mailto:team@ryvo.so","label":"Soporte"}],"primary":{"type":"button","label":"Crear cuenta","href":"https://ryvo.so"}},"href":"es/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ryvo-3dab4d1a","hasAudioNarration":false,"actualSubdomain":"ryvo-3dab4d1a","customDomains":["docs.ryvo.so"],"gitSource":{"type":"github","owner":"leadwaycrm","repo":"ryvo-system","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad3a6d6aaec4b9bb26a968d","collectionId":"ebc630bd-bc08-4f86-9025-a42d737a1d5d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad3a6d6aaec4b9bb26a968d"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad3a6d6aaec4b9bb26a968d","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"en","tag":"API Reference","count":120},{"language":"es","tag":"Referencia API","count":120},{"language":"en","tag":"Guides","count":44},{"language":"es","tag":"Guías","count":44},{"language":"en","tag":"Agents","count":19},{"language":"en","tag":"Integrations","count":16},{"language":"en","tag":"Documentation","count":14},{"language":"es","tag":"Documentación","count":14},{"language":"es","tag":"Integraciones","count":14},{"language":"en","tag":"Webhooks","count":13},{"language":"es","tag":"Webhooks","count":13},{"language":"en","tag":"Billing","count":11},{"language":"es","tag":"Agentes","count":11},{"language":"en","tag":"Knowledge base","count":10},{"language":"es","tag":"Knowledge base","count":10},{"language":"en","tag":"Phone numbers","count":8},{"language":"es","tag":"Agents","count":8},{"language":"en","tag":"Build","count":7},{"language":"es","tag":"Construir","count":7},{"language":"es","tag":"Billing","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--ds-font-sans:\"Geist\", \"GeistSans\", Inter, ui-sans-serif, system-ui,\n -apple-system, \"Segoe UI\", sans-serif;--ds-font-mono:\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco,\n \"Liberation Mono\", \"DejaVu Sans Mono\", \"Courier New\", monospace;--ds-bg-page:#fafafa;--ds-bg-surface:#ffffff;--ds-gray-100:#f2f2f2;--ds-gray-200:#ebebeb;--ds-gray-300:#e6e6e6;--ds-gray-400:#eaeaea;--ds-gray-500:#c9c9c9;--ds-gray-600:#a8a8a8;--ds-gray-900:#4d4d4d;--ds-gray-1000:#171717;--ds-focus:#0070f7;--ds-text-primary:var(--ds-gray-1000);--ds-text-secondary:var(--ds-gray-900);--ds-text-tertiary:#666666;--ds-text-strong:#000000;--ds-border-default:var(--ds-gray-200);--ds-border-strong:var(--ds-gray-400);--ds-link-underline:color-mix(in srgb, var(--ds-gray-1000) 51%, transparent);--ds-code-border:color-mix(in srgb, var(--ds-gray-1000) 14%, transparent);--ds-shadow-border:0 0 0 1px rgba(0, 0, 0, 0.08);--ds-overlay-hover:color-mix(in srgb, var(--ds-gray-1000) 5%, transparent);--ds-codeblock-bg:var(--ds-bg-surface);--ds-codeblock-border:var(--ds-border-strong);--ds-codeblock-shadow:none;--ds-syntax-text:#171717;--ds-syntax-string:#171717;--ds-syntax-keyword:#0064e2;--ds-syntax-function:#0064e2;--ds-syntax-property:#0064e2;--ds-syntax-number:#0070f7;--ds-syntax-type:#0064e2;--ds-syntax-muted:#8f8f8f;--ds-syntax-comment:#8f8f8f;--ds-blue-900:#0064e2;--ds-red-900:#d60020;--ds-amber-900:#a64f00;--ds-green-900:#107d32;--ds-blue-100:color-mix(in srgb, var(--ds-blue-900) 8%, transparent);--ds-red-100:color-mix(in srgb, var(--ds-red-900) 8%, transparent);--ds-amber-100:color-mix(in srgb, var(--ds-amber-900) 8%, transparent);--ds-green-100:color-mix(in srgb, var(--ds-green-900) 8%, transparent);--ds-blue-400:color-mix(in srgb, var(--ds-blue-900) 30%, transparent);--ds-red-400:color-mix(in srgb, var(--ds-red-900) 30%, transparent);--ds-amber-400:color-mix(in srgb, var(--ds-amber-900) 30%, transparent);--ds-green-400:color-mix(in srgb, var(--ds-green-900) 30%, transparent)}html.dark{--ds-bg-page:#000000;--ds-bg-surface:#0a0a0a;--ds-gray-100:#1a1a1a;--ds-gray-200:#1f1f1f;--ds-gray-300:#292929;--ds-gray-400:#2e2e2e;--ds-gray-500:#454545;--ds-gray-600:#878787;--ds-gray-900:#a1a1a1;--ds-gray-1000:#ededed;--ds-focus:#52a8ff;--ds-text-tertiary:#888888;--ds-text-strong:#ffffff;--ds-shadow-border:0 0 0 1px #ffffff25, 0 0 0 1px #000;--ds-codeblock-bg:#141414;--ds-codeblock-border:rgba(255, 255, 255, 0.08);--ds-codeblock-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.04);--ds-syntax-text:#ececec;--ds-syntax-string:#f7f4ec;--ds-syntax-keyword:#66b8ff;--ds-syntax-function:#66b8ff;--ds-syntax-property:#66b8ff;--ds-syntax-number:#a8d4ff;--ds-syntax-type:#66b8ff;--ds-syntax-muted:#8f8f8f;--ds-syntax-comment:#8f8f8f;--ds-blue-100:#0f1c2e;--ds-blue-400:#0d3868;--ds-blue-900:#52a8ff;--ds-red-100:#2a1314;--ds-red-400:#671e21;--ds-red-900:#ff6166;--ds-amber-100:#291800;--ds-amber-400:#573300;--ds-amber-900:#f2a20d;--ds-green-100:#0b2212;--ds-green-400:#0c451b;--ds-green-900:#62c073}html:not(.dark){--gray-50:250 250 250;--gray-100:242 242 242;--gray-200:235 235 235;--gray-300:230 230 230;--gray-400:168 168 168;--gray-500:143 143 143;--gray-600:125 125 125;--gray-700:77 77 77;--gray-800:46 46 46;--gray-900:23 23 23;--gray-950:10 10 10;--primary:23 23 23;--primary-light:23 23 23;--primary-dark:23 23 23;--background-light:250 250 250}html.dark{--gray-50:255 255 255;--gray-100:237 237 237;--gray-200:237 237 237;--gray-300:237 237 237;--gray-400:161 161 161;--gray-500:135 135 135;--gray-600:135 135 135;--gray-700:69 69 69;--gray-800:46 46 46;--gray-900:31 31 31;--gray-950:10 10 10;--primary:237 237 237;--primary-light:237 237 237;--primary-dark:237 237 237;--background-dark:0 0 0}body,html{font-family:var(--ds-font-sans);font-size:16px;line-height:24px;font-weight:400;-webkit-font-smoothing:antialiased}html #content h1,html #content h2,html #content h3,html #content h4,html #content h5,html #content h6,html #page-title{font-family:var(--ds-font-sans);font-size:40px!important;line-height:48px!important;font-weight:600!important;letter-spacing:-.06em!important;color:var(--ds-text-primary)!important}html #content h2,html #content h3,html #content h4,html #content h5,html #content h6{font-size:24px!important;line-height:32px!important;letter-spacing:-.04em!important;margin-top:48px;margin-bottom:0}html #content h3,html #content h4,html #content h5,html #content h6{font-size:20px!important;line-height:26px!important;letter-spacing:-.02em!important;margin-top:32px}html #content h4,html #content h5,html #content h6{font-size:16px!important;line-height:24px!important;margin-top:24px}@media (max-width:639px){html #content h1,html #page-title{font-size:24px!important;line-height:32px!important}html #content h2{font-size:20px!important;line-height:28px!important}html #content h3{font-size:16px!important;line-height:24px!important}}html #content,html #content [data-as=p],html #content li,html #content p{font-size:16px;line-height:1.7;font-weight:400;color:var(--ds-text-primary)}html #content td{font-weight:400;color:var(--ds-text-primary)}html #content [data-as=p],html #content ol,html #content p,html #content ul{display:block;margin-top:16px;margin-bottom:0}html #content :is(h2, h3, h4)+:is(p, [data-as=\"p\"], ul, ol){margin-top:12px}html #content b,html #content strong{font-weight:600;color:inherit}html #header [class~=prose],html #header [class~=prose] p{margin-top:8px;font-size:16px!important;line-height:24px!important;letter-spacing:-.01em;color:var(--ds-text-tertiary)!important}html #header .eyebrow{height:auto;margin-bottom:8px;font-size:14px!important;line-height:20px!important;font-weight:400!important;color:var(--ds-text-secondary)!important}html #content ol,html #content ul{padding-left:24px}html #content ul{list-style-type:disc}html #content ol{list-style-type:decimal}html #content li{padding-left:4px;margin-top:0;margin-bottom:8px}html #content li::marker{color:inherit}html #content ul>li::before{content:none}.step-container p.font-semibold,.steps .step p.font-semibold{font-weight:600!important}html #content a:not([class*=card]):not([aria-label=\"Navigate to header\"]){color:inherit!important;font-weight:500;text-decoration:underline;text-decoration-style:solid;text-decoration-color:var(--ds-link-underline);text-underline-offset:2px;transition:opacity 100ms;cursor:pointer}html #content a:not([class*=card]):not([aria-label=\"Navigate to header\"]):hover{opacity:.6}html a:focus-visible,html button:focus-visible{outline:2px solid var(--ds-focus);outline-offset:4px}html :not(pre)>code{font-family:var(--ds-font-mono);font-size:.9em;font-weight:500;line-height:inherit;color:var(--ds-text-strong)!important;background:var(--ds-gray-100)!important;border:1px solid var(--ds-code-border);border-radius:4px;padding:1px 5px}html .code-block,html .code-group{border:1px solid var(--ds-codeblock-border)!important;border-radius:12px!important;box-shadow:var(--ds-codeblock-shadow)!important}html .code-block-background,html .code-group{background-color:var(--ds-codeblock-bg)!important}html .code-block-background{--shiki-dark-bg:var(--ds-codeblock-bg)!important;border:0!important;border-radius:11px!important}html .code-block-fade-overlay{--fade-color-light:var(--ds-codeblock-bg)!important;--fade-color-dark:var(--ds-codeblock-bg)!important}html pre{padding:0!important;overflow-x:auto}html pre code,html pre code span{font-family:var(--ds-font-mono);font-size:13px;line-height:22px;font-weight:400}html pre code{display:block;padding:16px 16px 16px 0}:root pre.shiki,:root pre.shiki code,:root pre.shiki code span,:root pre.shiki code span[style*=\"#D4D4D4\"i],:root pre.shiki[style*=\"#D4D4D4\"i]{color:var(--ds-syntax-text)!important}:root pre.shiki code span[style*=\"#569CD6\"i],:root pre.shiki code span[style*=\"#C586C0\"i]{color:var(--ds-syntax-keyword)!important}:root pre.shiki code span[style*=\"#CE9178\"i],:root pre.shiki code span[style*=\"#D16969\"i]{color:var(--ds-syntax-string)!important}:root pre.shiki code span[style*=\"#DCDCAA\"i]{color:var(--ds-syntax-function)!important}:root pre.shiki code span[style*=\"#9CDCFE\"i]{color:var(--ds-syntax-property)!important}:root pre.shiki code span[style*=\"#4FC1FF\"i],:root pre.shiki code span[style*=\"#B5CEA8\"i]{color:var(--ds-syntax-number)!important}:root pre.shiki code span[style*=\"#4EC9B0\"i]{color:var(--ds-syntax-type)!important}:root pre.shiki code span[style*=\"#808080\"i],:root pre.shiki code span[style*=\"#D7BA7D\"i]{color:var(--ds-syntax-muted)!important}:root pre.shiki code span[style*=\"#6A9955\"i]{color:var(--ds-syntax-comment)!important;font-style:italic}html #navigation-items .method-nav-pill>span,html span[class*=\"text-[0.55rem]\"][class*=rounded-md]{display:inline-block;margin:0;padding:1px 4px!important;border:0!important;border-radius:4px!important;box-shadow:none!important;font-family:var(--ds-font-mono);font-size:12px!important;font-weight:500!important;line-height:20.4px!important;letter-spacing:normal;text-transform:uppercase}html #content blockquote{margin:16px 0;padding-left:16px;border-left:1px solid var(--ds-link-underline);font-size:14px;line-height:20px;color:var(--ds-text-secondary)}html #content blockquote [data-as=p],html #content blockquote p{margin-top:0;font-size:14px;line-height:20px;color:var(--ds-text-secondary)}html [data-callout-type]{margin:16px 0;padding:12px 16px;border-radius:8px!important;border:1px solid var(--ds-border-strong)!important;background:var(--ds-bg-surface)!important;box-shadow:none!important}html [data-callout-type] [data-as=p],html [data-callout-type] p{margin-top:0;font-size:14px;line-height:20px}html [data-callout-type=info],html [data-callout-type=note]{background:var(--ds-blue-100)!important;border-color:var(--ds-blue-400)!important}html [data-callout-type=check],html [data-callout-type=tip]{background:var(--ds-green-100)!important;border-color:var(--ds-green-400)!important}html [data-callout-type=warning]{background:var(--ds-amber-100)!important;border-color:var(--ds-amber-400)!important}html [data-callout-type=danger]{background:var(--ds-red-100)!important;border-color:var(--ds-red-400)!important}html [data-callout-type=info] svg,html [data-callout-type=note] svg{color:var(--ds-blue-900)!important}html [data-callout-type=check] svg,html [data-callout-type=tip] svg{color:var(--ds-green-900)!important}html [data-callout-type=warning] svg{color:var(--ds-amber-900)!important}html [data-callout-type=danger] svg{color:var(--ds-red-900)!important}html #content table{font-size:14px}html #content td,html #content th{font-size:14px;line-height:20px;padding:10px 12px;border-color:var(--ds-border-default)!important}html #content th{font-weight:500;color:var(--ds-text-secondary)}html [class~=max-w-8xl]{max-width:1480px}html #navbar-transition{background-color:var(--ds-bg-page)!important;border-bottom-width:0!important}@media (min-width:1024px){html #sidebar{width:300px}html #content-container>[class~=flex-row-reverse]{justify-content:flex-end;gap:80px}html #content-area{width:100%;max-width:795px;margin-left:0;margin-right:0;padding-left:27px;padding-right:0}}@media (min-width:1280px){html #content-area{flex:0 1 795px;min-width:0}html #content-side-layout{flex:none;width:200px;max-width:200px}html #table-of-contents-layout{width:200px;padding-left:0}html #table-of-contents{width:200px}}html #navigation-items a,html #navigation-items button{font-size:14px!important;line-height:21px!important;font-weight:400!important;letter-spacing:normal!important;text-shadow:none!important}html #navigation-items li>a{min-height:36px;align-items:center;padding-top:0;padding-bottom:0;padding-right:8px;border-radius:6px;color:var(--ds-text-secondary)}html #navigation-items li>a[style=\"padding-left:1rem\"]{padding-left:10px!important}html #navigation-items li>a:hover,html #navigation-items li[data-group-tag]>button:hover{background-color:var(--ds-overlay-hover)}html #navigation-items li>a[aria-current=page],html #navigation-items li[data-active]>a{background-color:var(--ds-gray-200)!important;color:var(--ds-text-primary)!important}html #navigation-items>div:not(:has(>ul>li:not([data-group-tag])))>.sidebar-group-header{display:none}html .sidebar-group-header{min-height:36px;padding-left:10px;margin-bottom:0;gap:10px;font-size:14px!important;line-height:21px!important;font-weight:600!important;color:var(--ds-text-primary)!important}html .sidebar-group-header .sidebar-group-icon{width:16px;height:16px}html #navigation-items>div+div{margin-top:20px!important}html #navigation-items li[data-group-tag]>button{width:100%;min-height:36px;align-items:center;padding:0 8px 0 10px!important;border-radius:6px;font-weight:500!important;color:var(--ds-text-primary)}html #navigation-items li[data-group-tag]>button>div[class=\"\"]{flex:1;min-width:0}html #navigation-items li[data-group-tag]>button svg{color:var(--ds-text-secondary)}html #navigation-items li[data-group-tag]>button svg[class~=size-4]{background-color:var(--ds-text-secondary)!important}html #navigation-items li[data-group-tag]>button:not(:has(svg[class~=size-4]))::before{width:16px;height:16px;flex:none;background-color:var(--ds-text-secondary);-webkit-mask:var(--ds-nav-icon) center/100% no-repeat;mask:var(--ds-nav-icon) center/100% no-repeat}html #navigation-items li[data-title=Account]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Agents]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 8V4H8'/%3E%3Crect width='16' height='12' x='4' y='8' rx='2'/%3E%3Cpath d='M2 14h2'/%3E%3Cpath d='M20 14h2'/%3E%3Cpath d='M15 13v2'/%3E%3Cpath d='M9 13v2'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Calls]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13 2a9 9 0 0 1 9 9'/%3E%3Cpath d='M13 6a5 5 0 0 1 5 5'/%3E%3Cpath d='M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Conversations]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'/%3E%3Cpath d='M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=\"Knowledge base\"]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 5v16'/%3E%3Cpath d='M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=\"Phone numbers\"]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=\"Batch calls\"]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m16 8 6-6'/%3E%3Cpath d='M22 8V2h-6'/%3E%3Cpath d='M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Webhooks]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2'/%3E%3Cpath d='m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06'/%3E%3Cpath d='m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Integrations]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22v-5'/%3E%3Cpath d='M15 8V2'/%3E%3Cpath d='M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z'/%3E%3Cpath d='M9 8V2'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Team]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2'/%3E%3Cpath d='M16 3.128a4 4 0 0 1 0 7.744'/%3E%3Cpath d='M22 21v-2a4 4 0 0 0-3-3.87'/%3E%3Ccircle cx='9' cy='7' r='4'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Billing]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='20' height='14' x='2' y='5' rx='2'/%3E%3Cline x1='2' x2='22' y1='10' y2='10'/%3E%3Cpath d='M6 14h2'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Logs]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 12h-5'/%3E%3Cpath d='M15 8h-5'/%3E%3Cpath d='M19 17V5a2 2 0 0 0-2-2H4'/%3E%3Cpath d='M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Voices]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 10v3'/%3E%3Cpath d='M6 6v11'/%3E%3Cpath d='M10 3v18'/%3E%3Cpath d='M14 8v7'/%3E%3Cpath d='M18 5v13'/%3E%3Cpath d='M22 10v3'/%3E%3C/svg%3E\")}html #navigation-items li[data-title=Models]>button:not(:has(svg[class~=size-4]))::before{content:\"\";--ds-nav-icon:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20v2'/%3E%3Cpath d='M12 2v2'/%3E%3Cpath d='M17 20v2'/%3E%3Cpath d='M17 2v2'/%3E%3Cpath d='M2 12h2'/%3E%3Cpath d='M2 17h2'/%3E%3Cpath d='M2 7h2'/%3E%3Cpath d='M20 12h2'/%3E%3Cpath d='M20 17h2'/%3E%3Cpath d='M20 7h2'/%3E%3Cpath d='M7 20v2'/%3E%3Cpath d='M7 2v2'/%3E%3Crect x='4' y='4' width='16' height='16' rx='2'/%3E%3Crect x='8' y='8' width='8' height='8' rx='1'/%3E%3C/svg%3E\")}html #navigation-items li>a[style=\"padding-left:1.75rem\"]{padding-left:22px!important}html #navigation-items .method-nav-pill{width:48px}html #table-of-contents h2,html #table-of-contents h2 button{font-size:14px;line-height:21px;font-weight:500;color:var(--ds-text-primary)}html #table-of-contents a{font-size:14px!important;line-height:20px!important;font-weight:400!important;text-shadow:none!important;color:var(--ds-text-secondary)!important}html #table-of-contents li[data-active]>a{font-weight:500!important;color:var(--ds-text-primary)!important}html #pagination{font-size:14px;font-weight:500}html #footer{border-color:var(--ds-border-default)!important}html #navbar a[class*=font-medium]{font-size:14px;line-height:20px;font-weight:400;color:var(--ds-text-secondary)}html #navbar a[class*=font-medium]:hover,html #navbar a[class*=font-medium][aria-current],html #navbar a[class*=font-medium][class*=text-primary]{color:var(--ds-text-primary)}@media (min-width:1024px){html #navbar [class~=z-20]:has(#search-bar-entry),html #navbar div:has(>nav.text-sm){flex:none!important}html #search-bar-entry{width:264px!important;flex:none!important}}html #search-bar-entry{height:36px;border-radius:6px!important;font-size:14px;line-height:21px;color:var(--ds-text-secondary);background-color:transparent!important;filter:none!important;box-shadow:var(--ds-shadow-border)!important}html .bg-primary-dark,html .navbar-link,html a:has(>.bg-primary-dark){border-radius:6px!important}html #localization-select-trigger,html .navbar-link{font-size:14px;line-height:21px;font-weight:500;background-color:transparent!important}html .bg-primary-dark{background-color:var(--ds-gray-1000)!important}html .bg-primary-dark *,html a:has(>.bg-primary-dark),html a:has(>.bg-primary-dark) *{color:var(--ds-bg-page)!important;font-size:14px;font-weight:500}html [class~=rounded-2xl],html [class~=rounded-tl-xl],html [class~=rounded-xt]{border-radius:8px!important}html [class~=rounded-lg],html [class~=rounded-xl]{border-radius:6px!important}html [class*=\"border-white/\"],html [class*=border-gray-100],html [class*=border-gray-200],html [class*=border-gray-700],html [class*=border-gray-800]{border-color:var(--ds-border-default)}html #content .card,html #content a[class*=card]{background-color:var(--ds-bg-surface)!important;border:1px solid var(--ds-border-strong)!important;border-radius:8px!important;box-shadow:none!important;padding:0}html #content .card [data-component-part=card-content-container]{position:relative;padding:0!important}html #content .card [data-component-part=card-icon]{position:absolute;top:14px;left:16px;width:16px;height:16px;color:var(--ds-text-secondary)}html #content .card [data-component-part=card-icon] svg{width:16px!important;height:16px!important;color:var(--ds-text-secondary);fill:currentColor}html #content .card [data-component-part=card-title]{padding:12px 16px}html #content .card [data-component-part=card-content-container]:has([data-component-part=card-icon]) [data-component-part=card-title]{padding-left:42px}html #content .card [data-component-part=card-content]{margin:0;padding:14px 16px 16px;border-top:1px solid var(--ds-border-default)}html #content .card:hover,html #content a[class*=card]:hover{background-color:var(--ds-gray-100)!important;opacity:1}html #content .card h2,html #content .card h3,html #content .card h4,html #content a[class*=card] h2,html #content a[class*=card] h3{margin:0!important;font-size:14px!important;line-height:21px!important;font-weight:600!important;letter-spacing:-.01em!important;color:var(--ds-text-strong)!important}html #content .card [data-as=p],html #content .card p,html #content a[class*=card] [data-as=p],html #content a[class*=card] p{margin-top:0;font-size:13px;line-height:20px;color:var(--ds-text-tertiary)}html #content details.accordion{background-color:var(--ds-bg-surface)!important;border:1px solid var(--ds-border-strong)!important;border-radius:8px!important}html #content div:has(>iframe[src*=\"cap.so\"]){border-radius:12px;overflow:hidden;border:1px solid var(--ds-border-strong)}html #content iframe[src*=\"cap.so\"]{border-radius:inherit}html #content figure.frame{--frame-gap:16px;display:grid;grid-template-columns:minmax(0,1fr);padding:0;border:0;border-radius:0;background:0 0;overflow:visible}@media (min-width:640px){html #content figure.frame{--frame-gap:40px}}html #content figure.frame::before{content:\"\";grid-area:1/1;border-radius:12px;background-color:#99b3b2;background-image:url(/images/backgrounds/ryvo-sky.jpg);background-size:cover;background-position:center bottom;background-repeat:no-repeat}html #content figure.frame>div.absolute{display:none}html #content figure.frame>div.relative{grid-area:1/1;justify-self:center;max-width:calc(100% - 2*var(--frame-gap));margin:var(--frame-gap);border-radius:8px;box-shadow:0 0 0 1px rgba(0,0,0,.1),0 12px 32px -12px rgba(0,0,0,.35)}html #content figure.frame img{border-radius:8px}html #content figure.frame figcaption{grid-area:2/1;margin:12px 0 0!important;padding:0!important;border:0;background:0 0;text-align:left}html #content figure.frame figcaption p{margin:0;font-size:14px;line-height:20px;font-weight:400;color:var(--ds-text-secondary)}.changelog-frame{margin-top:15px;margin-bottom:15px}.cl-pill{display:inline-block;padding:2px 8px;border-radius:4px;font-size:13px;font-weight:500;line-height:16px;letter-spacing:normal;margin-bottom:6px}.cl-feat{background:var(--ds-blue-100);color:var(--ds-blue-900)}.cl-fix{background:var(--ds-amber-100);color:var(--ds-amber-900)}html #content .update h2{font-size:32px!important;line-height:40px!important;letter-spacing:-.05em!important;margin-top:4px;margin-bottom:16px}html #content .update h3{margin-top:40px}html #content .update :is(p, [data-as=\"p\"], li):not(figcaption *){color:color-mix(in srgb,var(--ds-text-primary) 80%,var(--ds-bg-page))}html #content .update :is(strong, b){color:var(--ds-text-primary)}html #content .update ul{list-style:none;margin-left:0;padding-left:0}html #content .update ul>li{position:relative;margin-left:0;padding-left:16px}html #content .update ul>li::before{content:\"\";position:absolute;left:4px;top:calc((1.7em - 5px)/2);width:5px;height:5px;border-radius:50%;background:currentColor}@media (min-width:640px){html #content .update h3{font-size:17px!important;line-height:24px!important}}@media (max-width:639px){html #content .update h2{font-size:24px!important;line-height:32px!important}}html #content .update button[class*=bg-primary]{background:0 0!important;padding:0!important;border-radius:0!important;white-space:nowrap!important;justify-content:flex-start!important;font-size:14px!important;font-weight:500!important;color:var(--ds-text-secondary)!important}@media (min-width:1024px){html #content .update>div:first-child{width:180px!important}}"}],"page":{"pagePath":"changelog","slug":"/changelog","pageMetadata":{"title":"Changelog","description":"New features, improvements and fixes in Ryvo.","mode":"wide","href":"/changelog"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"New features, improvements and fixes in Ryvo.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,OptimizedImage,Update}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Update)_missingMdxReference(`Update`,true);return _jsxs(_Fragment,{children:[_jsxs(Update,{label:`October 17, 2026`,id:`october-17%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`gohighlevel-connects-from-the-agency-too`,children:`GoHighLevel connects from the agency too`}),_jsx(_components.p,{children:`GoHighLevel now connects even when you authorize from the agency: Ryvo turns that access into the sub-account you picked, asks which one if you picked several and keeps the connection alive on its own. If GoHighLevel rejects the authorization, the card shows its exact reason.`})]}),`\n`,_jsxs(Update,{label:`October 16, 2026`,id:`october-16%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`naturalness%2C-so-your-agents-sound-like-a-person`,children:`Naturalness, so your agents sound like a person`}),_jsxs(_components.p,{children:[`Your agents now sound more natural without you writing a thing: Ryvo adds guidance to the end of their prompt, on by default, and you control it from the new `,_jsx(_components.strong,{children:`Naturalness`}),` section of the Builder.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Date and time:`}),` the agent knows the current day and time, with a calendar of the next two weeks. It books “on Thursday” or “the day after tomorrow” without mistakes and, when in doubt, confirms with the date.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Natural conversation:`}),` acknowledges without repeating itself, avoids robotic lines, uses contractions and asks the caller to repeat what it didn’t catch instead of guessing.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`On calls:`}),` short replies with no lists or links read out loud; phone and reference numbers digit by digit; money with its currency; and email addresses confirmed by spelling them (“B as in boy”).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`View text:`}),` each part shows the exact text your agent receives, in its language. If your prompt says otherwise, your prompt wins.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Agent time zone:`}),` automatic (your calling hours or the agent’s language) or the one you pick, without touching your calling hours.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Variables on calls:`}),` `,_jsx(_components.code,{children:`{{system__time_local}}`}),`, `,_jsx(_components.code,{children:`{{system__caller}}`}),` and `,_jsx(_components.code,{children:`{{system__channel}}`}),` are now filled in on voice calls too.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Safety net before the voice:`}),` even when the model writes bold text, lists or digits, your agent no longer reads them out wrong: Ryvo cleans the text right before the voice and says phone numbers, amounts, percentages and times like a person would.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Speaks while it checks:`}),` if a tool takes a while, the agent says “Let me check” instead of going silent.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Nods along while listening:`}),` it can drop an “uh-huh” or “mm-hmm” into a pause when someone talks for a while, without interrupting. Off by default.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Your business words:`}),` the transcriber understands your business and agent names better, because Ryvo passes them as keywords along with your pronunciation terms.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Also with Node:`}),` ask it to turn a part off or change the time zone.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`October 15, 2026`,id:`october-15%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`eleven-new-settings-in-the-agent-builder`,children:`Eleven new settings in the agent builder`}),_jsx(_components.p,{children:`What the builder marked as “Coming soon” now works: more control over the model, calls, tools and the web widget.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Model settings:`}),` in the LLM chip you pick the `,_jsx(_components.strong,{children:`Fallback model`}),` (the platform’s, your own or none), the `,_jsx(_components.strong,{children:`Reasoning effort`}),` and the `,_jsx(_components.strong,{children:`Token cap per answer`}),`. On calls reasoning stays at Low at most, so the agent doesn’t go silent thinking.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Soft timeout:`}),` when the model takes longer than usual, the agent says a short phrase (“Let me check on that.”) so the line never feels dead.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Model patience:`}),` smart turn detection is now on, and you decide how long the agent waits before answering when the caller pauses.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Security and fallback on calls:`}),` the security rules and the phrase the agent declines with now apply to voice too.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Voicemail detection:`}),` on outbound calls, if a voicemail answers, the agent hangs up or leaves the message you write.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Greeting generated by the model:`}),` the first message can be written by the model on every call instead of a fixed text.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Generate with AI:`}),` when you create an agent, describe what you need and Ryvo builds the first draft.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A fuller test panel:`}),` you see the cost and tokens of every answer, and you can test with your own variable values without saving them.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Tools that speak up:`}),` each tool can say something while it runs (“One moment, let me check.”) and be marked so that talking over it doesn’t cut it.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Web widget:`}),` editable status texts, how many files the agent remembers, typing during the call and an indicator of what the agent is doing.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Faster and cheaper with Claude:`}),` calls reuse the cached prompt between turns.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`October 15, 2026`,id:`october-15%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`drafts%2C-history-and-rollback-for-your-agents`,children:`Drafts, history and rollback for your agents`}),_jsx(_components.p,{children:`You can now work on your agent without touching what answers the phone: save a draft, test it and publish it when it’s ready. And if something goes wrong, go back to any earlier version.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Save draft:`}),` the new button next to Publish (or Ctrl+S) saves what you see as a new version without publishing it. The chat test panel and the voice test use it right away, so you test your changes before anyone else hears them.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Know where you stand:`}),` the chip next to the name tells “Unsaved changes”, “Unpublished draft” and “Published” apart. “Discard draft”, in the Publish menu, brings the agent back to what is published without deleting anything.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Publish note:`}),` when you publish you can leave a line that explains the change, and it stays in the history.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Full history:`}),` every version shows who saved it and when, and every time it was published: who, from where (the builder, the API, MCP or Node) and with what note.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Compare any two versions:`}),` side by side, section by section or in JSON, or one version in full.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Restore as draft:`}),` brings an earlier version into the editor so you can keep working from it.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Publish again:`}),` puts an earlier version live in one click, with the same checks as Publish. Before it does, it tells you which tools changed since then.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Also through the API, MCP and CLI:`}),` `,_jsx(_components.code,{children:`POST /v1/agents/{id}/publish`}),` accepts `,_jsx(_components.code,{children:`version`}),` and `,_jsx(_components.code,{children:`note`}),`, and MCP adds `,_jsx(_components.code,{children:`list_agent_versions`}),` and `,_jsx(_components.code,{children:`get_agent_version`}),`.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`October 15, 2026`,id:`october-15%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`gohighlevel-connects-again`,children:`GoHighLevel connects again`}),_jsx(_components.p,{children:`GoHighLevel connects again. Our integrations provider replaced its GoHighLevel connector and the Connect button was failing; Ryvo now uses the new one. You also no longer type your sub-account id: it comes from the connection, and you pick the calendar and pipeline from a list.`})]}),`\n`,_jsxs(Update,{label:`October 13, 2026`,id:`october-13%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`integrations-on-every-plan`,children:`Integrations on every plan`}),_jsx(_components.p,{children:`Integrations with your apps (Google Calendar, HubSpot, GoHighLevel, Gmail, Slack and the rest) are now available on every plan, Pay as you go included. Connect your apps and switch on their actions in your agent builder without changing plans.`})]}),`\n`,_jsxs(Update,{label:`October 13, 2026`,id:`october-13%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`pay-in-mexican-pesos`,children:`Pay in Mexican pesos`}),_jsx(_components.p,{children:`You can now pay for your plan and your top-ups in Mexican pesos as well as US dollars, at 20 pesos per dollar. Pick the currency in «Pay in» before entering your card, when you subscribe to a plan or top up your balance. You get the same credits in both currencies, and if your bank declines charges in US dollars, paying in pesos usually solves it.`})]}),`\n`,_jsxs(Update,{label:`October 13, 2026`,id:`october-13%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`an-abandoned-payment-no-longer-pauses-your-agents`,children:`An abandoned payment no longer pauses your agents`}),_jsx(_components.p,{children:`If you start paying for a plan and don’t finish, your agents are no longer paused and you no longer get the agent paused email when that payment attempt expires.`})]}),`\n`,_jsxs(Update,{label:`October 12, 2026`,id:`october-12%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`agent-tools-in-the-test-chat`,children:`Agent tools in the test chat`}),_jsx(_components.p,{children:`In your agent’s test chat, both text and voice, you now see each tool it calls between the messages, with its status: running, done with how long it took, or failed.`})]}),`\n`,_jsxs(Update,{label:`October 12, 2026`,id:`october-12%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`audio-tags%2C-used-sparingly`,children:`Audio tags, used sparingly`}),_jsx(_components.p,{children:`Expressive voice no longer puts an audio tag in every reply: most replies carry none, never two in a row and never out of habit at the start, and the agent no longer clears its throat or pauses before speaking.`})]}),`\n`,_jsxs(Update,{label:`October 12, 2026`,id:`october-12%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`node-uses-your-saved-keys-in-tools`,children:`Node uses your saved keys in tools`}),_jsx(_components.p,{children:`Node now connects your API tools to the key you saved instead of copying its reference as if it were the token, and builds GoHighLevel tools with its API v2 routes, such as looking up a contact by email.`})]}),`\n`,_jsxs(Update,{label:`October 9, 2026`,id:`october-9%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`agents-no-longer-whisper`,children:`Agents no longer whisper`}),_jsx(_components.p,{children:`Agents with an expressive voice no longer drop their voice: we removed the whisper and soft tags, which made replies nearly inaudible over the phone, and the agent no longer uses them when apologizing or on sensitive topics.`})]}),`\n`,_jsxs(Update,{label:`October 9, 2026`,id:`october-9%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`api-tools-with-gohighlevel`,children:`API tools with GoHighLevel`}),_jsx(_components.p,{children:`API tools that call GoHighLevel now send the Version header its API requires, and Node stores your sub-account locationId as a fixed value instead of letting the agent guess it.`})]}),`\n`,_jsxs(Update,{label:`October 8, 2026`,id:`october-8%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`the-api-exposes-the-agent%E2%80%99s-flow`,children:`The API exposes the agent’s flow`}),_jsx(_components.p,{children:`The API, the MCP server and the CLI can now read and change an agent’s flow: GET returns its stages and connections, PATCH replaces or removes it, with the same rules as the Builder.`})]}),`\n`,_jsxs(Update,{label:`October 8, 2026`,id:`october-8%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`node-edits-your-agent%E2%80%99s-flow`,children:`Node edits your agent’s flow`}),_jsx(_components.p,{children:`Node can now view and edit your agent’s conversation flow: ask it to add a stage, reorder stages or remove one, and it saves the change as a draft. If the change removes stages or changes where the conversation starts, it asks you to confirm first.`})]}),`\n`,_jsxs(Update,{label:`October 8, 2026`,id:`october-8%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`flow-agents-from-create`,children:`Flow agents from Create`}),_jsx(_components.p,{children:`When creating an agent you can now pick “Conversation flow”: it starts with its first stage and opens straight into the canvas.`})]}),`\n`,_jsxs(Update,{label:`October 8, 2026`,id:`october-8%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`flow-templates-by-vertical`,children:`Flow templates by vertical`}),_jsx(_components.p,{children:`Pick a flow template for reception, appointments, lead qualification or collections and start with the stages already built, in your agent’s language.`})]}),`\n`,_jsxs(Update,{label:`October 8, 2026`,id:`october-8%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`flow-analytics`,children:`Flow analytics`}),_jsx(_components.p,{children:`The flow canvas now has an “Analytics” button: see how many conversations entered the flow, how many reached the end and how many stopped midway, a funnel by stage showing which way each one left, and the list of executions with filters for date, channel, version, stage and result. Each row opens the conversation straight on its Workflow tab.`})]}),`\n`,_jsxs(Update,{label:`October 7, 2026`,id:`october-7%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`your-agent%E2%80%99s-avatar%2C-everywhere`,children:`Your agent’s avatar, everywhere`}),_jsx(_components.p,{children:`Your agent has an animated character, the same one in your web widget and across Ryvo, and you configure it.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Edit it from Agent:`}),` the agent’s avatar now shows next to its name in the Agent tab. Click it to change its shape, expression, background and color: it is the same character as your web widget, so the change shows in both places and goes out when you publish.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Any color:`}),` next to the default colors, the rainbow circle opens a picker to choose your own, and the eyes always stay readable.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The same character in the widget:`}),` your widget’s avatar is your agent’s animated character, the same one you see in Ryvo, and the preview shows it exactly as your visitors will see it.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The same across the dashboard:`}),` when you change an agent’s avatar and publish, the new character shows up across the dashboard: the agent list, the sidebar, calls and conversations. Inside the builder you see it change right away.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`October 7, 2026`,id:`october-7%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`flows-for-your-voice-agents`,children:`Flows for your voice agents`}),_jsx(_components.p,{children:`The builder now has Flow: draw your agent’s stages, connect them with conditions and let voice calls run them.`}),_jsx(Heading,{level:`3`,id:`build-your-flow-step-by-step`,children:`Build your flow step by step`}),_jsx(_components.p,{children:`The canvas runs top to bottom, like a GoHighLevel workflow. It starts with “Add the first step” and every ”+” opens a catalog of ready-made steps (qualify, book, answer questions, hand off to a person) plus the tools from your integrations, inserted right where you clicked.`}),_jsx(Heading,{level:`3`,id:`one-panel-per-stage`,children:`One panel per stage`}),_jsx(_components.p,{children:`Each stage panel is organized into tabs: General, Tools and Connections. Override the agent’s prompt with a toggle, see the order in which connections are checked and change it, and duplicate or delete a step from the buttons that appear next to it.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Starts with the greeting:`}),` flows start the way a call does. The Start card shows whether the agent greets or waits for the customer to speak, and you edit the greeting right there. The first step only offers what can open a conversation (stages and looking up data before speaking), and handing off to a person lives on its own, under “At any time”.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Runs on your calls:`}),` flows now run on voice calls. The agent moves between the stages you drew based on your conditions, says your fixed messages, runs each step’s tools, and hangs up when it reaches the end.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`October 7, 2026`,id:`october-7%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`set-up-your-web-widget-your-way`,children:`Set up your web widget your way`}),_jsx(_components.p,{children:`The web widget gets a sectioned configurator, with color-coded embed code and a preview that shows the result before you save.`}),_jsx(Heading,{level:`3`,id:`style-and-colors`,children:`Style and colors`}),_jsx(_components.p,{children:`Choose how it looks on your site: a round button, a card, or a card with a bigger window, in any of six positions, with your brand’s colors and sizes. Under Styling, every color and size goes by a plain name, like Background or Accent border.`}),_jsx(_components.p,{children:`Colors are picked with a click: tap the swatch of any color and choose from the palette, or open the picker for any shade, with a saturation and brightness area, a hue slider and the hex code. If you have your brand’s exact code, you can still type it next to it.`}),_jsx(Heading,{level:`3`,id:`your-words-and-your-picture`,children:`Your words and your picture`}),_jsx(_components.p,{children:`Replace the widget’s texts with your own, in Spanish and English: the card’s question, the buttons, the message box and the end-of-conversation notice. Anything you leave empty keeps the default text, and the preview shows each language.`}),_jsx(_components.p,{children:`The widget can show the picture you want: the agent’s avatar, an image already online on your site, or one you upload from the configurator (PNG, JPG or WebP, up to 2 MB).`}),_jsx(Heading,{level:`3`,id:`autosave-and-a-single-publish`,children:`Autosave and a single Publish`}),_jsx(_components.p,{children:`The configurator saves itself: every change is saved as you edit, so you can leave and come back without losing anything. Your site changes when you click Publish, and an orange dot tells you when there are unpublished changes, with Review changes and Discard changes.`}),_jsx(_components.p,{children:`Publish lives in a single button for the whole agent, web widget included. When you review changes you see in the same summary what changed in the prompt, the tools and the widget, and you can discard everything from there.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The interface:`}),` the widget can open by itself when your site loads, show the call transcript live, let visitors mute their microphone or switch the widget between Spanish and English, resize its window, and show the conversation ID at the end. Paste that ID into the Calls or Chats search to find the conversation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Formatted replies and safe links:`}),` the agent’s replies show formatting (bold, lists, code) and their links can be opened, but only those on the domains you choose. Dangerous links like `,_jsx(_components.code,{children:`javascript:`}),` never open.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Document attachments:`}),` visitors can attach PDF, Word or text documents up to 2 MB and the agent reads them to answer. You choose whether it’s allowed and how many per conversation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Terms and conditions:`}),` you can ask visitors to accept them before calling. Write them with formatting and links, and they’re asked again whenever you change them.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ratings:`}),` when a call ends, the visitor can rate it from 1 to 5 stars and leave you a comment. You’ll see it in the call details, in Calls.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Shareable page:`}),` turn it on to get a page with your agent full screen that you can send by email, WhatsApp or social media, no website needed. Add a description and ask visitors to accept your terms before they talk.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Channels, as a list:`}),` in the builder, Channels is now a list showing each channel’s status with its settings one click away, and notices use the same toast as the rest of Ryvo.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`October 7, 2026`,id:`october-7%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`new-logo-and-centered-verification`,children:`New logo and centered verification`}),_jsx(_components.p,{children:`The new Ryvo logo now shows on the sign-in and sign-up screens. The code from your authenticator app is also entered on a centered screen, just like the code we email you.`})]}),`\n`,_jsxs(Update,{label:`October 7, 2026`,id:`october-7%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`workflow-path-in-every-conversation`,children:`Workflow path in every conversation`}),_jsx(_components.p,{children:`Calls and chats that ran with a workflow now have a «Workflow» tab in their detail: the workflow with the stages and connections the conversation went through highlighted, where it ended, and a timeline with every stage change, why it happened and the second it happened at.`})]}),`\n`,_jsxs(Update,{label:`October 7, 2026`,id:`october-7%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`branches-in-the-flow-editor`,children:`Branches in the flow editor`}),_jsx(_components.p,{children:`You can now split a stage into two or more paths in one click: “Add branch” appears next to the selected step, and the ”+” below a stage stays even when it already has exits. Each branch shows its condition on its own line, and step and connection panels now have Save and Cancel buttons.`})]}),`\n`,_jsxs(Update,{label:`October 7, 2026`,id:`october-7%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`flow-stages-no-longer-cut-themselves-short`,children:`Flow stages no longer cut themselves short`}),_jsx(_components.p,{children:`Your flows no longer jump stages on their own. A new connection from a conversation stage starts as “The agent decides” and asks you to describe when it should move on, and a stage whose only exit is “Always” can no longer be published, since it ended after a single turn and hung up the call.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`see-what-a-call-cost-as-soon-as-it-ends`,children:`See what a call cost as soon as it ends`}),_jsx(_components.p,{children:`As soon as a call ends, the breakdown shows what it cost: the exact total in credits, marked “not charged yet” until it’s applied to your plan or balance, usually within the hour.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`recordings-show-up-on-their-own-after-hanging-up`,children:`Recordings show up on their own after hanging up`}),_jsx(_components.p,{children:`When a call ends, the call detail no longer says it wasn’t recorded: it shows the recording is processing and the player appears on its own as soon as it’s ready, a few seconds later.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`real-background-sounds`,children:`Real background sounds`}),_jsx(_components.p,{children:`Voice agent background sounds are now real recordings of an office, a coffee shop and a street, plus a new one: busy street. You can preview them in the builder before picking one.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`reasoning-models-answer-faster`,children:`Reasoning models answer faster`}),_jsx(_components.p,{children:`Voice agents on reasoning models like GPT-5 mini no longer overthink before speaking. Every model is measured as in a real call and asked for the least reasoning it accepts: GPT-5 mini went from over 2 seconds to under one to say its first word. The latency label comes from that measurement, and each call’s detail shows how long the model took to speak and how long it reasoned.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`preview-any-voice-before-you-pick-it`,children:`Preview any voice before you pick it`}),_jsx(_components.p,{children:`In the voice explorer each voice’s orb is bigger and shows a play button on hover, so you can listen to the sample before choosing it.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-clearer-sidebar`,children:`A clearer sidebar`}),_jsx(_components.p,{children:`The sidebar got a refresh: Agents is its own section with aligned avatars, “More” opens a search with all your agents and their calls, section labels are no longer uppercase or collapsible, and the open tool shows in bold on a gray that stands out in light mode.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`more-readable-titles`,children:`More readable titles`}),_jsx(_components.p,{children:`Screen titles now use Geist Sans, easier to read than the previous pixel typeface.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-8`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`node%2C-full-screen`,children:`Node, full screen`}),_jsx(_components.p,{children:`Node now has its own screen in the menu: write to it from a home page with shortcuts, attach files, pick up past conversations and watch the video of what it can do for you.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-9`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`expressive-voice-with-audio-tags`,children:`Expressive voice with audio tags`}),_jsx(_components.p,{children:`Agents on Eleven v3 or v4 voices now sound more human: they can laugh, whisper, sigh or sound excited with audio tags. Ryvo teaches the model when to use them, the Tags button inserts them into the prompt and the first message, and they show up in color as you type. On other voices they are removed before speaking, so they are never read out loud. If you want a neutral voice, turn off the Expressive voice switch.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-10`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`gladia-for-transcription`,children:`Gladia for transcription`}),_jsx(_components.p,{children:`You can now pick Gladia as the transcription engine for your voice agents. It is a premium engine, so the minute of agents that use it goes up 15%, and the builder’s price meter shows it before you publish. Other transcription engines keep their price.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-11`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`calls-that-never-started-no-longer-stay-%E2%80%9Cin-progress%E2%80%9D`,children:`Calls that never started no longer stay “in progress”`}),_jsx(_components.p,{children:`Calls that never got to start no longer show as “in progress” forever in your call history or in the API: they now show as failed. And if Twilio is slow to create an outbound call, the call now closes on its own as soon as Twilio reports how it ended.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-12`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`your-number-no-longer-stays-busy-after-an-early-hang-up`,children:`Your number no longer stays busy after an early hang-up`}),_jsx(_components.p,{children:`If someone calls your number and hangs up before your agent gets to speak, the line now frees up within seconds. Before, it could stay busy for up to 17 minutes, and the next calls couldn’t get through in that time.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-13`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`agents-can-no-longer-go-live-with-a-model-that-can%E2%80%99t-take-calls`,children:`Agents can no longer go live with a model that can’t take calls`}),_jsx(_components.p,{children:`The builder no longer lets you pick a model your agent couldn’t take calls with, and it tells you why. Publishing also re-checks that the model, transcriber and voice you chose are still available, so a published agent never turns calls away without warning.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-14`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`chat-agents-now-fall-back-to-their-backup-model`,children:`Chat agents now fall back to their backup model`}),_jsx(_components.p,{children:`If a chat agent’s main model fails or is overloaded, the reply now falls back to the backup model automatically instead of showing an error.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-15`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`an-unresponsive-model-no-longer-leaves-the-chat-stuck-thinking`,children:`An unresponsive model no longer leaves the chat stuck thinking`}),_jsx(_components.p,{children:`If a chat agent’s model stops responding, the chat now switches to the backup model within seconds instead of staying stuck on thinking until the turn times out.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-16`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`agent-variables-now-work-in-chat`,children:`Agent variables now work in chat`}),_jsx(_components.p,{children:`Your agent’s variables, such as your business name, now reach chats and the data your tools receive with their actual value. Before, a chat agent could receive them as unreadable text instead of their value.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-17`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`no-more-retry-prompt-on-a-complete-reply`,children:`No more retry prompt on a complete reply`}),_jsx(_components.p,{children:`If your chat agent has already replied in full and something fails while recording the charge, the chat no longer shows “An unexpected error occurred, try again”. That message invited people to resend and pay for a second reply.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-18`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`more-even-voices-from-sentence-to-sentence`,children:`More even voices from sentence to sentence`}),_jsx(_components.p,{children:`ElevenLabs voices now sound more even from one sentence to the next. If you don’t set the voice’s stability, Ryvo uses 0.7 instead of the provider’s value, which made each sentence start in a different tone. You can change it in Fine voice tuning.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-19`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`your-agent%2C-the-same-on-every-call`,children:`Your agent, the same on every call`}),_jsx(_components.p,{children:`In your call history, every call now shows your agent’s name and avatar, the same one as on its page, and a call that just ended says “In progress” for a few seconds instead of “No answer”.`})]}),`\n`,_jsxs(Update,{label:`October 6, 2026`,id:`october-6%2C-2026-20`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`latency-labels-you-can-trust`,children:`Latency labels you can trust`}),_jsx(_components.p,{children:`Each language model’s latency label now comes from its live measured response time, not its name. Models that think before they speak no longer show as “Low latency” when you pick your agent’s model.`})]}),`\n`,_jsxs(Update,{label:`October 5, 2026`,id:`october-5%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`calling-and-data-processing-agreement`,children:`Calling and Data Processing Agreement`}),_jsx(_components.p,{children:`Before connecting a phone number or placing calls, your account accepts the Calling and Data Processing Agreement from Settings, Legal. You can see who accepted it and when, and the full text lives at ryvo.so/calling-agreement.`})]}),`\n`,_jsxs(Update,{label:`October 1, 2026`,id:`october-1%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`web-widget-usage-limits`,children:`Web widget usage limits`}),_jsx(_components.p,{children:`Your web widget now has usage limits: set how many voice minutes and chat messages it can spend in 24 hours. If you don’t set them, the widget stays unlimited.`})]}),`\n`,_jsxs(Update,{label:`October 1, 2026`,id:`october-1%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`when-you-test-your-agent-by-voice-in-the-builder%2C%E2%80%A6`,children:`When you test your agent by voice in the builder,…`}),_jsx(_components.p,{children:`When you test your agent by voice in the builder, you now see the conversation live as you talk, with the agent’s emotion tags (like [excited`})]}),`\n`,_jsxs(Update,{label:`October 1, 2026`,id:`october-1%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`every-call-is-recorded`,children:`Every call is recorded`}),_jsx(_components.p,{children:`Every call your agents take is now recorded, in the voice test, your website widget and over the phone. Open any call to listen to it or download it. Recordings are kept for 7 days.`})]}),`\n`,_jsxs(Update,{label:`October 1, 2026`,id:`october-1%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`log-out-works-from-any-account`,children:`Log out works from any account`}),_jsx(_components.p,{children:`Log out now always signs you out, even when you are inside another account or have the dashboard open in several tabs. When you sign back in you start from your own account, not from the last one you were viewing.`})]}),`\n`,_jsxs(Update,{label:`October 1, 2026`,id:`october-1%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`the-test-call-connects`,children:`The test call connects`}),_jsx(_components.p,{children:`The test call from the agent builder connects again: your browser joins the room and the agent greets you.`})]}),`\n`,_jsxs(Update,{label:`October 1, 2026`,id:`october-1%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`the-test-call-from-the-agent-builder-and-the%E2%80%A6`,children:`The test call from the agent builder and the…`}),_jsx(_components.p,{children:`The test call from the agent builder and the voice widget now connect to your agent from any browser.`})]}),`\n`,_jsxs(Update,{label:`October 1, 2026`,id:`october-1%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`node-opens-only-when-you-ask`,children:`Node opens only when you ask`}),_jsx(_components.p,{children:`Node no longer opens by itself: it only opens when you click its button. When you enter the agent builder the sidebar stays the way you left it, and if your sign-up conversation is waiting, the Node button shows a dot.`})]}),`\n`,_jsxs(Update,{label:`October 1, 2026`,id:`october-1%2C-2026-8`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`you-can-now-hear-each-voice%E2%80%99s-sample-in-the-voice%E2%80%A6`,children:`You can now hear each voice’s sample in the voice…`}),_jsx(_components.p,{children:`You can now hear each voice’s sample in the voice explorer before picking it, and play your calls’ recordings from their details.`})]}),`\n`,_jsxs(Update,{label:`September 30, 2026`,id:`september-30%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-clearer-dashboard-and-a-new-guided-tour`,children:`A clearer dashboard and a new guided tour`}),_jsx(_components.p,{children:`The dashboard looks clearer and more polished: more readable text in light and dark mode, roomier fields and buttons, new empty states and a guided tour that takes you to your first agent answering calls.`})]}),`\n`,_jsxs(Update,{label:`September 30, 2026`,id:`september-30%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`node-feeds-your-knowledge-base`,children:`Node feeds your knowledge base`}),_jsx(_components.p,{children:`Node can now read your website or any page and save it to your knowledge base, and you can drag or attach files (PDF, Word, text) right in the conversation: Node assigns them to your agent.`})]}),`\n`,_jsxs(Update,{label:`September 30, 2026`,id:`september-30%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`node-does-much-more-for-you`,children:`Node does much more for you`}),_jsx(_components.p,{children:`Node can now import your Twilio number (you paste the token into a secure card, never the chat), place calls and launch campaigns from a CSV with the cost shown first, organize your knowledge base into folders, and manage your webhooks and stats.`})]}),`\n`,_jsxs(Update,{label:`September 30, 2026`,id:`september-30%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`new-agent-builder`,children:`New agent builder`}),_jsx(_components.p,{children:`We redesigned the agent builder: it now has a sidebar with every section, the price per minute broken down by piece (LLM, voice and transcription), voice and model browsers with filters, and a cleaner tools panel. Each agent also gets a unique animated avatar, and in Phones you can import a number with the “Import phone number” button.`})]}),`\n`,_jsxs(Update,{label:`September 30, 2026`,id:`september-30%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`node-in-the-agent-builder%2C-fluent-in-every-integration`,children:`Node in the agent builder, fluent in every integration`}),_jsx(_components.p,{children:`Node now lives inside the agent builder too, and your conversation follows you across screens. It understands every integration end to end: ask it to make your agent check availability in Google Calendar or log leads in HubSpot and it connects the app, sets the calendar and time zone, turns on the right actions, writes the instructions into your agent’s prompt and tests it against your real account. When it creates an agent it leaves you a button to open it, and the ring next to the chat shows how many credits you have left.`})]}),`\n`,_jsxs(Update,{label:`September 30, 2026`,id:`september-30%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`node-now-bills-by-usage-and-thinks-harder-on-hard-tasks`,children:`Node now bills by usage and thinks harder on hard tasks`}),_jsx(_components.p,{children:`Node now charges for the work it actually does: a short message costs less, and a big task like building an agent costs a bit more. For the hard jobs it switches to a more capable model, and every conversation shows how many credits it has used.`})]}),`\n`,_jsxs(Update,{label:`September 30, 2026`,id:`september-30%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`node-explains-how-to-do-things`,children:`Node explains how to do things`}),_jsx(_components.p,{children:`Node now answers “how do I…” questions with the steps from our guides, for example importing your Twilio number, and shares the link to the guide in your language.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`more-room-for-your-agents%E2%80%99-voices`,children:`More room for your agents’ voices`}),_jsx(_components.p,{children:`Ryvo now checks every day for ElevenLabs library voices your agents no longer use, to free up room so a new voice doesn’t fail when you save your agent. Voices used by any published version or draft of an agent are never touched.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`voice-and-chat-web-widget-for-your-agents`,children:`Voice and chat web widget for your agents`}),_jsx(_components.p,{children:`Your Builder agents can now live on your website. Copy a snippet from the Channels tab, paste it on your page and your visitors can chat or talk with your published agent from a bubble. You choose which domains can show it, and each conversation is billed like a web conversation.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`pick-any-voice%2C-the-engine-follows`,children:`Pick any voice, the engine follows`}),_jsx(_components.p,{children:`You can now pick your agent’s voice from thousands of ElevenLabs, Cartesia and Deepgram voices, with search and filters for language, accent, gender and provider, and listen to each one before using it. Picking a voice sets the voice engine for you. Fallback voices are assigned automatically with the same gender and language, you can change them, and they no longer block publishing.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`see-your-voice-minute-price`,children:`See your voice minute price`}),_jsx(_components.p,{children:`You now see what your agent’s voice minute costs before you publish it. The builder shows the price of the combination you picked, in credits and dollars, and updates as you change the language model or the voice. Every model in the lists shows what the minute would cost if you picked it, and the voice picker tells you when a voice changes the price. You can also get it through the API with GET /v1/pricing/voice-minute.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`ryvo-mcp-server`,children:`Ryvo MCP server`}),_jsx(_components.p,{children:`You can now connect Claude Code, Cursor, VS Code or Windsurf to your Ryvo account with the MCP server at mcp.ryvo.so, using the same API key. Your assistant can look up calls, conversations and stats, edit and publish agents, add documents and, once you confirm, place calls or launch campaigns, always within the key’s scopes and credit limit.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`the-ryvo-cli`,children:`The Ryvo CLI`}),_jsxs(_components.p,{children:[`New Ryvo command line: install it with `,_jsx(_components.code,{children:`npm i -g @ryvo-so/cli`}),` and drive agents, calls, campaigns, webhooks and the knowledge base from your terminal. Human tables or `,_jsx(_components.code,{children:`--json`}),` for scripts, exit codes per error type, automatic retries, and a confirmation before any command that spends credits. `,_jsx(_components.code,{children:`ryvo mcp install`}),` connects the Ryvo MCP server to Claude Code, Cursor, VS Code or Windsurf without writing your key to any file.`]})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`ryvo-fully-in-english`,children:`Ryvo fully in English`}),_jsx(_components.p,{children:`Ryvo is now fully in English for English accounts: Node, call tables, the builder, public pages, messages and exports. New agents speak English by default with an English voice, and you can pick another language at any time. Portal URLs are now in English and the old ones redirect automatically.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-8`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`auto-top-up-covers-agent-builder-agents`,children:`Auto top-up covers Agent Builder agents`}),_jsx(_components.p,{children:`Auto top-up now also kicks in when your balance drops from Agent Builder usage, both voice calls and chat, not only from ElevenLabs conversations.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-9`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`api-key-limits-count-agent-builder-voice`,children:`API key limits count Agent Builder voice`}),_jsx(_components.p,{children:`An API key credit limit now also counts voice calls from your Agent Builder agents, and the counter for ElevenLabs calls started through the API adds up again.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-10`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`error-messages-in-your-language`,children:`Error messages in your language`}),_jsx(_components.p,{children:`If you use the dashboard in English, the error messages you get when creating, editing and publishing agents, choosing a language model and managing your team are now in English. The public API also returns agent validation errors in English (for example, a model outside your plan or an out-of-range temperature), with the same error codes as before.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-11`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`pay-as-you-go%2C-explained-as-it-works`,children:`Pay as you go, explained as it works`}),_jsxs(_components.p,{children:[`The Get started screen now explains pay as you go the way it really works: usage is drawn from a balance you top up, your agent does not start without balance, voice minutes start at `,`$0.14 USD and the minimum top-up is $`,`25 USD. It used to suggest that saving a payment method was enough.`]})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-12`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`plans-no-longer-list-post-call-whatsapp`,children:`Plans no longer list post-call WhatsApp`}),_jsx(_components.p,{children:`We removed the post-call WhatsApp summary from our plans. It was never available, so we took it off the plan cards, the comparison table and the docs, so each plan lists exactly what it includes. Your agent still answers WhatsApp messages when you connect your number.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-13`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`we-now-tell-you-about-your-agent%E2%80%99s-first-conversation`,children:`We now tell you about your agent’s first conversation`}),_jsx(_components.p,{children:`When your agent handles its first real conversation, you now get the email letting you know. The notice that your agent was published also arrives reliably now.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-14`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`api-key-budgets-now-cover-batch-calls`,children:`API key budgets now cover batch calls`}),_jsxs(_components.p,{children:[`An API key’s credit budget now also covers batch calls: a batch reserves the estimated cost of all its calls before it starts, and if real spending exhausts the budget, the remaining calls are cancelled. Two launches at the same time can no longer go over the budget, and `,_jsx(_components.code,{children:`POST /v1/batch-calls`}),` accepts `,_jsx(_components.code,{children:`Idempotency-Key`}),` so a retry never launches the same batch twice.`]})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-15`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`emails-in-english-with-the-new-icon`,children:`Emails in English with the new icon`}),_jsx(_components.p,{children:`All Ryvo emails now arrive in English with the new brand icon.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-16`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`welcome-email-with-your-next-steps`,children:`Welcome email with your next steps`}),_jsx(_components.p,{children:`When you finish signing up you get a welcome email with the next steps to put your first agent to work.`})]}),`\n`,_jsxs(Update,{label:`September 29, 2026`,id:`september-29%2C-2026-17`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`phone-calls-show-their-real-duration-and-cost`,children:`Phone calls show their real duration and cost`}),_jsx(_components.p,{children:`Phone calls made by your Builder agents are now recorded as completed, with their real duration and cost. Before, when the call ended on the phone side it could show up as failed and with no duration even though the agent did talk.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`actions%2C-named-the-way-the-guide-names-them`,children:`Actions, named the way the guide names them`}),_jsx(_components.p,{children:`Your integration actions now follow the language you picked. With the portal in English, View actions shows the same names as the app’s guide, and the values GoHighLevel asks for are named the same in both places. Before, the guide said one thing and the screen said another.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`conversation-start-and-end-webhooks`,children:`Conversation start and end webhooks`}),_jsx(_components.p,{children:`Your Builder agents now send a webhook when each conversation starts and when it ends, with its duration and outcome. And you now pick from the portal which events your endpoint subscribes to, without writing to us.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`delete-a-document-from-the-knowledge-base`,children:`Delete a document from the knowledge base`}),_jsx(_components.p,{children:`You can now delete a document from your knowledge base and get its space back instantly, from the Knowledge base screen or from the agent builder. If other agents used it, we tell you which ones so you can remove it from their setup.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`more-voice-minutes-and-per-combo-pricing`,children:`More voice minutes and per-combo pricing`}),_jsxs(_components.p,{children:[`Plans now go further on voice: Starter includes 22,000 credits (about 183 minutes), Pro 99,000 (about 990) and Scale 299,000 (about 3,737). The extra minute drops to `,`$0.14 on Pay as you go, $`,`0.12 on Starter, `,`$0.10 on Pro and $`,`0.08 on Scale. The voice minute now depends on your agent’s voice and model: the Economy combo pays your plan’s rate, and the Standard, Premium and Max tiers multiply it by 1.75, 3 and 5.`]})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`public-api%3A-58-endpoints-across-the-whole-platform`,children:`Public API: 58 endpoints across the whole platform`}),_jsx(_components.p,{children:`The Ryvo public API now covers the whole platform: agents (create, configure, publish, versions), calls and conversations with transcript and audio, knowledge base with folders, phone numbers, batch calls, webhooks with retries, integrations, team, billing and logs. Every API key asks for per-resource scopes (for example calls:read or knowledge:write) and every list is cursor-paginated. The full reference lives at docs.ryvo.so/api-reference.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`token-bucket-rate-limits-on-the-api`,children:`Token bucket rate limits on the API`}),_jsx(_components.p,{children:`The public API now rate-limits with a token bucket: after being idle you can spend your per-minute limit in one burst, and if you run out you get capacity back within seconds instead of waiting for the next minute. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers so your integration can slow down before it gets a 429.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`easier-plan-comparison`,children:`Easier plan comparison`}),_jsx(_components.p,{children:`Plan cards now show voice minutes and dollars instead of credits, and each plan lists only what it adds on top of the previous one, under «Everything in Starter, plus:» and so on up the ladder.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-8`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`builder-agents-now-take-and-place-phone-calls`,children:`Builder agents now take and place phone calls`}),_jsx(_components.p,{children:`Your Builder agents can now answer and make phone calls. Connect your Twilio number, assign it to the agent from the Channels tab and anyone who dials it will talk to your agent. You can also place calls from the Builder itself or through the API with POST /v1/calls. Calls show up in your history with their number and direction.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-9`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`voice-library-in-the-api`,children:`Voice library in the API`}),_jsx(_components.p,{children:`New voice library: Ryvo now syncs thousands of ElevenLabs, Cartesia and Deepgram voices in Spanish and English every day, and you can browse them through the API with GET /v1/voices, filtering by provider, language, gender and name. Voices that carry an extra provider fee are left out.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-10`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`new-sign-in-and-sign-up`,children:`New sign-in and sign-up`}),_jsx(_components.p,{children:`The sign-in and sign-up screens have a new look: a single centered module on black, framed by a textured square that stays put as you move through the steps. Your phone number now comes with a country picker and is verified with an SMS code before you continue.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-11`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`node-builds-your-first-agent`,children:`Node builds your first agent`}),_jsx(_components.p,{children:`Signup now ends with Node: tell it your website and what your agent should do, and Node reads the site, writes the prompt and leaves your agent ready to test. Every new account gets welcome credits for that conversation, and when you land in the dashboard it is open so you can pick up where you left off.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-12`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`node-interviews-you-and-shows-its-reasoning`,children:`Node interviews you and shows its reasoning`}),_jsx(_components.p,{children:`Node now interviews you to build your first agent: it asks what the agent should do, who it talks to and what it must collect, and you can watch its reasoning as it works.`})]}),`\n`,_jsxs(Update,{label:`September 28, 2026`,id:`september-28%2C-2026-13`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`per-account-idempotency-and-a-standard-429`,children:`Per-account idempotency and a standard 429`}),_jsx(_components.p,{children:`An Idempotency-Key now belongs to your account: another customer using the same string no longer gets you a 409. Retrying a call can no longer dial twice because the record was lost, and the 429 error now has the same shape as every other API error (code, message and request_id) with a Retry-After of at least one second.`})]}),`\n`,_jsxs(Update,{label:`September 25, 2026`,id:`september-25%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`unified-event-log`,children:`Unified event log`}),_jsx(_components.p,{children:`The event log in Settings now has five tabs: Calls, Chat, Sessions, Webhooks and API. Each one shows its own register (calls, chats, Engine sessions with tools and knowledge-base queries, webhook deliveries and requests to your API) with a type filter.`})]}),`\n`,_jsxs(Update,{label:`September 25, 2026`,id:`september-25%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`tools-in-the-portal`,children:`Tools in the portal`}),_jsx(_components.p,{children:`Tools is now in the menu, with shortcuts to add a webhook, a client tool or an integration, and a table for name, description, method, status and agent. API logs can be filtered by method, code, key, latency, user and dates.`})]}),`\n`,_jsxs(Update,{label:`September 25, 2026`,id:`september-25%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`two-step-verification`,children:`Two-step verification`}),_jsx(_components.p,{children:`You can now protect your account with two-step verification. In Settings › Security, turn on an authenticator app (Google Authenticator, 1Password, Authy) and from then on we ask for its 6-digit code every time you sign in. You can register up to two devices.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`home-is-now-a-board-you-arrange-yourself`,children:`Home is now a board you arrange yourself`}),_jsx(_components.p,{children:`Home is now a board you can arrange however you like. Drag any widget by the handle at its top right and drop it where you want it; your layout saves itself. It ships with nine new widgets showing things you could not see before: what hours people call you, what data your agent managed to capture, how long it takes to answer, which tools it is using, and how your conversations ended this month.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`test-a-tool-against-your-own-endpoint`,children:`Test a tool against your own endpoint`}),_jsx(_components.p,{children:`The «Test» button on a tool’s detail now works: you type the values for each parameter and Ryvo calls your endpoint, showing you the request that went out and what your server answered, with its status code and how long it took. The request is real, it does not retry, and it does not count against your quota.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`test-your-webhook-before-trusting-it`,children:`Test your webhook before trusting it`}),_jsx(_components.p,{children:`You can now test your webhook instead of guessing. In Settings > Webhooks, «Send a test event» fires a signed event at your endpoint and shows you the HTTP status, how long it took and what your server answered. It works before you create the webhook and on one you already saved.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`test-a-tool-in-its-own-window`,children:`Test a tool in its own window`}),_jsx(_components.p,{children:`A tool’s «Test» button now opens a window with the new tester: you type the values, call your endpoint and see the request that went out next to what your server answered, with its status code and its milliseconds. Calls stack up, so you can compare one attempt with the previous one.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`the-home-board-now-explains-every-figure`,children:`The Home board now explains every figure`}),_jsx(_components.p,{children:`You can now hover over any figure on the Home board and see the detail behind it. On Total cost each bar tells you what day it is, how many credits you spent and how many conversations there were; on Latency it explains what each measure means; and on Recent conversations you see the agent, the time and the summary without leaving the screen.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`see-what-is-left-of-your-plan-without-leaving-home`,children:`See what is left of your plan without leaving Home`}),_jsx(_components.p,{children:`The Total cost widget now tells you how many of this month’s credits you have left, with a bar that turns amber as you approach the limit and red when it runs out. Hover over it to see how many you have used, when your cycle started and how many voice minutes your plan includes.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`empty-widgets-now-explain-what-is-missing`,children:`Empty widgets now explain what is missing`}),_jsx(_components.p,{children:`Home widgets that do not have data yet now tell you why they are empty and what it takes to fill them, instead of showing charts sitting at zero.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-8`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`home-looks-right-on-phone-and-tablet`,children:`Home looks right on phone and tablet`}),_jsx(_components.p,{children:`The Home board now lays out properly on phone and tablet: widgets stack into a single column when the screen is narrow, instead of shrinking until the content gets cut off.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-9`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`choose-your-webhook-events`,children:`Choose your webhook events`}),_jsx(_components.p,{children:`You can now choose which events fire your webhook. Your endpoint used to receive a fixed list you could not change; now, under Settings → Webhooks, you check the ones you care about and remove the ones you do not, both when creating the endpoint and later on. All six available events are grouped and shown with their technical name, so you know exactly what you will receive.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-10`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`connect-your-app-in-two-clicks`,children:`Connect your app in two clicks`}),_jsx(_components.p,{children:`Connecting your system to Ryvo no longer means hunting for scattered details. Under Settings › API keys there is a new «Connect your app» block with a ready-to-copy example: you pick the agent and the identifier you need is already in there, along with the header that prevents duplicate calls if your system retries. And if you are not the one wiring it up, one button copies every detail into a message you can hand to your technical team.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-11`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`webhooks-are-being-delivered-again`,children:`Webhooks are being delivered again`}),_jsx(_components.p,{children:`Webhooks are being delivered again. Testing a URL from the portal returned “No se pudo conectar: Invalid IP address: undefined”, and no delivery ever reached its destination. That is fixed: the ping responds and events are delivered normally.`})]}),`\n`,_jsxs(Update,{label:`September 24, 2026`,id:`september-24%2C-2026-12`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`integrations%2C-in-the-language-you-picked`,children:`Integrations, in the language you picked`}),_jsx(_components.p,{children:`If your portal is in English, the Integrations screen was only half translated: the buttons and heading in English, and each app card still in Spanish. Every app description, its category and its status (connected, in progress, not connected) now follow the language you picked in Preferences. The Private keys label in the Settings menu does too.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`more-knowledge-base%2C-and-api-access-from-starter`,children:`More knowledge base, and API access from Starter`}),_jsx(_components.p,{children:`Your knowledge base just got bigger: Starter goes from 10 to 30 MB and Pro from 50 to 100 MB, with no change to what a call costs. The public API and developer keys are also available from the Starter plan now, so you can trigger calls from your own systems without upgrading.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`every-integration-shows-its-actions%2C-and-you-write-the-script`,children:`Every integration shows its actions, and you write the script`}),_jsx(_components.p,{children:`Open any connected integration and you get the full list of what your agent can do with that app, each action with the instruction the agent actually reads. That is also where you fill in whatever the app needs from you, like your GoHighLevel calendar: without it the action never reached the agent, and now you can see why. In the builder, actions show the app name and the action name instead of codes, and you can rewrite the “when should the agent use this” for each one in your own words.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`gohighlevel-books-appointments%2C-and-connects-in-one-click`,children:`GoHighLevel books appointments, and connects in one click`}),_jsx(_components.p,{children:`GoHighLevel now connects in one click, with no tokens to paste, and your agent can really book: it checks the open slots on your calendar and reserves the appointment against the contact, and it can reschedule or cancel too. It also looks up contacts by phone or email, sends messages over SMS, email or WhatsApp, opens and closes opportunities, and leaves notes on the record.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`folders-in-your-knowledge-base`,children:`Folders in your knowledge base`}),_jsx(_components.p,{children:`Your knowledge base now has folders. Create them under “Knowledge base”, drop in whatever belongs together and, when you set up an agent, point it at the whole folder: anything you add later gets picked up on its own, with nothing to republish. A meter at the top shows how much space you have used and your limit. Click a document name and its detail opens: when it was uploaded, how big it is, how many chunks it is indexed into, and which agents read it. For a web page you can re-read it whenever you want, or let us re-read it every week; if a week fails we tell you right there, and your agent keeps working from the last good version.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`adding-to-your-knowledge-base-just-got-easier`,children:`Adding to your knowledge base just got easier`}),_jsx(_components.p,{children:`Adding things to your knowledge base works differently now. Click the upload area and a window asks whether you are adding a file, a web page or FAQs, then lets you pick the folder it goes into (or create one on the spot). Web pages no longer go in one at a time: we can read your sitemap or crawl the whole site and show you every page we found so you can tick the ones you want. And when you open a document, the detail panel is much wider and lets you read the content exactly as your agent reads it, whole or chunk by chunk.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`pay-for-your-plan-without-leaving-the-dashboard`,children:`Pay for your plan without leaving the dashboard`}),_jsx(_components.p,{children:`Buying or switching a plan no longer sends you out of Ryvo: the payment is completed inside the dashboard, on the same screen.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`notifications-moved-up-top%2C-and-read-clearer`,children:`Notifications moved up top, and read clearer`}),_jsx(_components.p,{children:`Ryvo’s notifications now appear in the top right corner, out of the way of whatever you are doing, and they look cleaner. The ones that report a finished action, successful or not, carry a colored outline so you can tell them apart at a glance without reading them.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026-8`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`the-guided-tour-no-longer-blocks-the-portal-on-mobile`,children:`The guided tour no longer blocks the portal on mobile`}),_jsx(_components.p,{children:`On your phone, the guided tour no longer opens on top of you the moment you walk in. It used to cover the whole screen, and neither Node nor the portal buttons would respond to your taps. You can still start it whenever you want from your account menu.`})]}),`\n`,_jsxs(Update,{label:`September 23, 2026`,id:`september-23%2C-2026-9`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`the-access-code%2C-readable-from-your-inbox`,children:`The access code, readable from your inbox`}),_jsx(_components.p,{children:`The access code you get by email shows up in your inbox preview again, right next to the subject. Request it on your computer and read it on your phone without opening the email.`})]}),`\n`,_jsxs(Update,{label:`September 22, 2026`,id:`september-22%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`integrations-that-work-out-of-the-box`,children:`Integrations that work out of the box`}),_jsx(_components.p,{children:`Your integrations arrive ready to use. Connect an app (GoHighLevel, Google Calendar, HubSpot, Gmail and the rest) and its actions show up on their own in your agent builder, switched off, so you turn on the ones you want. We also kept only the actions that genuinely work mid conversation, each with a description that tells the agent when to reach for it. Integrations are now available from the Starter plan.`})]}),`\n`,_jsxs(Update,{label:`September 22, 2026`,id:`september-22%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`see-what-the-agent-is-spending`,children:`See what the Agent is spending`}),_jsx(_components.p,{children:`The Agent panel now shows how many credits you have used today, what each message costs and how much you have left. When you confirm an action it also tells you whether that action carries a cost.`})]}),`\n`,_jsxs(Update,{label:`September 22, 2026`,id:`september-22%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`the-copilot-is-now-called-node`,children:`The copilot is now called Node`}),_jsx(_components.p,{children:`The portal copilot now goes by Node.`})]}),`\n`,_jsxs(Update,{label:`September 22, 2026`,id:`september-22%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-clear-message-when-node-is-paused`,children:`A clear message when Node is paused`}),_jsx(_components.p,{children:`We can now pause Node in a controlled way when we need to, and if we do you get a clear message in the panel explaining why instead of an error.`})]}),`\n`,_jsxs(Update,{label:`September 22, 2026`,id:`september-22%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`more-models-in-the-catalog`,children:`More models in the catalog`}),_jsx(_components.p,{children:`The model catalog is wider: you can now pick anything from the GPT-5.2 to GPT-6 families, including GPT-5.4 Mini, which a bug in our filter had been keeping off the list.`})]}),`\n`,_jsxs(Update,{label:`September 22, 2026`,id:`september-22%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`settings-cards-get-their-border-back`,children:`Settings cards get their border back`}),_jsx(_components.p,{children:`Settings cards show their border again in dark mode. Under Plan and credits, Usage and Integrations the blocks were barely distinguishable from the background; now each one has its outline and reads as a card of its own.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`assign-documents-to-your-agent-from-the-builder`,children:`Assign documents to your agent from the builder`}),_jsx(_components.p,{children:`The agent builder is now where you choose which knowledge base documents each agent reads and when it reads them, with no trip to another screen. It warns you if you asked the agent to consult documents but ticked none, or if a document you assigned no longer exists.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`upload-documents-straight-from-the-builder`,children:`Upload documents straight from the builder`}),_jsx(_components.p,{children:`You can upload to your knowledge base straight from the agent builder: a file (PDF, Word, text, Markdown or HTML) or the address of a web page. The document lands in your account and is assigned to the agent you are setting up.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`chunk-count-on-every-document`,children:`Chunk count on every document`}),_jsx(_components.p,{children:`In your agent’s knowledge base, every indexed document now shows how many chunks it holds. That is your confirmation it is ready for the agent to use mid conversation.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`choose-how-many-chunks-each-lookup-returns`,children:`Choose how many chunks each lookup returns`}),_jsx(_components.p,{children:`In your agent’s knowledge base you can choose how many chunks it gets back on each lookup (1 to 4, depending on your plan). Fewer chunks answer faster on calls, more chunks give richer context.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`build-your-own-tools-from-the-builder`,children:`Build your own tools from the builder`}),_jsx(_components.p,{children:`You can build your own tools from the agent builder: your own HTTPS endpoint plus the parameters the agent has to send. The tool becomes available to the agent when you publish, and you can delete it from its detail view. For now it is called without authentication headers.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`review-your-changes-before-you-publish`,children:`Review your changes before you publish`}),_jsx(_components.p,{children:`Publishing an agent from the builder now starts with a review of what changes against the version that is answering calls: section by section, the published version on the left and your edits on the right, plus a JSON view. You publish once you have looked it over.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-7`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`sentiment%2C-max-call-length%2C-and-a-builder-that-reads-better`,children:`Sentiment, max call length, and a builder that reads better`}),_jsx(_components.p,{children:`The agent builder reads better: bigger, darker labels, legible hints and more air between settings. On top of that, “Post-call analysis” can now score customer sentiment (positive, neutral or negative, with an explanation) and “Call settings” lets you cap how long a call can run.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-8`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`pause-your-agent%2C-browse-version-history%2C-add-tools-from-the-builder`,children:`Pause your agent, browse version history, add tools from the builder`}),_jsx(_components.p,{children:`The agent builder now lets you add tools from the “Tools” section, pause and restart the agent with a switch in the header, and open the version history: every saved version with its date and author, which one is published and which one you are editing, a comparison of any version against the published one, and a way back to an earlier version without creating a new one.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-9`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`authenticated-tools-from-the-builder`,children:`Authenticated tools from the builder`}),_jsx(_components.p,{children:`The tools you build from the builder can now authenticate: Bearer or a custom header with your own key. The secret is stored encrypted, never shown again, and added by the server on every call; the tool detail tells you which scheme is in use without revealing the value.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-10`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`new-icons-in-the-agent-builder`,children:`New icons in the agent builder`}),_jsx(_components.p,{children:`The agent builder picks up the same iconography as the rest of the portal: clearer icons in the rail, in the agent sections, on tools and in dialogs.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-11`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`bring-your-own-language-model`,children:`Bring your own language model`}),_jsx(_components.p,{children:`The agent builder can now talk to your own language model: any endpoint compatible with the OpenAI API, using your key. The agent runs on your model and you pay that usage straight to your provider. Available on the Growth and Enterprise plans.`})]}),`\n`,_jsxs(Update,{label:`September 14, 2026`,id:`september-14%2C-2026-12`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`on-demand-knowledge-base-now-works-on-calls`,children:`On-demand knowledge base now works on calls`}),_jsx(_components.p,{children:`Voice agents now check the knowledge base whenever the conversation calls for it (“When needed” mode), just like chat agents do. That mode used to work on chat only; on calls, “Always” was the only option that did anything.`})]}),`\n`,_jsxs(Update,{label:`September 10, 2026`,id:`september-10%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-new-look-for-the-portal-and-the-admin-panel`,children:`A new look for the portal and the admin panel`}),_jsx(_components.p,{children:`The portal and the admin panel have a new design: new typography, our own pixel icons, tables with a header, a row count and pagination, redesigned badges and empty states, and three new charts on Home: credits per conversation by month, credit usage over the last six months, and your agents’ success rate.`})]}),`\n`,_jsxs(Update,{label:`August 25, 2026`,id:`august-25%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`usage-warning-starts-at-75%25`,children:`Usage warning starts at 75%`}),_jsx(_components.p,{children:`We warn you sooner. The usage alert in the sidebar shows up once you have spent 75% of your credits in the last 30 days, not when they are nearly gone: first an amber “High usage” notice and, if you keep climbing, the red “Running out of balance”. That gives you time to top up before anything stops.`})]}),`\n`,_jsxs(Update,{label:`August 20, 2026`,id:`august-20%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`sign-in-with-github`,children:`Sign in with GitHub`}),_jsx(_components.p,{children:`You can create your account and sign in to Ryvo with GitHub, the same way you already could with Google. The button is on sign-up, on sign-in and when you accept a team invite.`})]}),`\n`,_jsxs(Update,{label:`August 20, 2026`,id:`august-20%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-new-backdrop-on-the-sign-in-screens`,children:`A new backdrop on the sign-in screens`}),_jsx(_components.p,{children:`The sign-in screens have a new backdrop: a 3D scene that reacts to your cursor, with the brand gradient over black.`})]}),`\n`,_jsxs(Update,{label:`August 20, 2026`,id:`august-20%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`the-voice-engine-gets-a-screen-of-its-own`,children:`The voice Engine gets a screen of its own`}),_jsx(_components.p,{children:`The voice Engine panel is now a tool with a screen of its own. The ten panels that used to sit stacked in a single column are split across six tabs (Overview, Calls, Performance, Tests, History and Health), each with its own address, so you can share a link to the one you are looking at and reload it without losing your place.`})]}),`\n`,_jsxs(Update,{label:`August 20, 2026`,id:`august-20%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`performance-shows-where-the-time-goes`,children:`Performance shows where the time goes`}),_jsx(_components.p,{children:`The Engine’s Performance panel now shows at a glance where each turn spends its time (transcription, model, voice and transport) with a colored bar and a card per stage listing its milliseconds and its samples.`})]}),`\n`,_jsxs(Update,{label:`August 19, 2026`,id:`august-19%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`agent-menu%3A-archive%2C-share%2C-duplicate%2C-save-as-template`,children:`Agent menu: archive, share, duplicate, save as template`}),_jsx(_components.p,{children:`New options in every agent’s menu: archive it to get it off the list without losing it, share it with a read-only link, duplicate it, or save it as a template so your next agent starts faster.`})]}),`\n`,_jsxs(Update,{label:`August 19, 2026`,id:`august-19%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`admin%3A-view-as-customer-moved-to-the-account-menu`,children:`Admin: view as customer moved to the account menu`}),_jsx(_components.p,{children:`The “view as customer” shortcut now lives in your account menu, with a new icon and in blue.`})]}),`\n`,_jsxs(Update,{label:`August 19, 2026`,id:`august-19%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`browser-tab-title-follows-where-you-are`,children:`Browser tab title follows where you are`}),_jsx(_components.p,{children:`Your browser tab now says where you are in the portal (Agents, Conversations, Plan and so on) instead of showing one generic title.`})]}),`\n`,_jsxs(Update,{label:`August 19, 2026`,id:`august-19%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`admin%3A-consistent-grays-and-icons-in-the-customer-menu`,children:`Admin: consistent grays and icons in the customer menu`}),_jsx(_components.p,{children:`The admin panel menus no longer use the old gray, and each customer’s status menu now has icons.`})]}),`\n`,_jsxs(Update,{label:`August 17, 2026`,id:`august-17%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`unanswered-calls-no-longer-look-like-failures`,children:`Unanswered calls no longer look like failures`}),_jsx(_components.p,{children:`Calls that never connected no longer show a red audio error. A busy or unanswered number used to open the player, ask for a recording that does not exist and report “Could not connect to the server”, which looked like a breakdown when it was only a lead who did not pick up. Those calls now explain that there is no recording because the call never connected, and they tell themselves apart: “No answer” in amber when the line was busy or nobody picked up (same as in ElevenLabs), and “Failed” in red only when something genuinely broke. The call detail also names the exact reason.`})]}),`\n`,_jsxs(Update,{label:`August 17, 2026`,id:`august-17%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`plan-usage-counted-correctly`,children:`Plan usage counted correctly`}),_jsx(_components.p,{children:`We fixed how your plan usage is counted. If your account runs on credits, the minutes you have spent are now deducted from the ones your plan includes instead of showing up as extra usage, and both the Plan and credits screen and the Usage screen report your balance in the same unit you are billed in.`})]}),`\n`,_jsxs(Update,{label:`August 12, 2026`,id:`august-12%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`outgoing-webhooks-on-every-plan`,children:`Outgoing webhooks on every plan`}),_jsx(_components.p,{children:`Outgoing webhooks are available on every plan. Set your endpoint under Settings > Webhooks and receive your conversation events signed with HMAC, with automatic retries.`})]}),`\n`,_jsxs(Update,{label:`August 10, 2026`,id:`august-10%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`set-your-auto-top-up-from-the-usage-page`,children:`Set your auto top-up from the Usage page`}),_jsx(_components.p,{children:`You can tune your auto top-up without leaving Settings > Usage: how much goes into your wallet and the balance that triggers it. That screen used to only switch it on and off, with the amounts living somewhere else.`})]}),`\n`,_jsxs(Update,{label:`August 10, 2026`,id:`august-10%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`plan-changes-that-take-effect-right-away`,children:`Plan changes that take effect right away`}),_jsx(_components.p,{children:`The Ryvo team can now change your plan on the spot from the admin panel, with your subscription state live in front of them: the exact date and amount of your next charge, proration, payment method and any active discount. It used to be done outside the product, so a plan change took longer to show up in your account.`})]}),`\n`,_jsxs(Update,{label:`August 10, 2026`,id:`august-10%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-cleaner-menu%2C-with-support-close-at-hand`,children:`A cleaner menu, with Support close at hand`}),_jsx(_components.p,{children:`Support moved out of the sidebar and into your profile menu, in the top right. We also refreshed the menu icons, and notification preferences now use switches instead of checkboxes.`})]}),`\n`,_jsxs(Update,{label:`July 22, 2026`,id:`july-22%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`know-whether-your-agent%E2%80%99s-instructions-fit-your-plan`,children:`Know whether your agent’s instructions fit your plan`}),_jsx(_components.p,{children:`The portal now tells you whether your agent’s instructions fit your plan’s budget, with the actual numbers: how much they take up, how much your plan allows per conversation, and how much stays reserved for the knowledge base and the conversation history. It is a heads-up, not a block: you can still save.`})]}),`\n`,_jsxs(Update,{label:`July 22, 2026`,id:`july-22%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-provider-outage-no-longer-locks-your-account`,children:`A provider outage no longer locks your account`}),_jsx(_components.p,{children:`When the main model provider goes down, Ryvo now serves your conversation through a backup route without eating into your turn quota or locking your account. A provider outage used to be able to leave an account locked even with the balance fully paid up.`})]}),`\n`,_jsxs(Update,{label:`July 22, 2026`,id:`july-22%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`agents-with-long-prompts-can-be-edited-again`,children:`Agents with long prompts can be edited again`}),_jsx(_components.p,{children:`We fixed a limit that blocked saving changes on agents with very long instructions. If your agent has a long prompt, you can edit it normally from the portal again.`})]}),`\n`,_jsxs(Update,{label:`July 18, 2026`,id:`july-18%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`credit-purchases-now-show-up-in-billing`,children:`Credit purchases now show up in Billing`}),_jsx(_components.p,{children:`In the admin panel, each customer’s Billing tab now lists credit purchases and top-ups alongside the subscription invoices, each with a downloadable receipt.`})]}),`\n`,_jsxs(Update,{label:`July 7, 2026`,id:`july-7%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`live-counter-of-active-calls`,children:`Live counter of active calls`}),_jsx(_components.p,{children:`Your dashboard now shows how many calls are live right now, with a counter that keeps itself up to date while the tab is open.`})]}),`\n`,_jsxs(Update,{label:`July 7, 2026`,id:`july-7%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`steadier-web-tests-over-webrtc`,children:`Steadier web tests over WebRTC`}),_jsx(_components.p,{children:`Your agent’s test console now connects over WebRTC, with better latency and steadier audio, and falls back to the previous connection automatically if it has to.`})]}),`\n`,_jsxs(Update,{label:`July 7, 2026`,id:`july-7%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`rename-your-agent%2C-plus-avatars-in-call-lists`,children:`Rename your agent, plus avatars in call lists`}),_jsx(_components.p,{children:`You can rename your agent straight from Ryvo, and the new name carries over to ElevenLabs. We also added an avatar next to the agent name in the “Recent calls” table and in the full call history, so you can spot it at a glance.`})]}),`\n`,_jsxs(Update,{label:`July 6, 2026`,id:`july-6%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`new-portal-design-phase-1`,children:`New portal design (phase 1)`}),_jsx(_components.p,{children:`The first phase of the new portal design is live: a rebuilt sidebar with quick search (Cmd+K), a floating content panel, cleaner typography and colors, and polished light and dark themes across every section.`})]}),`\n`,_jsxs(Update,{label:`July 6, 2026`,id:`july-6%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-new-agent-setup-wizard`,children:`A new agent setup wizard`}),_jsx(_components.p,{children:`We rebuilt the agent setup wizard from scratch: 8 guided steps with your progress saved as you go, a new FAQ step where you can import your whole list from CSV, Excel, Word, your website or pasted text, and Ryvo can draft the missing answers for you with AI.`})]}),`\n`,_jsxs(Update,{label:`July 6, 2026`,id:`july-6%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-rebuilt-admin-panel`,children:`A rebuilt admin panel`}),_jsx(_components.p,{children:`The admin panel is fully rebuilt: a dashboard with metrics you can act on and live system health, and every view (customers, agents, phone numbers, calls, reports, wallets, billing and settings) on the new design.`})]}),`\n`,_jsxs(Update,{label:`July 6, 2026`,id:`july-6%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`profile-menu-with-your-balance-and-quick-links`,children:`Profile menu with your balance and quick links`}),_jsx(_components.p,{children:`New profile menu in the portal: click your avatar to see your balance and plan minutes at a glance, switch theme, and get to settings, billing, team and support in one click.`})]}),`\n`,_jsxs(Update,{label:`July 6, 2026`,id:`july-6%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`simpler-credit-purchase%2C-with-a-minutes-estimate`,children:`Simpler credit purchase, with a minutes estimate`}),_jsx(_components.p,{children:`Buying credits is new: pick the amount right on the page, with an estimate of how many call minutes it buys you on your plan, and set up auto top-up (threshold and amount) from the same balance card.`})]}),`\n`,_jsxs(Update,{label:`July 6, 2026`,id:`july-6%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`test-console-with-voice-and-chat-on-the-agent-page`,children:`Test console with voice and chat on the agent page`}),_jsx(_components.p,{children:`New test console on your agent’s page: try it over the phone, through your browser microphone or by text chat, with a live transcript and session metrics (latency, duration and turns).`})]}),`\n`,_jsxs(Update,{label:`July 2, 2026`,id:`july-2%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`team-sign-in-and-sign-up-are-reliable-again`,children:`Team sign-in and sign-up are reliable again`}),_jsx(_components.p,{children:`We fixed a problem where some team members saw a duplicate account when they signed back in, and another where finishing sign-up left the screen blank for a moment instead of taking you straight to your dashboard. Team sign-in and new account sign-up now run smoothly.`})]}),`\n`,_jsxs(Update,{label:`June 23, 2026`,id:`june-23%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`your-team-shows-up-correctly`,children:`Your team shows up correctly`}),_jsx(_components.p,{children:`We fixed a bug that left the member list under Settings > Team empty. Owners and admins now see their whole team.`})]}),`\n`,_jsxs(Update,{label:`June 23, 2026`,id:`june-23%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`per-agent-onboarding-in-the-admin-panel`,children:`Per-agent onboarding in the admin panel`}),_jsx(_components.p,{children:`The admin panel can now open the onboarding form for EACH of a customer’s agents separately. On accounts with more than one agent, only the first one’s form was reachable.`})]}),`\n`,_jsxs(Update,{label:`June 23, 2026`,id:`june-23%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`every-call-shows-its-real-outcome`,children:`Every call shows its real outcome`}),_jsx(_components.p,{children:`Calls now show what actually happened: “No answer” (yellow) when the contact did not pick up or went to voicemail, and “Failed” (red) when the call could not be placed. They all used to read “Completed”.`})]}),`\n`,_jsxs(Update,{label:`June 23, 2026`,id:`june-23%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`error-alerts-that-are-useful%2C-and-quieter`,children:`Error alerts that are useful, and quieter`}),_jsx(_components.p,{children:`The “Agent error” emails now go out only when there is a real detail to report, and never arrive blank. The noise of one email per call that failed to connect is gone.`})]}),`\n`,_jsxs(Update,{label:`June 23, 2026`,id:`june-23%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`your-plan-limits-are-honored-correctly`,children:`Your plan limits are honored correctly`}),_jsx(_components.p,{children:`We fixed a bug where some accounts could not invite more teammates or create a second agent even though their plan allowed it. Your plan limits are honored correctly now.`})]}),`\n`,_jsxs(Update,{label:`June 23, 2026`,id:`june-23%2C-2026-6`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`no-phantom-charges-after-canceling`,children:`No phantom charges after canceling`}),_jsx(_components.p,{children:`We fixed a bug where, after canceling a subscription, the billing section could keep showing a “next charge” that no longer applied.`})]}),`\n`,_jsxs(Update,{label:`June 18, 2026`,id:`june-18%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`resend-expired-team-invites`,children:`Resend expired team invites`}),_jsx(_components.p,{children:`Team invites that expire no longer vanish from the list: they now show as “expired” under Settings > Team, and one click resends them with a link good for another 7 days.`})]}),`\n`,_jsxs(Update,{label:`June 8, 2026`,id:`june-8%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`manage-your-cal-com-connection-from-settings`,children:`Manage your Cal.com connection from Settings`}),_jsx(_components.p,{children:`New “Integrations” section in Settings: connect, disconnect or switch your Cal.com account, check which account you are connected as, and pick the event type your agent books into.`})]}),`\n`,_jsxs(Update,{label:`June 8, 2026`,id:`june-8%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`book%2C-reschedule-and-cancel-appointments-from-the-portal`,children:`Book, reschedule and cancel appointments from the portal`}),_jsx(_components.p,{children:`You can create, reschedule and cancel appointments straight from the portal Calendar: the “New appointment” button and each appointment’s (···) menu open a live Cal.com slot picker.`})]}),`\n`,_jsxs(Update,{label:`June 8, 2026`,id:`june-8%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`your-agent-can-book-appointments`,children:`Your agent can book appointments`}),_jsx(_components.p,{children:`Your agent can now book for you. Turn on “Book appointments” in the new “Tools” section of the portal and, mid call, your assistant can check your open slots and reserve the appointment in your Cal.com calendar with each person’s name and phone number. The appointment shows up in your Calendar right away. One click to enable, nothing to paste by hand.`})]}),`\n`,_jsxs(Update,{label:`June 3, 2026`,id:`june-3%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`download-call-audio-and-copy-the-transcript`,children:`Download call audio and copy the transcript`}),_jsx(_components.p,{children:`You can download the audio of any call and copy its transcript from the player menu, on the call detail page.`})]}),`\n`,_jsxs(Update,{label:`June 3, 2026`,id:`june-3%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`fill-in-variables-before-a-test-call`,children:`Fill in variables before a test call`}),_jsx(_components.p,{children:`Before you test your agent over the phone you can now fill in your prompt variables (the contact name, for instance) so the test runs on real data.`})]}),`\n`,_jsxs(Update,{label:`June 3, 2026`,id:`june-3%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`search-calls-by-id-across-your-whole-history`,children:`Search calls by ID across your whole history`}),_jsx(_components.p,{children:`Search in the call history now matches on conversation ID and looks across your entire history, not just the page you are on.`})]}),`\n`,_jsxs(Update,{label:`June 1, 2026`,id:`june-1%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`your-account-menu%2C-closer-at-hand`,children:`Your account menu, closer at hand`}),_jsx(_components.p,{children:`We reorganized your account menu in the portal: your profile now sits at the top of the sidebar, and the light or dark theme switch appears when you hover your avatar.`})]}),`\n`,_jsxs(Update,{label:`June 1, 2026`,id:`june-1%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-new-agent-configurator`,children:`A new agent configurator`}),_jsx(_components.p,{children:`We redesigned your agent configurator in the style of ElevenLabs: edit the prompt block by block (Personality, Tone, Goal, Guardrails and so on) or switch to advanced mode, pick the voice, the speed and the language yourself, and move through the settings from a contextual side menu.`})]}),`\n`,_jsxs(Update,{label:`May 31, 2026`,id:`may-31%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`a-meter-for-your-plan-minutes`,children:`A meter for your plan minutes`}),_jsx(_components.p,{children:`Credits now shows the minutes included in your plan: how many are left, how many you have used this month and when they reset.`})]}),`\n`,_jsxs(Update,{label:`May 31, 2026`,id:`may-31%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`plans-activate-automatically`,children:`Plans activate automatically`}),_jsx(_components.p,{children:`We fixed plan activation: buying a plan now applies your included minutes automatically, unlocks the agent settings and shows up in the portal right away.`})]}),`\n`,_jsxs(Update,{label:`May 31, 2026`,id:`may-31%2C-2026-3`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`complete-invoice-history-in-the-portal`,children:`Complete invoice history in the portal`}),_jsx(_components.p,{children:`We fixed the Invoices history: it now lists every subscription charge and top-up, not just some of them.`})]}),`\n`,_jsxs(Update,{label:`May 31, 2026`,id:`may-31%2C-2026-4`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`clearer-usage-and-invoices-pages`,children:`Clearer Usage and Invoices pages`}),_jsx(_components.p,{children:`The Usage and Invoices pages read better: cost per minute and available minutes now reflect your plan, and invoices no longer appear twice.`})]}),`\n`,_jsxs(Update,{label:`May 31, 2026`,id:`may-31%2C-2026-5`,children:[_jsx(`span`,{className:`cl-pill cl-fix`,children:`Fixes`}),_jsx(Heading,{level:`2`,id:`no-more-duplicate-invoices`,children:`No more duplicate invoices`}),_jsx(_components.p,{children:`Top-up invoices no longer show up twice in your charge history.`})]}),`\n`,_jsxs(Update,{label:`May 24, 2026`,id:`may-24%2C-2026`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`export-calls-to-csv`,children:`Export calls to CSV`}),_jsx(_components.p,{children:`You can export your calls to CSV from /calls and /admin/llamadas. The export respects your active filters (date, status, duration) and your plan’s retention, and handles up to 50,000 rows per download.`}),_jsx(`div`,{className:`changelog-frame`,children:_jsx(Frame,{caption:`The new \"Export CSV\" button in the filter bar`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/ryvo-3dab4d1a/N60va_k2E5cZECrz/images/changelog/csv-export.png?fit=max\u0026auto=format\u0026n=N60va_k2E5cZECrz\u0026q=85\u0026s=ec9dc890779fe4ab655aaa3e7cb2b22f`,alt:`The new \"Export CSV\" button in the filter bar`,\"data-og-width\":`650`,width:`650`,\"data-og-height\":`452`,height:`452`,\"data-path\":`images/changelog/csv-export.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/ryvo-3dab4d1a/N60va_k2E5cZECrz/images/changelog/csv-export.png?w=280\u0026fit=max\u0026auto=format\u0026n=N60va_k2E5cZECrz\u0026q=85\u0026s=1c9ce0e76f8c7fd674ea01dc623984cd 280w, https://mintcdn.com/ryvo-3dab4d1a/N60va_k2E5cZECrz/images/changelog/csv-export.png?w=560\u0026fit=max\u0026auto=format\u0026n=N60va_k2E5cZECrz\u0026q=85\u0026s=adf315203d1263b050ced3e0006bf3f0 560w, https://mintcdn.com/ryvo-3dab4d1a/N60va_k2E5cZECrz/images/changelog/csv-export.png?w=840\u0026fit=max\u0026auto=format\u0026n=N60va_k2E5cZECrz\u0026q=85\u0026s=7b5a7b3ac3b827e619236dff9bb04fda 840w, https://mintcdn.com/ryvo-3dab4d1a/N60va_k2E5cZECrz/images/changelog/csv-export.png?w=1100\u0026fit=max\u0026auto=format\u0026n=N60va_k2E5cZECrz\u0026q=85\u0026s=e12a3b12d080572bc3c1c5f3e7656d4e 1100w, https://mintcdn.com/ryvo-3dab4d1a/N60va_k2E5cZECrz/images/changelog/csv-export.png?w=1650\u0026fit=max\u0026auto=format\u0026n=N60va_k2E5cZECrz\u0026q=85\u0026s=f60632a36acaf2bfcd73602e23adef67 1650w, https://mintcdn.com/ryvo-3dab4d1a/N60va_k2E5cZECrz/images/changelog/csv-export.png?w=2500\u0026fit=max\u0026auto=format\u0026n=N60va_k2E5cZECrz\u0026q=85\u0026s=f2911d537bbd4384971e05cd8305a6f2 2500w`})})})]}),`\n`,_jsxs(Update,{label:`May 24, 2026`,id:`may-24%2C-2026-2`,children:[_jsx(`span`,{className:`cl-pill cl-feat`,children:`New features`}),_jsx(Heading,{level:`2`,id:`the-public-changelog-is-live`,children:`The public changelog is live`}),_jsx(_components.p,{children:`The public changelog is live: follow every new feature, improvement and fix at docs.ryvo.so/changelog.`})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Changelog","description":"New features, improvements and fixes in Ryvo.","mode":"wide","href":"/changelog"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"October 17, 2026","slug":"october-17%2C-2026","depth":1,"children":[]},{"title":"October 16, 2026","slug":"october-16%2C-2026","depth":1,"children":[]},{"title":"October 15, 2026","slug":"october-15%2C-2026","depth":1,"children":[]},{"title":"October 15, 2026","slug":"october-15%2C-2026-2","depth":1,"children":[]},{"title":"October 15, 2026","slug":"october-15%2C-2026-3","depth":1,"children":[]},{"title":"October 13, 2026","slug":"october-13%2C-2026","depth":1,"children":[]},{"title":"October 13, 2026","slug":"october-13%2C-2026-2","depth":1,"children":[]},{"title":"October 13, 2026","slug":"october-13%2C-2026-3","depth":1,"children":[]},{"title":"October 12, 2026","slug":"october-12%2C-2026","depth":1,"children":[]},{"title":"October 12, 2026","slug":"october-12%2C-2026-2","depth":1,"children":[]},{"title":"October 12, 2026","slug":"october-12%2C-2026-3","depth":1,"children":[]},{"title":"October 9, 2026","slug":"october-9%2C-2026","depth":1,"children":[]},{"title":"October 9, 2026","slug":"october-9%2C-2026-2","depth":1,"children":[]},{"title":"October 8, 2026","slug":"october-8%2C-2026","depth":1,"children":[]},{"title":"October 8, 2026","slug":"october-8%2C-2026-2","depth":1,"children":[]},{"title":"October 8, 2026","slug":"october-8%2C-2026-3","depth":1,"children":[]},{"title":"October 8, 2026","slug":"october-8%2C-2026-4","depth":1,"children":[]},{"title":"October 8, 2026","slug":"october-8%2C-2026-5","depth":1,"children":[]},{"title":"October 7, 2026","slug":"october-7%2C-2026","depth":1,"children":[]},{"title":"October 7, 2026","slug":"october-7%2C-2026-2","depth":1,"children":[]},{"title":"October 7, 2026","slug":"october-7%2C-2026-3","depth":1,"children":[]},{"title":"October 7, 2026","slug":"october-7%2C-2026-4","depth":1,"children":[]},{"title":"October 7, 2026","slug":"october-7%2C-2026-5","depth":1,"children":[]},{"title":"October 7, 2026","slug":"october-7%2C-2026-6","depth":1,"children":[]},{"title":"October 7, 2026","slug":"october-7%2C-2026-7","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-2","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-3","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-4","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-5","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-6","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-7","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-8","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-9","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-10","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-11","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-12","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-13","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-14","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-15","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-16","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-17","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-18","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-19","depth":1,"children":[]},{"title":"October 6, 2026","slug":"october-6%2C-2026-20","depth":1,"children":[]},{"title":"October 5, 2026","slug":"october-5%2C-2026","depth":1,"children":[]},{"title":"October 1, 2026","slug":"october-1%2C-2026","depth":1,"children":[]},{"title":"October 1, 2026","slug":"october-1%2C-2026-2","depth":1,"children":[]},{"title":"October 1, 2026","slug":"october-1%2C-2026-3","depth":1,"children":[]},{"title":"October 1, 2026","slug":"october-1%2C-2026-4","depth":1,"children":[]},{"title":"October 1, 2026","slug":"october-1%2C-2026-5","depth":1,"children":[]},{"title":"October 1, 2026","slug":"october-1%2C-2026-6","depth":1,"children":[]},{"title":"October 1, 2026","slug":"october-1%2C-2026-7","depth":1,"children":[]},{"title":"October 1, 2026","slug":"october-1%2C-2026-8","depth":1,"children":[]},{"title":"September 30, 2026","slug":"september-30%2C-2026","depth":1,"children":[]},{"title":"September 30, 2026","slug":"september-30%2C-2026-2","depth":1,"children":[]},{"title":"September 30, 2026","slug":"september-30%2C-2026-3","depth":1,"children":[]},{"title":"September 30, 2026","slug":"september-30%2C-2026-4","depth":1,"children":[]},{"title":"September 30, 2026","slug":"september-30%2C-2026-5","depth":1,"children":[]},{"title":"September 30, 2026","slug":"september-30%2C-2026-6","depth":1,"children":[]},{"title":"September 30, 2026","slug":"september-30%2C-2026-7","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-2","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-3","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-4","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-5","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-6","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-7","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-8","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-9","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-10","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-11","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-12","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-13","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-14","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-15","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-16","depth":1,"children":[]},{"title":"September 29, 2026","slug":"september-29%2C-2026-17","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-2","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-3","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-4","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-5","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-6","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-7","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-8","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-9","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-10","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-11","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-12","depth":1,"children":[]},{"title":"September 28, 2026","slug":"september-28%2C-2026-13","depth":1,"children":[]},{"title":"September 25, 2026","slug":"september-25%2C-2026","depth":1,"children":[]},{"title":"September 25, 2026","slug":"september-25%2C-2026-2","depth":1,"children":[]},{"title":"September 25, 2026","slug":"september-25%2C-2026-3","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-2","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-3","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-4","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-5","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-6","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-7","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-8","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-9","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-10","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-11","depth":1,"children":[]},{"title":"September 24, 2026","slug":"september-24%2C-2026-12","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026-2","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026-3","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026-4","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026-5","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026-6","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026-7","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026-8","depth":1,"children":[]},{"title":"September 23, 2026","slug":"september-23%2C-2026-9","depth":1,"children":[]},{"title":"September 22, 2026","slug":"september-22%2C-2026","depth":1,"children":[]},{"title":"September 22, 2026","slug":"september-22%2C-2026-2","depth":1,"children":[]},{"title":"September 22, 2026","slug":"september-22%2C-2026-3","depth":1,"children":[]},{"title":"September 22, 2026","slug":"september-22%2C-2026-4","depth":1,"children":[]},{"title":"September 22, 2026","slug":"september-22%2C-2026-5","depth":1,"children":[]},{"title":"September 22, 2026","slug":"september-22%2C-2026-6","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-2","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-3","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-4","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-5","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-6","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-7","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-8","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-9","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-10","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-11","depth":1,"children":[]},{"title":"September 14, 2026","slug":"september-14%2C-2026-12","depth":1,"children":[]},{"title":"September 10, 2026","slug":"september-10%2C-2026","depth":1,"children":[]},{"title":"August 25, 2026","slug":"august-25%2C-2026","depth":1,"children":[]},{"title":"August 20, 2026","slug":"august-20%2C-2026","depth":1,"children":[]},{"title":"August 20, 2026","slug":"august-20%2C-2026-2","depth":1,"children":[]},{"title":"August 20, 2026","slug":"august-20%2C-2026-3","depth":1,"children":[]},{"title":"August 20, 2026","slug":"august-20%2C-2026-4","depth":1,"children":[]},{"title":"August 19, 2026","slug":"august-19%2C-2026","depth":1,"children":[]},{"title":"August 19, 2026","slug":"august-19%2C-2026-2","depth":1,"children":[]},{"title":"August 19, 2026","slug":"august-19%2C-2026-3","depth":1,"children":[]},{"title":"August 19, 2026","slug":"august-19%2C-2026-4","depth":1,"children":[]},{"title":"August 17, 2026","slug":"august-17%2C-2026","depth":1,"children":[]},{"title":"August 17, 2026","slug":"august-17%2C-2026-2","depth":1,"children":[]},{"title":"August 12, 2026","slug":"august-12%2C-2026","depth":1,"children":[]},{"title":"August 10, 2026","slug":"august-10%2C-2026","depth":1,"children":[]},{"title":"August 10, 2026","slug":"august-10%2C-2026-2","depth":1,"children":[]},{"title":"August 10, 2026","slug":"august-10%2C-2026-3","depth":1,"children":[]},{"title":"July 22, 2026","slug":"july-22%2C-2026","depth":1,"children":[]},{"title":"July 22, 2026","slug":"july-22%2C-2026-2","depth":1,"children":[]},{"title":"July 22, 2026","slug":"july-22%2C-2026-3","depth":1,"children":[]},{"title":"July 18, 2026","slug":"july-18%2C-2026","depth":1,"children":[]},{"title":"July 7, 2026","slug":"july-7%2C-2026","depth":1,"children":[]},{"title":"July 7, 2026","slug":"july-7%2C-2026-2","depth":1,"children":[]},{"title":"July 7, 2026","slug":"july-7%2C-2026-3","depth":1,"children":[]},{"title":"July 6, 2026","slug":"july-6%2C-2026","depth":1,"children":[]},{"title":"July 6, 2026","slug":"july-6%2C-2026-2","depth":1,"children":[]},{"title":"July 6, 2026","slug":"july-6%2C-2026-3","depth":1,"children":[]},{"title":"July 6, 2026","slug":"july-6%2C-2026-4","depth":1,"children":[]},{"title":"July 6, 2026","slug":"july-6%2C-2026-5","depth":1,"children":[]},{"title":"July 6, 2026","slug":"july-6%2C-2026-6","depth":1,"children":[]},{"title":"July 2, 2026","slug":"july-2%2C-2026","depth":1,"children":[]},{"title":"June 23, 2026","slug":"june-23%2C-2026","depth":1,"children":[]},{"title":"June 23, 2026","slug":"june-23%2C-2026-2","depth":1,"children":[]},{"title":"June 23, 2026","slug":"june-23%2C-2026-3","depth":1,"children":[]},{"title":"June 23, 2026","slug":"june-23%2C-2026-4","depth":1,"children":[]},{"title":"June 23, 2026","slug":"june-23%2C-2026-5","depth":1,"children":[]},{"title":"June 23, 2026","slug":"june-23%2C-2026-6","depth":1,"children":[]},{"title":"June 18, 2026","slug":"june-18%2C-2026","depth":1,"children":[]},{"title":"June 8, 2026","slug":"june-8%2C-2026","depth":1,"children":[]},{"title":"June 8, 2026","slug":"june-8%2C-2026-2","depth":1,"children":[]},{"title":"June 8, 2026","slug":"june-8%2C-2026-3","depth":1,"children":[]},{"title":"June 3, 2026","slug":"june-3%2C-2026","depth":1,"children":[]},{"title":"June 3, 2026","slug":"june-3%2C-2026-2","depth":1,"children":[]},{"title":"June 3, 2026","slug":"june-3%2C-2026-3","depth":1,"children":[]},{"title":"June 1, 2026","slug":"june-1%2C-2026","depth":1,"children":[]},{"title":"June 1, 2026","slug":"june-1%2C-2026-2","depth":1,"children":[]},{"title":"May 31, 2026","slug":"may-31%2C-2026","depth":1,"children":[]},{"title":"May 31, 2026","slug":"may-31%2C-2026-2","depth":1,"children":[]},{"title":"May 31, 2026","slug":"may-31%2C-2026-3","depth":1,"children":[]},{"title":"May 31, 2026","slug":"may-31%2C-2026-4","depth":1,"children":[]},{"title":"May 31, 2026","slug":"may-31%2C-2026-5","depth":1,"children":[]},{"title":"May 24, 2026","slug":"may-24%2C-2026","depth":1,"children":[]},{"title":"May 24, 2026","slug":"may-24%2C-2026-2","depth":1,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"ryvo-3dab4d1a","siteName":"Ryvo API","title":"Changelog - Ryvo API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/changelog","matchLevel":0},"es":{"href":"/es/changelog","matchLevel":1}}},"lastModified":"2026-10-17T16:48:29.350Z","originalFileLocation":"changelog.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"New features, improvements and fixes in Ryvo.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ryvo API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Changelog - Ryvo API\">\u003cmeta data-mint-head property=\"og:description\" content=\"New features, improvements and fixes in Ryvo.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ryvo API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ryvo.so/changelog\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ryvo-3dab4d1a.mintlify.app/_mintlify/api/og/v2?division=History\u0026amp;title=Changelog\u0026amp;description=New+features%2C+improvements+and+fixes+in+Ryvo.\u0026amp;theme=9ec0f6d1dda3f322925793e2\u0026amp;signature=fff6cf4543dd1da77cfe9d6a0811b7e2a19bea69780e504fd1606b20889df366\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Changelog - Ryvo API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"New features, improvements and fixes in Ryvo.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ryvo-3dab4d1a.mintlify.app/_mintlify/api/og/v2?division=History\u0026amp;title=Changelog\u0026amp;description=New+features%2C+improvements+and+fixes+in+Ryvo.\u0026amp;theme=9ec0f6d1dda3f322925793e2\u0026amp;signature=fff6cf4543dd1da77cfe9d6a0811b7e2a19bea69780e504fd1606b20889df366\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/ryvo-3dab4d1a/Z2ouVJprZ2dR43HC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ryvo API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#171717\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ryvo.so/changelog\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/changelog.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.ryvo.so/changelog\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.ryvo.so/es/changelog\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.ryvo.so/changelog\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ryvo.so/#organization\",\"name\":\"Ryvo API\",\"url\":\"https://docs.ryvo.so\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ryvo-3dab4d1a/PY7ordlJ2mPIeYcu/logo/ryvo-icon-light.svg?fit=max\u0026auto=format\u0026n=PY7ordlJ2mPIeYcu\u0026q=85\u0026s=3688aabefc727b14ef75567c1991b845\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ryvo.so#website\",\"name\":\"Ryvo API\",\"url\":\"https://docs.ryvo.so\",\"publisher\":{\"@id\":\"https://docs.ryvo.so/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ryvo.so/changelog#webpage\",\"url\":\"https://docs.ryvo.so/changelog\",\"name\":\"Changelog\",\"description\":\"New features, improvements and fixes in Ryvo.\",\"dateModified\":\"2026-10-17T16:48:29.350Z\",\"isPartOf\":{\"@id\":\"https://docs.ryvo.so#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ryvo.so/changelog#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ryvo.so/changelog#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ryvo API\",\"item\":\"https://docs.ryvo.so\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Changelog\",\"item\":\"https://docs.ryvo.so/changelog\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.ryvo.so/changelog#article\",\"headline\":\"Changelog\",\"name\":\"Changelog\",\"description\":\"New features, improvements and fixes in Ryvo.\",\"url\":\"https://docs.ryvo.so/changelog\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ryvo.so/changelog#webpage\"},\"dateModified\":\"2026-10-17T16:48:29.350Z\",\"publisher\":{\"@id\":\"https://docs.ryvo.so/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ryvo.so#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Ryvo API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Ryvo API","nav":{"global":null,"languages":[{"language":"en","default":true,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/getting-started/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/account/get-the-current-account-and-key"}]},{"tab":"Changelog","groups":[{"group":"History","pages":[{"title":"Changelog","mode":"wide","href":"/changelog"}]}]}]},{"language":"es","navbar":{"links":[{"href":"https://app.ryvo.so","label":"Portal"},{"href":"mailto:team@ryvo.so","label":"Soporte"}],"primary":{"type":"button","label":"Crear cuenta","href":"https://ryvo.so"}},"pages":[{"title":"es","href":"/es/changelog"}]}]},"title":"Changelog - Ryvo API","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-B0bJ23PC.js","DynamicMarkdown-UGQuxDKp.js","zoom-image-lightbox-B0E5HDf_.js","lightbox-handle-r17bVUz3.js"]}