# Pricing Model
Source: https://docs.voqo.ai/api-reference/endpoint/pricing-model
GET /api/v1/payment/pricing-model
# Start Call
Source: https://docs.voqo.ai/api-reference/endpoint/start-call
POST /api/v1/workspaces/{workspace_id}/agents/{agent_id}/start-call
Start an outbound call using a workspace agent. Requires 'to_phone' (required), optional 'from_phone', 'record' (defaults to true), and 'parameters' (key-value pairs for call personalization). Supports both Clerk JWT (dashboard) and API key authentication. For API key auth, the key must have the 'start_call' scope.
# API Reference
Source: https://docs.voqo.ai/api-reference/introduction
Use Voqo API by domain: auth/admin, calling, campaigns, integrations, workflows, billing, developer tooling, and webhooks.
## Base URL
```text theme={null}
https://api.voqo.ai
```
## Authentication
* Use bearer token/API key authentication based on your integration path.
* Include credentials in `Authorization` header.
* Ensure keys are stored securely and rotated regularly.
```bash theme={null}
Authorization: Bearer YOUR_API_KEY
```
## Endpoint families by domain
### Auth, user, organisation, workspace
* Authentication verification
* User profile and invitation completion
* Organisation/workspace lifecycle endpoints
### Agents, calls, numbers, contacts
* Agent lifecycle and configuration
* Call history and status operations
* Number provisioning/settings
* Contacts CRUD and bulk ingestion
### Voice runtime
* Outbound call start
* Inbound call handling
* Runtime connection and status callbacks
### Batch outbound campaigns
* Campaign management
* Uploads and batch contacts
* Batch jobs and progress monitoring
### Knowledge, integrations, workflows
* Knowledge base lists/items
* Integration connect/sync/disconnect
* Workflow lifecycle and external triggers
### Billing, analytics, developer tools
* Subscription/payment lifecycle
* Analytics endpoints
* API keys and secrets management
### Webhooks and events
* Twilio (call/SMS events)
* Stripe billing events
* Clerk identity events
* Mobile messaging inbound events
## Common use-case paths
Trigger outbound calling from your application.
Receive and verify post-call events and integration updates.
Launch campaigns with uploads, contacts, and jobs.
Validate plan/role gating before provisioning credentials.
## Notes
* Some features/endpoints are plan or role gated.
* Confirm workspace context for all tenant-scoped calls.
* Use idempotent handling for webhook/event processing paths.
# Public Recording and SMS Replies API
Source: https://docs.voqo.ai/api-reference/public-recording-and-sms-replies
Integrate short-code recording links and SMS reply retrieval with clear validity assumptions.
## Use case
Retrieve call recording access and associated SMS replies for post-call customer experiences.
## Public recording flow
1. Customer accesses short-code route (for example public recording page).
2. Platform resolves short code to recording context.
3. Playback is available only when source URL is valid/accessible.
## SMS replies flow
* Query SMS replies associated with the recording short code via API route.
* Use replies to display post-call conversation context in your app/support flows.
## URL validity assumptions
* Recording source URLs can expire or become unavailable over time.
* A valid short code does not guarantee active recording URL forever.
* Clients should handle unavailable/expired recording states gracefully.
## Expected user-visible outcomes
* **Valid short code + valid source URL**: recording playable, replies visible if present.
* **Valid short code + invalid/expired URL**: recording unavailable message; replies may still be visible.
* **Invalid short code**: not found/unavailable state.
## Integration guidance
* Cache minimal metadata only; do not assume perpetual URL validity.
* Handle empty reply sets as a normal state.
* Log short code + timestamp for support diagnostics.
## Troubleshooting
### Recording unavailable for known short code
* Confirm source URL validity and expiry policy in your environment.
* Retry later if source availability is transient.
### No SMS replies returned
* Confirm replies exist for that conversation.
* Validate short code mapping to the intended call.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with short code, workspace context, and timestamps.
## Related docs
* [Configure Post-Call Messaging](/tutorials/post-call/post-call-messaging)
* [Review Call Logs](/tutorials/call-logs/overview-call-logs)
* [Webhook Integration Guide](/tutorials/integrations/webhook-integration-guide)
# Pricing Updates
Source: https://docs.voqo.ai/change-log/pricing-updates
New updates on pricing
SMS campaigns and direct SMS replies are now charged **per segment** instead of a flat rate per message. Each segment costs 5 credits, so a longer message split into multiple segments costs proportionally more (a 2-segment message costs 10 credits, a 3-segment message costs 15). Short messages that fit in a single segment are unchanged at 5 credits. The credit estimate shown before you launch a campaign reflects your template's segment count.
* For every extra number you purchase, you will be charged an additional \$10 per billing cycle (month)
* Removed the Starter pricing model
* Added new pricing model, Small Business, at \$500 per month with 64000 credits.
* Promo code are also no applicable upon inputting initial Payment method.
'Use Conversation Memories' feature toggled and being used in a conversation will cost an additional 5 credits per minute of call.
Important Update to Your Voqo AI Subscription
We've updated our pricing model to switch from minute-based billing to credit-based pricing.
This way, as we introduce more features, you only need to pay for the features you are using.
Learn more [here](https://www.voqo.ai/pricing)
New credit structure:
* Per minute call is 20 credits
* Per post-call SMS is 25 credits
* Additional credits are charged at \$0.01 each.
New pricing plans:
* Free (limited access to features + 500 credits)
* \$5 (full access to features + 500 credits)
* \$15 (full access to features + 1600 credits)
* \$50 (full access to features + 60000 credits)
Newly registered accounts (from 10th of January 2025) will now use the new pricing model.
For legacy accounts (registered before the 10th of January 2025), we will be transitioning
these accounts to our new pricing model, which provides better transparancy on usage.
Starting 20th of February 2025, 30 days from now, we'll be transitioning all accounts to our new pricing structure.
If you were on the free plan, you will be transitioned to the new free plan.
If you were on the $30 per month plan (50 minutes), you will be transitioned to the new $15 (1600 credits) per month plan.
If you were on the $50 per month plan (100 minutes), you will be transitioned to the new $50 (6000 credits) per month plan.
In the mean time, we also introduced many new features and improvements that can be found
[Product Updates](https://docs.voqo.ai/change-log/product-updates)
If you have any questions, feel free to join our [WhatsApp group](https://chat.whatsapp.com/CHL5omlbYJH5vreq0SgtCu) where we post regular updates and answer common questions.
You don't need to take any action now. For legacy accounts, these changes will take effect on \[date].
# Product Updates
Source: https://docs.voqo.ai/change-log/product-updates
New updates and improvements
## Improvements
* **A faster Action Loop that shows you the newest work first**: Every column on the Action Loop board now leads with your most recent items and loads more as you scroll, instead of loading everything at once. Boards with hundreds of cards open quickly and stay smooth while you drag. There's no **Load more** button to hunt for — just keep scrolling, and a short **Loading more…** line appears at the bottom of a column while the next set arrives.
* **Every Action Loop column tells you how much work it holds**: Each column header now shows how many cards you're looking at out of the total waiting in that column — so a column that's still loading reads honestly rather than looking empty. Hover the count for the exact total and the split between work your AI is handling and work assigned to your team.
## New Features
* **Voqo shows up as a teammate**: Voqo now works alongside you as a visible member of your team. When Voqo creates a contact for you — for example when an unknown number texts in — that contact is owned by **Voqo**, shown clearly in the assignee list. You can add yourself alongside Voqo, or remove Voqo to take the contact over completely. In the SMS Inbox, each message in a thread now shows who sent it: **Voqo · Campaign** for campaign sends, **Voqo AI** for automated replies, and your teammate's name for messages a person sent by hand. See [Assign Contacts](/tutorials/agent-settings/assign-contacts).
## Improvements
* **Action Loop shows your newest live work first**: The Action Loop board now surfaces your most recent live signals, tasks, and outcomes instead of the oldest — so what you see is what's happening now, not work from over a week ago. Finished items no longer take up room meant for live cards, and when there's more than fits on screen the board tells you so rather than quietly implying it's complete.
* **Action Loop header polish**: The controls across the top of the Action Loop now line up at a consistent height, and the active view — **Board**, **List**, **Archive**, or **Approvals** — is clearly highlighted so you can always tell which one you're looking at.
## Fixes
* **Lead status you set now shows everywhere**: Marking a contact as **Disqualified** or **Nurture** now reads back correctly across the conversation list, the thread header, and the contact detail sheet — previously only **Lead** was reflected, so a disqualified contact looked untouched. Disqualified conversations badge as **Disqualified**, nurture ones as **Nurture**, and once a contact is disqualified you can choose **Clear status** to return them to unqualified.
## New Features
* **Campaign comparison report**: Insights → Reports now offers a **Campaign comparison** PDF that puts 2–5 of your SMS campaigns side by side in one A4-landscape download. Pick the campaigns you want to weigh up, click **Generate PDF**, and get a Performance summary comparing sent, replied, and reply-rate across the set — ideal for deciding which message or audience worked best. See [Reports](/tutorials/reports/overview-reports).
## Improvements
* **Instant dismiss in the SMS Inbox**: **Dismiss / Mark as done** now clears a conversation from your Important queue immediately, without waiting for the app to catch up. The row sweeps out and the next conversation slides into focus, so you can work down the queue at your own pace. If a dismiss can't be saved, just that conversation returns with a clear message, and **Undo** still works for single and rapid dismissals.
## New Features
* **Campaign results report**: Insights → Reports now offers a second report — a short **Campaign results** email digest answering "How did our campaigns go?" across both voice and SMS. Subscribe daily or weekly, or **Download now** for a CSV of the last seven days. Each email keeps the channels honest: a Calls section (Dials · Conversations · Voicemail · Failed) and an SMS section (Sent · Replied · Failed), and a channel with no activity is simply left out. You can also open the **SMS campaign picker** to choose specific campaigns, review their all-time results on-page — including campaigns with zero activity — and export just those. See [Reports](/tutorials/reports/overview-reports).
* **Preview uploaded documents in the app**: Click a document row in the Knowledge Base to open its original contents inside Voqo — no download needed. PDF, text, and Markdown render inline; Word documents offer an open-or-download fallback. A separate icon still opens the document in a new tab, and Delete stays independent. Documents uploaded before this change show an unavailable state and can enable preview by re-uploading. See [Documents](/tutorials/knowledge-base/documents).
## Improvements
* **Richer Assistant replies with a contact card**: When the Assistant answers about a specific person, it now surfaces that contact inline as a card and recovers the conversation cleanly if you switch away or interrupt mid-reply.
## New Features
* **SMS replies are saved as contact notes**: When a contact texts you back, Voqo now records their reply word-for-word as a note on the contact and pushes it to your connected CRM — the same way call notes already work. Every reply is saved, including a short "no thanks", because a one-word answer is often the most important thing that happened. Each note says what the reply was replying to: an SMS campaign, a follow-up text after a call, or a text that arrived on its own.
* **Choose which CRM note type each conversation uses**: On the Contacts tab of your VaultRE settings you can now map each kind of conversation — **Inbound call**, **Outbound call**, **Campaign**, **Post-call**, **Direct** — to one of your own VaultRE note types, so Voqo's notes land in the categories you already report on. Leaving rows unmapped is fine; those notes get a sensible general type. If you map a type that needs a property and the conversation has no property attached, the note is saved under a general type rather than lost.
* **Reuse a recent upload as your SMS campaign audience**: When building an SMS campaign, you can now pick a specific recent contact upload as the audience under **Select contacts** — ideal when you uploaded a list (say a 240-row appraisal list) and want that exact cohort without uploading the file again. Browse your uploads newest first with their filename, date, row count, and status, and your existing source and contact filters still apply on top. See [Create an SMS Campaign](/tutorials/sms-campaigns/create-an-sms-campaign).
## Improvements
* **Clearer note channel badges**: Notes in Voqo now show **Campaign**, **Post-call**, or **Direct** for SMS replies instead of a single **SMS** badge, so you can tell at a glance what prompted each reply. Hover any badge for the full description.
* **Notes are timestamped when the conversation happened**: An SMS reply note carries the moment your contact's text arrived, not the moment the note was written, so your CRM timeline matches your day.
* **Rename a campaign at the final step**: You can now fix an SMS campaign's name directly on **Review & launch** — a last-chance check for filename-derived or mistyped names — without leaving the flow. An empty name safely becomes **Untitled SMS campaign**.
* **Clearer SMS send failures**: When a message fails to send from the Inbox, Voqo now shows one short reason and one concrete next step, and restores your unsent text so you can retry — instead of a generic "try again shortly".
* **Tidier mobile Inbox header**: The Leads Inbox conversation header is now compacted into two clear lines on mobile, keeping the contact, assignment, and dismiss actions in easy reach.
* **Smarter command palette search**: The command palette now matches short, non-contiguous searches (typing `cts` surfaces **Contacts**) and no longer scrolls sideways at narrow widths.
## Fixes
* **Action Loop notice clears itself**: In the SMS Inbox, the confirmation shown after dismissing an Action Loop reply now disappears on its own after five seconds instead of lingering above the composer.
## New Features
* **AgentBox note write-back (two-way sync)**: Voqo can now write its call and SMS notes straight into **AgentBox** as enquiries — not just VaultRE. Turn on **Write notes back to AgentBox** from the Contacts tab of the AgentBox settings, choose whether to append a "Logged via Voqo AI" marker, and Voqo saves each note onto the matching AgentBox contact with a **Synced to AgentBox** badge in Voqo. AgentBox enquiries are add-only, so notes written to AgentBox can't be edited or deleted from Voqo afterwards. See [AgentBox Note Write-Back](/tutorials/integrations/agentbox-note-writeback).
* **Instant hot-reply alerts for SMS campaigns**: When a lead replies positively to an SMS campaign, Voqo can immediately text the people responsible for following up so they respond within minutes without watching the Inbox. Set reusable workspace defaults (up to 10 recipients and a default alert message), then flip **Notify my team about hot replies** on any campaign — the workspace recipients are copied in, and you can tailor each campaign's list and message independently.
## Improvements
* **Faster, less jarring page loads**: Cold page loads now keep the app chrome in place and fill regions with lightweight skeletons instead of blanking the whole screen, so moving between pages feels quicker and steadier.
* **Command palette with related content**: Press the command palette shortcut to jump anywhere in Voqo and surface content related to where you are — a faster way to navigate than hunting through menus.
* **Calmer SMS Inbox ownership**: Inbox conversations driven by Action Loop signals now show clearer, more stable ownership so it's obvious who's handling a reply.
## Fixes
* **Consistent dark-mode dialogs**: The pipeline detail dialog now renders a single consistent shade in dark mode — the header, body, and footer no longer show a visible seam.
## New Features
* **Delete every contact matching a filter**: On the Contacts page, after you narrow the table with a source tab, search, or advanced filters, a **Delete all matching (N)** action removes the whole cohort across every page — not just the rows you can see. Use it to clear an accidental phone sync or a single CSV upload in one step. See [Contacts Table](/tutorials/agent-settings/contacts-table).
* **Full-page Assistant**: Open **Assistant** under **Work** in the left-hand menu for a dedicated full-screen chat with the same AI you already use in the Voqlaw side panel — more room for longer conversations, with history shared across both views. See [Chat with your Assistant](/tutorials/getting-started/assistant).
* **War Room YOLO stages**: When **Auto Mode** is on in the War Room, you can turn on **Yolo** for **Signal**, **Task**, and/or **Outcome** so those stages run without waiting for human review. Changes apply to newly triggered events.
## Improvements
* **Filter contacts by Phone / Device and VCF Upload**: The source filter on the Contacts page now separates contacts you synced from a phone address book (**Phone / Device**) and contacts you uploaded from a `.vcf` file (**VCF Upload**) from the ones you typed in by hand (**Manual**). If you accidentally synced a phone's contacts, you can now isolate exactly those to review or remove them. See [Contacts Table](/tutorials/agent-settings/contacts-table).
* **"Sync all contacts" now sticks for Eagle MRI and AgentBox**: Switching an Eagle MRI or AgentBox integration from a sample sync to **Sync all contacts** now saves reliably — previously the setting could revert to the sample cap when you reopened the sync settings.
* **SMS campaign audiences match what you launch**: Audience counts, filters, previews, and warnings — including **Exclude previously messaged** — now use your full workspace contact list, not only the contacts loaded on the current page. What you see in the composer is what gets confirmed at launch. See [Create an SMS Campaign](/tutorials/sms-campaigns/create-an-sms-campaign).
* **Clearer integration connect flow**: Connecting a CRM or listing portal now walks you through a consistent multi-step flow (listings → contacts → preview), and each provider shows its logo on the Integrations page. Entering a wrong third-party credential shows an inline error instead of signing you out of Voqo.
* **Opt-outs land in Other**: In the SMS campaigns inbox, opt-out conversations (STOP / UNSUBSCRIBE) now appear under the **Other** tab, so **Important** stays focused on conversations that still need a reply. See [Unified Inbox](/tutorials/sms-campaigns/unified-inbox).
* **Action Loop views and safer Inbox replies**: The Action Loop now has aligned **Board**, **List**, **Archive**, and **Approvals** views. While an AI SMS reply is pending, approved, or sending, manual Inbox send is blocked so you cannot double-send over a reply that is already in flight.
## Fixes
* **Consent timestamps show your local time**: The times on the SMS opt-out and consent screens — the opt-out "When" column, the audit trail, and the per-contact consent history — now display in your local timezone instead of being offset by several hours.
* **Consent CSV export includes the contact name**: Exporting the consent / opt-out list as CSV now includes the contact **name** column, matching the on-screen table and the JSON export. See [Consent and Opt-outs](/tutorials/sms-campaigns/consent-and-opt-outs).
## New Features
* **Audit page for workspace owners**: Workspace owners now have a new **Audit** page in Workspace Settings with two tabs. The **Activity Log** keeps a permanent, filterable record of the sensitive changes in your workspace — members invited, roles changed or removed, API keys created or revoked, webhook configuration changes, integrations connected, disconnected, or re-authenticated, and contacts deleted — showing who made each change, what moved (before → after), when, and which resource was affected. The **Credit Usage** tab mirrors your billing usage breakdown and adds a **coverage indicator** so you can see how much of your metered credit spend is already itemised for the period. Both tabs support filter-aware **CSV export**. See [Audit](/tutorials/agent-settings/audit-log).
## New Features
* **AI call notes on your contacts**: After a meaningful call, **Voqo AI** now adds a concise, factual note to the contact summarising what was discussed — the property and the substance of the conversation. Only conversations worth recording create a note (a plain "call me back" won't). Each note carries badges you can read at a glance: an author badge (so you can tell your team's notes from Voqo AI's) and a channel badge showing how the conversation came in — an inbound call, outbound call, or SMS. See [Contact Notes](/tutorials/agent-settings/contact-notes).
* **VaultRE note write-back (two-way sync)**: Voqo can now write into your CRM, not just read from it. Turn on **Write notes back to VaultRE** from the Contacts tab of the VaultRE settings and Voqo saves its call and SMS notes straight onto the matching VaultRE contact — contact sync stays on automatically, so there's nothing else to set up. You can shape how notes are written with a plain-English **Custom note style** (with a live preview), and push your own notes too via an **Also save to VaultRE** checkbox in the note composer. Notes saved to your CRM show a **Synced to VaultRE** badge in Voqo.
## New Features
* **Documents in the Knowledge Base**: You can now add documents — FAQs, office policies, pricing sheets, process guides — to the Knowledge Base. Upload a Markdown, text, Word, or PDF file under the new **Documents** tab, create a **Document list**, and attach it to an agent — it answers callers' questions straight from your documents. See [Documents](/tutorials/knowledge-base/documents).
## Improvements
* **SMS campaign audiences are now contacts**: When you upload an audience for an SMS campaign, those people become real contacts in your workspace, tagged with an **SMS Upload** source you can filter by on the Contacts page. Replies always resolve to a named contact in your inbox, and there's now one home — your contacts — for every phone number Voqo works with. The separate SMS files library has been retired now that uploaded people live alongside the rest of your contacts.
* **Post-call messages pause when billing needs attention**: If a subscription payment fails, Voqo now holds back charged post-call actions (owner SMS, caller SMS, and email) instead of sending them unmetered. They resume automatically once billing is back in good standing; your calls and any non-charged actions are unaffected.
## New Features
* **Send a one-off SMS straight from the Inbox**: You can now message any contact — or a raw phone number — directly from the unified Inbox without building a campaign. Click the compose button at the top of the Inbox, search a contact or type a number, write your message, and send. You can also start a message from a contact's record with the new **Send message** button. See [Unified Inbox](/tutorials/sms-campaigns/unified-inbox).
* **Screenshot feedback widget**: Sending feedback or a feature request is now a floating widget available on every page. Capture and annotate a screenshot of exactly what you're looking at, add a note, and send it — so we get the full picture of what you need without the back-and-forth. See [Request a Feature](/tutorials/feedback/request-a-feature).
## Improvements
* **List view for Agents and Voqlaw**: The Agents page and the Voqlaw page now offer a compact list view alongside the existing cards. Toggle between grid and list from the page header, and your choice is remembered on your device.
* **Personalised names at signup**: New sign-ups now start with an organisation and workspace named after you (for example, "Sam's organisation") instead of a generic default — quicker to recognise, and easy to rename anytime.
* **Clearer SMS composer**: The message segment counter now sits in the composer toolbar and no longer resizes the box as you type, with a clear warning when a message runs across multiple segments.
## Changes
* **Viewers are now fully read-only**: The **Viewer** workspace role now means read-only everywhere — viewers can open and read everything in a workspace but can no longer make any changes. Previously a few write actions slipped through; those are now consistently blocked, with a clear message explaining that viewers have read-only access. If a teammate needs to make changes, give them the **Member** or **Admin** role, or have an admin make the change. See [Roles and Permissions](/tutorials/admin-and-billing/roles-and-permissions).
* **Members now have full day-to-day access**: The **Member** workspace role can now do all the everyday work — create, edit, and delete agents, contacts, calls, knowledge base items, integrations, API keys, campaigns, uploads, and batch jobs. The only things still reserved for admins are managing other members and changing workspace settings, so members are fully productive without admin overhead. See [Roles and Permissions](/tutorials/admin-and-billing/roles-and-permissions).
## Improvements
* **Property addresses in the call webhook**: When your agent quotes a price for a listing during a call, the call webhook now includes each property's full address alongside its ID — so your downstream systems can read the human-readable address directly from the payload instead of looking it up separately. Existing fields are unchanged, so current integrations keep working as-is.
* **Use Prompt Studio without a subscription**: You can now open Prompt Studio and write your agent's instructions even when your workspace has no active plan or has run out of AI credits — instead of an error, the AI surfaces (live **AI review**, the **Test** simulation, and the auto-compiled **Advanced** prompt) are shown clearly locked with a one-tap way to start a plan or top up. Your instructions still save straight to your agent's prompt with **Save Instructions**, exactly as you typed them, so you can set agents up first and turn on the AI features whenever you're ready. See [Refine & Test Prompts](/tutorials/tools/refine-and-test-prompts).
## Improvements
* **Call Insights, now clickable**: Every number on the **Call Insights** tab is now a way in, not a dead end. Click any **Top Property**, **Intent Signal**, **Top Inquiry**, or **Conversational Friction** to open the exact calls behind that count — each with the caller, a short summary, and a **View Call** link straight into the call log. The ranked cards also scroll within a fixed height, so you can see the full list without it stretching the page. Note that the Top Properties count reflects how often a property was *mentioned*, so the drill-in list (which shows distinct *calls*) can be shorter when a property comes up more than once in the same call. See [Interpret Analytics Metrics](/tutorials/analytics/interpret-analytics-metrics).
## New Features
* **SMS Campaigns v2**: Run personalised SMS campaigns to your contact lists end to end, without leaving Voqo. A guided campaign builder walks you through naming your campaign and goal, uploading an audience file (CSV or XLSX) with live column-mapping and row validation, choosing from AI-drafted message variants or writing your own with merge fields like `{{first_name}}`, confirming exactly who is sendable (opted-out, invalid, and do-not-contact recipients are excluded automatically), and scheduling the send — immediately, spread over a window, or at a fixed rate — with **quiet hours** so messages only go out at sensible times. A new **Unified Inbox** brings every SMS thread (campaign, call, and direct) together by contact, with AI-drafted reply suggestions, inbound intent classification, and one place to manage opt-outs and consent. Audience files and message templates are saved for reuse across future campaigns. See [SMS Campaigns](/tutorials/sms-campaigns/create-an-sms-campaign), the [Unified Inbox](/tutorials/sms-campaigns/unified-inbox), and [Consent & Opt-Outs](/tutorials/sms-campaigns/consent-and-opt-outs).
* **Prompt Studio**: A guided workspace for shaping how your agent speaks and behaves — no prompt-engineering experience required. Describe what you want your agent to do in plain language and Prompt Studio drafts a structured prompt for you, or hand-edit it directly in the **Custom Prompt** tab. Build reliable call logic with **Intent Flows**, where a built-in interviewer walks you through any missing branches one step at a time until your call flow is complete. When you're ready, the **Test** tab lets you simulate a real call — your agent greets first and responds with the same live context (date, time, response style) it uses on real calls — so you can confirm it behaves exactly as expected before going live, at no credit cost. Open it from an agent's **Conversation Settings**. See [Refine & Test Prompts](/tutorials/tools/refine-and-test-prompts).
* **Structured Contact Notes**: Contact notes are now a running, timestamped history instead of a single text box. Each note records who wrote it and when, can be edited or deleted, and stacks newest-first on the contact record — so your whole team can see the full context of every relationship at a glance. A new **has notes** filter on the Contacts page makes it easy to find the contacts you've already worked. See [Contact Notes](/tutorials/agent-settings/contact-notes).
## Improvements
* **Filter the Knowledge Base by realestate.com.au Listing Agent**: realestate.com.au listings can now be filtered by listing agent in the Knowledge Base, just like your other integrations. Previously realestate.com.au listings had no usable agent identity, so the agent filter came up empty for them; agent identity is now derived automatically, letting you build clean, single-agent lists from your realestate.com.au stock. This release also adds optional **integration** and **status** sub-filters when building smart lists, so you can narrow by source and lifecycle state in fewer clicks.
* **Function Call Setup Overhaul**: The dialog for adding and editing agent function calls and integrations has been rebuilt for a cleaner, less cramped experience — a wider layout, a Save button that's always within reach, and a smoother fit on mobile. We also fixed a bug where edits could clear themselves shortly after you typed them; your changes now stay put.
## New Features
* **Sold, Leased, Off-Market & Pre-Market Parity Across Every Integration**: Voqo now retains listings in your Knowledge Base across their full lifecycle — sold, leased, off-market, and pre-market — for every connected integration where the source supports it. Previously, only Domain customers saw sold and off-market listings; now **realestate.com.au**, **Eagle MRI**, **AgentBox**, and **VaultRE** all support the same lifecycle states (with a separate **Leased** tab and **Pre-Market** tab for CRM stock). Per-provider field coverage is documented honestly — for example, realestate.com.au's feed doesn't expose the sale method on sold residentials, so the Knowledge Base shows "Sale method: Not provided" rather than guessing or hiding the gap. See [Sold Listings](/tutorials/knowledge-base/sold-listings), [Leased Listings](/tutorials/knowledge-base/leased-listings), and [Pre-Market Listings](/tutorials/knowledge-base/pre-market-listings) for the full per-integration breakdown.
* **`LISTING_SOLD` War Room Event Now Fires on Every Integration**: When a listing flips to sold on any connected integration — not only Domain — Voqo fires a `LISTING_SOLD` War Room event so your AgentOS playbooks can trigger post-sale outreach loops, neighbour prospecting, and other downstream workflows. The event payload shape is unchanged, so existing playbooks keep working with no migration. First-time connects to a CRM with historical sold listings suppress the event during the initial sync so AgentOS isn't flooded with stale sales at connect time.
* **Per-Integration Listing Scope Toggles**: The connect modal and **⋮ Settings** for every integration now expose granular scope checkboxes — **Live listings**, **Sold & off-market listings**, **Leased listings**, and (where supported) **Pre-Market listings**. Sold and leased default off so you opt in deliberately; pre-market defaults off because appraisal-stage listings are typically high-volume and high-churn. Toggling a scope off cleanly removes the matching Knowledge Base items, with a confirmation prompt if any sit in manual lists.
* **Three New Smart-List Templates**: Use **Quick Create** in the Knowledge Base for **Leased Properties** (settled rentals across all integrations), **Pre-Market Properties** (appraisal-stage listings from your CRMs), and **Upcoming Auctions** (every property with an auction date in the next 14 days — pulled from Domain, AgentBox, VaultRE, Eagle MRI, and realestate.com.au).
* **Pre-Market "Hide from KB" Toggle**: A per-integration **Hide pre-market from KB** toggle lets you ingest pre-market data (so future AgentOS playbooks have access) without cluttering your Knowledge Base view. The Pre-Market tab still shows a count while suppressing cards. View-only setting — no re-sync triggered.
## Improvements
* **Upcoming Auctions on Eagle MRI**: Eagle MRI auction listings now populate the **Upcoming Auctions** smart-list template (previously the auction date wasn't extracted from Eagle's feed).
* **Per-Provider Limitation Copy in the Knowledge Base UI**: When a CRM or portal doesn't publish a particular field, Voqo now shows "Not provided" with a tooltip explaining the source gap — so you understand the limitation lives in the data feed, not in Voqo.
## New Features
* **AgentBox (Reapit) CRM Integration**: Connect AgentBox via Reapit-approved API access to sync your active listings into the Knowledge Base and optionally bring in your **full AgentBox contact list**. The connect flow walks you through credentials, office selection (for multi-office franchises), sync scope, and a preview step that shows the contact count and estimated sync time before anything kicks off. Scheduled delta syncs keep everything in step automatically going forward. The existing [AgentBox CSV Import](/tutorials/integrations/agentbox-csv-import) path remains available for agencies that don't have API access set up yet.
* **Cross-CRM Contact Awareness**: When you connect a second CRM to a workspace, Voqo now respects contacts already managed by another CRM. Matching contacts are left under their original source and counted as **Skipped (already managed by another CRM)** in Sync History — no duplicate rows, no lost call history. Visible across AgentBox, Eagle MRI, and VaultRE syncs.
## New Features
* **Eagle MRI CRM Integration**: Connect Eagle MRI, one of Australia's most widely used real estate CRMs, in three steps. Active listings flow into your Knowledge Base automatically, and you can optionally bring in your **full contact list** — active enquiries, dormant enquirers, vendors and everyone in between — so your AI voice agent has the complete picture. The connect flow includes a preview step that shows the contact count and estimated sync time before anything kicks off, plus an optional **initial-backfill limit** for agencies that want to sanity-check the integration on a small sample first. Twice-daily scheduled syncs at 12pm and 6pm AEDT keep everything in step with Eagle going forward.
* **Sync History Panel**: A new **Sync History** button at the top of the Integrations page opens a live panel showing every sync job across all your integrations — provider, scope, status, counts, estimated vs actual time, and whether the job was triggered automatically or manually. Failed jobs include a one-click **Retry**, so you can recover from transient issues without leaving the page.
## New Features
* **Customer Profile Enrichment**: A new post-call action that automatically extracts structured buyer, seller, investor, and tenant profiles from your agent's call transcripts. Profiles accumulate over time — captured details are never overwritten — and are visible on each contact record in the new **Customer Profiles** panel.
* **VaultRE Contact Sync**: Import your entire VaultRE contact database in one shot via CSV export, with smart deduplication against existing contacts. After the initial import, pull incremental updates using **Sync Contacts** to keep your Voqo contacts in step with VaultRE without re-uploading.
* **Standalone CSV Contact Import**: Upload contacts via CSV directly from the Contacts page — no VaultRE connection required. Useful for any list-based import workflow.
* **Contact Import History**: A new panel on the Contacts page lets you review the status and results of all past import jobs — completed, processing, or failed — so you always know the state of your data.
## Improvements
* **Batch Outbound Calls Live Status**: Campaign and job rows now show real-time status labels (e.g. Pausing, Resuming) during active runs, replacing the static "Calls ongoing" indicator.
## New Features
* **VaultRE CRM Integration**: Sync your contacts directly from VaultRE, one of Australia's leading real estate CRMs. Keep your contact database automatically up to date across both platforms.
* **Batch Outbound Call Overhaul**: Redesigned batch outbound calling with improved queue scheduling, enhanced reliability, and a refreshed frontend for managing large-scale call campaigns.
* **Email-Only Contacts**: Contacts no longer require a phone number — you can now add contacts with just an email address, making it easier to manage your full client list.
* **Payment Failure Alerts**: Receive email and in-app notifications when a payment fails, so you can resolve billing issues quickly.
* **Skill Hub**: Browse and enable pre-built skills for your agents, including SMS-related automations, without needing to configure custom function calls.
* **Twilio SMS Numbers**: Send and receive SMS via Twilio-powered mobile numbers directly from the platform.
## Improvements
* **Post-Call Actions UI**: Refreshed the post-call actions and function call configuration interface for a cleaner, more intuitive experience.
* **SMS Reliability**: Resolved post-call SMS reply errors and recording link conflicts for more reliable message delivery.
* **Call Transcript Summaries**: Optimised transcript summary generation for faster and more accurate post-call reports.
* **API Documentation**: Expanded migration guides and tutorial coverage on the documentation site.
## New Features
* **API Documentation Site**: We've launched a dedicated documentation site, making it easier to explore our API reference, tutorials, and integration guides.
* **Multiple Phone Numbers per Agent**: Agents can now be assigned multiple phone numbers, giving you more flexibility in how callers reach your AI.
* **Webhook Test Payload**: You can now send a test payload from the webhook post-call action settings, making it easier to verify your integration before going live.
## Improvements
* **Voice Quality & Streaming**: Continued improvements to voice streaming stability and response times, ensuring smoother and more natural conversations.
* **Integration Reliability**: Enhanced sync resilience for property listing integrations, with smarter caching and automatic recovery of stalled sync jobs.
## New Features
* **Team Member Invitations**: Invite team members to your organisation via email. Manage access levels and permissions across your workspaces.
* **Credit Usage Tracking**: Monitor your credit consumption in real time with a new usage dashboard, helping you stay on top of your spending.
* **SMS Messaging**: Send and receive SMS messages directly from the platform. Manage conversations alongside your call activity for a unified communication experience.
## Improvements
* **Call Log Styling**: Refreshed the call log interface with improved readability and a cleaner layout.
* **Call Insights & Analytics**: Enhanced the analytics dashboard with richer call insights and improved prompt template loading.
* **Knowledge Base Property Listing Filter**: Filter your synced property listings in the Knowledge Base by listing agent, making it faster to find and manage listings across your portfolio.
* **SSO Stability**: Resolved an issue where SSO callbacks could redirect to an incorrect portal.
## New Features
* **Organisations & Workspaces**: Manage your business across multiple workspaces with a dedicated dashboard. Invite team members, assign roles, and handle billing — all from a single organisation view.
* **Redesigned Agents Page**: The Agents dashboard has been completely refreshed with a cleaner layout, making it easier to manage your fleet of AI agents at a glance.
* **Inline Prompt Editor**: You can now edit your agent's system prompt directly within the agent view — no more navigating away to make quick changes.
* **API Call Endpoints**: Programmatically trigger and manage calls through our new API endpoints, complete with interactive documentation.
* **Post-Call SMS Recording Link**: Post-call SMS messages can now include a link to the call recording, plus support for custom text strings in your messages.
## Improvements
* **Contact Creation**: Simplified the contact creation flow with better validation and a smoother experience.
* **Prompt Engineering Templates**: Added a new library of prompt templates to help you get started faster with common real estate use cases.
* **Knowledge Base Function Call Testing**: You can now test Knowledge Base function calls directly in the prompt editor before going live.
## New Features
* **Magic Link Authentication**: You can now sign in using an email magic link option, making login faster and more convenient.
* **Password Reset**: Added a full password reset flow directly in the sign-in experience.
* **Agent System Prompt Versioning**: Added internal agent versioning so now previous agent system prompts are saved for revertibility and tracked for auditability.
## Improvements
* **Knowledge Base Stability**: Improved prompt structure for Knowledge Base workflows and other related UX improvements.
## New Features
* **API Keys**: You can now generate API keys, enabling easier programmatic access and integrations.
* **Agent Voice Enhancements**: Added improved voice expressiveness and introduced a new “Santa” voice option for voice agents.
* **Post-Call Action Categories Setup**: You can now configure category-based post call actions, allowing calls to be categorised for easier organisation and retrieval.
* **Call Logs & Contacts Search and Filtering**: Added search and filtering for quicker navigation.
## Improvements
* **Integrations Resilience**: Improved Domain.com.au sync handling and added better visibility into 403/bot-detection scenarios, plus UI directive and inspection-time improvements.
* **Voice Call Quality**: Fixed streaming transcription issues (duplicated transcripts, tool invocation) and made conversations smoother.
## New Features
* **Integrations and Knowledge Base Property Listings**: You can now sync your Domain.com.au and Realestate.com.au listings into our system's Knowledge Base, and attach them to your agents. This way you can have a comprehensive property database for your agents to reference.
* **Purchase New Mobile Number**: You now have the option to purchase a mobile number in addition to landline, for your AI Agents.
* **Categories**: You can now categorise your calls for your own ease of use. Categories, defined by you, can also be considered in post call actions if you wish.
## Improvements
* **Voice Call Experience**: We've updated our transcriber so that calls are now more efficient.
* **Delete Agents**: You can now safely delete Agents from your dashboard.
* **Ambient Background Noise**: We've slightly improved the sound quality of the background agent
## New Features
* **Domain.com.au Prompt Generator**: For our real estate users in Australia, you can now generate a prompt that includes all the relevant property information from your Domain.com.au listing. Try here [Prompt Generator](http://platform.voqo.ai/tools/prompt-generator)
## Improvements
* **Loading UI**: We've improved the loading UI to make it more responsive and user-friendly.
## New Features
* **Outbound Calling**: Once manually verified by our team, you can perform single or batch outbound calls from your Voqo AI Agent.
* **Create multiple Agents**: You can now create multiple agents for your account. This way you can now have a fleet of Agents working for you.
* **Purchase Extra Numbers**: Along with multiple Agents, you can now purchase multiple numbers and assign them between your Agents.
* **Conversation Memories deletion**: You can now delete specific memories stored by the Agent of a specific Contact.
* **Call Logs deletion**: If there's a call log that you don't like or don't want to see in your feed, you can now delete it.
## Improvements
* **New Voices**: We've 3 new voices for you to choose from, including an additional Australian male voice, and an Indian male.
* **Tooltips UI**: We've improved the user experience of using tooltips, which caused problems especially on the Safari browser in mobile.
* **International Number Formatting**: We've improved the formatting of international numbers to make them easier to read. Numbers such as `+61255644618` are displayed as `+61 2 5564 4618`.
* **Batch Contacts Upload**: Batching creating contacts via a vcf/vcard file is now optimised and very quick. Additionally, we've improved error visibility so that you know exactly why a Contact failed to upload, if it did.
## New Features
* **Batch Contacts Upload**: Users can now add multiple contacts at once, via a vCard/VCF file (this can be exported from your existing contacts list).
## New Features
* **Prompt Editor**: Paid users can now edit their custom prompt in a more user-friendly way.
* **Speech Speed Control**: Users can now control the speed of the agent's speech. Select between Slow, Medium, and Fast.
* **Specialised Keyword for Improved Agent Transcription**: Users can add specific keyterms that are important to their business, as these will be transcribed more accurately by the agent.
## Improvements
* **No Caller IDs Safe Handling**: We've made some improvements to the handling of caller IDs to make it more user-friendly.
* **Free Tier Users Exceeding Usage**: We've added a feature to notify free tier users when they exceed their usage.
## New Features
* **Personalised Greeting**: Paid users can now have their personally greet the caller if they're an exisiting Contact. The greeting is dynamically generated based on Custom Prompt's `Opening Sentence` and includes the Contact's name.
## Improvements
* **Agent Transfer Connect**: Users can now donwload the agent setup connection guide as a PDF into their device.
* **LLM End of Utterance tolerance**: The LLM's EOU feature is more tolerant to silence, i.e. doesn't interrupt the caller as much. Allows multi-sentence responses when taking turns with caller.
* **SMS To Caller Dynamic Templating**: Users can you place specific template variables in the SMS to Caller message, which will be dynamically filled with the relevant information.
## New Features
* **Memories**: For paid users, Agents can now retrieve per-contact memories during calls to personalize responses and automatically save new facts after calls. This is configureable by users under Agent Dashboard, and saved memories are viewable under each Contact.
## 1. New Features
* **Custom Function Call Templates**: Custom Function Calls will now feature templates to help you get started. For now we've only released get\_weather\_forecast to showcase the power and possibilities of custom function calls.
## 2. Changes
* **Post Call SMS source number**: We've changed the number from which you'll be receiving Post Call SMS' from, which will now be `+61480807853`.
* **Agent Caller awareness**: Your agent will now be aware of the Caller's number.
## 1. New Features
* **Post Call Send SMS to Caller**: Paid users can now send an custom SMS to the caller after the call has ended.
* **Custom Function Call Configuration**: Paid users can now configure any custom function call to be used in the agent's conversation. This allows you to integrate with any API you want, and have your agent call it during the conversation.
## 1. New Features
* **Growth Loop Toggle**: Paid users can now toggle whether the agent will ask the simple growth loop question at the end of the call.
* **New LLM Model**: We've added the GPT 4.1 Mini model as an option for you to choose from, for your Agent. This model is a smaller and more efficient version of the GPT 4 model.
* **Magic Prompt Refiner**: You can use our new Magic Prompt Refiner to turn a simple idea of your Agent's behaiour into a detailed, high-quality prompt. If you're not sure how to write an effective prompt, this feature will guide you through the process, ensuring your agent behaves exactly as you intend.
## 2. Improvements
* **Background Noise Reduction**: We've slightly reduced the ambient background noise level feature to make it more natural.
## 1. New Features
* Advanced Agent Settings
* **LLM Model Selection**: You can now choose between different LLM models for your agent, allowing you to have a choice in which model to deploy for your specific usecase.
* **Timezone**: You can now choose your timezone for your agent. This will allow Post Call Actions to be automatically cusotmised to your relative timezone.
* **Interruptible toggle**: You can now choose whether your agent can be interrupted by the caller. This will allow you to have a more natural conversation with your callers if your specific usecase requires it.
* **Toggle End Call Growth Loop**: Paid accounts can toggle whether the agent will ask the simple growth loop question at the end of the call.
* Conversation Settings
* **Refine Custom Prompt**: After entering the custom prompt for your agent, you can ask our system to refine the prompt using comprehensive prompt engineering tecniques.
## 2. Improvements
* **Onboarding**: We've made some improvements to the onboarding flow to make it more intuitive and user-friendly.
* **End Call Action**: The feature in which the Agent intelligently ends the call has been improved to be more reliable and consistent.
## 1. New Features
* **Block calls to specific numbers**:
You can now create a blacklist of phone numbers you never want your Agent to converse with.
Once a Contact is toggled to be blocked, the Agent will automatically skip dials from that number so you never
incur unwanted call charges.
* **Onboarding**:
Upon creating a new account, users will expereience a new and smooth onboarding flow to get their AI Agent up
and running in no time.
* **Email Notifications**:
Stay on top of your account stats by receiving friendly notifications when important events occur:
* Monthly Summary
* 80% and 100% Usage of Free Tier Credits
* First Successful Call
* First Ten Successful Calls
* **Post Call Webhooks**:
After each call, we'll send a comprehensive JSON payload—including call metadata, transcript, and sentiment
analysis—to your specified endpoint. Ideal for CRM updates, analytics pipelines or custom dashboards. Please view the Webhook Integration Guide for more information.
* **Post Call SMS Multilingual Support**:
Recieve your Post-Call SMS in one of eight languages (English, Spanish, Chinese, Hindi, Arabic, French, Japanese, German).
This can be selected in the Post Call settings.
* **Post Call Email Custom Subject**:
Personalise your Post Call Email summary by adding a custom email subject.
* **Knowledge Base** *(Paid Tiers Only)*:
Upload documents, FAQs, or policy manuals so your Agent can reference them in real time.
This speeds up response times and ensures accuracy in domain-specific conversations
* **Disable Call Recording**:
Users can choose to allow conversations between their Agent and Callers to be recorded or not.
Choosing not to record will not allow call recording playback in the Call Logs for the affected calls. This is also
perfect for compliance with strict privacy regulations.
## 2. Improvements
* **Warm Transfer Call Fix**:
We resolved an issue that prevented the “Warm Transfer” prompt from firing correctly.
Now, your transfer recipients will always receive a contextual briefing before the call connects
* **Smarter End-Call Logic**:
The Agent will now interpret conversational cues (e.g., “Thanks, that’s all”) and end calls more naturally—avoiding
awkward pauses or premature hang-ups.
## New Features
* **Turn detection model**: Added a new turn detection model to improve the accuracy of the agent's responses. This model is designed to better understand when the user is speaking and when the agent should respond.
## 1. New Features
* **End call by agent**: Added a checkbox to allow / disable AI agent ending call by itself. Calls will be ended when the agent says 'bye' or 'goodbye'
* **User interruption**: Added a checkbox to allow users interrupt the AI agent. Callers can interrupt the agent.
## 2. Improvement
* Call recording link takes longer to expire
* Textarea for writing custom prompt can now be resized
## 3. Fix
* Fixed an issue with agent where it does not save on blur
* Fixed an issue where new singups are stuck in loading screen
* Fixed an issue where some agents have null prompt template variables attribute
## 1. Announcements:
* Official website URL changed from [www.heffron.ai](http://www.heffron.ai) to [www.voqo.ai](http://www.voqo.ai)
* Platform URL changed from [platform.heffron.ai](http://platform.heffron.ai) to [platform.voqo.ai](http://platform.voqo.ai)
* On your invoices, the business name changed from Heffron AI to Voqo AI. The company name, Heffron Intelligence PTY LTD, remains the same.
## 2. New Features
* **Transfer call function**: When building a custom prompt, you can now add a transfer call function to transfer an ongoing phone call to another number.
* Warm Transfer: when selected, the number receiving the call transfer will be briefed about the conversation.
* Cold Transfer: No briefing, straight call transfer.
* Display agent number: You can also select to display, on the number receiving the call transfer, the original caller’s number, or the agent’s number.
* You can add multiple transfer destination.
* Detailed tutorials can be found here:
* Background ambient noise: You can now add background noise to your call under agent advanced settings. Currently we have an office background noise available.
* Simple end call: When enabled, the agent will cut the call when it replies with 'bye' or 'goodbye'. You can change this setting under 'Conversation Settings'
## 3. Improvements
* Preview voices: you can now preview various voice options before updating it.
* New voice: Sassy Voice
* Call log UI update: more information displayed in the call transcript such as function call invocation and results
* Call recording link now displayed in in email summaries.
* Minor style fixes
With our second update of the new year, we wanted to share our new features across agent customisation and contact creation options.
## 1. New Features
* **Custom Conversation Prompts**: Love the templates we have but want to take your agent one step further? Now you have full control over how conversations are run by your Voqo agent.
Customise the full system prompt with our best practice guide to create your perfect use case. Let us know what you cook up on our WhatsApp group!
* **Support for multiple post call actions**: We've updated our post-call capabilities to support sending Email and SMS summaries at the same time. Of course, you can still choose to have either just SMS or Email summaries.
- 10 credits for email summary
- 20 credits for SMS summary
- Limit to a maximum of 10 post-call actions
* **New Voices:** Choose from our new voices: 'Male-friendly' and 'Female-friendly' to level your agent and put a smile on the face of your callers! Accessible through the agent customisation tab.
## 2. Tweaks and Improvements
* **Ring, ring. Hello?**: We've screwed some shiny new bolts on the **Call Log** tab. Access full audio recordings of your AI agent's conversations and review post-call results to better track your usage.
Happy New Year! We hope you had a great holiday season. We have some exciting updates to share with you.
- If you haven't used conversation templates before, your agent's behaviour will not automatically be updated.
## 1. Pricing Model
We've updated our pricing model to switch from minute-based billing to credit-based pricing. This way, as we introduce more
features, you only need to pay for the features you are using.
[Learn more here](https://www.voqo.ai/pricing)
As shown in the pricing page, each feature has a credit value.
* Per minute of call: 20 credits (rounded up to the nearest second)
* Per post-call sms: 25 credits
## 2. New Features
* **Conversation Templates**: We recognised that our users are using the Smart Voicemail for a variety of use cases. We added conversation templates so you
can pick the template that best fits your use case. We will be adding more templates in the future. If you are an existing user, you will need to login to your account [](https://platform.voqo.ai)
Disable Agent: You can now temporilly disable the agent from the dashboard.
* **Auto Contact Creation (paid feature)**: Paid users can now automatically create contacts from the voicemails they receive. The contact name will be displayed in the post-call summary.
## 3. Improvements
* **Improved Conversation Flow**: We've made some improvements to the conversation flow to Smart Voicemail to make it more concise and polite. You will need to select a template to see the changes.
* **Improved Dashboard**: We've made some improvements to the dashboard to make it easier to navigate and find the information you need.
* **Call recoridng**: You can now view the call recordings in the call logs.
## 4. Restrictions
* **Free Plan**: Free plans now have 500 credits per month. Once the credits run out, you agent will be turned off. If you need more credits, you can upgrade to a paid plan.
* **Feature Restrictions**: Some features are only available to paid users. Free users will no longer have visibility to view call logs. You can see the full list of features [here](https://www.voqo.ai/pricing)
## Hello World
First update ever. The best is yet to come.
# Admin and Billing Overview
Source: https://docs.voqo.ai/tutorials/admin-and-billing/admin-and-billing-overview
Manage workspace governance, billing decisions, and access constraints.
## Who this is for
* Workspace Owners and Admins
* Team leads responsible for subscription and governance decisions
## What you can manage today
* Organisation and workspace administration in the platform settings area
* Billing and pricing decisions through Voqo AI subscription flows
* Access controls that depend on plan level and role permissions
## Prerequisites
* You are signed in to `https://platform.voqo.ai`
* You have admin-level permissions in the target workspace
* Your workspace context is selected correctly
## Recommended order
1. Confirm your active workspace and role permissions.
2. Review current subscription state and usage.
3. Configure workspace-level operational settings.
4. Re-test any gated features after changes.
## Expected outcome
After this guide, you should be able to identify where to manage admin and billing responsibilities and who needs access to perform each task.
## Troubleshooting
### I cannot access admin or billing controls
* Check that you are in the correct workspace.
* Confirm your role has admin privileges.
* Validate your plan includes the feature you are trying to use.
If access still fails, contact [support@voqo.ai](mailto:support@voqo.ai) and include workspace ID, your role, and a screenshot of the blocked screen.
## Related docs
* [Roles and Permissions](roles-and-permissions)
* [Settings Admin Controls](settings-admin-controls)
* [Manage Billing and Subscription](manage-billing-and-subscription)
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
* [Interpret Analytics Metrics](../analytics/interpret-analytics-metrics)
# Manage Billing and Subscription
Source: https://docs.voqo.ai/tutorials/admin-and-billing/manage-billing-and-subscription
Handle setup, plan changes, cancellation, portal access, invoices, and credit usage.
## Audience
* Billing admins and workspace owners
## Prerequisites
* Billing-capable role in workspace
* Valid payment method for paid plans
## Subscription lifecycle
### 1) Initial billing setup
1. Open billing/subscription section.
2. Add payment method and complete setup.
3. Confirm active billing status.
Notes:
* New workspaces are created without an active subscription.
* Billing remains an explicit follow-up step, even after workspace creation succeeds.
### 2) Plan updates
1. Review current usage and required features.
2. Select plan upgrade/downgrade action.
3. Confirm effective date and resulting limits.
### 3) Cancellation
1. Open subscription settings.
2. Select cancellation flow and confirm.
3. Review access/feature impact after cancellation.
### 4) Billing portal and invoices
* Use billing portal for payment method and invoice history.
* Review invoice details for accounting and support issues.
### 5) Credit usage tracking
* Monitor credit usage trends in billing surfaces.
* Investigate sudden usage changes before invoice close.
### 6) Credit pricing reference
The billing tab includes a **credit pricing** table that shows how many credits each action costs — an inbound call minute, an SMS, an email, a voicemail, and more. Use it to understand *why* your credits move, right where you review your usage, without leaving Settings.
A few things worth knowing:
* **SMS is charged per segment.** Every SMS costs credits for each segment it splits into, so a longer, multi-part message costs proportionally more than a short one that fits in a single segment.
* **Call handling is charged per minute**, rounded to the nearest second.
* **Recordings, transcripts, and contact creation or updates are free** — they're included with your plan.
* All prices are shown in **Australian Dollars (AUD)**, and credits renew monthly.
The same figures appear on the subscription page, so what you see when choosing a plan matches what you're billed.
## Common support questions answered
* Why is a feature locked after plan change?
* Where can I download invoices?
* How do I update payment method?
* Why did usage increase this cycle?
* How many credits does an SMS or a call minute cost?
## Troubleshooting
### Plan change not reflected
* Refresh workspace and billing pages.
* Confirm plan change is completed (not pending).
* Verify you are viewing the correct workspace.
### Payment method fails
* Re-enter card details and billing address.
* Retry in billing portal with updated method.
### Invoice or usage appears incorrect
* Compare usage window/timezone and active features.
* Export invoice details and collect evidence for support.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, invoice ID (if any), and timestamps.
## Related docs
* [Admin and Billing Overview](admin-and-billing-overview)
* [Settings Admin Controls](settings-admin-controls)
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
# Roles and Permissions
Source: https://docs.voqo.ai/tutorials/admin-and-billing/roles-and-permissions
Understand organisation and workspace roles, what each one can do, and how to invite and manage your team.
## What this covers
Voqo has two levels of access: your **organisation** (your whole business — billing, members, and workspaces) and each **workspace** inside it (where the day-to-day work happens — agents, contacts, calls, knowledge base, integrations, and campaigns).
Everyone on your team has **one organisation role** and, for each workspace they belong to, **one workspace role**. The two are independent: what you can do *inside* a workspace depends on your workspace role, and what you can do at the *organisation* level depends on your organisation role.
This guide explains both, so you always know who can do what — and why an action might be blocked.
## Organisation roles
Your organisation has three roles. They control billing, members, and the workspaces themselves.
| Role | What they can do |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Owner** | The single owner of the organisation. Everything an admin can do, **plus** manage billing — the subscription, payment method, and the Stripe billing portal. There is exactly one owner per organisation. |
| **Admin** | Invite and remove organisation members, set member roles, and create or delete workspaces. Admins are **automatically admins of every workspace** in the organisation (see below). They can **view** billing and usage, but cannot **manage** the subscription or payment method — that's owner only. |
| **Regular** | A standard organisation member. They have **no access to any workspace** until they're explicitly added to one. Once added, what they can do there depends on the workspace role you give them. |
**Viewing** billing — your subscription plan, usage, and credit meter — is open to **every member** of your organisation, so anyone can see what plan you're on and how much you're using. **Managing** billing — changing the payment method, subscribing, switching plans, cancelling, or opening the Stripe billing portal — is reserved for the organisation **owner**, because your payment details are shared across the whole organisation.
## Organisation admins are admins of every workspace
When someone is an **owner** or **admin** of your organisation, they are automatically made an **admin of every workspace** — both the ones you have today and any new workspace created later. You don't need to add them one by one.
This is the same model used by the major platforms your team already knows, and it means the people responsible for your organisation can always step into any workspace to help, without waiting to be invited.
An organisation admin is a **full admin of every workspace** — not just for managing members and settings, but for everything a workspace admin can do. Their organisation role always takes precedence, so nothing on their workspace row can limit them.
A few things worth knowing:
* This applies to **accepted** members only. Someone with a pending invitation isn't added to workspaces until they accept.
* If someone was already given a specific workspace role **before** becoming an organisation admin, that row is kept — but it never limits them. While they remain an organisation admin they have full admin access in that workspace regardless of what the row says.
* **You can't lower an organisation admin's workspace role from a workspace's member list — not your own, and not another organisation admin's.** Because they're an admin of every workspace, the workspace role control is read-only for them. To genuinely reduce what an organisation admin can do in workspaces, change their **organisation** role first (admin → regular). A workspace admin who is only an organisation *regular* can still be changed normally.
## Workspace roles
Inside each workspace, every member has one of three roles.
| Role | What they can do |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Admin** | Everything a member can do, **plus** manage the workspace's members (invite, change roles, remove) and update workspace settings. |
| **Member** | Full day-to-day access. Create, edit, and delete agents, contacts, calls, knowledge base items, integrations, API keys, campaigns, uploads, and batch jobs. The **only** things a member can't do are manage other members and change workspace settings. |
| **Viewer** | **Read-only.** Can open and read everything in the workspace but cannot make any changes. |
### Member = full day-to-day work
A **member** is a fully productive member of the workspace. They can do all the everyday work — set up and edit agents, manage contacts and call logs, connect integrations, manage API keys, run campaigns and batch jobs, and delete records.
The line between a member and an admin is narrow and deliberate: only **managing other members** and **changing workspace settings** are admin-only. Everything else is open to members.
### Viewer = read-only
A **viewer** can see everything in a workspace but cannot change anything. This is the right role for someone who needs visibility — to review calls, check contacts, or audit activity — without the ability to edit.
A few things to expect as a viewer, so nothing comes as a surprise:
* **You see the same screens as everyone else.** The interface isn't stripped down — buttons and menus look the same.
* **Write actions are blocked when you try them.** If you attempt to edit, create, or delete something, the action is declined with a short message explaining that viewers have read-only access. Nothing is changed.
* **This applies to everything** — editing a contact, updating an agent, deleting a call, connecting an integration, buying a number, and so on. If it changes data, a viewer can't do it.
If you're a viewer and you need to make changes, ask a workspace **admin** (or an organisation admin) to either give you a higher role or make the change for you.
## Changing your own role
You can **step yourself down** to a lower role where doing so genuinely reduces your access — but you can never promote yourself. Raising a role is always done by someone who already has the authority to grant it.
* **Organisation admin → regular.** On the organisation members table you can lower **your own** role from admin to regular. To become an admin again, another organisation admin or the owner grants it back. Stepping down at the organisation level does **not** remove you from any workspace — you keep the workspace roles you already hold.
* **Workspace admin → member or viewer.** Whether you can lower your own workspace role depends on your **organisation** role. If you're an organisation **regular**, your workspace admin access is just a workspace assignment, so you can step yourself down on that workspace. If you're an organisation **admin**, you're an admin of every workspace by virtue of your organisation role — so the workspace role control on your own row is read-only, since lowering it would change nothing. To genuinely step down there, lower your **organisation** role first (admin → regular), then change your role in that specific workspace.
Two roles are **anchors** and are shown as a fixed **badge** rather than a dropdown, on your row and everyone else's:
* The **organisation owner** — the single billing-responsible owner.
* The **workspace owner** — the person who created the workspace.
Neither can be changed or removed from the settings screens, including by the owner themselves. To move ownership of an organisation or a workspace, contact support.
You also can't **remove yourself** from an organisation or a workspace from these screens — only your role can be lowered. Ask another admin if you need to be removed entirely.
## Buying and removing numbers
Buying a new phone number or releasing an existing one is an **organisation-level** action, reserved for an organisation **owner** or **admin** — even though numbers live inside a workspace.
This is because a number adds recurring cost to your organisation's shared subscription, so provisioning it is a spend decision for the people who run your organisation.
* An organisation **owner** or **admin** can buy or release a number in any workspace.
* A workspace **admin** who isn't also an organisation admin **can't** buy or release a number. If they try, they're told to contact an organisation admin or owner — everything else in the workspace (agents, contacts, settings, members) is still theirs to manage.
* Buying a number needs an **active subscription**. If your organisation doesn't have one yet, your organisation **owner** sets it up first (managing the subscription is owner-only). When an admin buys a number, it's simply added to the subscription that's already in place.
## How to invite people
Joining is **organisation-first**: a person joins your **organisation**, and from there you give them access to specific workspaces. There is no way to invite someone straight into a single workspace — and that's deliberate, because it keeps access simple and predictable.
**Step 1 — Invite them to the organisation.**
1. Go to your **organisation settings**.
2. Send an email invitation, choosing whether they join as a **regular** member or an **admin**.
3. They receive an email link and accept it to join.
**Step 2 — Give them workspace access.**
* If you invited them as an **admin**, they're automatically an admin of every workspace — there's nothing more to do.
* If you invited them as a **regular** member, add them to each workspace they need, choosing their workspace role (**admin**, **member**, or **viewer**) as you do.
That's the whole flow: join the organisation, then get added to workspaces.
## Removing someone
There are two different removals, and they behave differently — choose the one that matches what you want.
**Remove from a single workspace**
* Removes them from **just that workspace**.
* They stay in your organisation and keep access to any other workspaces they belong to.
* Use this when someone should no longer work in one particular workspace.
* **Organisation admins can't be removed from a single workspace** — they're a member of every workspace by virtue of their organisation role. To take an organisation admin out of a workspace, lower their organisation role to **regular** first, or remove them from the organisation entirely (below).
**Remove from the organisation**
* Removes them from your organisation **and from every workspace in it**.
* Use this when someone leaves the business entirely.
If the person you're removing from the organisation is the **only admin of a workspace**, Voqo will ask you to **assign another admin to that workspace first**. This protects you from accidentally leaving a workspace with nobody in charge. Once you've assigned a replacement, the removal completes.
## Who can see the member list
The **organisation members** list is an admin view. An organisation **owner** or **admin** sees everyone in the organisation; a **regular** member sees only their own entry there. This keeps the member roster with the people who manage it.
Workspace member lists work differently — inside a workspace, **everyone in that workspace can see their co-members**, so you always know who you're working alongside.
## Why an action might be blocked
If you or a teammate can't do something, it's almost always one of these:
* **Wrong workspace role.** Viewers can't write; members can't manage other members or change workspace settings. Ask a workspace or organisation admin to adjust the role.
* **Managing billing is owner-only.** Any member can view the plan and usage, but only the organisation **owner** can change the subscription, payment method, or open the billing portal.
* **Not yet added to the workspace.** An organisation **regular** member has no access to a workspace until they're added to it.
* **Wrong workspace selected.** Confirm you're in the workspace you think you are before retrying.
If access still isn't behaving as you expect after checking the above, contact support with your workspace name, the action you tried, and your role.
## Related docs
* [Settings Admin Controls](settings-admin-controls)
* [Admin and Billing Overview](admin-and-billing-overview)
* [Manage Billing and Subscription](manage-billing-and-subscription)
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
# Settings Admin Controls
Source: https://docs.voqo.ai/tutorials/admin-and-billing/settings-admin-controls
Manage organisation, workspace, and data settings with clear role boundaries.
## Audience
* Workspace owners/admins
* Team administrators managing users, workspaces, and data controls
## Prerequisites
* Access to settings in target workspace
* Appropriate admin role permissions
## Settings areas covered
### Organisation management
* Manage organisation-level membership and ownership actions.
* Control invite/member lifecycle at organisation scope.
* Resend a pending invitation without creating a second member record.
### Workspace management
* Manage workspace-level structure and operational configuration.
* Validate active workspace context before making changes.
* Creating a new workspace does not automatically activate a subscription plan for that workspace.
* Complete billing/subscription setup later from the in-app subscription flow when needed.
### Data management
* Manage categories/taxonomy and data-organization controls.
* Apply changes carefully to avoid downstream reporting confusion.
## Role boundaries
* **Owner/Admin**: required for high-impact settings and membership changes.
* **Member/Operator**: typically limited view or no write access to admin tabs.
If actions are blocked, verify role and workspace context first.
## Expected result
Admins can complete governance actions without cross-workspace confusion and with clear permission expectations.
## Invitation behaviour
* If a team member is still **Pending**, you can resend their invitation from organisation settings.
* Resending a pending invitation sends a fresh link to the same email address and keeps the same pending member record.
* If the invite email fails to send, the pending invitation is still saved so you can resend it again later.
## Troubleshooting
### Cannot access settings tab
* Confirm current workspace context.
* Confirm account role includes required admin permission.
* Retry using owner/admin account.
### Updates not visible to team
* Refresh workspace context and affected pages.
* Confirm changes were applied in the intended workspace.
### Team member signed up without the invitation link
* Ask them to finish signup with the same email address that was invited.
* Voqo matches the invited email to the pending member record and completes the invited account instead of creating another team member.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, user role, and tab/action attempted.
## Related docs
* [Admin and Billing Overview](admin-and-billing-overview)
* [Manage Billing and Subscription](manage-billing-and-subscription)
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
# Plan and Permission Matrix
Source: https://docs.voqo.ai/tutorials/admin/plan-and-permission-matrix
Central reference for plan-gated and role-gated feature access.
## How to use this matrix
* Use when users ask: "Why can’t I access feature X?"
* Check both **plan** and **role** requirements.
* Confirm the user is in the intended workspace context.
## Access matrix
| Feature area | Typical minimum plan | Typical minimum role | If unavailable |
| ---------------------------------- | -------------------------- | ------------------------- | ------------------------------------------------------- |
| Workflows | Professional (or above) | Admin/authorized operator | Verify plan entitlement and token/role permissions |
| Batch outbound | Supported paid tier | Operator/Admin | Verify outbound entitlement and number readiness |
| Billing controls | Paid subscription context | Owner/Billing admin | Use billing admin account and correct workspace |
| Developer tools (API keys/secrets) | Pay-as-you-go (or above) | Any workspace member | Confirm plan entitlement (no admin role required) |
| Integrations management | Supported integration tier | Admin | Recheck provider setup rights and workspace role |
| Advanced settings/admin tabs | Workspace-supported plan | Admin/Owner | Validate role boundary and organisation/workspace scope |
## Context mismatch checklist
1. Confirm active workspace.
2. Confirm active organisation membership.
3. Confirm signed-in account is expected owner/admin.
4. Re-check plan status after recent billing changes.
## Escalation checklist
* Workspace ID
* Feature/action denied
* User role
* Plan name (if visible)
* Screenshot/error text
## Related docs
* [Manage Billing and Subscription](../admin-and-billing/manage-billing-and-subscription)
* [Settings Admin Controls](../admin-and-billing/settings-admin-controls)
* [Workflow Concepts and Safety](../workflows/workflow-concepts-and-safety)
# Add and Update Contacts
Source: https://docs.voqo.ai/tutorials/agent-settings/add-and-update-contacts
Manage small contact lists manually and large lists via CSV or VCF import with validation guidance.
## Audience
* Operators maintaining day-to-day contact records
* Teams importing medium/large prospect lists for outbound workflows
## Prerequisites
* Access to the **Contacts** page in your workspace
* Contact data in valid format (manual entry, CSV, or VCF file)
* For bulk imports, source file reviewed for duplicates/format issues
## Choose your path
### Small list (manual path)
1. Open **Contacts**.
2. Select **Add Contact**.
3. Enter contact name and phone number (plus optional fields).
4. Save and confirm the record appears in list view.
Expected result:
* Contacts are available immediately for call workflows.
### Large list — CSV import
Use this path when you have a CSV export from another system (e.g. VaultRE, or any spreadsheet-based contact list).
1. Open **Contacts** and select **Add Contact → Import via CSV**.
2. Upload your CSV file (drag/drop or file picker).
3. Voqo AI processes the file and imports valid contacts.
4. Open **Import History** (top-right of the Contacts page) to check the import status.
Expected result:
* Valid contacts are imported and visible in your contact list.
* Contacts that already exist are updated rather than duplicated (matched by phone number or email).
* Contacts without any phone number or email are skipped.
### Large list — VCF import
1. Open **Contacts** and choose **Batch Upload**.
2. Upload a VCF file (drag/drop or file picker).
3. Review parsed contacts in preview.
4. Resolve or remove invalid rows.
5. Select **Import Contacts** to finalise.
Expected result:
* Valid contacts are imported and visible; invalid rows are flagged.
#### Exporting contacts from your iPhone
Not sure how to get a VCF file out of your phone? Follow the steps below to export your iPhone contacts as a single `.vcf` file you can upload to Voqo.
## Import History
The **Import History** panel (accessible from the top-right of the Contacts page) shows a log of all past CSV import jobs for your workspace. Each entry shows:
* **Status** — Completed, Processing, or Failed.
* **Started / Completed** — timestamps for the job.
* **Contacts imported / skipped / failed** — a breakdown of the result.
If an import is taking longer than expected, the panel will flag it as potentially interrupted.
## Validation and error-handling rules
* CSV files should include at least a name and one contact method (phone or email) per row.
* Phone numbers are normalised to international format (E.164) automatically.
* Duplicate detection matches on phone number or email — existing contacts are updated, not duplicated.
* VCF files must be valid VCF format; each entry should include at least name and phone number.
* If multiple numbers exist in one contact, one preferred number may be selected by import logic.
## Automatic contact updates
* Automatic contact creation can add contacts from inbound callers.
* Automatic name update can refresh name values from newer verified interactions.
## Troubleshooting
### Import preview shows many invalid contacts
* Re-export your source contacts to a clean VCF.
* Normalise phone number formats before import.
* Remove malformed entries and retry import.
### Imported contacts are fewer than expected
* Check that each row includes at least one phone number or email.
* Check duplicate-number collisions in the source file.
* Split very large lists and import in smaller batches.
### Contact does not appear in call context
* Confirm call used the same number saved in contact record.
* Verify workspace context and refresh contact list.
### CSV import job is stuck in "Processing"
* Wait up to 10 minutes — large files take time.
* If the Import History panel flags the job as potentially interrupted, re-upload the file.
If unresolved, contact support with workspace ID, sample row from source file, and import timestamp.
## Customer profiles
When [Profile Enrichment](../post-call/post-call-profile-enrichment) is enabled on your agent, contacts are automatically tagged with structured profiles (Buyer, Seller, Investor, Tenant) after each engaged call. Open a contact and expand the **Customer Profiles** panel in the sidebar to see what your agent has captured so far.
## Related docs
* [Configure Profile Enrichment](../post-call/post-call-profile-enrichment)
* [Run Batch Outbound Calls](../batch-outbound-calls/batch-outbound-calls-overview)
* [Use and Save Memories](use-and-save-memories)
* [Conversation Prompts](conversation-prompts)
# Agent Advanced Settings
Source: https://docs.voqo.ai/tutorials/agent-settings/agent-advanced-settings
Configure speech, recording, and other advanced behaviour for your AI agent.
## Agent Advanced Settings
Open your agent from the **Agents** dashboard and select the **Behaviour** tab to configure its runtime settings, including the options below.
These settings control how your agent sounds, how it listens, and how it behaves during calls.
### Speech Speed
Choose how fast your agent speaks.
* **Slow** is useful for more deliberate or formal conversations.
* **Medium** is the default and works best for most calls.
* **Fast** can make short transactional calls feel more efficient.
### Speech Expressiveness
Choose how natural or restrained the voice feels.
* **Natural** is the best starting point for most agents.
* **Expressive** gives the voice more variation.
* **Low** sounds flatter and more controlled.
### Specialised Terms
Use **Specialised Terms** to improve recognition of uncommon words, product names, suburb names, or property addresses.
* Keep your manual list short and high-value. Use it for the suburb names, street names, landmarks, product names, or pronunciation-sensitive terms that matter most to your team.
* If your agent has **Knowledge Base Lists** attached, Voqo uses them during the live call to ground suburb and property answers for the current turn instead of relying on one large permanent prompt block.
* Keep your manual list focused on the terms that matter most. You do not need to paste your full suburb database into this field.
### Background Ambient Noise
Add optional background sound to make the call feel more natural.
Current options:
1. **N/A**
2. **Office**
### Call Recording
Turn call recording on or off for the agent.
* When enabled, recordings are saved to the call log.
* Recordings are stored for up to 6 months.
If you need a recording removed sooner, contact support.
### Interruptible Agent
Turn this on if you want callers to interrupt the agent while it is speaking.
This can make conversations feel more natural, especially when callers speak quickly or jump in with short confirmations.
### Caller Growth Loop
Control whether the agent asks a final growth question before ending the call.
This is useful when you want to capture extra intent or interest at the end of a conversation.
# Knowledge Documents
Source: https://docs.voqo.ai/tutorials/agent-settings/agent-knowledge-documents
Attach uploaded documents so your agent can answer free-form questions from them
## What are Knowledge Documents?
Knowledge documents let your agent answer the free-form questions callers actually ask — things like your fees, how the offer process works, what documents a renter needs to apply, or anything in a brochure or policy you've uploaded.
This is different from your knowledge base lists, which power **listing** answers (what's for sale in a suburb, prices, bedrooms). Knowledge documents cover everything that *isn't* a listing lookup:
* Agency fees and commission
* Buying and renting processes
* Application requirements and paperwork
* Office hours, areas serviced, and general FAQs
When a caller asks something a document covers, your agent answers from that document. When it can't find a confident answer, it says so rather than guessing.
## Uploading documents
When you drop a file into your workspace's knowledge area, it's added straight away — you don't need to wait for it to finish uploading before you keep working. Your agent's knowledge is prepared in the background, so you're free to navigate away or close the tab without interrupting it.
If something goes wrong while a document is being processed, you'll see a failed indicator on it. You don't need to do anything special to recover — just delete the document and upload it again.
Uploading the exact same file twice is detected automatically, so you won't end up with duplicates in your knowledge area. This works even if you rename the file first — Voqo checks the file's content, not its name, so a renamed copy of a file you've already uploaded is still recognised as the same document.
## Requirements
* You must have **uploaded** at least one document to your workspace's knowledge area first.
* Documents are then **attached** to a specific agent — only the documents you attach to an agent are used by that agent.
* This feature is available on paid plans.
## Attach documents to an agent
In the agent dashboard, open the **Capabilities** section and find **Knowledge documents**:
1. Select **Attach documents**.
2. Search for and tick the documents you want this agent to use.
3. Select **Attach** to save.
Attached documents appear in the list, and you can remove any of them at any time. Attaching is a replace-set action — the documents shown are exactly the set your agent will use.
## What your agent will and won't do
* **Will** answer free-form questions using your attached documents.
* **Will** fall back to "I don't have that information" when no attached document confidently covers the question — it will not invent an answer.
* **Won't** use a document you uploaded but didn't attach to the agent.
* **Won't** replace your knowledge base lists — suburb and listing questions still come from those.
## Troubleshooting
**I uploaded a document but the agent doesn't seem to use it.**
Uploading is not the same as attaching. Open the agent's **Knowledge documents** section and confirm the document is in the attached list. Only attached documents are used.
**The agent says it doesn't have information that's in my document.**
Check that the document is attached to *this* agent (settings are per agent), that the document uploaded successfully, and that the question is about content the document actually contains.
**I want the agent to answer suburb or listing questions from a document.**
Those answers come from your knowledge base lists, not knowledge documents. Attach the relevant knowledge base list instead.
Still stuck? Contact support and we'll help you get your agent answering from your documents.
# Manage Agent Lifecycle
Source: https://docs.voqo.ai/tutorials/agent-settings/agent-settings
Create, configure, test, and retire agents from the redesigned agent page and agents dashboard.
## Audience
* Workspace admins and operators managing agents
* Teams maintaining multiple production and test agents
## Prerequisites
* You can access [platform.voqo.ai](https://platform.voqo.ai) and open the **Agents** section.
* You have workspace access with permission to create and update agents.
* You have at least one number available for connection and testing.
## The agents dashboard
Open **Agents** to see every agent in your workspace. On desktop each agent appears as a card; on mobile the same agents appear as a list. Each card or row shows you the agent's status, its assigned number, and the voice it uses, so you can tell at a glance which agents are live and how callers reach them.
From here you can:
* Select **Create Agent** to add a new agent.
* Select any agent to open its configuration page.
## Inside an agent
When you open an agent, the page is split into two parts: an **identity panel** down the left and a **tabbed workspace** beside it.
### The identity panel
The identity panel stays in view as you work and gives you the controls you reach for most often:
* The agent's **name** and **voice**.
* An **Answering calls** toggle to turn the agent on or off without deleting it.
* The **numbers** assigned to the agent.
* **Outbound Call** to place a one-off call, and **Connect Agent** to connect the agent to a number.
* **Save** to apply your changes, and **Delete** to remove the agent.
Your changes are not live until you select **Save**, so you can adjust several tabs and commit them together.
### The workspace tabs
Everything you configure for the agent lives under one of five tabs:
* **Conversation** — the agent's name, opening sentence, and the prompt that drives how it speaks and what it says on a call.
* **Capabilities** — the actions and functions the agent can perform during a call.
* **Behaviour** — runtime settings such as voice, recording, speaking speed, interruption handling, and timezone.
* **After the call** — what the agent does once a call ends, such as sending messages or summaries and updating contacts.
* **Evaluation** — run prompt evaluations against your agent and review how it performs. See [Evaluation](evaluation).
## On mobile
On a phone, the same settings appear as a single scrolling page. A row of tabs at the top lets you jump straight to any section — Conversation, Capabilities, Behaviour, After the call, or Evaluation — without losing your place.
## Common tasks
### Create a new agent
1. Open **Agents** and select **Create Agent**.
2. Enter a clear agent name and opening sentence.
3. Save the agent and confirm it appears on your agents dashboard.
### Edit an agent
1. Open an agent from the dashboard.
2. Move through the tabs to update the agent's conversation, capabilities, behaviour, and after-call actions.
3. Select **Save**, then run a test call to confirm the changes.
### Turn an agent on or off
1. Open the agent.
2. Use the **Answering calls** toggle in the identity panel to stop or resume call handling.
3. The agent keeps all its settings while it is switched off, so you can switch it back on at any time.
### Retire an agent safely
1. Turn the agent off with the **Answering calls** toggle so it stops handling calls.
2. Reassign its numbers to another active agent if needed.
3. Select **Delete** only once you have confirmed the handover.
## Troubleshooting
### I can change settings but my updates do not take effect
* Confirm your role has permission to update agents in this workspace.
* Make sure you selected **Save** in the identity panel — changes are not applied until you save.
* Refresh the page and retry if another team member may have changed the same agent.
### Prompt changes are saved but the agent behaves differently than expected
* Run a test call after each change on the **Conversation** tab.
* Check the agent's **Capabilities** and any connected knowledge.
* Use the **Evaluation** tab to measure how the agent performs before relying on it.
### A switched-off agent still appears to handle calls
* Confirm the **Answering calls** toggle is off.
* Confirm its numbers were reassigned to an active agent.
* Verify you are viewing the current workspace and not a cached view.
If unresolved, contact support with your workspace ID, the agent name, the change timestamp, and a screenshot.
## Related docs
* [Customise Your Agent](overview-customisation)
* [Conversation Prompts](conversation-prompts)
* [Agent Advanced Settings](agent-advanced-settings)
* [Evaluation](evaluation)
* [Knowledge Base Integrations](../integrations/knowledge-base-integrations)
* [Removing Your AI Agent](../getting-started/remove-agent)
# Add Notes to Contacts
Source: https://docs.voqo.ai/tutorials/agent-settings/contact-notes
Keep a running history of notes on each contact
## What are Notes?
Notes let you record anything you want to remember about a contact — their interest in a property, a follow-up to make, the outcome of a conversation. Each contact has its own notes, kept as a running list so the whole story stays in one place.
* Add as many notes as you like to a contact
* Each note shows who wrote it and when
* Edit or delete your notes at any time
## Notes Voqo AI writes for you
After a meaningful call, **Voqo AI** adds a note to the contact — a concise, factual summary of what was discussed, like the property they asked about and the substance of the conversation. Not every call creates one: a real enquiry, price discussion, or inspection interest does; a plain "call me back" or wrong number doesn't. So your notes stay a history worth reading, not a log of every ring.
Every note carries a set of badges, so you can tell at a glance where it came from:
* **Author** — a **Voqo AI** badge on a note written automatically (hover over it and you'll see it was written by the system), or a **team member's name** on a note someone typed by hand.
* **Channel** — how the conversation happened: **Inbound call**, **Outbound call**, **Campaign**, **Post-call**, or **Direct**. The last three are SMS replies, and tell you what prompted the text — a campaign, a follow-up after a call, or a text that arrived on its own. Hover any badge for the full description. Manual notes don't show a channel badge.
* **Sync status** — if you've connected a CRM with note write-back turned on (like VaultRE), a small icon shows whether the note has reached your CRM: spinning while it syncs, a **Synced to VaultRE** badge once it's saved, or an amber icon you can click to retry if a push didn't go through.
Automatic notes are stamped with **when the conversation happened** — the time of the call, or the moment your contact's text arrived — not when the note was written, so the timeline matches your day.
## Add a Note
Open **Contacts**, select a contact, and find the **Notes** section.
1. Select **Add note**.
2. Choose a **note type**. If the contact is linked to a CRM with note write-back on, you'll pick from your CRM's own note types; otherwise you'll see Voqo's general categories.
3. If the type is about a specific property, a **Link a property** box appears — search by address and attach one.
4. Type your note (up to 500 characters).
5. Select **Save**.
A Voqo-only note appears at the top of the list straight away, with your name and the time it was added.
If the contact is linked to a CRM with note write-back on, you'll also see an **Also save to VaultRE** checkbox (or the name of your CRM). Tick it to send the note to your CRM as well; leave it unticked to keep the note in Voqo only. When it's ticked, Voqo saves the note to your CRM first and keeps it once your CRM accepts it — so it's confirmed there the moment it appears.
## Edit or Delete a Note
In the **Notes** section, each note has its own controls:
* **Edit** — update the text and save. The note keeps its place in the list and shows when it was last edited.
* **Delete** — remove the note. You'll be asked to confirm first.
If a note was also saved to your CRM, editing or deleting it in Voqo updates your CRM too — editing waits for your CRM to confirm the change, and deleting removes it from both after you confirm.
## View a Contact's Notes
Notes are shown newest-first in the contact's **Notes** section, so the most recent activity is always at the top. Every note shows its **type** above the text, and **who wrote it** and **when** below — so you can see at a glance who recorded what, useful when more than one person on your team works the same contact.
## Filter Contacts by Notes
On the **Contacts** list you can filter by whether a contact **has notes** — handy for finding the contacts you've already started working, or the ones you haven't touched yet.
## Tips
* Use notes to capture intent in the moment — "interested in 12 Smith St, wants a weekend viewing" — so nothing gets lost between calls.
* Notes are shared across your workspace, so your whole team sees the same history on a contact.
* Keep notes short and specific; add a new note for each new development rather than editing one long note.
Need a hand? Contact support and we'll help you out.
# Contacts Table
Source: https://docs.voqo.ai/tutorials/agent-settings/contacts-table
View, filter, sort, and manage your contacts in a scannable table layout with bulk actions.
## Audience
* Operators managing contact lists day-to-day
* Teams reviewing contacts before outbound campaigns
* Anyone who needs to quickly find, filter, or clean up contacts
## Prerequisites
* Access to the **Contacts** page in your workspace
* At least one contact in your workspace
## Overview
The Contacts page displays your contacts in a **table layout** on desktop, giving you a scannable view of all contact metadata at a glance. You can:
* **Filter** by source (Manual, CSV Upload, CRM Sync)
* **Sort** by name or date added
* **Search** across name, phone, and email
* **Select multiple contacts** for bulk actions
* **Open contact details** in a side panel without leaving the table
On mobile devices, the page displays the original list view for easier touch navigation.
## Table columns
The contacts table shows the following columns:
| Column | Description |
| ------------------ | ---------------------------------------------------------------------------------------- |
| **Checkbox** | Select contacts for bulk actions |
| **Name** | Contact's full name (sortable A–Z or Z–A) |
| **Phone** | Phone number with copy button on hover |
| **Email** | Email address (hover to see full address if truncated) |
| **Source** | Where the contact is managed today: Manual, CSV, SMS Upload, VaultRE, AgentBox, or Eagle |
| **Categories** | Tags from your CRM integration (shows first 2, hover for more) |
| **Contactability** | Whether the contact can be reached: Contactable, Do Not Contact, or Unsubscribed |
| **Added** | When the contact was created (sortable newest/oldest) |
| **Actions** | Edit or delete the contact |
### What the Source badge means
The **Source** badge always shows where a contact is managed **right now**, not where it first came from.
When you upload a CSV and later connect the matching CRM, your CRM takes over those contacts and the badge changes from **CSV** to the CRM's name. That is expected — the contact is now kept up to date by your CRM, so that is what the badge reports. If you later disconnect the integration, the badge reverts to **CSV**, because the CRM is no longer maintaining it.
Your upload history is never lost. A contact that arrived by CSV always stays in the **CSV Upload** filter, whichever CRM later manages it.
## Filter by source
Use the **source dropdown** above the table to filter contacts:
* **All Contacts** — Shows every contact in your workspace
* **Manual** — Contacts added manually through the UI
* **CSV Upload** — Every contact you imported by CSV, **including contacts a CRM has since taken over**
* **SMS Upload** — Contacts imported from an SMS campaign's uploaded file
* **CRM Sync** — Contacts currently managed by a VaultRE, AgentBox, or Eagle MRI integration
* **Phone / Device** — Contacts synced from your phone's address book
* **VCF Upload** — Contacts imported from a `.vcf` (vCard) file
* **My Contacts** — Only the contacts assigned to you (see [Assign Contacts to Teammates](assign-contacts))
A contact can appear under both **CSV Upload** and **CRM Sync** — the first tells you how it reached Voqo, the second tells you what maintains it today.
The filter is reflected in the URL, so you can bookmark or share a filtered view.
## Advanced filters
Click the **Filters** button to access additional filtering options:
* **Contact Status** — Filter by blocked/unblocked contacts
* **Has Email** — Show only contacts with or without an email address
* **Has Notes** — Show only contacts with or without notes
A badge on the Filters button shows how many filters are active. Click **Clear Filters** to reset.
## Sorting
Click a sortable column header to change the sort order:
1. **First click** — Sort descending (Z–A for names, newest first for dates)
2. **Second click** — Sort ascending (A–Z for names, oldest first for dates)
An arrow icon in the header shows the current sort direction. The sort state is saved in the URL.
## Search
Type in the search box and press Enter to search across contact names, phone numbers, and email addresses. Click the X button to clear the search.
## Pagination
The table shows **50 contacts per page**. Use the pagination controls at the bottom to navigate:
* **Previous / Next** buttons to move between pages
* **Page X of Y** indicator shows your current position
* **Showing X–Y of Z contacts** shows the total count
## Contact details panel
Click any row to open the **contact details panel** on the right side of the screen. The panel shows:
* **General** tab — Contact information, phone numbers, email, and customer profiles
* **Activity** tab — Call history and interactions with this contact
* **CRM Data** tab — Integration data synced from your CRM
You can edit contact details directly in the panel. If you have unsaved changes and try to close the panel, you'll be asked to confirm.
To close the panel:
* Click the X button
* Press Escape
* Click outside the panel
## Bulk delete
To delete multiple contacts at once:
1. **Select contacts** using the checkboxes in the first column
2. The **bulk actions bar** appears showing "N selected"
3. Click **Delete**
4. Confirm the deletion in the dialog
Bulk delete cannot be undone. Make sure you've selected the correct contacts before confirming.
The select-all checkbox in the header selects all contacts on the current page.
## Delete all matching a filter
When you've narrowed the table with a source filter, search, or advanced filters, you can delete **every contact that matches** — not just the ones on the current page — in one action.
1. Apply any filter, search, or source tab (other than **All Contacts**)
2. A **Delete all matching (N)** button appears, where **N** is the total number of contacts across every page that match your current view
3. Click it and confirm the count in the dialog
4. Every matching contact is deleted, and any notes attached to them are removed too
This deletes **all** matching contacts across every page, not only the ones you can see. Deletion cannot be undone. Check the count in the button and the confirmation dialog before confirming.
This is the fastest way to clean up a whole cohort — for example, every contact from a single CSV upload, or every contact synced from your phone.
### The count changed when I confirmed
If a teammate adds or removes contacts while your confirmation dialog is open, Voqo notices that the matching count no longer matches what you saw. Rather than deleting the wrong number, it shows you the updated count and asks you to confirm again. Nothing is deleted until the count you confirm matches what's actually there — so you always delete exactly what you intend.
## URL state
All table state is saved in the URL:
* Source filter (`?tab=csv_upload`)
* Sort column and direction (`?sort=name&order=asc`)
* Current page (`?page=2`)
* Search query (`?search=john`)
* Advanced filters (`?contact_block=unblocked&has_email=yes`)
* Selected contact (`?contact_id=abc123`)
This means you can:
* **Refresh** the page without losing your place
* **Share** a URL with a colleague showing the same filtered view
* **Bookmark** commonly used filter combinations
## Troubleshooting
### Table is not showing (I see a list instead)
The table view only appears on desktop screens (768px or wider). On mobile devices, the original list view is shown for easier touch navigation.
### Contacts are missing from the table
* Check your source filter — you may have filtered to a specific source
* Check advanced filters — you may have filtered by email/notes/blocked status
* Use the search box to find specific contacts
* Check pagination — the contact may be on another page
### Bulk delete didn't remove all contacts
* Some contacts may have already been deleted
* Check the toast notification for the actual count of deleted contacts
* Refresh the page to see the updated list
### The "Delete all matching" button isn't showing
The **Delete all matching** action only appears when a filter is active — a source tab other than **All Contacts**, a search term, or an advanced filter — and at least one contact matches. Switch off **All Contacts** or apply a filter to see it.
### Contact panel shows stale data
* Close and reopen the panel
* Refresh the page
* If the issue persists, contact support
## Related docs
* [Add and Update Contacts](add-and-update-contacts)
* [Assign Contacts to Teammates](assign-contacts)
* [Contact Notes](contact-notes)
* [Configure Profile Enrichment](../post-call/post-call-profile-enrichment)
* [Run Batch Outbound Calls](../batch-outbound-calls/batch-outbound-calls-overview)
# Conversation Prompts
Source: https://docs.voqo.ai/tutorials/agent-settings/conversation-prompts
Choose from our preset templates or create your own prompt to control how your agent handles conversations with callers.
Open your agent and select the **Conversation** tab, where you can choose between the **Prompt Templates** and **Custom Prompt** options.
## Prompt Templates
In the Prompt Templates section you can update:
* One of three preset templates in the toggle down button
* Name of the Human (your name)
* The name of your AI agent
* The AI agent's opening sentence (the same sentence is repeated across of every call picked up)
## Custom Prompts
In the Custom Prompt section you have full control over:
* The AI agent's opening sentence
* The full conversation flow and instructions for how the AI agent picks up calls
* Optionally generate dynamic start sentences for each call, in similar nature to `Opening Sentence`, and also include the caller's name if pre-configured as a [Contact](add-and-update-contacts).
### Not sure where to start with custom prompts?
Try our [Magic Prompt Refiner](prompt-refiner) to quickly generate and refine effective prompts for your agent.
# Evaluation
Source: https://docs.voqo.ai/tutorials/agent-settings/evaluation
Run prompt evaluations on your agent and review quality and conduct scores alongside the conversations behind them.
The **Evaluation** tab lets you measure how well your agent's prompt performs before you rely on it with real callers. It lives on the agent page, alongside Conversation, Capabilities, Behaviour, and After the call.
## When to use it
Use Evaluation whenever you change an agent's prompt or want to confirm it still behaves the way you intend. Instead of judging a single test call, an evaluation runs your agent across a set of representative conversations and scores the results, so you can see patterns rather than one-off impressions.
## Run an evaluation
1. Open the agent and select the **Evaluation** tab.
2. Select **Run Evaluation**.
3. The evaluation runs in the background and updates automatically as it progresses — you can stay on the tab and watch it complete.
Each evaluation run uses **20 credits**, shown on the button so you know the cost before you start. Credits are charged when the run begins and are not refunded if you cancel it partway through.
## Review your results
Once the evaluation finishes, the tab shows you:
* **Summary cards** with the agent's overall scores. These cover both **quality** (how well the agent does its job) and **conduct** (whether it stays within the boundaries you expect).
* A **per-conversation breakdown**. Expand any conversation to read the full turn-by-turn transcript and see the metric scores for that exchange.
Use the summary cards to spot whether a prompt change helped or hurt overall, then open individual conversations to understand why a score moved.
If your agent has a very large knowledge base, the evaluation grounds your agent against a representative leading portion of it rather than the entire base — enough to give you a reliable read on how well the prompt performs.
## If you cannot run an evaluation yet
Evaluation needs a prepared set of conversations to score your agent against. If that set is not ready for your agent, the tab tells you so and the **Run Evaluation** button stays unavailable until it is in place.
If you would like evaluations enabled for an agent, contact support with your workspace ID and the agent name.
## Related docs
* [Manage Agent Lifecycle](agent-settings)
* [Conversation Prompts](conversation-prompts)
* [Magic Prompt Refiner](prompt-refiner)
# Function Call Agent Actions
Source: https://docs.voqo.ai/tutorials/agent-settings/function-calls
Configure the capabilities of your agent with function calls
During the conversation with a caller, you can configure your agent to perform certain actions at the request of the caller. This is done by configuring the various function calls available.
This guide covers how to define and customize function calls for your AI agent.
This Function Call feature is displayed on the Platform dashboard alongside the [Custom Prompt](conversation-prompts#custom-prompts) feature.
### Quick Overview
**Cost:** Free\
**Customisable Aspects:**
* Transition message
**Cost:** 10 credits, 40 credits per minute of the transferred call\
**Customisable Aspects:**
* Transition message.
* Display Agent's or caller's number to transferee.
* Warm transfer or Cold.
* List of transferrable contacts.
**Cost:** Free\
**Customisable Aspects:**
* Transition message
* Function prompt description
* External API Integration
* Authentication Methods
* Request/Response Processing
* Error Handling & Retries
**Cost:** Free\
**Requires:** [Google Calendar integration](../integrations/google-calendar/overview) connected at the workspace level\
**Customisable Aspects:**
* Transition message
* Calendars to check (multi-select picker)
* Slot duration, look-ahead window, minimum notice
* Max number of slots to offer
* Default timezone
## End Call
End Call is a simple function call in which the Agent intelligently determines when to end the call based on the conversation with the caller.
It's free of cost and available for all agents.
#### Transition Message
Users can customize the goodbye message that the Agent delivers to the caller before ending the call.
## Transfer Call
The Transfer Call function allows the agent to transfer the call to another number, at the request of the caller. It is available for all agents.
Each Transfer Call request is charged at a cost of 10 credits. Once the transferred call is in progress, it will be charged at a rate of 40 credits per minute, independently from the initial AI call.
#### Transition Message
Custom message the Agent delivers to the caller before attempting to transfer the call to the desired transferee.
#### Display Agent Caller ID
Whether the transferree should see the Agent's phone number or the caller's phone number in the dialled call.
#### Warm vs Cold Transfer
Select between either Warm or Cold transfer.
Warm transfer allows the transferree to hear a summary of the previous AI call whilst the call is still connecting. This way the transferree can be provided some context of the previous call.
Cold transfer has no summary of the previous call.
#### Transferrable Contacts
A list of contacts the agents can transfer the call to. The contacts are mapped between name and number
The agent can use the name in the conversation to help caller identify whom they wish to transfer the call to.
The numbers must entered in E.164 format, and we only support Australian numbers at the moment. I.e. +614XXXXXXXX for mobile, or +61XYYYYYYYY for landline where X is not 4.
## Custom Function Call
The Custom Function Call feature enables your AI agent to dynamically call external APIs during conversations, allowing it to fetch real-time data, perform actions, or integrate with third-party services. This powerful capability transforms your agent from a static conversational AI into a dynamic, action-oriented assistant.
### Key Features
* **Dynamic API Integration**: Connect to any REST API endpoint
* **Multiple Authentication Methods**: Support for API keys, Bearer tokens, Basic auth, and webhook secrets
* **Intelligent Parameter Mapping**: Automatic URL templating and parameter substitution
* **Response Processing**: Extract and structure data from API responses
* **Error Handling**: Configurable retry logic and error mapping
* **Secure Credential Storage**: Encrypted storage of sensitive API keys and passwords
### Configuration Overview
### Function Configuration
#### Function Name
A unique identifier for your custom function (e.g., `get_weather_forecast`, `fetch_github_profile`). This name is used by the AI agent to identify and call the appropriate function during conversations.
#### Function Description
A clear, detailed description of what the function does. Include relevant keywords to help the AI agent understand when to use this function:
```
"Retrieve weather forecast and climate data for specific locations and dates. Use this function when the caller asks about weather conditions, temperature, or climate information."
```
#### Parameter Specification
Define the input parameters your function accepts using JSON Schema format, abiding by [OpenAPI Specification](https://swagger.io/specification/):
Additionally refer to OpenAI's [cookbook](https://cookbook.openai.com/examples/function_calling_with_an_openapi_spec) for an easy-to-follow example.
```json theme={null}
{
"location": {
"type": "string",
"description": "The city, state, or location for weather forecast (e.g., 'Sydney, NSW')",
"required": true,
"minLength": 2,
"maxLength": 100
},
"start_date": {
"type": "string",
"description": "Start date for weather forecast in YYYY-MM-DD format. For single day requests, use the same date as end_date. For multiple days, use the earliest requested date to create an optimal date range.",
"format": "date",
"required": true,
},
"end_date": {
"type": "string",
"description": "End date for weather forecast in YYYY-MM-DD format. For single day requests, use the same date as start_date. For multiple days, use the latest requested date to create an optimal date range that covers all requested days.",
"format": "date",
"required": true,
},
"unitGroup": {
"type": "string",
"required": false,
"default": "metric",
"enum": ["metric", "us", "uk"],
"description": "Temperature unit system"
},
"include": {
"type": "string",
"required": false,
"default": "days",
"enum": ["days", "hours", "current"],
"description": "Data granularity level"
}
}
```
### API Configuration
#### API Endpoint
The URL endpoint for your external API. Supports parameter templating using `{parameter_name}` syntax:
```
https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/{location}/{start_date}/{end_date}
```
#### HTTP Method
Select the appropriate HTTP method for your API (GET, POST, PUT, PATCH, DELETE).
#### Timeout
Maximum time (in seconds) to wait for the API response before timing out (default: 30 seconds).
### Authentication Methods
Custom Function Call supports four authentication methods to accommodate different API security requirements:
#### 1. API Key Authentication
Use for APIs that require an API key in headers or query parameters.
**Configuration:**
* **API Key**: Your authentication key (include prefix if required, e.g., `Bearer your_key` or `token your_key`)
* **Header Name**: Custom header name (e.g., `Authorization`, `X-API-Key`)
* **Query Parameter Name**: Query parameter name (e.g., `key`, `api_key`)
**Examples:**
```bash theme={null}
# GitHub API (Header)
Authorization: Bearer ghp_your_token_here
# Weather API (Query Parameter)
https://api.weather.com/forecast?location=sydney&key=your_api_key
# Custom Header
X-API-Key: your_api_key_here
```
#### 2. Bearer Token Authentication
Standard OAuth2 Bearer token authentication.
**Configuration:**
* **Bearer Token**: Your OAuth2 access token
**Example:**
```bash theme={null}
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
#### 3. Basic Authentication
HTTP Basic authentication using username and password.
**Configuration:**
* **Username**: Your API username
* **Password**: Your API password
Credentials are automatically base64 encoded and prefixed with "Basic " in the Authorization header. Additionally password is also hashed when stored, for security reasons.
#### 4. Webhook Secret Authentication
For APIs that require webhook signature verification.
**Configuration:**
* **Webhook Secret**: Your webhook signing secret
* **Event Type**: Custom event type (default: `voqo.custom_function_call`)
We only support POST requests for webhook authentication.
### Response Processing
#### Response Extraction
Map API response fields to variables, via simple path dot notation, that can be used in the conversation:
```json theme={null}
{
"location": "resolvedAddress",
"first_day_temp": "days[0].temperature",
"all_days_max_temp": "days[*].tempmax"
}
```
**Path Syntax:**
* Simple paths: `current.temperature`
* Array access: `forecast[0].date`
* Wildcard arrays: `forecast[*].tempMax`
#### Error Mapping
Map API error responses to user-friendly messages:
```json theme={null}
{
"401": "Request failed due to system error, I will notify my boss about this. Sorry for the inconvenience.",
"429": "You've made too many of these requests in a short period of time. Please try again later."
}
```
### Retry Configuration
Configure automatic retry behavior for failed API calls:
* **Max Attempts**: Maximum number of retry attempts (default: 3)
* **Initial Delay**: Starting delay between retries in seconds (default: 1.0)
* **Max Delay**: Maximum delay between retries in seconds (default: 10.0)
* **Backoff Factor**: Multiplier to increase delay between retries (default: 2.0)
### Security & Best Practices
#### Credential Security
* All secrets (API keys, passwords, webhook secrets) are encrypted at rest.
* Secrets are never stored in plain text.
* Secrets are automatically masked in the UI for security.
#### API Key Prefixes
When using API Key authentication, include any required prefixes in the API key field:
* GitHub: `Bearer ghp_your_token_here`
* Some APIs: `token your_token_here`
* Simple APIs: `your_key_here` (no prefix)
#### Rate Limiting
* Implement appropriate timeout values to avoid API rate limits
* Use retry configuration with exponential backoff for transient failures
* Consider API usage limits when designing function calls
### Example Configurations
#### Weather API GET Request
```json theme={null}
{
"transition_message": "grabbing climate info, please wait",
"function_name": "get_weather_forecast",
"function_description": "Retrieve weather forecast and climate data for specific locations and dates. Keywords: weather, forecast, temperature, climate, precipitation, rain, sunny, cold, hot, atmospheric, humidity, wind. Use this function ONLY when the caller asks about weather conditions, temperature, precipitation, climate, or atmospheric conditions for a specific location and date range. Requires location, start_date, and end_date parameters.",
"parameter_specification": {
"location": {
"type": "string",
"required": true,
"description": "The city, state, or location for weather forecast (e.g., 'San Francisco, CA')",
"minLength": 2,
"maxLength": 100
},
"start_date": {
"type": "string",
"format": "date",
"required": true,
"description": "Start date for weather forecast in YYYY-MM-DD format. For single day requests, use the same date as end_date. For multiple days, use the earliest requested date to create an optimal date range."
},
"end_date": {
"type": "string",
"format": "date",
"required": true,
"description": "End date for weather forecast in YYYY-MM-DD format. For single day requests, use the same date as start_date. For multiple days, use the latest requested date to create an optimal date range that covers all requested days."
},
"unitGroup": {
"type": "string",
"required": false,
"default": "metric",
"enum": ["metric", "us", "uk"],
"description": "Temperature unit system"
},
"include": {
"type": "string",
"required": false,
"default": "days",
"enum": ["days", "hours", "current"],
"description": "Data granularity level"
}
},
"api_endpoint": "https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/{location}/{start_date}/{end_date}",
"api_method": "GET",
"auth": {
"type": "api_key",
"api_key": "your_api_key",
"query_param_name": "key",
},
"headers": {},
"timeout": "30",
"retry_config": {
"max_attempts": 3,
"initial_delay": 1.0,
"max_delay": 10.0,
"backoff_factor": 2.0
},
"response_status_processing": {
"success_criteria": {},
"error_mapping": {}
},
"response_extraction": {
"location": "resolvedAddress",
"all_daily_tempmax_data": "days[*].tempmax",
"all_daily_tempmin_data": "days[*].tempmin"
}
},
```
#### GitHub API GET user info Request
```json theme={null}
{
"function_name": "fetch_github_profile",
"function_description": "Retrieve GitHub user profile public information",
"api_endpoint": "https://api.github.com/users/{username}",
"api_method": "GET",
"auth": {
"type": "bearer",
"api_key": "ghp_your_github_token_here"
},
"headers": {},
"timeout": "30",
"retry_config": {
"max_attempts": 3,
"initial_delay": 1.0,
"max_delay": 10.0,
"backoff_factor": 2.0
},
"parameter_specification": {
"username": {
"type": "string",
"required": true,
"description": "The username of the GitHub user to fetch profile information for"
}
},
"response_status_processing": {
"success_criteria": {},
"error_mapping": {}
},
"response_extraction": {}
}
```
### Usage in Conversations
Once configured, your AI agent will automatically identify when to use custom functions based on the caller's requests:
**Caller:** *"What's the weather like in Sydney next weekend?"*
**Agent:** *"Let me check the forecast for you..."*
*\[Agent calls get\_weather\_forecast function with next Saturday and Sunday as the date range, and other parameters if applicable (inclu. humidity in this example), then processes and returns the following response]*
**Agent:** *"The temperature in Sydney next Saturday is 22°C with partly cloudy skies and 65% humidity, and the temperature on Sunday is 25°C with sunny skies and 50% humidity."*
The quality of the Agent's ability to use the custom function call is dependent on the custom function call's configuration, especially the prompting in the `description` fields (function description and parameter specification).
### Troubleshooting
#### Common Issues
1. **Authentication Errors (401)**
* Verify API key/token is correct and not expired
* Check if prefix is required (e.g., `Bearer ` for GitHub)
* Ensure credentials are properly encrypted and stored
2. **Parameter Mapping Errors**
* Verify JSON Schema syntax is valid
* Check that required parameters are properly defined
* Ensure parameter names match URL template placeholders
3. **Response Processing Issues**
* Validate response extraction paths match actual API response structure
* Test API endpoint directly to understand response format
* Check for nested objects and array structures
4. **Timeout Errors**
* Increase timeout value for slow APIs
* Implement retry configuration for transient failures
* Consider API rate limits and usage patterns
#### Debug Information
Enable debug logging to troubleshoot function call issues:
* Check terminal logs for API request/response details
* Verify authentication headers are correctly formatted
* Monitor retry attempts and error responses
### Cost & Limitations
* **Cost**: Free for all agents
* **Rate Limits**: Subject to your API provider's rate limits
* **Timeout**: Maximum 60 seconds per API call
* **Response Size**: No hard limit, but recommended to define specific Response Variables for key info extraction to avoid bloating Agent memory.
* **Concurrent Calls**: Not applicable, we only allow sequential function calls (one at a time) for now.
## GCal — Check Availability
The GCal Check Availability function lets your agent read your Google Calendar(s) mid-call and offer the caller concrete open slots. The agent confirms the slot verbally — your team books it manually afterwards.
It's currently the **only Google Calendar function-call action** — booking (writing events directly from a call) is on the roadmap. It's free and available for every agent in a workspace that has Google Calendar connected.
This function call is **integration-backed** — it only appears in the function-call picker when [Google Calendar is connected](../integrations/google-calendar/setup) at the workspace level. Disconnect Google Calendar and the action silently drops out of every agent that uses it on the next call. For the full integration story, see the [Google Calendar integration docs](../integrations/google-calendar/overview).
**Two calendar selections, two scopes.** The **Calendars** you pick here apply to *this agent's* availability checks. Your workspace's **AI assistant** ("what's on my plate") has its own, separate calendar selection, set on the Google Calendar card under **⋮ → Choose calendars** — see [choosing calendars for your AI assistant](../integrations/google-calendar/setup#choose-which-calendars-your-ai-assistant-uses). Both selections accept multiple calendars.
### Prerequisites
* Google Calendar integration connected for the workspace (see [setup](../integrations/google-calendar/setup))
* Workspace's connected Google account has access to the calendars you want the agent to read
### Configuration
| Field | What it does | Recommended starting point |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| **Calendars** | Which calendars to check. A multi-select dropdown shows every calendar your connected Google account can see — pick one or more. | **Primary** (your main calendar) |
| **Slot duration (minutes)** | How long each proposed slot should be. | 30 (or 15 for quick callbacks, 60 for inspections) |
| **Look-ahead (minutes)** | How far into the future to search for free slots. | 7200 (5 days) |
| **Minimum notice (minutes)** | Don't propose slots starting within this many minutes from now. | 60 (don't propose slots within the next hour) |
| **Max slots** | The maximum number of options the agent will read out. | 5 (more than this is overwhelming on a call) |
| **Default timezone** | IANA timezone, e.g. `Australia/Sydney`. The agent uses this when the caller doesn't specify a timezone. | Your office's timezone |
| **Transition message** | A short phrase the agent says before checking the calendar — fills the silence during the lookup. | "Let me check the calendar for you…" |
### What the caller hears
> **Caller:** *"When can I come and see the property?"*
>
> **Agent:** *"Let me check the calendar for you…"*
>
> *\[Agent calls Google Calendar's freeBusy endpoint for the selected calendars and time window, finds open slots that match the configured duration and notice constraints, then reads them back.]*
>
> **Agent:** *"I've got three options that work: Thursday at 10 AM, Thursday at 2 PM, or Friday at 9 AM. Which suits you?"*
>
> **Caller:** *"Thursday at 2 PM works."*
>
> **Agent:** *"Great — I'll note that down and someone from our team will confirm with you shortly."*
### Common configurations
#### Inspection requests
* Slot duration **60 minutes**, look-ahead **48 hours**, max slots **3**
* Default timezone matches the property's location
#### Vendor catch-up calls
* Slot duration **15 minutes**, look-ahead **5 days**, max slots **5**
* Useful for callers who want a short check-in this week
#### Sales colleague handovers
* Add the colleague's shared calendar to the **Calendars** dropdown (the colleague needs to share their calendar with your connected Google account first)
* Slot duration matches the colleague's typical call length
### Failure handling
| Failure | What the caller hears | What you do |
| -------------------------------------------- | ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Google Calendar is disconnected at call time | Agent doesn't offer the availability check at all (action silently drops out) | Reconnect from the [Integrations page](../integrations/google-calendar/setup) |
| `freeBusy` API timeout or transient error | *"I can't check the calendar right now"* | Usually transient — try again. If persistent, contact support |
| No slots found in the look-ahead window | Agent says it can't find any open times that match | Increase look-ahead, reduce minimum notice, or check that the selected calendar(s) actually have free windows |
| Selected calendar no longer exists in Google | Skipped silently for that calendar; others still checked | Re-open the action config — the picker refreshes from Google and you can remove the dead calendar |
### Cost & limitations
* **Cost**: Free for all agents (no Google Calendar API charges either — we operate within Google's free tier for the volumes in scope)
* **Read-only**: v1.0 ships availability lookups only. Writing events (locking the booking in directly from the call) is on the roadmap
* **Read-only at the OAuth scope level too**: Voqo only requests `calendar.readonly` — we cannot create, modify, or delete anything on your calendar in v1.0
* **No background syncing**: Voqo reads your calendar live each call. Nothing is cached on our side
For the full integration story (OAuth flow, what other Voqo AI surfaces will use this connection, troubleshooting), see the [Google Calendar overview](../integrations/google-calendar/overview).
# Individual Outbound Call
Source: https://docs.voqo.ai/tutorials/agent-settings/individual-outbound-call
Learn how to make individual outbound calls using your AI agents in Voqo AI.
The **Individual Outbound Call** feature allows you to initiate one-off calls to any phone number directly from the Voqo AI platform, leveraging your AI agents for personalized outreach, follow-ups, or customer engagement.
## How It Works
1. Log in to your Voqo AI dashboard.
2. Click **Outbound Call** button on the top right corner.
3. Enter the recipient’s phone number.
4. Select the agent you want to use for the call.
5. Select the numbers you would initiate the call.
6. Initiate the call—your chosen AI agent will handle the conversation and follow any configured prompts or workflows.
7. After the call, review the call summary, transcript, and recording (if enabled) in the call logs.
*Making an individual outbound call via click 'Outbound Call' button.*
## Use Cases
* **Customer Follow-Up**: Reach out to customers after a recent interaction or purchase.
* **Appointment Reminders**: Have your AI agent remind clients of upcoming appointments or bookings.
* **Sales Outreach**: Make targeted outbound calls to prospects or leads for sales campaigns.
* **Service Notifications**: Notify customers about service updates, renewals, or important information.
* **Personalized Engagement**: Deliver tailored messages or check-ins to high-value clients.
# Customize Your Agent
Source: https://docs.voqo.ai/tutorials/agent-settings/overview-customisation
Step by step workflow guides.
This section covers everything from basic agent settings to custom agent prompting and advanced features.
Start here to begin creating your voice agent.
Learn how to customise your agent's functionality and what they say on call.
Learn how to add contacts and create new contacts based on calls.
Configure how and what information your agent sends to you after a call.
Determine the capabilities of your agent during a call.
Run prompt evaluations and review how your agent performs.
# Magic Prompt Refiner
Source: https://docs.voqo.ai/tutorials/agent-settings/prompt-refiner
Learn how to use our Magic Prompt Refiner to automatically improve your prompts and create high-quality AI agents.
The Magic Prompt Refiner is a powerful tool designed to turn a simple idea into a detailed, high-quality prompt. If you're not sure how to write an effective prompt, this feature will guide you through the process, ensuring your agent behaves exactly as you intend.
### 1. Write Your Initial Prompt
Open your agent, select the **Conversation** tab, choose **Custom Prompt**, and write a basic instruction in the system prompt editor. Don't worry about getting it perfect; just describe the agent's main goal with any additional details you can think of. Once you're ready, click the **Refine** button.
### 2. Add Key Details
Our AI will analyze your prompt and ask for specific information to improve it.
Fill in the fields with the requested details. The more specific you are, the better the final prompt will be. When you're finished, click **Submit & Refine**.
### 3. Review and Accept the Refined Prompt
The Magic Refiner will generate a new, professionally structured prompt that incorporates best practices based on your input.
You can easily review all the changes. New additions are highlighted in green.
If you're happy with the result, click **Accept Changes** to save the new prompt. You can also choose to **Discard** and start over.
# Use and Save Memories
Source: https://docs.voqo.ai/tutorials/agent-settings/use-and-save-memories
Learn how conversation memories work and how to enable them
## What are Memories?
Memories let your agent remember caller-specific facts (e.g., name, preferences, past requests) across calls. Memories are stored and retrieved per Contact.
* Saved automatically after calls (if enabled)
* Retrieved during live calls to personalize responses (if enabled)
* Visible in each Contact's “Long-term Memories” section
## Requirements
* Memories are linked to a specific Contact. The caller must:
* Match an existing Contact, or
* You enable “Automatic contact creation” in Contact Settings.
* This feature is available on paid plans.
## Enable Memories (Agent Dashboard)
In the Agent dashboard, scroll down to “Memory Settings”:
* Save conversation memories: When enabled, the agent will save new/updated memories after each call.
* Use conversation memories: When enabled, the agent will retrieve relevant memories during a live call.
Memories are saved and retrieved per Contact. If no matching Contact exists, enable “Automatic contact creation” in Contact Settings so the caller is captured as a Contact.
## How it Works (under the hood)
* Save (post-call): The call transcript is analyzed to extract caller-specific facts, and those are saved as long-term memories scoped to that Contact.
* Use (during call): The agent retrieves relevant memories scoped to that Contact and uses them as internal context to improve responses. This information is not read aloud to the caller.
## View Memories in Contacts
Open “Contacts” → select a Contact → scroll to “Long-term Memories” to see the saved memories and when they were last updated.
## Tips
* Turn on both:
* Automatic Contact Creation (in Contact Settings)
* Save conversation memories (in Memory Settings)
* Keep using “Use conversation memories” for personalization and faster task completion.
* You can revisit memories per Contact to curate and audit what the agent knows.
# Interpret Analytics Metrics
Source: https://docs.voqo.ai/tutorials/analytics/interpret-analytics-metrics
Understand available analytics metrics, expected latency, and interpretation caveats.
## Audience
* Managers reviewing call performance
* Operators validating trends and quality outcomes
## Prerequisites
* Access to analytics view
* Sufficient historical call activity for meaningful trends
## What analytics typically show
* Call volume and distribution patterns
* Outcome/performance indicators from completed interactions
* Quality/coverage signals based on available data
## Data latency and coverage expectations
* Some metrics may lag behind real-time operations.
* Recent calls may appear in logs before analytics aggregates update.
* Low-volume workspaces may show sparse or noisy trends.
## Interpretation guidance
* Use trends over single-point snapshots.
* Compare like-for-like time windows when diagnosing changes.
* Pair analytics insights with call log spot checks for root-cause analysis.
## Drill into the calls behind a metric
On the **Call Insights** tab, every metric is clickable — you do not have to take the number on trust. Select a property in **Top Properties**, an intent in **Intent Signals**, or a row in **Top Inquiries** or **Top Conversational Frictions**, and a window opens listing the exact calls behind that count.
For each call you see:
* **Date** — in your agent's timezone.
* **Caller** — the contact's name when we can match the number, otherwise the phone number itself.
* **Summary** — a short recap of what the call was about.
* **View Call** — opens the full call log, transcript, and recording for that call.
The list respects the agent and date-range filters you have applied to the tab, and is ordered newest first. Use it to jump straight from "317 callbacks requested" to the specific callers who asked.
For **Top Properties**, the card's **Mentions** column counts every time a property came up, while the drill-in window lists distinct calls — so a single call that mentioned a property twice shows as one call here. The window title always reflects the number of calls.
## Long lists scroll inside their card
When a workspace has many properties, inquiry types, or friction tags, the **Top Properties**, **Top Inquiries**, and **Top Conversational Frictions** cards scroll within a fixed height rather than stretching down the page. Scroll inside the card to see the full ranked list — nothing is truncated.
## SMS metrics
The **SMS** tab summarises your text-message activity for the selected date range. It opens by default and shows three headline numbers plus a daily trend chart. Use the date-range control at the top to switch between presets or set a custom window — every number and the chart update together.
* **Sent** — every text message your workspace handed to the network in the window, whether it went out from a campaign, was typed by an operator in the inbox, or was sent by your AI agent. A message is counted on the day it was actually sent, in UTC.
* **Replied** — every inbound text your contacts sent back in the window, counted on the day it arrived (UTC). **This includes opt-out replies.** When a contact texts back `STOP`, `UNSUBSCRIBE`, or a similar keyword, that message is a reply and is counted here as well as under Unsubscribe — so a single opt-out shows in both numbers. The KPI tile carries an **"Includes opt-out replies"** note as a reminder.
* **Unsubscribe** — the number of contacts who opted out of SMS in the window (for example by replying `STOP`), counted on the day they opted out.
The **daily trend** chart plots **Sent** and **Replied** as two lines across the selected window, so you can see the shape of a campaign and how strongly contacts engaged over time.
### Reading the SMS numbers
* Because an opt-out is both a reply and an unsubscribe, **Replied will always be at least as large as Unsubscribe** for the same window. This is expected — Replied measures inbound volume, Unsubscribe measures intent.
* Days with no activity show as zero on the chart rather than gaps, so a quiet weekend reads as a dip to zero, not a break in the line.
* A brand-new or low-volume workspace may show all zeros. When every number is zero for the selected range, the tab shows a short "no activity" message instead of empty cards.
## Data caveats
* Missing/partial data can affect metric confidence.
* Feature enablement (recording/transcript/config) influences available analytics depth.
* Subscription/workspace context can affect visibility of some analytics surfaces.
## Troubleshooting
### Analytics appears empty
* Confirm date range and workspace selection.
* Verify there were completed calls in that period.
* Wait for aggregation delay and refresh.
### SMS tab shows all zeros
* Confirm the date range covers a period when you actually sent or received texts.
* Sent counts only messages that reached the network, so drafts and failed sends do not appear.
* A workspace that has never run an SMS campaign or inbox conversation will show zeros until its first message.
### Numbers differ from call logs
* Confirm same time window and timezone are used.
* Check if logs are near-real-time while analytics is batched.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, date range, timezone, and screenshots.
## Related docs
* [Review Call Logs](../call-logs/overview-call-logs)
* [Troubleshooting Hub](../troubleshooting/index)
# Batch Failure and Recovery Runbook
Source: https://docs.voqo.ai/tutorials/batch-outbound-calls/batch-failure-recovery-runbook
Diagnose stalled jobs, retry safely, and escalate with complete diagnostics.
## Audience
* Support agents handling batch outbound incidents
* Workspace admins/operators running outbound campaigns
## Prerequisites
* Access to batch campaign/job views
* Access to batch logs or status details
* Campaign ID and job ID for the incident
## User-visible symptoms to triage
* Job stuck in running state with no completed calls
* Campaign delivers far fewer calls than expected
* Repeated call failures for a large contact segment
* Duplicate-call concerns after retries
## Operational checks in order
### 1) Confirm job health and stage
1. Open the affected job and record current status.
2. Confirm whether progress counters are moving.
3. Compare expected contacts vs processed contacts.
### 2) Validate permit and dispatch behavior
1. Check whether dispatch is blocked by permit/concurrency limits.
2. Confirm retries are occurring for transient failures.
3. Verify that non-retryable failures are not being retried indefinitely.
### 3) Check duplicate prevention behavior
1. Confirm there is no duplicate job run started unintentionally.
2. Verify repeated deliveries are deduplicated at dispatch layer.
3. Ensure recipients are not duplicated in upload source.
### 4) Determine retry strategy
* Retry only when failures are transient (provider timeout, temporary unavailability).
* Do not mass-retry invalid numbers or permanently failed payloads.
* Prefer targeted retries for affected subset when possible.
## Escalation tree
### Level 1: Operator self-service
* Recheck job configuration (agent, number, campaign, upload).
* Validate contact file quality for malformed/duplicate numbers.
* Retry a small sample cohort before full relaunch.
### Level 2: Support-assisted recovery
* Confirm permit/concurrency symptoms and dispatch progression.
* Collect structured diagnostics (below) from customer.
* Recommend corrected retry path and monitor first 10-20 dispatches.
### Level 3: Engineering escalation
Escalate when any of these occur:
* Job remains stalled after validated retry path
* Duplicate processing persists despite dedupe checks
* Provider or dispatch failures exceed expected transient threshold
## Required diagnostics for support escalation
* Workspace ID
* Campaign ID
* Batch Job ID
* Upload ID (if applicable)
* Time window and timezone
* Symptom summary with screenshot
* Approximate failed vs successful counts
## Expected recovery outcomes
* Job progresses and completes with traceable success/failure counts
* Retries are controlled and non-duplicative
* Customer receives clear next action and ETA
## Related docs
* [Run Batch Outbound Calls](batch-outbound-calls-overview)
* [Campaigns](campaigns-batch-outbound-calls)
* [Batch Jobs](jobs-batch-outbound-calls)
* [Troubleshooting Hub](../troubleshooting/index)
# Run Batch Outbound Calls
Source: https://docs.voqo.ai/tutorials/batch-outbound-calls/batch-outbound-calls-overview
Launch your first campaign end-to-end: Campaign -> Uploads -> Contacts -> Jobs -> Monitoring.
## Audience
* Operators launching first outbound campaign
* Admins/support teams validating campaign delivery
## Prerequisites
* At least one active agent configured
* At least one purchased/assigned number
* Contact upload file prepared (CSV or XLSX for batch uploads)
* Permission to create campaigns and jobs in workspace
## End-to-end playbook
### 1) Campaign
1. Open **Batch Outbound Calls** in the sidebar.
2. Go to **Campaigns**.
3. Create a campaign with a clear operational name.
Expected result:
* Campaign is visible and selectable for job creation.
### 2) Uploads
1. Open **Batch Uploads**.
2. Upload a recipient file (CSV/XLSX).
3. Confirm file metadata and parsing complete without critical errors.
Expected result:
* Upload appears with expected contact counts and headers.
### 3) Contacts review
1. Open **Batch Contacts**.
2. Verify key fields (at least `phone_number`, plus any dynamic variables).
3. Resolve obvious data quality issues before launch.
Expected result:
* Contact set is clean enough for campaign execution.
### 4) Jobs
1. Open **Batch Jobs** and create a new job.
2. Select:
* campaign
* agent
* upload
* sending number
3. Start the job.
Expected result:
* Job enters active/running lifecycle and begins dispatch.
### 5) Monitoring and completion
1. Monitor job status in **Batch Jobs**.
2. Review progress and completion states.
3. Open logs/report view for outcomes after completion.
Expected result:
* You can confirm successful calls, failures, and completion summary from one workflow.
## First campaign success criteria
* Campaign created and linked to a valid job
* Upload accepted with valid recipients
* Job started with selected agent + number
* Status and logs show measurable outcomes
## Known constraints
* Concurrency and throughput depend on provider and account limits.
* Invalid recipient formatting can reduce delivery and completion rates.
## Troubleshooting
### Job starts but no calls dispatch
* Confirm job has valid campaign/upload/agent/number selections.
* Check contact file for missing or malformed numbers.
* Retry with a smaller test cohort first.
### Campaign under-delivers
* Review job logs for failed recipients.
* Check provider/permit/concurrency limits.
* Re-run with cleaned contact set.
### Duplicates or unexpected recipients
* Re-check upload source for duplicates.
* Validate mapping/headers before relaunch.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, campaign ID, batch job ID, and timestamped symptoms.
## Related docs
* [Campaigns](campaigns-batch-outbound-calls)
* [Batch Uploads](uploads-batch-outbound-calls)
* [Batch Contacts](contacts-batch-outbound-calls)
* [Batch Jobs](jobs-batch-outbound-calls)
* [Batch Failure and Recovery Runbook](batch-failure-recovery-runbook)
* [Troubleshooting Hub](../troubleshooting/index)
# Campaigns
Source: https://docs.voqo.ai/tutorials/batch-outbound-calls/campaigns-batch-outbound-calls
Organize and manage your batch outbound calls with campaigns in Voqo AI.
A **Campaign** in Voqo AI serves as an abstract grouping that maps to your real-world marketing or outreach initiatives. Campaigns provide a structured way to organize, manage, and track your batch outbound calls, ensuring clarity and efficiency as you scale your communication efforts.
By associating each batch of outbound calls with a specific campaign, you can easily monitor progress, analyze results, and maintain a clear overview of your ongoing and past activities.
## How It Works
1. Click the **Campaigns** button in the navbar to view a list of all created campaigns.
2. To create a new campaign, click the **New Campaign** button.
3. Enter a name for your campaign in the required input field and submit.
4. To update an existing campaign, use the action menu (three dots) on the right side of each campaign row to access editing options.
This streamlined workflow helps you keep your batch outbound calling efforts organized and aligned with your business objectives.
# Batch Contacts
Source: https://docs.voqo.ai/tutorials/batch-outbound-calls/contacts-batch-outbound-calls
View all contacts included in your batch uploads for outbound calling campaigns in Voqo AI.
The **Batch Contacts** page provides a comprehensive view of all contacts included in your uploaded recipient lists for batch outbound calls. This page is designed for easy reference and review—no manual operations are required here.
You can see detailed information for each contact, including dynamic parameters such as name, department, job position, and any other fields included in your upload. This helps ensure your campaigns are well-organized and that each recipient’s information is accurate and ready for personalized outreach.
*All uploaded contacts are displayed for review and reference.*
# Batch Jobs
Source: https://docs.voqo.ai/tutorials/batch-outbound-calls/jobs-batch-outbound-calls
Create, manage, and monitor batch outbound call jobs in Voqo AI.
A **Batch Job** is the final step in launching a batch outbound call campaign. It brings together your selected campaign, agent, batch upload (list of contacts), and phone number to create and execute a coordinated batch calling operation. Batch jobs provide a clear overview of job status, management actions, and access to detailed reports.
You can monitor the status of each running job via the job status field. The three-dot action menu for each job allows you to add, edit, delete, or run jobs. Once a job is completed, you can download a detailed job report using the **View Logs** option.
## How It Works
1. Click the **New Job** button to start creating a batch job.
2. Enter a name for your batch job.
3. Select the agent you want to use for this batch call.
4. Choose the campaign to associate with this job.
5. Select the batch upload (list of contacts) for the job.
6. Select the phone number to initiate the batch calls.\\
7. After the job is completed, download the job report by clicking **View Logs**.\\
This workflow ensures you can efficiently launch, monitor, and review your batch outbound calling campaigns with full control and transparency.
# Batch Uploads
Source: https://docs.voqo.ai/tutorials/batch-outbound-calls/uploads-batch-outbound-calls
Upload and manage recipient lists with dynamic parameters for batch outbound calls in Voqo AI.
**Batch Uploads** allow you to import a list of recipients for your outbound calling campaigns. Each upload can include dynamic parameters—such as name, department, or job position—which are mapped to agent prompts, enabling your AI agent to personalize conversations for each recipient. This makes every interaction more relevant and engaging.
Each batch upload contains important metadata, including the file name, file size, and the total number of contacts in the upload. Organizing your uploads with clear, descriptive names helps you easily track and manage your campaigns.
## How It Works
1. Click the **Batch Uploads** button in the sidebar to view all your uploaded recipient lists.
2. To add a new upload, click the **New/Add** option in the three-dot action menu.
3. Enter a name for your upload (it is recommended to use a unique name that matches the uploaded file, including the extension, e.g., `list1.csv`, `list2.xlsx`).
***
title: 'Batch Contacts'
description: 'View all contacts included in your batch uploads for outbound calling campaigns in Voqo AI.'
----------------------------------------------------------------------------------------------------------
The **Batch Contacts** page provides a comprehensive view of all contacts included in your uploaded recipient lists for batch outbound calls. This page is designed for easy reference and review—no manual operations are required here.
You can see detailed information for each contact, including dynamic parameters such as name, department, job position, and any other fields included in your upload. This helps ensure your campaigns are well-organized and that each recipient’s information is accurate and ready for personalized outreach.
*All uploaded contacts are displayed for review and reference.*
4\. Upload your recipient file from your local system (CSV or XLSX format).
### Important Notes about batch uploading
* The file must be a csv/xlsx file.
* Input file name is recommended to be unique and mapping to the file name
* List headers must contain phone\_number, the other headers can be any.
Once uploaded, you can view the metadata for each batch upload, including file name, file size, and total contacts. Dynamic parameters in your file will be available for use in agent prompts, allowing for highly personalized outbound calls.
This workflow ensures your recipient lists are well-organized and your campaigns are set up for maximum personalization and efficiency.
# Review Call Logs
Source: https://docs.voqo.ai/tutorials/call-logs/overview-call-logs
Review call status, transcript, and recording outcomes with clear troubleshooting for missing artifacts.
## Audience
* Operators reviewing day-to-day calls
* Managers auditing call quality and outcomes
## Prerequisites
* Workspace access to call logs
* At least one completed or in-progress call
* Agent configured with recording/transcript settings as needed
## Call states you will see
* **Ringing/queued**: call initiated, not yet completed
* **In progress**: call is active
* **Completed**: call ended and final artifacts are available
* **Failed**: call did not complete successfully
## Transcript and recording expectations
* Transcript generation may appear shortly after call completion (not always instant).
* Recording appears only if recording is enabled and capture succeeds.
* Post-call actions (SMS/email/webhook) may complete after the call row first appears.
## Steps
1. Open [platform.voqo.ai/call\_logs](https://platform.voqo.ai/call_logs).
2. Select the target call from the list.
3. Confirm status and review:
* call summary
* transcript content
* recording link/playback (if enabled)
* post-call action results
## Expected result
You can reliably determine whether a call completed and whether transcript/recording artifacts are available, delayed, or missing due to configuration/runtime issues.
## Troubleshooting
### Transcript missing right after call
* Wait a few minutes and refresh the page.
* Confirm call status has moved to **completed**.
* Re-check agent configuration if transcripts are repeatedly missing.
### Recording missing
* Confirm recording is enabled in [Agent Advanced Settings](../agent-settings/agent-advanced-settings).
* Verify the call completed successfully.
* If recording is still missing, capture call ID and escalate.
### Call not visible in logs
* Confirm you are in the correct workspace.
* Refresh filters/search.
* Verify the call actually initiated from the expected agent/number.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) and include workspace ID, call ID, timestamp/timezone, and screenshot/error details.
## Related docs
* [Connect Agent to Your Phone](../connect-agent/connect-agent-overview)
* [Configure Post-Call Messaging](../post-call/post-call-messaging)
* [Troubleshooting Hub](../troubleshooting/index)
# Connect Agent to Phone (AU)
Source: https://docs.voqo.ai/tutorials/connect-agent/connect-agent-au
Australian carrier setup with validation checks and failure recovery.
## Audience
* AU-based users completing call-forwarding setup
* Support/admin users diagnosing connection failures
## Prerequisites
* Active Voqo workspace with an enabled agent
* Agent phone number copied from agent settings
* Active mobile service with forwarding capability
* Reliable signal while entering forwarding code
## Device and carrier checks before setup
* iPhone: disable Live Voicemail before setup.
* Dual-SIM: select the correct SIM line for forwarding.
* Verify carrier account allows forwarding commands.
## Table of Contents
* [Telstra](#telstra)
* [Optus, Vodafone, TPG, Boost Mobile, Woolworths Mobile](#optus-vodafone-tpg-boost-mobile-woolworths-mobile)
* [Amaysim](#amaysim)
* [Going overseas — forward every call](#going-overseas-forward-every-call)
## Validation checks (run after setup)
1. Your phone confirms forwarding activation.
2. A test missed call routes to your AI agent.
3. The call appears in call logs with expected status.
If any check fails, use the fallback troubleshooting section below.
## Telstra
Use this flow for Telstra numbers.
1. Get your agent's phone number from the agent settings page, in full international format (with the leading `+` and `+61` country code).
2. Open the dial pad on your phone.
3. Dial the following MMI code `**004**10#` (i.e. `**004*+61878987876*10#`)
4. Press the call button.
5. You should see a message saying that call forwarding is enabled.
## Optus, Vodafone, TPG, Boost Mobile, Woolworths Mobile
Use this flow for Optus, Vodafone, TPG, Boost Mobile, and Woolworths Mobile.
1. Get your agent's phone number from the agent settings page, in full international format (with the leading `+` and `+61` country code).
2. Open the dial pad on your phone.
3. Dial the following MMI code `*004*#` (i.e. `*004*+61878987876#`)
4. Press the call button.
5. You should see a message saying that call forwarding is enabled.
## Amaysim
You need to use the Amaysim app to set up call forwarding.
You can activate this in the 'Settings' section of My amaysim or the amaysim app. All you will need to do is enter the number you want your calls to be forwarded to into the 'Forward calls to' box.
## Going overseas — forward every call
The setups above are *conditional* — your phone rings first, and only missed calls route to your AI agent. When you're travelling overseas (where your phone may not ring at all), you can switch to a *permanent* transfer so that **every** incoming call goes straight to your agent.
1. Get your agent's phone number in full international format (with the leading `+` and `+61` country code).
2. Open the dial pad on your phone.
3. Dial `**21*#` (i.e. `**21*+61878987876#`).
4. Press the call button and wait for the confirmation message.
Every call now goes straight to your AI agent.
**To cancel permanent transfer** when you're back, dial `##21#` and press the call button.
## Fallback troubleshooting (AU)
### Forwarding setup says successful but calls do not route
* Re-check that the exact forwarding code was used for your carrier.
* Confirm the agent number is correct and includes required area/country format.
* Re-run setup and test again after device restart.
### Setup command fails or returns carrier error
* Confirm your plan allows forwarding.
* Retry from an area with stronger signal.
* Contact carrier support to enable forwarding on your line.
### Calls route but logs/transcripts are missing
* Wait a few minutes for processing and refresh call logs.
* Confirm you are checking the correct workspace and agent.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) and include workspace ID, carrier, device model, forwarding code used, and timestamp/timezone.
# Connect Agent to Your Phone
Source: https://docs.voqo.ai/tutorials/connect-agent/connect-agent-overview
Set up phone forwarding (AU/US), verify success, and recover quickly if setup fails.
## Audience
* New users completing onboarding
* Operators validating phone-forwarding setup
## Prerequisites
* You have completed [Quick Start](../getting-started/quick-start).
* You have one active agent and know its assigned number.
* Your phone has active cellular service and stable signal.
* You know your carrier and country setup path (AU or US).
## Choose your setup path
Carrier-specific instructions, validation checks, and failure recovery for US numbers.
Carrier-specific instructions, validation checks, and fallback troubleshooting for AU numbers.
## What success looks like
* Your forwarding setup returns a success/activation message from your network.
* A test call is handled by your AI agent.
* The call appears in [Call Logs](../call-logs/overview-call-logs) with a completed status.
## If setup fails
1. Re-check carrier-specific code and agent number formatting.
2. Re-run setup in a location with strong cellular signal.
3. Use the fallback steps in your AU/US guide.
4. Validate first-call outcome again before escalating.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) and include workspace ID, phone carrier, device type, timestamp, and screenshot/error code.
## Related docs
* [Quick Start](../getting-started/quick-start)
* [Set Up Agent and Verify First Call](../getting-started/setup-agent)
* [Troubleshooting Hub](../troubleshooting/index)
# Connect Agent to Phone (US)
Source: https://docs.voqo.ai/tutorials/connect-agent/connect-agent-us
Carrier-by-carrier US setup with success validation and failure recovery steps.
## Audience
* US-based users connecting forwarding for the first time
* Support/admin users validating failed connection attempts
## Prerequisites
* Active Voqo workspace with an enabled agent
* Agent phone number copied from agent settings
* Mobile carrier account with call forwarding enabled
* Stable cellular signal during setup
## Device and carrier checks before setup
* iPhone users: disable Live Voicemail before enabling forwarding.
* Dual-SIM users: use the intended SIM line for forwarding commands.
* If your carrier blocks forwarding by default, request forwarding activation first.
## Table of Contents
* [AT\&T](#att)
* [T-Mobile](#t-mobile)
* [Verizon](#verizon)
* [Sprint](#sprint)
* [Going overseas — forward every call](#going-overseas-forward-every-call)
## Validation checks (run after any carrier setup)
1. Your phone confirms forwarding was enabled.
2. A test call from another number routes to your AI agent.
3. The completed call appears in call logs.
If any validation fails, use the fallback troubleshooting section at the end of this page.
## AT\&T
Use this guide to enable forwarding to your agent for AT\&T numbers.
## T-Mobile
Use this guide to enable forwarding to your agent for T-Mobile numbers.
## Verizon
Use this guide to enable forwarding to your agent for Verizon numbers.
## Sprint
Use this guide to enable forwarding to your agent for Sprint numbers.
## Going overseas — forward every call
The carrier setups above are *conditional* — your phone rings first, and only missed calls route to your AI agent. When you're travelling overseas (where your phone may not ring at all), you can switch to a *permanent* transfer so that **every** incoming call goes straight to your agent.
1. Get your agent's phone number in full international format (with the leading `+` and `+1` country code).
2. Open the dial pad on your phone.
3. Dial `**21*#` (i.e. `**21*+12184800980#`).
4. Press the call button and wait for the confirmation message.
Every call now goes straight to your AI agent.
**To cancel permanent transfer** when you're back, dial `##21#` and press the call button.
Some US carriers handle call forwarding through their own app or network settings rather than dial codes. If `**21*` doesn't work on your line, contact your carrier for their "forward all calls" (unconditional forwarding) option.
## Fallback troubleshooting (US)
### Setup code accepted but calls still ring your phone
* Confirm forwarding was applied to the same SIM/line receiving calls.
* Disable and re-enable forwarding, then retest.
* Restart device and retry from a strong signal area.
### Setup code rejected by network
* Confirm your carrier supports the forwarding command used.
* Check agent number formatting (country code and no extra characters).
* Contact carrier to confirm forwarding is enabled for your plan.
### Agent answered but no completed call record appears
* Wait a few minutes for processing and refresh call logs.
* Confirm you are viewing the correct workspace and agent context.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) and include workspace ID, carrier, device model, exact command used, and timestamp/timezone.
# Manage API Keys and Secrets
Source: https://docs.voqo.ai/tutorials/developer-tools/manage-api-keys-and-secrets
Create, rotate, and revoke workspace credentials with secure handling standards.
## Audience
* Workspace admins and developers integrating with Voqo APIs/webhooks
## Prerequisites
* Admin role with developer tools access
* Target workspace selected
* Secure secret storage available (never plain-text in client code)
## Security requirements
* Treat API keys and webhook secrets as credentials.
* Store only in secure server-side secret managers or encrypted environments.
* Rotate on schedule and immediately after suspected exposure.
* Revoke unused credentials quickly.
## Create credentials
### API keys
1. Open **Settings → Workspace → Developer Tools**.
2. Create a new API key with clear usage label.
3. Copy and store key securely (it may not be shown again).
### Webhook secrets
1. Open the webhook secret section in **Settings → Workspace → Developer Tools**.
2. Create a new secret for each webhook consumer environment.
3. Store secret securely and configure signature verification.
## Rotate credentials
1. Create replacement key/secret first.
2. Update all dependent systems.
3. Validate authentication/signature checks.
4. Revoke old credential.
## Revoke credentials
* Revoke immediately when:
* integration no longer needed,
* ownership changes,
* key/secret exposure is suspected.
## Troubleshooting
### API requests returning unauthorized
* Confirm correct key is used in `Authorization` header.
* Confirm key is active and not revoked.
* Confirm request is scoped to correct workspace.
### Webhook verification failing
* Confirm latest webhook secret is configured on receiver.
* Validate signature algorithm and timestamp checks.
* Ensure old secret was not left in production by mistake.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, key/secret label (not value), and timestamps.
## Related docs
* [API Reference](/api-reference/introduction)
* [Webhook Integration Guide](../integrations/webhook-integration-guide)
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
# Request a Feature
Source: https://docs.voqo.ai/tutorials/feedback/request-a-feature
Submit bug reports, ideas, and improvement requests directly from the Voqo platform.
## Overview
Every page in Voqo includes a **Request feature** button in the header. Use it to report bugs, suggest ideas, or flag anything that could work better — without leaving what you're doing.
Your request is saved immediately and reviewed by the Voqo team. You'll never lose a report if something unexpected happens with our systems.
***
## How to submit a request
Find the **💡 Request feature** button in the top-right area of any page. It sits between the walkthrough guide and the theme toggle.
> The button is only active when you have an active workspace selected.
Select the type of request:
| Category | When to use |
| --------- | ---------------------------------------------- |
| **Bug** | Something is broken or not working as expected |
| **Idea** | A new feature or workflow you'd like to see |
| **Other** | Anything that doesn't fit the above |
Type your description in the text box. Aim for at least a sentence — the more specific you are, the easier it is to act on.
**Placeholder text:** *Describe what you're seeing or suggest an improvement*
Expand **Additional details (optional)** to include:
* **Title** — a short summary (3–120 characters)
* **Current behaviour** — what is happening today
* **Desired behaviour** — what you'd like to happen
* **Acceptance criteria** — how you'd know it's working (one per line)
* **Out of scope** — anything explicitly not part of this request
* **Priority** — Low, Medium, or High
* **Affected area** — the part of the platform this relates to
* **Context links** — URLs to screenshots, recordings, or related resources
These fields are entirely optional — a category and description are all you need.
Click **Submit request**. The button shows **Submitting…** while your request is being saved.
Once submitted:
* The dialog closes automatically
* A confirmation toast appears at the top of your screen
***
## After you submit
Your request is captured in Voqo's system immediately, even if external systems are temporarily unavailable. If GitHub sync fails, you'll see a brief warning — but your request is still saved and the team will review it.
There is no list view for submitted requests in this version. If you need to follow up on a specific request, contact support with the details.
***
## Common questions
The **Request feature** button is disabled when no workspace is active. Select a workspace from the sidebar and the button will become available.
Yes. Only **Category** and **Description** are required. All other fields in the **Additional details** section are optional.
Your request was saved to Voqo's system successfully. The warning toast indicates that an internal sync step was temporarily unavailable, but nothing was lost. The team reviews all submissions.
For time-sensitive issues, contact [support@voqo.ai](mailto:support@voqo.ai) directly so the team can respond quickly.
# Chat with Voqo
Source: https://docs.voqo.ai/tutorials/getting-started/assistant
Open a full-page AI assistant to ask questions, plan work and take action across your workspace in one conversation.
# Chat with Voqo
**Voqo** is a full-page AI chat that helps you get work done across your workspace.
Ask it questions, ask it to find or update information, and let it take you straight
to the right place — all from one conversation.
It is the same assistant you already know from the **Voqo** side panel, now with a
dedicated full-screen view that gives you more room to read, type and follow longer
conversations.
## What you can do
* **Ask anything about your work.** Ask about your contacts, calls, listings and
campaigns in plain language.
* **Get things done in the conversation.** Voqo can act on your behalf and jump you
to the right screen when you ask it to.
* **Keep the thread.** Your conversation stays in view so you can follow up without
repeating yourself.
* **Talk or type.** Send a message by typing, and use voice where it's available.
## How to open it
1. In the left-hand menu, under **Work**, select **Voqo**.
2. Voqo opens as a full page and is ready for your first message.
3. Type your request in the message box and send it.
Voqo replies in real time — you'll see its response build as it works.
## The full page vs the side panel
You can reach Voqo two ways, and both are the same assistant:
* **The Voqo page** — a focused, full-screen conversation, opened from **Voqo** under
**Work** in the left-hand menu. Best for longer tasks or when you want the
conversation front and centre.
* **The Voqo side panel** — opens beside whatever you're working on, using the
**Voqo** button in the top bar. Best for quick questions without leaving your
current screen.
While you're on the Voqo page, the side panel stays closed so you always have a
single conversation in one place. Your history and any notifications carry across
both views — you're never talking to two separate assistants.
## Before you begin
* You need to be signed in with an active workspace. If your session has expired,
the page will prompt you to sign in again.
* If your workspace is still loading, the page shows a brief loading state and then
opens the conversation.
## If Voqo doesn't load
* **"Loading…" doesn't finish** — refresh the page. If it persists, check your
internet connection.
* **A sign-in prompt appears** — your session has timed out. Sign in again and Voqo
will reconnect.
* Still stuck? Contact support
and we'll help.
## Benefits
* **One place to think and act** — ask a question and act on the answer without
switching tools.
* **Less repetition** — the conversation keeps its context, so follow-ups just work.
* **Faster navigation** — let Voqo take you to the right screen instead of hunting
through menus.
# Duplicate or Delete an Agent
Source: https://docs.voqo.ai/tutorials/getting-started/duplicate-and-delete-agent
Copy an existing agent as a starting point, or permanently remove one from your workspace.
## Audience
* Users managing more than one agent from the Agents dashboard
* Support/operators cleaning up or cloning agent configurations
## Prerequisites
* You have at least one agent in your workspace.
* You are viewing the **Agents** dashboard at [platform.voqo.ai](https://platform.voqo.ai).
## Role and plan requirements
* **Duplicate** and **Delete** are available to workspace **members** and **admins**.
* **Viewers** have read-only access and will not see these actions.
## Open the actions menu
Every agent on the dashboard has an **actions menu** containing **Duplicate** and **Delete**. Open it whichever way suits you:
* **Three-dot button:** click the **Agent actions** (three-dot) button on the agent's card or row.
* **Right-click (desktop):** right-click the agent's card or row.
* **Press and hold (mobile or touch):** touch and hold the agent for a moment.
A small menu appears with **Duplicate** and **Delete**. Opening an agent to view or edit it still works as normal — a left-click or tap elsewhere on the card or row.
## Duplicate an agent
Choose **Duplicate** to create a copy of the agent. The copy is created instantly and appears in your list named **"\[Agent name] (copy)"**.
Your new copy keeps the original's configuration — prompt, voice, conversation settings, and actions — with a few deliberate differences so it lands as a clean draft:
* It is created **paused**, so it will not answer calls until you activate it.
* It has **no phone number** assigned. Connect a number when you are ready to go live.
* **Knowledge documents are not copied.** Re-attach any documents the copy needs.
Duplicating is a safe, reversible action, so there is no confirmation step. Open the copy to rename it, adjust settings, connect a number, and activate it.
Duplicate is the fastest way to spin up a second agent that is nearly identical to one you have already tuned — for example, a variant for a different team or campaign.
## Delete an agent
Choose **Delete** to permanently remove an agent. A confirmation dialog opens because this cannot be undone.
Before you confirm, note what happens:
* **Associated phone numbers will be disconnected** and returned to your workspace to reassign.
* **Call history is preserved** but marked as deleted.
* **The agent's configuration is permanently removed.**
Select **Delete Agent** to confirm, or dismiss the dialog to cancel. Once deleted, the agent is removed from your dashboard immediately.
## Expected result
* **Duplicate:** a paused copy of your agent, ready to configure and activate.
* **Delete:** the agent is removed from your workspace and its numbers are freed for reassignment.
## Troubleshooting
### I don't see Duplicate or Delete in the menu
* Confirm your workspace role. Viewers cannot duplicate or delete agents — ask a workspace admin.
* Look for the three-dot **Agent actions** button on the agent's card or row. You can also right-click (desktop) or press and hold (touch) to open the menu.
### My duplicated agent isn't answering calls
* A duplicate is created **paused** with **no number**. Open the copy, connect a phone number, and switch it to active.
### I deleted an agent by mistake
* Deletion cannot be undone. Create a new agent, or duplicate a similar one as a starting point, and reconnect a number.
If you are still blocked, contact support with your workspace ID and the agent name.
## Related docs
* [Set Up Agent and Verify First Call](setup-agent)
* [Manual Setup and Carrier Fallback](manually-set-up-agent)
* [Removing Your AI Agent](remove-agent)
# Install on Mobile
Source: https://docs.voqo.ai/tutorials/getting-started/install-mobile
Welcome to Voqo AI
# Progressive Web App (PWA)
## Overview
The Voqo AI platform can be installed as a **Progressive Web App (PWA)**, providing mobile users with a seamless, app-like experience directly from their browser. Once installed on the home screen, the platform launches in full-screen mode and behaves like a native mobile app.
> Push notification alerts for missed calls and updates are planned for a future release.
***
## Key Benefits
* **Fast Access** — Launch directly from your mobile home screen.
* **Native Experience** — Opens in full-screen without browser UI.
* **Improved Retention** — Easier access encourages return visits and setup completion.
* **Offline Support** — Service workers enable limited functionality even without internet.
* **Future Capabilities** — Supports push notifications and background sync in a future release.
***
## How It Works
1. Open [platform.voqo.ai](https://platform.voqo.ai) in your mobile browser.
2. Select the **"Add to Home Screen"** option from your browser menu.
3. The app icon will appear on your home screen.
4. Tap the icon to launch Voqo AI in full-screen mode.
***
## Getting Started
### iOS (Safari)
1. Visit [platform.voqo.ai](https://platform.voqo.ai)
2. Tap the **Share** icon at the bottom.
3. Scroll down and tap **"Add to Home Screen"**
4. Tap **Add** to confirm.
### Android (Chrome)
1. Visit [platform.voqo.ai](https://platform.voqo.ai)
2. Tap the **three-dot** menu in the top-right corner.
3. Tap **"Add to Home screen"**
4. Confirm and install.
***
## Use Cases
* **Real estate agents** checking call transcripts in the field.
* **Property managers** reviewing missed leads while on-site.
* **New users** who forget where to resume onboarding steps after sign-up.
***
## Troubleshooting
### "Add to Home Screen" not showing?
* Use Safari (iOS) or Chrome (Android).
* Reload the page and ensure your browser is up to date.
* Clear your browser cache.
### App doesn’t open full-screen?
* Reinstall the PWA to refresh the manifest file.
* Ensure your OS supports modern PWA standards.
# Start Here
Source: https://docs.voqo.ai/tutorials/getting-started/introduction
Get from account setup to your first successful AI-handled call.
## Audience
* New workspace owners
* First-time operators setting up their first agent
## Before you begin
* You can access `https://platform.voqo.ai` from desktop browser.
* You can sign in or create an account.
* You have a phone number/device available for call-forwarding setup.
## Start path (recommended)
Complete these in order:
Complete account setup, onboarding, and first-call readiness.
Validate your setup and confirm what success looks like.
Use carrier/device fallback instructions when auto-setup fails.
## Expected result
After finishing the start path, you should be able to:
* Complete onboarding without external help.
* Connect your phone and agent successfully.
* Confirm your first successful call in the platform.
## Troubleshooting
### I cannot progress in onboarding
* Confirm you are signed in with the correct account.
* Confirm you are in the intended workspace.
* Retry onboarding from `https://platform.voqo.ai/onboarding`.
### I finished setup but calls are not being handled
* Run the first-call verification flow in [Set Up Agent and Verify First Call](setup-agent).
* If still failing, use [Manual Setup and Carrier Fallback](manually-set-up-agent).
If the issue remains unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) and include workspace ID, timestamp, and screenshot/error text.
# Manually Set Up Your AI Voice Agent
Source: https://docs.voqo.ai/tutorials/getting-started/manually-set-up-agent
Connect to your AI Phone Answering Agent in 5 minutes
## Connect your Voice AI Assistant to your phone
- Felix Mobile and AmaySim are currently unsupported.
- If you are an iPhone user, you will need to disable the “Live Voicemail” feature before setting up you agent.
Learn how to update your docs locally and deploy them to the public.
# Setting Up Your AI Voice Agent
Follow this step-by-step guide to activate your AI voice agent and start managing your voicemail intelligently.
## Before You Begin
Make sure you have:
* Your AI agent's phone number ready
* Active cellular service
* Good network reception
## Enable Call Forwarding
1. Open your phone's dialer app
2. Enter the following code:
```
**004*[your_agent_number]#
```
Replace \[your\_agent\_number] with your agent's number in full international format — including the leading `+` and country code (for example `+61` for Australia). You'll find this number in your welcome email.
Example: If your agent number is +61 412 345 678, you would dial:
```
**004*+61412345678#
```
3. Press the call button
4. Wait for a confirmation message
## Quick Test
To ensure setup was successful:
1. Ask a friend to call your number
2. Don't answer the call
3. You should receive a notification from your AI agent within minutes
## Carrier-Specific Instructions
### iPhone Users
* The setup process is identical
* If prompted, allow "Call Forwarding" in your phone settings
### Android Users
* Works on all Android devices
* Some Samsung devices may require additional confirmation
## Verifying Setup
Your setup is successful if:
* You received a confirmation message
* Test calls are being handled by your AI agent
* You receive notifications for processed calls
## Troubleshooting
If you encounter issues:
1. **Code Not Working**
* Double-check the agent number
* Ensure all symbols are included
* Try carrier-specific codes
2. **No Confirmation Message**
* Check your signal strength
* Restart your phone
* Try again in a different location
3. **Calls Not Forwarding**
* Verify the setup with a test call
* Check if call forwarding is enabled in phone settings
* Contact your carrier to ensure call forwarding is activated on your plan
## Going Overseas — Forward Every Call
The standard setup above is a *conditional* transfer: your phone rings first, and only calls you don't answer route to your AI agent. When you're travelling — especially overseas, where your phone may not ring at all — you can switch to a *permanent* transfer so that **every** incoming call goes straight to your agent.
1. Open your phone's dialer app
2. Dial the following code, using your agent's number in full international format (with the leading `+` and country code):
```
**21*[your_agent_number]#
```
Example: If your agent number is +61 412 345 678, you would dial:
```
**21*+61412345678#
```
3. Press the call button and wait for the confirmation message
Every call now goes straight to your AI agent until you cancel it.
### To Cancel Permanent Transfer
When you're back, dial `##21#` and press the call button. Your phone will ring normally again (your conditional setup, if still active, continues to catch missed calls).
## Managing Your Service
### To Temporarily Disable
* Dial `##002#`
* Wait for confirmation
### To Re-Enable
* Repeat the setup process with your agent number
## Need Help?
If you need assistance:
1. Book a call with our support team here: [Google Calendar](https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2mcGSvIXj18cLSWjwqVls_4Rrri7Y-j3K7Ujol_r5gw7ygviveAcgGslkKehi-qgl5OABbqwuq)
2. Have ready:
* Your phone model
* Carrier name
* Error messages (if any)
* Agent number
3. Have your carrier information ready
4. We can guide you through carrier-specific instructions
*Remember to save your agent number and these instructions for future reference.*
# Quick Start
Source: https://docs.voqo.ai/tutorials/getting-started/quick-start
Create your workspace, land in the app, and understand what gets set up immediately.
## Audience
* New users in onboarding
* Workspace owners/admins completing first activation
## Prerequisites
* You can access `https://platform.voqo.ai`.
* You can create an account or sign in.
* Your Clerk account includes a phone number.
## Role and plan requirements
* Minimum role: Workspace admin or owner for first-time workspace setup.
* Plan notes:
* Core onboarding and first call should work on supported entry plans.
* Some advanced features (workflows/automation) are plan-gated and not required for this quick start.
## Steps
### 1) Create account and complete invitation (if joining a team)
1. Go to [platform.voqo.ai](https://platform.voqo.ai).
2. Choose **Sign up** for a new workspace, or use your invitation link if joining an existing team.
3. Complete verification and sign in.
If your team invited you first:
* Use the same email address that received the invitation.
* If you leave the invitation page and sign up later from the normal sign-up screen, Voqo still matches that email to your pending invitation and completes the invited account.
Expected in-product signal:
* You are routed into the onboarding flow or your workspace dashboard.
### 2) Complete the one-step onboarding flow
1. Open `https://platform.voqo.ai/onboarding`.
2. Enter your organisation name and workspace name.
3. Select **Continue**.
Expected in-product signal:
* You are redirected to `/agents` and your default workspace and default agent are ready.
### 3) Confirm what was created for you
After the single onboarding step, Voqo creates:
* your user record
* a default organisation
* a default workspace
* a default agent
* a Stripe customer
Expected in-product signal:
* Your agent is visible in the Agents area immediately after signup.
What is not created during signup:
* no active subscription
* no purchased phone number
* no call-forwarding setup
### 4) Continue activation later when you are ready
1. Open the Agents area to review your default agent.
2. Add billing and subscribe from the existing in-app billing flow when you are ready.
3. Purchase and connect a number from the existing number/agent setup surfaces when you want to start handling live calls.
4. Follow the in-app setup guide from the Agents area. Your completed guide steps stay with your account, and unfinished steps reopen the next time you sign in.
## Expected result
After completing this page, a first-time user should be able to:
* Set up account/workspace access.
* Land in the protected app with a default agent already provisioned.
* Continue billing and number setup later from the main product surfaces.
## Troubleshooting
### Onboarding page does not complete
* Refresh the onboarding page and retry the current step.
* Confirm you are in the correct workspace and signed-in account.
* Confirm both name fields are filled in.
### I do not see a phone number yet
* That is expected after signup.
* New-user onboarding now creates your user, workspace, default agent, and Stripe customer only.
* Purchase and connect a number later from the app when you are ready for live calling.
### I need to start handling calls now
* Finish billing/subscription setup from the app.
* Purchase a number and complete your forwarding setup.
* Then run your first live-call validation.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) and include workspace ID, agent ID, call timestamp, and screenshot/error message.
## Related docs
* [Set Up Agent and Verify First Call](setup-agent)
* [Manual Setup and Carrier Fallback](manually-set-up-agent)
* [Connect Agent to Your Phone](../connect-agent/connect-agent-overview)
* [Review Call Logs](../call-logs/overview-call-logs)
# Removing Your AI Agent
Source: https://docs.voqo.ai/tutorials/getting-started/remove-agent
Temporarily or permanently remove your AI agent from your phone
## Temporarily Disable (Preferred Method)
1. Log in to your account at [platform.voqo.ai](https://platform.voqo.ai)
2. Navigate to the "Agents" tab
3. Toggle the `Agent Disable` switch to disable your agent. This will temporarily disable call forwarding
If disabled, the agent will not answer the call, but will still be connected. Your normal voicemail will not be back on.
## Permanently Disable
### Quick Method (Works for Most Carriers)
1. Open your phone's dialer app
2. Dial `##002#`
3. Press the call button
4. Wait for the confirmation message that call forwarding has been disabled
### Alternative Methods
If the quick method doesn't work, try these carrier-specific codes:
* `#21#` - Disables all call forwarding
* `##21#` - Cancels a permanent (overseas) transfer, and an alternative disable code on some carriers
* [Telstra](https://www.telstra.com.au/small-business/online-support/mobiles-devices/forward-calls-on-mobile)
* [Vodafone](https://www.vodafone.com.au/support/device/call-forwarding?srsltid=AfmBOooXrmhhNLp-FwkSZp9vr9UCr1t9xPUF85HFm6cX9bmTaQGx-NVf)
* [Optus](https://devicehelp.optus.com.au/apple/iphone-x-ios-12-0/calls-and-contacts/cancel-all-diverts/)
### Carrier-Specific Notes
* **iPhone Users**: The codes above work the same way on iOS
* **Android Users**: The codes work on all Android devices regardless of manufacturer
* **Some Carriers**: May require pressing the call button after entering the code
### Troubleshooting
If you're having trouble disabling call forwarding:
1. Verify that you entered the code exactly as shown (including all # symbols)
2. Make sure you have good cellular reception
3. Try restarting your phone and attempting again
4. If still unsuccessful, contact your carrier's customer service
## Need Help?
If you're still experiencing issues:
* Book a call with our support team here: [Calendar](https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2mcGSvIXj18cLSWjwqVls_4Rrri7Y-j3K7Ujol_r5gw7ygviveAcgGslkKehi-qgl5OABbqwuq)
* Have your carrier information ready
* We can guide you through carrier-specific instructions
*Note: Most users will succeed with the `##002#` code, but carrier variations exist. If you receive an error message, try the alternative codes listed above.*
# Set Up Agent and Verify First Call
Source: https://docs.voqo.ai/tutorials/getting-started/setup-agent
Finish activation and confirm your first successful call outcome.
## Audience
* New users completing onboarding
* Support/operators verifying activation success
## Prerequisites
* You completed [Quick Start](quick-start).
* You have one active agent in your workspace.
* Your phone forwarding setup has been applied.
## Role and plan requirements
* Minimum role: workspace member with access to assigned agent.
* For billing-sensitive actions (for example purchasing additional numbers), admin/owner role may be required.
## Steps
### 1) Confirm agent readiness
1. Open the agent page in your workspace.
2. Confirm the agent is enabled and has valid base settings (name, voice, prompt).
3. Confirm a number is connected to the agent.
Expected in-product signal:
* Agent is visible as active and ready to receive forwarded calls.
### 2) Execute first call test
1. From a separate number, place a call to your configured business/forwarded number.
2. Do not answer the call on your device.
3. Allow the AI agent to handle the call path.
Expected in-product signal:
* The call completes and appears in your call history.
### 3) Validate call outcome
1. Open [Call Logs](../call-logs/overview-call-logs).
2. Confirm your test call includes:
* Completed status
* Call summary
* Transcript (if enabled)
* Recording link (if enabled)
3. Confirm post-call actions were triggered if configured (SMS/email/webhook).
Expected in-product signal:
* You can review the full call artifact set without manual intervention.
## Expected result
You have a working first-call setup and clear proof the onboarding path succeeded.
## Troubleshooting
### Call did not reach the agent
* Re-run your forwarding setup instructions.
* Check iPhone Live Voicemail setting (disable for setup).
* Confirm carrier/device supports the forwarding code used.
### Call reached agent but no artifacts show in logs
* Wait a few minutes and refresh.
* Confirm call recording/transcript settings in agent advanced settings.
* Verify you are in the correct workspace.
### Permission or feature access issues
* Confirm current role and plan access.
* Retry from workspace admin account if needed.
If still blocked, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, agent ID, call timestamp/timezone, and error details.
## Related docs
* [Quick Start](quick-start)
* [Manual Setup and Carrier Fallback](manually-set-up-agent)
* [Connect Agent to Your Phone](../connect-agent/connect-agent-overview)
* [Troubleshooting Hub](../troubleshooting/index)
# AgentBox CSV Import
Source: https://docs.voqo.ai/tutorials/integrations/agentbox-csv-import
Import contacts from AgentBox (Reapit Sales) into Voqo AI via CSV upload.
If your agency has Reapit-approved API access, the [AgentBox API integration](agentbox-setup) is the recommended path — it handles the initial backfill **and** keeps your contacts in step with AgentBox automatically. Use the CSV path on this page if you don't have API access yet, or for a quick one-off migration.
## Prerequisites
* **Workspace admin** role (required to manage contacts)
* An AgentBox (Reapit Sales) account with the **Download CSV** permission enabled for your staff profile
* Your AgentBox contacts exported as a **Standard Contact CSV** file
## Export Contacts from AgentBox
1. In AgentBox, click the **Contacts** icon from the main menu.
2. Use **Advanced Search** to filter the contacts you want to export.
3. Click the **Download CSV** action icon.
4. Select **Standard Contact CSV** as the export type.
5. Click **Download** and save the file.
AgentBox limits each CSV export to **1,000 contacts**. If you have more than 1,000 contacts, filter your search and export in batches. For bulk exports beyond this limit, contact AgentBox Support.
## Import into Voqo AI
1. Go to **Contacts** in the sidebar.
2. Click **+ Add Contact**.
3. Select the **CSV Import** tab.
4. In the **CRM Format** dropdown, select **AgentBox**.
5. Drag and drop your `.csv` file (or click to browse). Maximum file size is 32 MB.
6. Click **Upload & Import**.
Your import begins processing in the background. Click **View Import History** to track progress.
## What Gets Imported
| Your Data | AgentBox CSV Column | How It Appears in Voqo |
| ---------------- | ---------------------------------------- | -------------------------------------------- |
| Name | `First Name`, `Last Name` | Contact name and last name |
| Email | `Email` | Primary email address |
| Mobile | `Mobile` | Primary phone number (E.164 format) |
| Home phone | `Phone` | Additional phone number |
| Work phone | `Work Phone` | Additional phone number |
| Company | `Company` | Stored in CRM metadata |
| Address | `Address`, `Suburb`, `State`, `Postcode` | Stored in CRM metadata |
| Staff assignment | `Assigned Staff` | Stored in CRM metadata |
| Contact tags | `Contact classes` | Contact categories (e.g. Buyer, Seller, VIP) |
**Additional fields** such as `Title`, `Preferred Name`, and `Letter head` are preserved in the contact's CRM metadata for reference.
### Phone number normalisation
All phone numbers are automatically converted to international format (E.164). Australian numbers like `0412 345 678` become `+61412345678`. Numbers that cannot be validated are skipped -- the contact is still imported if it has at least one valid phone number or email address.
### What gets skipped
* **No name**: Rows with no first name and no last name are skipped.
* **No contact method**: Rows with no valid phone number and no email address are skipped.
* **Duplicates within the file**: If two rows represent the same contact (same name, email, and phone), only the last occurrence is kept.
## How Dedup Works
When importing, Voqo AI checks for existing contacts to avoid duplicates:
1. **Same contact re-imported** -- If you upload the same CSV again, existing contacts are updated (not duplicated). Voqo generates a unique fingerprint from each contact's name, email, and phone number to detect matches.
2. **Phone or email match** -- If a manually created contact shares a phone number or email with an imported contact, they are linked. Your existing name and notes are preserved.
3. **New contact** -- Otherwise, a new contact record is created.
## Import History
View the status of all your CSV imports:
1. Go to **Contacts**.
2. Click **Import History** in the top bar.
Each import shows the file name, status, row counts (created, updated, skipped), and timestamp.
## Troubleshooting
| Issue | Solution |
| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "AgentBox exports are plain .csv files" error | You uploaded a `.zip` file. AgentBox exports contacts as bare `.csv` files -- upload the CSV directly. |
| Contacts missing after import | Contacts without any phone number or email are skipped. Contacts without a first name and last name are also excluded. Check your AgentBox export filters. |
| Phone numbers not matching | Voqo normalises phone numbers to E.164 international format. Landline numbers without area codes may fail validation. Re-export from AgentBox with full phone numbers. |
| File too large | Maximum upload size is 32 MB. AgentBox limits exports to 1,000 contacts per file, so this is unlikely -- check if the file contains extra data. |
| Import stuck on "Processing" | Large imports may take a few minutes. If the status does not change after 10 minutes, try uploading again. |
If unresolved, contact support with your workspace ID and the CSV file.
## Related Docs
* [AgentBox Setup (API integration)](agentbox-setup) — ongoing automatic sync that keeps your contacts and listings up to date
* [Choose and Connect Integrations](overview-integration)
# AgentBox Note Write-Back
Source: https://docs.voqo.ai/tutorials/integrations/agentbox-note-writeback
Automatically save notes from Voqo AI calls into AgentBox as enquiries — and push your own notes too.
## What is it?
With note write-back on, Voqo saves a note against the matching AgentBox contact whenever your AI agent has a meaningful call or SMS conversation with a synced contact. Your team sees the full story in AgentBox — who enquired, about what, and what happens next — without anyone re-typing call outcomes.
In AgentBox, each of these notes is saved as an **enquiry** — AgentBox's own record of a contact interaction. You choose which kind of enquiry they're saved as, and you can write enquiries by hand from Voqo too.
Write-back is **off by default**. Writing into your CRM is deliberate — you turn it on when you're ready.
## Prerequisites
* AgentBox is connected to your workspace via the API integration (see [AgentBox Setup](agentbox-setup)). A CSV-only import isn't enough on its own — see [CSV-imported contacts](#csv-imported-contacts) below.
* Your AgentBox API access includes **note** permissions — the write-back option only appears when it does (see [Troubleshooting](#troubleshooting) if you can't find it). Voqo re-checks your access on every sync, so a permission added in AgentBox later takes effect on the next sync — you don't need to reconnect.
## Turn on write-back
1. Go to **Integrations** and open the **⋮** Settings on the AgentBox card.
2. Select the **Contacts** tab.
3. Turn on **Write notes back to AgentBox**.
4. Choose the **Note types** to write — **Call**, **SMS**, or both.
5. Choose the **Enquiry type** your automatic notes are saved as (for example **Buyer Enquiry** or **Vendor Enquiry**). The list is your AgentBox account's own enquiry types.
6. Leave the **Attribution marker** on (recommended — see [below](#the-attribution-marker)).
7. Click **Save**.
That's it. From the next meaningful conversation onwards, Voqo writes an enquiry to the contact's record in AgentBox.
### Two-way sync, handled for you
Turning on write-back automatically keeps **contact sync** on — Voqo needs your contacts synced so there's always a record to write back to. There's nothing else to set up.
While write-back is on, contact sync can't be switched off. If you want to stop syncing contacts, turn off write-back first.
### The attribution marker
The **Attribution marker** adds a short line to each note Voqo writes, making it clear the note came from your AI agent rather than a colleague. It's **on by default**, and here's the honest reason why:
Many agencies connect AgentBox with a shared or admin API key. When that's the case, a note Voqo writes shows the key's staff member as the author — so without a marker, an AI-written enquiry looks exactly like one a named colleague typed by hand. The marker keeps that from happening, because your agent should never be mistaken for a person.
The marker defaults on, and turning it off is intended for agencies that have set up a **dedicated "Voqo AI" staff user** in AgentBox — so the enquiry already shows Voqo as the author and the extra line isn't needed. Under a shared login without the marker, an AI-written note can look like a colleague wrote it, which is why it stays on by default. See [How notes are attributed](#how-notes-are-attributed) below.
## How your notes appear in AgentBox
Every note Voqo writes lands as an **enquiry** on the contact in AgentBox, saved under the enquiry type you chose. Enquiries carry the time the conversation actually happened — an inbound call from Tuesday shows Tuesday's date, not the time Voqo synced it.
AgentBox enquiries are **permanent once written** — AgentBox itself doesn't allow them to be changed or removed afterwards. That shapes how editing and deleting work in Voqo, covered in [Notes in AgentBox can't be edited or deleted](#notes-in-agentbox-cant-be-edited-or-deleted).
## Which conversations create a note?
Not every call does — only meaningful ones. Voqo writes a note when there's genuinely something worth recording:
* **Creates a note** — a property enquiry, a price or quote discussion, interest in an inspection, feedback on a listing, a follow-up commitment
* **Doesn't create a note** — a plain "call me back", a wrong number, a call with no real enquiry
This keeps your AgentBox records clean: every enquiry Voqo writes is one your team would actually want to read.
## What a note looks like
Notes are short, factual, and written in an activity-log voice — for example:
> Sarah Nguyen enquired about 19 Example Street, Sampleton. Keen on a Saturday inspection and asked about recent sale prices in the street.
Each note names the contact, says what was discussed, and includes the property when one came up. How the conversation came in — an inbound call, outbound call, or SMS — shows as a badge on the note in Voqo, so it never has to clutter the wording.
## Examples — what your notes look like in AgentBox
Here's how notes show up as **enquiries** in AgentBox across the different situations. Each example is the enquiry as your team reads it — the enquiry type it's saved under, followed by the comment text.
**A call note** (your agent's post-call summary), attribution marker **on**:
> **Buyer Enquiry**
> Michael Tran called about 42 Rosebank Avenue, Croydon. He's after a four-bedroom under \$1.2M and wants to inspect this Saturday. Asked whether the vendors would consider an early offer.
> — Logged via Voqo AI
**The same call note with the attribution marker off** — identical text, no marker line (only available once a dedicated Voqo AI staff user is set up):
> **Buyer Enquiry**
> Michael Tran called about 42 Rosebank Avenue, Croydon. He's after a four-bedroom under \$1.2M and wants to inspect this Saturday. Asked whether the vendors would consider an early offer.
**An SMS reply note** — a text conversation your agent handled:
> **Buyer Enquiry**
> Priya Sharma replied by text confirming she'll attend the 11am open home at 8 Hillcrest Road, Blackburn, and asked for the contract of sale to be emailed through.
> — Logged via Voqo AI
**A manual note you typed in Voqo** and ticked *Also save to AgentBox*:
> **Vendor Enquiry**
> Spoke with the vendor at 15 Marne Street, Camberwell — happy to drop the asking price by \$20k ahead of the weekend. Wants a call back Monday with buyer feedback.
> — Logged via Voqo AI
**With a linked property.** When a note has a property attached, the enquiry is tied to that listing in AgentBox, and the contact is recorded as a **prospective buyer** for it:
> **Buyer Enquiry** · attached to *42 Rosebank Avenue, Croydon*
> Michael Tran is keen on this one and wants a Saturday inspection. Enquired about the vendors' price expectations.
> — Logged via Voqo AI
**Without a linked property**, the same note is simply an enquiry on the contact, with no listing attached and no prospective-buyer record created.
## Save your own notes to AgentBox
You can write notes by hand too, and send them straight to AgentBox. Open a contact, find the **Notes** section, and select **Add note**:
1. **Choose an enquiry type.** When the contact is linked to AgentBox and write-back is on, the type list is **your AgentBox account's own enquiry types** — the same categories you already use inside AgentBox. If AgentBox isn't linked, you'll see Voqo's general categories instead.
2. **Link a property, if you want the note tied to a listing.** A **Link a property** box lets you search your properties by address and attach one. See the note below about what this does in AgentBox.
3. **Type your note.**
4. **Choose where it goes.** An **Also save to AgentBox** checkbox sits under the note. Tick it to send the note to AgentBox as well as Voqo; leave it unticked to keep the note in Voqo only — handy for internal observations you don't want in the CRM. If the checkbox is greyed out, hover it to see what's needed to switch write-back on for this contact.
5. Select **Save**.
If you leave **Also save to AgentBox** unticked, your note is saved in Voqo instantly. If you tick it, Voqo saves the note to AgentBox **first** and keeps it only once AgentBox has accepted it — so a note you add by hand is confirmed in your CRM the moment it appears. If AgentBox can't accept it, **nothing is saved**: the note stays open with a short reason so you can fix it and save again, or cancel. You never end up with a half-saved note.
**Linking a property also creates a prospective buyer.** When you attach a property to a note on an AgentBox contact, AgentBox automatically records that contact as a **prospective buyer** for that listing. This is standard CRM hygiene — someone who enquired about a property is a prospective buyer — but it's a real change to your data, so Voqo tells you before you save. If you don't want that record created, don't link a property.
## See your notes in Voqo too
Every note Voqo writes to AgentBox also appears in the contact's **Notes** section in Voqo, and so do the notes you write by hand. Each note shows, at a glance, its type, who wrote it, when, and whether it reached your CRM:
* The **note type** sits above the note text. For automatic notes a **channel** badge sits alongside it, showing how the conversation came in — **Inbound call**, **Outbound call**, or **SMS**.
* Under the note you'll see **when it happened** and **who wrote it** — *Voqo AI* for automatic call and SMS notes, or your team member's name for ones added by hand.
* A **sync status** at the end of that line shows whether the note has reached AgentBox:
* **Synced to AgentBox** — a steady icon once the note is safely saved in your CRM. Notes you add by hand show this as soon as they appear, because Voqo confirms them in AgentBox before saving.
* **Syncing** — a small spinning icon while an automatic call or SMS note is on its way to AgentBox.
* **Needs attention** — if an automatic note couldn't reach AgentBox, the icon turns amber. Hover for the reason, and click it to **retry** the push. Nothing is lost in the meantime — the note is always safe in Voqo.
See [Add Notes to Contacts](../agent-settings/contact-notes) for everything else notes can do.
## Notes in AgentBox can't be edited or deleted
AgentBox enquiries are permanent once written, so Voqo works with that rather than pretending otherwise:
* **Editing.** Once a note is synced to AgentBox, its **Edit** control is switched off, with a short note explaining why. AgentBox keeps the enquiry exactly as it was first written. Notes that were only ever kept in Voqo (you left **Also save to AgentBox** unticked) stay editable as normal.
* **Deleting.** You can still delete a synced note from Voqo — but because AgentBox can't remove the enquiry, **the copy in AgentBox stays**. Before you delete, Voqo confirms this plainly: the note goes from your Voqo list, and the historical record remains in your CRM.
This keeps your CRM's history intact while still letting you tidy up your own view in Voqo.
## CSV-imported contacts
If you brought contacts into Voqo through a **CSV import** rather than the AgentBox API connection, write-back is **switched off for those contacts** until they've been matched to their AgentBox record.
Here's why: a CSV file doesn't carry the AgentBox contact ID, so Voqo can't yet tell AgentBox which contact a note belongs to. Once the AgentBox **API integration** is connected and runs a sync, Voqo matches each imported contact to its AgentBox record automatically — and from then on, write-back works for them like any other synced contact.
Until that match happens, the **Also save to AgentBox** checkbox is greyed out on those contacts, with a tooltip explaining what's needed. Nothing fails silently — you'll always see why the option isn't available yet. To resolve it, connect the AgentBox API integration (see [AgentBox Setup](agentbox-setup)) and let it sync.
## How notes are attributed
Every enquiry Voqo writes is recorded against the staff user tied to the API key you connected AgentBox with. How that reads depends on your setup:
* **A dedicated "Voqo AI" staff user** (recommended). If you provision a staff user in AgentBox just for Voqo and connect with a key issued under it, every enquiry is clearly authored by Voqo AI in your CRM. This is the cleanest setup, and it's the only one that lets you turn the attribution marker off.
* **A shared or admin key** (the common case). The enquiry shows that staff member as the author, so the **attribution marker** stays on to make clear the note came from your AI agent.
**About the dedicated Voqo AI user.** When Voqo writes an enquiry about a contact that doesn't yet have an assigned staff member in AgentBox, AgentBox attaches the connection's staff user to that contact as its owner. It never changes a contact you've already assigned to someone. If you set up a dedicated Voqo AI user, expect it to gradually pick up ownership of previously unassigned contacts — that's AgentBox's behaviour, and worth knowing before it shows up in your assignment views.
## Troubleshooting
| Issue | Solution |
| ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| I can't see the write-back option on the Contacts tab | Your AgentBox API access doesn't include note permissions. If it already does, run **Sync** on the AgentBox card once — Voqo re-checks permissions on every sync and the option then appears. If it still doesn't, contact support and we'll check your access with you. |
| The **Also save to AgentBox** checkbox is greyed out when adding a note | The checkbox is there but disabled until the note can be written back — **hover it for the exact reason**. Common causes: the contact came in through a CSV import and hasn't been matched to AgentBox yet (see [CSV-imported contacts](#csv-imported-contacts)), AgentBox is disconnected, your API access doesn't include note permissions, or **Write notes back to AgentBox** is turned off in the AgentBox Contacts settings. Fix the one the tooltip names and the checkbox becomes tickable. |
| The enquiry types I'm choosing from look unfamiliar | When AgentBox is linked with write-back on, the list is pulled straight from your AgentBox account — so it matches your own enquiry types, not a generic set. If a type is missing, add it in AgentBox and it'll appear in Voqo. |
| A call didn't create a note | Only meaningful conversations create notes — a plain callback request or wrong number won't. |
| A note shows in Voqo but hasn't reached AgentBox | Its sync icon will be amber — hover for the reason and click it to retry. Notes usually reach AgentBox within a few minutes, and Voqo retries automatically if AgentBox is briefly unavailable. If it still won't sync, check the contact is synced from AgentBox — notes only push to contacts linked to your AgentBox account. |
| I deleted a synced note but it's still in AgentBox | That's expected. AgentBox enquiries are permanent, so deleting removes the note from Voqo only — the copy in AgentBox stays as a historical record. |
| I can't edit a note that's already synced | AgentBox enquiries can't be changed once written, so Voqo locks the note after it syncs. Notes kept in Voqo only (write-back left unticked) can still be edited. |
## Related docs
* [AgentBox Setup](agentbox-setup)
* [AgentBox CSV Import](agentbox-csv-import)
* [Add Notes to Contacts](../agent-settings/contact-notes)
* [Choose and Connect Integrations](overview-integration)
# AgentBox Setup
Source: https://docs.voqo.ai/tutorials/integrations/agentbox-setup
Connect AgentBox (Reapit) to sync listings and your full contact list into Voqo AI.
AgentBox by Reapit is a widely used real estate CRM across Australia. Connecting it lets your active stock flow into Voqo's Knowledge Base automatically, and brings your **full AgentBox contact list** into Voqo — buyers, vendors, enquirers and everyone in between — so your AI voice agent has the complete picture to work from.
Once connected, Voqo keeps itself in step with AgentBox automatically. Listings and contacts refresh on a schedule with no manual exports or uploads.
Prefer a one-shot CSV upload instead? See [AgentBox CSV Import](agentbox-csv-import). The API connection on this page is the recommended path because it handles both the initial backfill **and** keeps your data in step going forward — but CSV is a good fit if you don't have API access set up yet.
## Prerequisites
* **Workspace admin** role (required to manage integrations)
* An AgentBox account with Reapit-approved **production API access** (see below)
* Your AgentBox **Client ID** and **API Key** ready to paste
### Getting API access from Reapit
AgentBox API access is a paid, gated process managed by Reapit (AgentBox's parent company). Before you can connect, you'll need to organise the following:
* **A \$1,000 setup fee** payable to Reapit for production API access
* **A signed agreement** between your agency and Reapit covering the integration
* **A 2–3 week lead time** from sign-off to credentials being issued
* **IP allow-listing** — Reapit will add Voqo's static egress IP to your account's allow-list
This is a one-off setup, not an ongoing cost from Voqo. To kick it off, contact support — we'll send you everything you need to give to Reapit, including our static IP and the agreement template.
Sandbox credentials won't work for the live integration. Make sure Reapit has issued you **production** Client ID and API Key values before starting the connect flow.
## Connect AgentBox
The connect flow is a four-step wizard. Step 1 verifies your credentials, Step 2 picks which AgentBox office you're connecting, Step 3 chooses what to sync, and Step 4 previews how many records will come in so you can confirm before kicking off the sync.
### Step 1 — Credentials
1. Go to **Integrations** in the sidebar.
2. Find the **AgentBox** card and click **Connect**.
3. Paste your **Client ID** and **API Key** into the matching fields.
4. Click **Test connection**.
If your credentials are valid, Voqo ticks the connection and moves you to Step 2. If not, you'll see an error — double-check both values and try again.
### Step 2 — Choose your office
AgentBox accounts can manage multiple offices under one franchise. Voqo connects **one AgentBox office per workspace** — so pick the office this workspace should sync against.
* If your AgentBox key sees only one office, this step is skipped and the office is picked automatically.
* If your key sees more than one office, you'll see a single-select dropdown. Pick the office you want this workspace to sync from.
If you manage multiple AgentBox offices and want each in Voqo, you'll need a separate Voqo workspace for each office. This keeps each office's contacts and listings cleanly scoped.
### Step 3 — Pick what to sync
You'll see five scope options:
* **Listings** — default on. Your active and recent stock flows into the Knowledge Base automatically.
* **Sold & off-market listings** — opt-in. Retain settled, withdrawn, and archived listings in your Knowledge Base instead of removing them, with a **Sold** badge on the listing card and full sale-history detail.
* **Leased listings** — opt-in. Retain leased rentals in your Knowledge Base with a **Leased** badge, including weekly rent, lease term, and lease start/end dates pulled from AgentBox's tenancy detail.
* **Pre-Market listings** — opt-in, default off. Pull in **Appraisal**, **Listing Presentation**, **Missed Appraisal**, and **Pending** stage listings with a **Pre-Market** badge.
* **Contacts** — opt-in. Tick this to bring your AgentBox contacts into Voqo.
You can change any of these later via the **⋮** Settings on the AgentBox card. See [Managing your listing scope](#managing-your-listing-scope) below for how scope changes affect your synced listings.
When you tick **Contacts**, an optional limit field appears:
> **Initial backfill limit (optional)**
Most agencies leave this **blank** to bring in their full contact list — that's the recommended path. The limit field is there for two cases:
* **Sanity-check the integration first.** Set a small number (e.g. 100) to see exactly what comes through before committing to a full backfill.
* **Very large tenants who want a phased rollout.** Cap the first import and bring the rest in later by switching to **Sync all contacts** in **⋮ Settings** and hitting **Resync**.
**When the limit is set, Voqo enters "test mode" for contacts.** The initial backfill brings in your **least recently updated** contacts (the dormant tail — they don't matter operationally, so they're safe to sample with), and ongoing delta syncs are **paused** until you reconnect without a limit. Listings sync is unaffected and keeps running normally.
To go live with ongoing contact sync, open the **⋮ Settings** on the AgentBox card, select **Sync all contacts** and **Save**, then click **Resync** to bring in your full contact list. There's no need to disconnect — your existing contacts are preserved.
### Step 4 — Preview and confirm
This step appears only when you've ticked **Contacts**. It's a dry-run preview — nothing has been committed yet.
You'll see:
* The **total number of contacts** in the selected AgentBox office
* An **estimated sync time** based on AgentBox's API throughput
* A reassurance that you can close the modal and let it run in the background
You'll also see an info block reminding you:
> **Contacts already in your workspace won't be re-imported.** If an AgentBox contact matches an existing record by phone or email, we'll keep the existing record and skip the AgentBox duplicate. You'll see the skipped count in your Sync History.
You have two choices:
* **Adjust** — go back to Step 3 to set or change the initial-backfill limit.
* **Confirm and start sync** — commits the integration and kicks off both listings and contacts sync jobs in the background. The modal closes immediately.
## What happens after you connect
Listings appear in your Knowledge Base within minutes. Contacts run as a background job — for a tenant of tens of thousands of contacts, expect around 10–20 minutes for the initial backfill. You can keep working while the sync runs.
The **AgentBox** card on the Integrations page shows a **Connecting** badge while any sync job is in progress. Once all jobs complete, the badge flips to **Connected**.
Newly synced contacts from the initial backfill are added to your **Action Loop** so your agent can start working through them straight away. Subsequent automatic syncs run silently in the background — a dedicated notification surface for ongoing changes is on the roadmap.
To watch progress in detail, open the **Sync History** panel from the top of the Integrations page.
## Listing states from AgentBox
AgentBox exposes the richest lifecycle of any CRM Voqo connects to. When you opt in to each scope, listings flow into dedicated tabs in your Knowledge Base.
### Sold listings
When you enable **Sold & off-market listings**, AgentBox properties marked **Conditional**, **Unconditional**, **Settled**, or **Sold - Other Agent** appear in the **Sold** tab with a red **Sold** badge.
Each sold listing carries:
* **Sold price** — the agreed sale price.
* **Sold date** — the date the sale was agreed (contract date).
* **Sale method** — Auction, Private Treaty, Tender, Expressions of Interest, or other, as recorded in AgentBox.
* **Price-display flag** — honours AgentBox's vendor-confidentiality setting; sold price is hidden in the Knowledge Base if the vendor instructed AgentBox not to publish it.
### Leased listings
When you enable **Leased listings**, AgentBox rentals marked **Leased** appear in the **For Lease** archive with a **Leased** badge. The card carries:
* **Weekly rent** — AgentBox's tenancy rent value, normalised to weekly.
* **Lease start date** — pulled from AgentBox's `tenancyDetails.leaseStartDate`.
* **Lease end date** — pulled directly from AgentBox's `tenancyDetails.leaseEndDate`.
* **Lease term** — pulled from AgentBox's `tenancyDetails.leaseTerm`.
AgentBox returns full tenancy detail, so leased listings are accurate end-to-end — no derivation.
### Inspection and open-home times
AgentBox listings now bring their **inspection and open-home times** into your Knowledge Base. When a property has scheduled inspections in AgentBox, those times appear on the listing so your AI agent can tell callers exactly when they can view the property.
* **Where it shows** — inspection times surface on the listing alongside its other detail.
* **Kept current** — times refresh on each sync, so cancelled or rescheduled inspections stay accurate.
* **No setup needed** — this is automatic for AgentBox listings; there's no separate toggle.
### Off-market listings
AgentBox listings marked **Archived**, **Withdrawn**, **Sold - Other Agent**, or **Leased - Other Agent** appear in the **Off-Market** tab with an **Off-Market** badge. Your AI agent prefixes these listings with **"OFF-MARKET —"** when speaking about them.
### Pre-market listings (Appraisal, Listing Presentation, Pending)
When you enable **Pre-Market listings**, AgentBox properties in **Appraisal**, **Listing Presentation**, **Missed Appraisal**, or **Pending** stages — the listings you're pitching or working towards a formal listing on — appear in the **Pre-Market** tab with a **Pre-Market** badge.
These are useful when you want your AI agent to be aware of properties you're pitching, even before they go live. **Default off** so they don't clutter your Knowledge Base if you don't need them.
You can hide pre-market listings from your Knowledge Base view without un-syncing them — see [Pre-Market Listings](../knowledge-base/pre-market-listings) for the Hide toggle.
### Upcoming auctions
AgentBox auction listings populate Voqo's **Upcoming Auctions** smart-list template. The auction date is pulled from AgentBox's `auctionDate` field. Build a list under **Quick Create → Upcoming Auctions** and attach it to your AI agent so it can prepare for auction-week calls.
***
## Smart lists for AgentBox listings
In the Knowledge Base **Quick Create** menu, you can build per-state smart lists that include AgentBox stock:
* **Sold Properties** — every sold listing (across all integrations); narrow to AgentBox with the source filter
* **Leased Properties** — every settled leased rental
* **Pre-Market Properties** — every Appraisal-stage AgentBox listing (only populated when pre-market scope is on)
* **Upcoming Auctions** — every listing with an auction date in the next 14 days
**`Lease Properties` vs `Leased Properties`** — these are different lists. **Lease Properties** is your current rental stock available to lease. **Leased Properties** is the archive of rentals that have already been leased out. Pick the one that matches your use case.
***
## Managing your listing scope
You can change what AgentBox syncs at any time from the **⋮** Settings on the AgentBox card.
### Choose how far back to keep sold and leased listings
When you enable **Sold & off-market listings** or **Leased listings**, a **Historical listing window** selector appears in your AgentBox settings. It controls how far back Voqo includes sold, leased, and off-market listings on the next sync, based on when each listing was last updated.
* **Pick a window** — **Last 1 month**, **Last 3 months**, **Last 6 months**, **Last 12 months** (the default), or **Last 24 months**.
* **Older listings roll off automatically.** A sold or leased listing that hasn't been updated within your chosen window drops out of your Knowledge Base on the next sync.
* **Widen the window to bring older listings back.** Switch to a longer window and run a sync — the older sold and leased listings reappear.
* **The selector only shows when Sold or Leased is enabled.** Your live and pre-market listings always sync in full and are never affected by this window.
### Turning a scope off — and getting your listings back
When you turn **off** a listing scope in your AgentBox settings, Voqo **removes** the already-synced listings of that type from your Knowledge Base. Because this removes records, Voqo always asks you to confirm first:
* **You'll see a confirmation dialog** telling you exactly **how many listings** will be removed, and **which manually managed lists** they sit in (if any), before anything is deleted.
* **Nothing is removed until you confirm.** Click **Cancel** to leave everything in place.
* **Nothing is lost permanently.** You can **restore** these listings at any time by re-enabling the scope and running a sync.
## Grouping your AgentBox listings
In the Knowledge Base, the **Quick Create** menu includes an **AgentBox Properties** list under *By Integration Source*. Pick it to build a list that automatically holds every property synced from AgentBox — new listings join the list on each sync, and removed listings drop out. Attach that list to an agent so it only ever references your AgentBox stock. You can also narrow it further with the listing-agent filter to give an agent just one agent's properties.
## Already managed by another CRM ("Claimed")
If you've already connected another CRM to this workspace — for example VaultRE or Eagle MRI — and an AgentBox contact matches an existing record by phone or email, Voqo will **leave that contact managed by the original CRM** and count it as **Claimed** in your Sync History.
This is correct behaviour, not an error. It means:
* Your existing records keep their source badge (VaultRE or Eagle), notes, and call history intact.
* You won't see two near-duplicate contact rows for the same person across different CRMs.
* The AgentBox sync still imports every contact that **doesn't** already exist in your workspace.
You'll see the count of these skipped records as **Skipped (already managed by another CRM)** alongside the created and updated counters for each sync job in **Sync History**. If you ever need to switch which CRM owns a given contact, contact support.
## Sync History
The **Sync History** button lives at the top right of the **Integrations** page. Click it to slide open a panel showing every sync job across all your integrations.
For each job you'll see:
* **Provider** — AgentBox, VaultRE, Eagle MRI, etc.
* **Scope** — Listings or Contacts
* **Status** — Pending, Processing, Completed, or Failed
* **Counts** — records created, updated, and skipped (including the **Skipped (already managed by another CRM)** counter when relevant)
* **Estimated vs actual time** — so you can see whether the sync is on track
* **Auto or Manual** — whether the job was triggered by a scheduled sync (**Auto**) or by you (**Manual**)
Active jobs sit at the top with a live spinner. Failed jobs show a short error message and a **Retry** button.
## Ongoing sync
After the initial backfill is complete, Voqo runs scheduled delta syncs against AgentBox automatically. These pull anything that has changed in AgentBox since the last successful sync — including updates to contacts you've already brought into Voqo, and any **new contacts** created in AgentBox after you connected.
No action is required — scheduled syncs are fully automatic and appear as **Auto** rows in **Sync History**. If you want to pull updates between scheduled runs, click **Sync now** on the AgentBox card.
## Troubleshooting
| Issue | What to do |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Invalid credentials** | Double-check the **Client ID** and **API Key** values are pasted correctly and in full. Confirm with Reapit that your credentials are **production** (sandbox credentials won't authenticate). If the error persists, re-issue the API key in AgentBox and try again. |
| **AgentBox is currently unavailable** | A transient AgentBox outage. Wait a few minutes and try again. If it persists for more than 15 minutes, contact support. |
| **No offices appearing in Step 2** | Your API key may not have permission to see any offices. Check the key's permissions in AgentBox admin, or ask Reapit to re-issue with the right scope. |
| **Contacts not appearing in Action Loop** | The initial backfill posts new contacts to your Action Loop. Subsequent delta syncs run silently in the background — a separate notification surface for ongoing changes is on the roadmap. Open **Sync History** to confirm contacts have been imported. |
| **A contact I expected is missing** | If the contact already exists in your workspace from another CRM (VaultRE or Eagle MRI), it will be marked as **Claimed** and kept under the original CRM. Check your Sync History for the **Skipped (already managed by another CRM)** count. If you set an **initial backfill limit**, you're in test mode — only the capped number of (least recently updated) contacts came in. Reconnect with the limit field blank to bring in everyone. |
| **Initial contacts sync is taking longer than the estimate** | The estimate is conservative. Open **Sync History** for the live status — if the job is still **Processing**, it's on track. If it shows **Failed**, hit **Retry**. |
| **A scheduled sync didn't appear** | Check **Sync History** for the latest **Auto** entry on AgentBox. If you don't see one within an hour of the scheduled window, contact support. |
| **My sold or leased listings disappeared** | You may have turned off the matching scope, or an older listing rolled off your **Historical listing window**. Re-enable the scope (or widen the window) from the AgentBox settings and run **Sync now** to bring them back. |
| **I want to keep more sold history** | Open the AgentBox settings and set the **Historical listing window** to a longer period (up to **Last 24 months**), then run a sync. |
| **Inspection times aren't showing on a listing** | Inspection and open-home times only appear when the property has scheduled inspections in AgentBox. Add or confirm the inspection in AgentBox, then run **Sync now**. |
## Disconnect
1. Click **Disconnect** on the AgentBox card.
2. Confirm the action.
Disconnecting stops all future syncs. Previously synced listings and contacts remain in your workspace but are no longer linked to AgentBox — the source badge disappears and scheduled syncs stop.
## Need help?
If anything's not working as expected, contact support with your workspace ID and a screenshot of the **Sync History** panel.
## Related docs
* [AgentBox CSV Import](agentbox-csv-import) — one-shot CSV upload, useful before you have API access in place
* [Choose and Connect Integrations](overview-integration)
* [Knowledge Base Lists and Sources](knowledge-base-integrations)
* [Sold Listings in the Knowledge Base](../knowledge-base/sold-listings)
* [Leased Listings in the Knowledge Base](../knowledge-base/leased-listings)
* [Pre-Market Listings in the Knowledge Base](../knowledge-base/pre-market-listings)
# Domain Integration Settings
Source: https://docs.voqo.ai/tutorials/integrations/domain-com-au
Control what data Voqo collects from Domain.com.au — including sold and off-market listings.
## Overview
When connecting Domain.com.au, you'll be asked what to sync:
* **Live listings** — always enabled. These are your active property listings.
* **Sold & off-market listings** — opt-in. Retains sold and off-market listings in your Knowledge Base so your AI agents can answer questions about recent sales and price comparables.
You can change this later via the Settings option in the integration card's more-actions menu.
Once connected, you can adjust the sync scope at any time via the integration settings modal.
For initial setup (connecting your Domain agency for the first time), see [Domain Setup](domain-setup).
***
## Opening the settings modal
1. Go to **Integrations** in the sidebar.
2. Find the **Domain** card.
3. Click the **⋮** menu (top-right of the card) and select **Settings**, or click anywhere on the card body.
4. The **Domain.com.au — Settings** modal opens.
***
## Data scope options
The settings modal shows two data source options:
### Listings (required)
Voqo always syncs your active listings from Domain. This cannot be turned off while Domain is connected — it is the foundation of your property Knowledge Base.
### Sold & off-market listings
When enabled, Voqo retains a listing in your Knowledge Base after it settles or goes off-market, rather than removing it. You will see a new **Sold** tab in the Knowledge Base, and your AI agent can reference recent sales on calls. Off-market and archived listings are retained under a dedicated **Off-Market** tab instead of being removed.
Sold and off-market listings are bundled together because of how Domain's API exposes listing states — enabling one enables both.
* **Off by default** — you opt in during the connect flow or from Settings.
* Sold and off-market listings appear after the next scheduled sync (twice daily) or after you trigger a manual resync from the integration card.
Domain is a sales-focused portal — it does not publish leased rentals or pre-market (appraisal-stage) properties. If you need either, connect your CRM (Eagle MRI, AgentBox, or VaultRE) alongside Domain.
***
## Saving your settings
After selecting your options, click **Save**. Changes take effect as follows:
| Change | When it takes effect |
| ---------------------------------- | ------------------------------------------ |
| Enable sold & off-market listings | Next scheduled sync or manual resync |
| Disable sold & off-market listings | Immediately after confirmation (see below) |
Only users with **admin integration permissions** can save changes to integration settings. If the Save button is greyed out or shows a permission notice, ask your workspace admin to make the change.
***
## Choosing how far back to keep sold and leased listings
When **Sold & off-market listings** (or **Leased listings**) is enabled, a **Historical listing window** selector appears in your Domain settings. It controls how far back Voqo includes sold, leased, and off-market listings on the next sync, based on when each listing was last updated.
* **Pick a window** — **Last 1 month**, **Last 3 months**, **Last 6 months**, **Last 12 months** (the default), or **Last 24 months**.
* **Older listings roll off automatically** once they fall outside your chosen window.
* **Widen the window to bring older listings back** — choose a longer period and run a sync.
* **The selector only appears when Sold or Leased is enabled** — your live listings always sync in full and are never capped by this window.
***
## Turning off sold and off-market listings
If you turn off **Sold & off-market listings**, Voqo removes the matching sold and off-market listings from your Knowledge Base. This keeps your Knowledge Base in step with your data-collection choice.
Because this removes records, Voqo always asks you to confirm first. The confirmation dialog tells you exactly **how many listings** will be removed and **which manually managed lists** they sit in (if any) before anything is deleted:
> *"Disabling this scope will remove \[N] property(ies) from your knowledge base (and from \[M] manually managed lists). You can restore them later by re-enabling this scope and re-syncing."*
**Nothing is removed until you confirm**, and **nothing is lost permanently** — you can bring these listings back at any time by re-enabling the scope and running a sync.
***
## Disconnecting Domain
When you disconnect your Domain integration, Voqo removes the integration's API access and stops syncing listings. No manual cleanup is required on the Domain side.
***
## Troubleshooting
**I enabled sold and off-market listings but I don't see any in the Sold tab.**
Sold and off-market listings appear after the next sync pass. If you just enabled the setting, click **Resync** on the Domain card or wait for the next scheduled sync (which runs twice daily). Newly settled properties will then appear in the **Sold** tab of your Knowledge Base.
**A new sale took longer than expected to appear.**
Sold listings appear at the next scheduled sync (twice daily). For faster turnaround, click **Resync** on the Domain card. If the sale still doesn't appear after a manual resync, contact support with your workspace ID and the listing address.
**I see "Permission denied" when trying to save settings.**
Integration settings require admin permissions. Contact your workspace admin to update the Domain scope.
**Sold and off-market listings disappeared after I turned the setting off.**
This is expected. Turning off **Sold & off-market listings** removes those listings from your workspace, including from any lists they were part of. If this was unintentional, go to Settings, re-enable **Sold & off-market listings**, and run a manual resync to restore them — nothing is lost permanently.
**Some older sold or leased listings dropped off on their own.**
They likely fell outside your **Historical listing window**. Open Settings, set the window to a longer period (up to **Last 24 months**), and run a sync to bring them back.
***
## Related docs
* [Domain Setup](domain-setup)
* [Sold Listings in the Knowledge Base](../knowledge-base/sold-listings)
* [Leased Listings in the Knowledge Base](../knowledge-base/leased-listings) (CRMs only)
* [Pre-Market Listings in the Knowledge Base](../knowledge-base/pre-market-listings) (CRMs only)
* [Knowledge Base Lists and Sources](knowledge-base-integrations)
* [Choose and Connect Integrations](overview-integration)
# Domain Setup
Source: https://docs.voqo.ai/tutorials/integrations/domain-setup
Connect Domain profile, sync listing data, and troubleshoot profile/credential issues.
## Prerequisites
* Workspace admin integration permission
* Domain profile details (agent or agency)
* Provider credentials and account readiness
## Setup steps
1. Open **Integrations**.
2. Select **Connect** for Domain.
3. Choose profile type and select the correct profile.
4. Confirm and run initial sync.
## Sync expectations
* Listings and metadata sync into knowledge sources.
* Connected status and last sync timestamp should be visible.
## Leased listings
Domain surfaces rental listings that have been **leased**. Tick **Leased listings** in your Domain integration settings to keep leased rentals in your Knowledge Base with the lease start date, weekly rent, and a derived lease term and end date.
* **Opt-in**: leased listings are off by default. Enable the toggle and run a sync to pull them.
* **What you get**: a **Leased** badge, weekly rent, lease start date, plus a derived lease term and end date.
* **Derived end-date caveat**: Domain provides a lease duration rather than an explicit end date, so Voqo derives the end date from the start date plus the duration. This is accurate for fresh leases but can drift after a renewal or early termination — check Domain directly for ground-truth dates in those cases.
* **Leased vs withdrawn**: the **Leased listings** toggle captures rentals that were genuinely leased to a tenant. Rentals that were **withdrawn or expired** (taken off the market without a lease) are treated as off-market — they come in under the **Sold & off-market listings** toggle instead, not this one.
See [Leased Listings](../knowledge-base/leased-listings) for the full picture across all your integrations.
## Choose how far back to keep sold and leased listings
When you enable **Sold & off-market listings** or **Leased listings**, a **Historical listing window** selector appears in your Domain settings. It controls how far back Voqo includes sold, leased, and off-market listings on the next sync, based on when each listing was last updated.
* **Pick a window** — **Last 1 month**, **Last 3 months**, **Last 6 months**, **Last 12 months** (the default), or **Last 24 months**.
* **Older listings roll off automatically.** A sold or leased listing that hasn't been updated within your chosen window drops out of your Knowledge Base on the next sync, keeping your sold and leased history focused on recent activity.
* **Widen the window to bring older listings back.** Switch to a longer window and run a sync — the older sold and leased listings reappear.
* **The selector only shows when Sold or Leased is enabled.** Your live and forthcoming stock is never affected by this window — current listings always sync in full.
## Turning a scope off — and getting your listings back
When you turn **off** a listing scope (such as **Sold & off-market listings** or **Leased listings**) in your Domain settings, Voqo **removes** the already-synced listings of that type from your Knowledge Base. This keeps your Knowledge Base aligned with the scopes you've chosen.
Because this removes records, Voqo always asks you to confirm first:
* **You'll see a confirmation dialog** telling you exactly **how many listings** will be removed, and **which manually managed lists** they sit in (if any), before anything is deleted.
* **Nothing is removed until you confirm.** Click **Cancel** to leave everything in place.
* **Nothing is lost permanently.** You can **restore** these listings at any time by re-enabling the scope and running a sync — they'll flow back into your Knowledge Base.
Turning a scope off only removes listings of **that type**. Your live listings and any other enabled scopes are untouched.
## Retry and recovery
* Profile mismatch: reselect the correct profile and reconnect.
* Credential/provider failure: verify account state, then retry sync.
* Stale data: run manual resync and validate source updates upstream.
* **My sold or leased listings disappeared.** You may have turned off the matching scope, or an older listing rolled off your **Historical listing window**. Re-enable the scope (or widen the window) and run a sync to bring them back.
* **Sold or leased listings haven't appeared after enabling the scope.** Click **Sync now** on the Domain card. The next scheduled sync also picks them up automatically.
## Related docs
* [Choose and Connect Integrations](overview-integration)
* [Knowledge Base Lists and Sources](knowledge-base-integrations)
* [Leased Listings](../knowledge-base/leased-listings)
# Eagle MRI Setup
Source: https://docs.voqo.ai/tutorials/integrations/eagle-mri-setup
Connect Eagle MRI to bring your full contact list into Voqo AI, kept in sync automatically.
Eagle MRI is one of Australia's most widely used real estate CRMs. Connecting it brings your **full contact list** into Voqo — active enquiries, dormant enquirers, vendors, and everyone in between — so your AI voice agent has the complete picture to work from.
Once connected, Voqo keeps itself in step with Eagle automatically — your contacts refresh **twice a day at 12pm and 6pm AEDT**, with no manual exports or uploads.
**Listings sync for Eagle MRI is coming soon.** Today, Eagle connects for **contacts sync**. To register interest in Eagle listings sync, contact [adam@voqo.ai](mailto:adam@voqo.ai).
## Prerequisites
* **Workspace admin** role (required to manage integrations)
* An Eagle MRI account with permission to generate API credentials
* Both your Eagle **client ID** and **client secret** ready to paste
### Where to find your Eagle credentials
1. Log in to Eagle at [eagleagent.com.au/agent](https://www.eagleagent.com.au/agent).
2. Go to **Settings**.
3. Open **API Credentials**.
4. Click **New Credentials**.
5. Copy both the **client ID** and the **client secret** — you'll need both. Keep this window open until you've pasted them into Voqo.
Both values are required. The client ID on its own won't authenticate — Eagle needs the pair.
## Connect Eagle MRI
The connect flow is a three-step wizard. Step 1 verifies your credentials, Step 2 enables contacts sync, and Step 3 previews how many records will come in so you can confirm before kicking off the sync.
### Step 1 — Credentials and test connection
1. Go to **Integrations** in the sidebar.
2. Find the **Eagle MRI** card and click **Connect**.
3. Paste your **Client ID** and **Client Secret** into the matching fields.
4. Click **Test connection**.
If your credentials are valid, Voqo will tick the connection and move you to Step 2. If not, you'll see an error — double-check both values, then re-paste and test again.
### Step 2 — Enable contacts sync
You'll see two scope options:
* **Contacts** — tick this to bring your Eagle contacts into Voqo. This is required to connect.
* **Listings** — **coming soon**, shown disabled. Your active stock, sold/leased/off-market history, and pre-market listings aren't available yet. To register interest, contact [adam@voqo.ai](mailto:adam@voqo.ai).
When you tick **Contacts**, an optional limit field appears:
> **Initial backfill limit (optional)**
Most agencies leave this **blank** to bring in their full contact list — that's the recommended path. The limit field is there for two cases:
* **Sanity-check the integration first.** Set a small number (e.g. 100) to see exactly what comes through before committing to a full backfill. Once you're happy, switch to **Sync all contacts** in **⋮ Settings** and hit **Resync** to bring in everyone.
* **Very large tenants who want a phased rollout.** Cap the first import at, say, 5,000 and bring the rest in later from **⋮ Settings**.
**When the limit is set, Voqo enters "test mode" for contacts.** The initial backfill brings in your **least recently updated** contacts (the dormant tail — they don't matter operationally, so they're safe to sample with), and the twice-daily delta sync is **paused** until you reconnect without a limit.
To go live with ongoing contact sync, open the **⋮ Settings** on the Eagle MRI card, select **Sync all contacts** and **Save**, then click **Resync** to bring in your full contact list. There's no need to disconnect — your existing contacts are preserved.
With **Contacts** ticked, click **Preview** to move to Step 3 and confirm before any sync starts.
### Step 3 — Preview and confirm
This is a dry-run preview — nothing has been committed yet.
You'll see:
* The **total number of contacts** in your Eagle tenant (e.g. "84,105 contacts")
* An **estimated sync time** based on Eagle's API throughput — if you set a limit, the estimate covers the limit, not the full count
* A reassurance that you can close the modal and let it run in the background
You have two choices:
* **Adjust** — go back to Step 2 to set or change the initial-backfill limit. The preview re-runs when you return.
* **Confirm and start sync** — commits the integration and kicks off the **contacts** sync job in the background. The modal closes immediately.
## What happens after you connect
Contacts run as a background job — for a tenant of 80,000 contacts, expect around 10 minutes for the initial backfill. You can keep working while the sync runs.
The **Eagle MRI** card on the Integrations page shows a **Connecting** status badge while the sync job is in progress. Once it completes, the badge flips to **Connected**.
To watch progress in detail, open the **Sync History** panel (see below).
## Sync History
The **Sync History** button lives at the top right of the **Integrations** page. Click it to slide open a panel showing every sync job across all your integrations.
For each job you'll see:
* **Provider** — Eagle MRI, VaultRE, Domain, etc.
* **Scope** — Contacts
* **Status** — Pending, Processing, Completed, or Failed
* **Counts** — records created, updated, and skipped
* **Estimated vs actual time** — so you can see whether the sync is on track
* **Auto or Manual** — whether the job was kicked off by the scheduled twice-daily sync (**Auto**) or by you clicking **Sync now** or **Confirm and start sync** (**Manual**)
Active jobs sit at the top of the panel with a live spinner. Failed jobs show a short error message and a **Retry** button.
## Ongoing sync
After the initial backfill is complete, Voqo runs a delta sync **twice a day at 12pm and 6pm AEDT**. This pulls anything that has changed in Eagle since the last successful sync — including:
* Updates to contacts you've already brought into Voqo
* **New contacts** created in Eagle after you connected
No action is required from you — these scheduled syncs are fully automatic. You'll see them appear as **Auto** rows in **Sync History**.
If you want to pull updates between scheduled runs, click **Sync now** on the Eagle card.
## CSV import (coming in v1.1)
If you've connected VaultRE or another CRM via CSV before, you might be looking for the same path with Eagle. CSV upload for Eagle is **coming in v1.1**.
For now, the **API connection on the Integrations page is the only path** — and it's the recommended one anyway, because it handles initial backfill **and** keeps your contacts in step with Eagle automatically going forward.
If you visit the **CSV Import** tab on the Contacts page and select **Eagle Agent (MRI)** as the source, you'll see a notice pointing you back here.
## Listing states from Eagle MRI (coming soon)
**Listings sync for Eagle MRI isn't available yet.** The section below previews what Eagle listings sync will offer once it ships. To register interest, contact [adam@voqo.ai](mailto:adam@voqo.ai).
When live, Eagle MRI exposes listings across multiple lifecycle states. Voqo will bring each into a dedicated tab in your Knowledge Base when you opt in. Once listings ship, you'll be able to choose how far back to keep sold and leased history (a **Historical listing window** selector), and turning a listing scope off will remove the matching listings after a confirmation prompt — restorable any time by re-enabling the scope and re-syncing. These controls already work for Domain, realestate.com.au, and VaultRE today; see [Domain Setup](domain-setup) for how they behave.
### Sold listings
When you enable **Sold & off-market listings**, Eagle listings flipped to **SOLD** appear in the **Sold** tab with a red **Sold** badge.
Each sold listing carries:
* **Sold price** — the agreed sale price.
* **Sold date** — the date the sale was agreed.
* **Sale method** — shown as **Other** in the Knowledge Base. Eagle MRI's API does not expose the sale method (Auction, Private Treaty, etc.) on a sold property, so your AI agent will quote the price and date without claiming a method. This is an Eagle data-feed gap, not a Voqo limitation.
Eagle listings with an **Under Offer** status are treated as still on market — they appear in the **For Sale** tab with an "Under Offer" chip rather than the **Sold** tab. They flip to **Sold** in Voqo once Eagle marks the property as sold.
### Leased listings
When you enable **Leased listings**, Eagle rentals flipped to **LEASED** appear in the **For Lease** archive with a **Leased** badge. The card carries:
* **Weekly rent** — Eagle's `leasedPrice` value, normalised to weekly.
* **Lease start date** — the date Eagle recorded the property as leased.
* **Lease end date** — *derived* from the lease start date plus Eagle's `leasedDurationInWeeks` field.
* **Lease term (months)** — derived from `leasedDurationInWeeks ÷ 4.345`, rounded.
**Limitation — derived lease end date.** Eagle MRI's API does not expose a direct lease end date or a tenancy object on a property. Voqo derives the end date from the original lease duration on the property record. This is accurate for **fresh leases**, but will drift on **lease renewals** or **early termination** — Eagle doesn't update `leasedDurationInWeeks` when a tenancy is extended or cut short. If you need ground-truth lease end dates for renewals, check Eagle directly. Your AI agent is prompted accordingly to phrase lease-end dates with appropriate caveats.
### Off-market listings
Eagle listings marked **OFF\_MARKET** or **WITHDRAWN** appear in the **Off-Market** tab with an **Off-Market** badge, rather than being silently removed from the Knowledge Base. Your AI agent prefixes these listings with **"OFF-MARKET —"** when speaking about them, so callers understand the property is not actively available.
### Pre-market listings (Draft)
When you enable **Pre-Market listings**, Eagle listings in **DRAFT** status — appraisals you're working on but haven't formally listed yet — appear in the **Pre-Market** tab with a **Pre-Market** badge.
These are useful when you want your AI agent to be aware of properties you're pitching, even before the listing goes live. **Default off** so they don't clutter your Knowledge Base if you don't need them.
You can hide pre-market listings from your Knowledge Base view without un-syncing them — see [Pre-Market Listings](../knowledge-base/pre-market-listings) for the Hide toggle.
### Upcoming auctions
Eagle MRI auction listings now populate Voqo's **Upcoming Auctions** smart-list template. The auction date is pulled from Eagle's `auctionDatetime` field on each property. Build a list under **Quick Create → Upcoming Auctions** and attach it to your AI agent so it can prepare for auction-week calls.
***
## Smart lists for Eagle MRI listings (coming soon)
In the Knowledge Base **Quick Create** menu, you can build per-state smart lists that include Eagle MRI stock:
* **Sold Properties** — every sold listing (across all integrations); narrow to Eagle with the source filter
* **Leased Properties** — every settled leased rental
* **Pre-Market Properties** — every Draft-stage Eagle listing (only populated when pre-market scope is on)
* **Upcoming Auctions** — every listing with an auction date in the next 14 days
**`Lease Properties` vs `Leased Properties`** — these are different lists. **Lease Properties** is your current rental stock available to lease (`For Lease` state). **Leased Properties** is the archive of rentals that have already been leased out. Pick the one that matches your use case.
You can also build an **Eagle MRI Properties** list (under *By Integration Source* in Quick Create) that holds every listing synced from Eagle — useful when you want an AI agent to only ever reference your Eagle stock.
***
## Troubleshooting
| Issue | What to do |
| ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Test connection failed** | Double-check that you've copied both the **client ID** and the **client secret** in full from Eagle's Settings → API Credentials page. Re-paste both and test again. |
| **Sold listings show "Sale method: Not provided"** | Eagle MRI's API doesn't expose the sale method on a sold property. Sold price and sold date are accurate; method is unavailable from the source feed. |
| **Leased lease-end date looks wrong after a renewal** | The lease end date is derived from the original lease duration at the time the lease was created. Eagle doesn't refresh this when a tenancy is renewed or terminated early. Check Eagle directly for the ground-truth date. |
| **Under-offer listings don't appear in the Sold tab** | This is correct — Under Offer is treated as still on market. The listing flips to **Sold** once Eagle marks the property as sold. |
| **Initial contacts sync is taking longer than the estimate** | The estimate is conservative. Open **Sync History** for the live status — if the job is still **Processing**, it's on track. If it shows **Failed**, hit **Retry**. |
| **I see "Connecting" but I can't tell what's happening** | Open **Sync History** from the top of the Integrations page. Active jobs sit at the top with a live spinner and a progress count. |
| **A contact I expected is missing** | If you set an **initial backfill limit** at setup, the integration is in test mode — only the capped number of (least recently updated) contacts came in, and the twice-daily delta is paused. Disconnect Eagle and reconnect with the limit field blank to bring in your full contact list and re-enable the ongoing delta sync. |
| **A scheduled sync didn't appear** | Check **Sync History** for the latest **Auto** entry on Eagle. Scheduled syncs run at 12pm and 6pm AEDT every day; if you don't see one within an hour of those times, contact support. |
## Disconnect
1. Click **Disconnect** on the Eagle MRI card.
2. Confirm the action.
Disconnecting stops all future syncs. Previously synced listings and contacts remain in your workspace but are no longer linked to Eagle — the source badge disappears and scheduled syncs stop.
## Need help?
If anything's not working as expected, contact support with your workspace ID and a screenshot of the **Sync History** panel.
## Related docs
* [Choose and Connect Integrations](overview-integration)
* [Knowledge Base Lists and Sources](knowledge-base-integrations)
* [Sold Listings in the Knowledge Base](../knowledge-base/sold-listings)
* [Leased Listings in the Knowledge Base](../knowledge-base/leased-listings)
* [Pre-Market Listings in the Knowledge Base](../knowledge-base/pre-market-listings)
# Google Calendar Overview
Source: https://docs.voqo.ai/tutorials/integrations/google-calendar/overview
Connect Google Calendar once and give every Voqo AI surface read access to your calendar — voice agent and AI assistant today, SMS coming.
Connecting Google Calendar gives Voqo's AI surfaces **read-only access to your calendar** — your busy/free windows plus your event titles, times, and locations — so the AI assistants you use across the platform can answer scheduling questions and check when you're free, all from the same one-click connection.
You connect Google Calendar once at the workspace level. Every Voqo feature that needs to know "are you free at X?" can then use that connection without you having to set anything up a second time.
**Booking events directly to your calendar is coming soon.** For now, the integration is read-only. When write capabilities ship, we'll prompt you to reconnect and grant the additional permission.
## What can use this connection
| Feature | Status | What it does with your calendar |
| --------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [**Voice agent — Check Availability**](../../agent-settings/function-calls#gcal-check-availability) | Available now | During a call, the agent reads your calendar(s) and offers concrete open slots back to the caller. Added per agent as a [function-call action](../../agent-settings/function-calls#gcal-check-availability). |
| **AI assistant "what's on my plate"** | Available now | The AgentOS sidebar assistant reads your events to answer questions like "what's on my plate today?" or "what does my afternoon look like?" |
| **SMS agent — Check Availability** | Coming with SMS agent | The SMS agent reuses the same Check Availability action to offer slots over text |
All three use the same Google Calendar connection — you grant permission once and every feature inherits it as it ships. Both the voice action and the AI assistant let you point Voqo at **multiple calendars** — your own plus any shared or subscribed ones — and each keeps its own selection (per agent for the voice action; workspace-level for the AI assistant).
## What this is good for
* **Inspection requests on a call.** Caller asks "when can I come and see the property?" — your voice agent reads back three open slots from your diary.
* **Quick "what's on today?" questions outside a call.** Ask your AI assistant directly and get an answer without opening your calendar.
* **Internal handovers.** A buyer asks for a callback from a sales colleague — your agent checks the colleague's calendar (if you've shared it with the connected Google account) and proposes times.
## What it isn't (yet)
* It doesn't write events to your calendar. Bookings are still a manual step for your team after the call.
* It doesn't read your event **attendees or descriptions** — only the title, time, and location of each event (plus busy/free windows). Those higher-sensitivity fields stay private.
* It doesn't sync your calendar into Voqo's database. Voqo reads your calendar **live** when an AI surface needs it. Nothing is cached or polled in the background.
* It only connects to Google Calendar — Outlook and Apple Calendar aren't supported yet.
## How it works
1. You connect your Google account once from the Integrations page.
2. The connection grants Voqo a single capability — **Read Calendar** — that every supported AI surface can use.
3. You configure each consumer — add the Check Availability action to your voice agent, and choose which calendars your AI assistant reads from the integration card's **⋮ → Choose calendars** menu.
4. Voqo reads from your calendar live whenever a consumer needs it. Nothing is stored on our side.
## What you'll need
* **Workspace admin** role to connect the integration.
* A **Google account** with access to the calendars you want Voqo's AI surfaces to use.
## Next steps
* [Setup and connect Google Calendar](setup)
* [Add the calendar action to your voice agent](voice-agent-actions)
* [Troubleshooting](troubleshooting)
## Need help?
If anything's not working as expected, contact support with your workspace ID.
# Connect Google Calendar
Source: https://docs.voqo.ai/tutorials/integrations/google-calendar/setup
One-click OAuth connect — grants every Voqo AI surface read access to your calendar.
Connecting Google Calendar is a one-click OAuth flow. You'll be redirected to Google to grant **read-only** access, then back to Voqo with a connected integration that every supported AI surface in the platform can use.
## Prerequisites
* **Workspace admin** role
* A **Google account** with access to the calendars you want Voqo's AI surfaces to use
* A browser session that can complete Google's OAuth consent screen (no blocker extensions)
## Connect
1. Open **Integrations** in the sidebar.
2. Find the **Google Calendar** card and click **Connect**.
3. You'll be redirected to Google. Sign in with the account that owns (or has access to) the calendars you want to use.
4. Review the permission Voqo is requesting (**See events on all your calendars**) and click **Allow**.
5. You'll be redirected back to Voqo. You'll see the scope picker with **Read Calendar** pre-selected.
6. Click **Confirm** to complete the connection.
The Google Calendar card now shows **Connected**. You can immediately start adding the calendar action to your voice agents — see [Add the calendar action to your voice agent](voice-agent-actions). Future AI surfaces in the platform (AI helper, SMS agent) will inherit this connection automatically as they ship.
## What permission Voqo asks for
| Permission | Why we need it |
| ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **See events on all your calendars** (read-only) | Lets Voqo's AI surfaces read your calendar — busy/free windows plus event title, time, and location. Used by voice-agent availability checks during calls and by your AI assistant for questions like "what's on my plate today?". Voqo never reads your event attendees or descriptions. |
Voqo does **not** request permission to create, modify, or delete events. We also don't ask for any Gmail, Drive, or other Google data — only calendar read access.
**When we ship the calendar write capability** (booking events directly from a call), we'll prompt you to reconnect and grant the additional permission. You'll see exactly what's being asked for on Google's consent screen at that time.
## What happens after you connect
* The integration card shows **Connected** with the email address you signed in as.
* The **Read Calendar** capability is now granted to your workspace. Every Voqo AI surface that supports it will see your calendar through this connection.
* Surfaces that use it today: the voice agent's **GCal — Check Availability** function-call action, and your **AI assistant** (which reads your events to answer scheduling questions).
* Coming surface: SMS agent.
* No background syncing happens. Voqo only reads your calendar when an AI surface actively needs it — nothing is cached or polled.
## Choose which calendars your AI assistant uses
By default, your AI assistant reads your **primary** calendar. To add others (or switch to a different one):
1. On the **Google Calendar** card, open the **⋮** menu and click **Choose calendars**.
2. Tick the calendars you want your AI assistant to read — your own calendars and any you've subscribed to both appear.
3. Click **Save**.
Calendars shared with you as **free/busy only** appear greyed out — your assistant can see when those are busy but not their event details, so they can't be added here.
This selection is separate from the calendars each voice agent checks for availability, which are set per agent in the agent's settings.
## Reconnect
If your token expires, gets revoked at Google, or you sign in to a different Google account, you may need to reconnect:
1. Click **Reconnect** on the Google Calendar card.
2. Complete the OAuth flow again.
Your agent settings (which calendars to use, slot duration, etc.) are preserved across reconnects.
## Disconnect
1. Click **Disconnect** on the Google Calendar card.
2. If any of your voice agents use the **Check Availability** action, you'll see a confirmation listing those agents. Their Check Availability actions will be removed when you confirm.
3. Click **Disconnect** to confirm.
Disconnecting:
* Removes the integration from your workspace so no Voqo AI surface can use it.
* Removes the **Check Availability** function-call action from any voice agents that had it configured. You can re-add those actions after reconnecting.
* Stops every AI surface from using calendar capabilities on the next invocation (already-running calls finish normally).
* Does **not** read or change anything on your calendar — it's a read-only integration.
If you also want to revoke Voqo's access at Google itself (not just remove it from Voqo), use the **Revoking access at Google** steps below. If you change your mind, you can reconnect at any time.
## Revoking access at Google
You can also revoke Voqo's access directly from your Google account at any time, without going through Voqo:
1. Open [Google Account permissions](https://myaccount.google.com/permissions).
2. Find **Voqo** in the list.
3. Click **Remove access**.
If you revoke at Google, the next time a Voqo AI surface tries to use your calendar it will silently skip the lookup, and the integration card in Voqo will prompt you to reconnect.
## Related docs
* [Google Calendar Overview](overview)
* [Add the calendar action to your voice agent](voice-agent-actions)
* [Troubleshooting](troubleshooting)
## Need help?
If anything's not working as expected, contact support with your workspace ID.
# Google Calendar Troubleshooting
Source: https://docs.voqo.ai/tutorials/integrations/google-calendar/troubleshooting
Common issues with the Google Calendar integration and how to resolve them.
## Connection issues
| Issue | What to do |
| ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **OAuth consent screen never appears** | Check your browser's popup blocker — Google's consent screen opens in the same tab but some extensions interfere. Try again in an incognito window with extensions disabled. |
| **"Reconnect required" badge on the card** | Your refresh token was revoked at Google (or expired after long inactivity). Click **Reconnect** and complete OAuth again. Your agent settings are preserved. |
| **Connected the wrong Google account** | Click **Disconnect**, then **Connect** again, and sign in with the right account. Make sure you're signed out of the wrong account in your browser first. |
| **"Authorisation failed" after returning from Google** | The redirect didn't complete cleanly — usually a transient browser issue. Try again. If it persists, try in a different browser. |
## Availability issues
| Issue | What to do |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Agent says "I can't check the calendar right now"** | A transient network or Google API issue. The call continues normally. If this happens repeatedly, contact support. |
| **Agent never offers any slots** | Check that your **Look-ahead** window is long enough to contain free time (e.g. if your calendar is solidly booked for the next 5 days, no slots will be found). Try increasing **Look-ahead** or reducing **Minimum notice**. |
| **Agent offers slots that conflict with existing meetings** | The calendars selected on the action may not include the calendar the conflicting meeting is on. Open the action config and tick the missing calendar in the **Calendars** dropdown. |
| **Slots are in the wrong timezone** | Set the **Default timezone** field to your office's IANA timezone (e.g. `Australia/Sydney`). If the caller mentions a different timezone on the call, the agent will use the caller's timezone — but the default kicks in when neither is known. |
| **Slots don't respect my working hours** | The integration uses your calendar's **free/busy** windows, not your Google working-hours setting. Block out non-working hours on your calendar (e.g. as recurring busy events) so they show up as busy. |
## Calendar picker issues
| Issue | What to do |
| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Calendars dropdown is empty or "Couldn't load calendars"** | A transient Google API issue. Close and re-open the action config — the dropdown will retry. If it keeps happening, contact support. |
| **A shared calendar I expected isn't in the dropdown** | The Google account you connected needs **at least "See free/busy information only"** access to that shared calendar. Ask the calendar owner to share it with the connected account, then re-open the action config. |
| **I deleted a calendar in Google but it's still selected on my agent** | Re-open the action config — the dropdown will refresh from Google and you can remove the dead calendar from your selection. |
## Permission issues
| Issue | What to do |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Connected but the agent never uses the action** | Check the agent's **Conversation Settings** → **Function Calls** — the **GCal — Check Availability** action needs to be added to that specific agent (not just connected at the workspace level). |
| **Removed the Voqo permission at Google but the integration card still says Connected** | The card will flip to **Reconnect required** the next time it tries to use your calendar. To force the update, click **Disconnect** in Voqo and reconnect. |
## When to contact support
Contact support if:
* You've tried the steps above and the issue persists.
* You're seeing repeated errors across multiple calls.
* The agent's calendar lookup is consistently returning slots that conflict with real meetings.
Include your **workspace ID**, the **agent name**, and (where possible) the **call ID** so we can trace the issue quickly.
## Related docs
* [Google Calendar Overview](overview)
* [Connect Google Calendar](setup)
* [Add the calendar action to your agent](voice-agent-actions)
# Calendar Action for Voice Agents
Source: https://docs.voqo.ai/tutorials/integrations/google-calendar/voice-agent-actions
Add Check Availability to your AI voice agent so it can read your calendar live during a call.
The voice agent is the first Voqo AI surface to use Google Calendar — but not the last. Once Google Calendar is connected at the workspace level (see [Setup](setup)), every supported AI surface inherits the connection. This page covers the voice-agent-specific configuration; the full field-by-field reference for this action lives in [Function Call Agent Actions → GCal — Check Availability](/tutorials/agent-settings/function-calls#gcal-check-availability).
**Check Availability is currently the only Google Calendar function-call action** — booking (writing events from a call) is on the roadmap.
**Booking events directly to your calendar is coming soon.** For now, the agent confirms the slot verbally with the caller, and your team locks it in afterwards.
## Add the action to your agent
1. Open the agent you want to give calendar access to.
2. Go to **Conversation Settings** → **Function Calls**.
3. Click the **+** button to add a new function call.
4. Pick **GCal — Check Availability** from the list.
5. Fill in the configuration (see below).
6. Click **Save**.
**Connect Google Calendar first.** This action needs a connected Google Calendar at the workspace level. If you haven't connected one yet, the action shows a prompt to connect from the [Integrations page](/tutorials/integrations/overview-integration) and **Save stays disabled** until you do.
## GCal — Check Availability
The agent uses this when the caller asks "when are you free?" or wants to find a time for a meeting. It looks at your calendar(s), finds open windows, and reads back concrete slot suggestions.
### Configuration
| Field | What it does | Recommended starting point |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| **Calendars** | Which calendars to check. A dropdown shows every calendar your connected Google account can see — pick one or more. | **Primary** (your main calendar) |
| **Slot duration (minutes)** | How long each proposed slot should be. | 30 (or 15 for quick callbacks, 60 for inspections) |
| **Look-ahead (minutes)** | How far into the future to search. | 7200 (5 days) |
| **Minimum notice (minutes)** | Don't propose slots starting within this many minutes from now. | 60 (don't propose slots within the next hour) |
| **Max slots** | The maximum number of options the agent will read out. | 5 (more than this is overwhelming on a call) |
| **Default timezone** | IANA timezone, e.g. `Australia/Sydney`. The agent uses this when the caller doesn't specify a timezone. | Your office's timezone |
| **Transition message** | A short phrase the agent says before checking the calendar — fills the silence during the lookup. | "Let me check the calendar for you…" |
### What the caller hears
> **Caller:** When can I come and see the property?
>
> **Agent:** Let me check the calendar for you… I've got three options that work: Thursday at 10 AM, Thursday at 2 PM, or Friday at 9 AM. Which suits you?
>
> **Caller:** Thursday at 2 PM works.
>
> **Agent:** Great — I'll note that down and someone from our team will confirm with you shortly.
The agent confirms the slot verbally; your team picks it up and creates the calendar entry once the call ends.
## Common patterns
### Inspection requests
* Slot duration **60 minutes**, look-ahead **48 hours**, max slots **3**.
* Default timezone matches the property's location.
### Vendor catch-up calls
* Slot duration **15 minutes**, look-ahead **5 days**, max slots **5**.
* Useful for callers who want a short check-in this week.
### Sales colleague handovers
* Add the colleague's shared calendar to the **Calendars** dropdown so the agent looks at their diary instead of (or in addition to) yours.
* Slot duration matches the colleague's typical call length.
## What happens if Google Calendar is disconnected
If you **disconnect Google Calendar** from the [Integrations page](/tutorials/integrations/overview-integration), you'll first see a confirmation listing every agent that uses the Check Availability action — and confirming **removes the action from those agents**. You can re-add it after reconnecting.
If your Google account **revokes Voqo's access** without you disconnecting in-app, the action stays configured but stops working gracefully — on the next call the agent simply doesn't offer to check availability, and the caller experience is unaffected. Reconnect from the Integrations page to restore it.
## Other AI surfaces that use this connection
The same Google Calendar connection — granted once at the workspace level — powers other AI surfaces as they ship:
* **AI assistant (available now).** The AgentOS sidebar assistant reads your events to answer scheduling questions like "what's on my plate today?" without you having to add anything to an agent. Choose which calendars it reads from the Google Calendar card's **⋮ → Choose calendars** menu — see [Setup](setup).
* **SMS agent (coming with SMS launch).** The same **GCal — Check Availability** action becomes available on SMS agents — same form, same calendar picker, same behaviour.
You don't need to re-connect Google Calendar when these ship — they inherit your existing connection.
## When booking returns
We're shipping the read path first to make sure availability lookups work reliably across a wide range of calendar setups. Once that's proven out, we'll add **GCal — Create Booking** as a second action so the agent can lock the slot in directly during the call (with an automatic calendar invite to the caller). When that ships you'll need to reconnect Google Calendar to grant the additional write permission.
## Related docs
* [Function Call Agent Actions → GCal — Check Availability](/tutorials/agent-settings/function-calls#gcal-check-availability) — full configuration reference
* [Google Calendar Overview](overview)
* [Connect Google Calendar](setup)
* [Troubleshooting](troubleshooting)
## Need help?
If anything's not working as expected, contact support with your workspace ID and the name of the agent involved.
# Knowledge Base Lists and Sources
Source: https://docs.voqo.ai/tutorials/integrations/knowledge-base-integrations
Manage synced and manual knowledge items, organize lists, and attach them to agents.
## Audience
* Admins/operators managing agent knowledge quality
* Teams syncing external data into reusable knowledge lists
## Prerequisites
* Workspace access to knowledge and integrations
* At least one data source (manual or integrated)
* Agent(s) available for knowledge attachment
## End-to-end flow
1. Connect one or more integrations (optional but recommended for sync-driven lists).
2. Review synced items and create manual items where needed.
3. Build lists that group relevant items.
4. Attach lists to target agents.
5. Validate agent responses against expected knowledge.
## Lists and items model
### Knowledge items
* Individual records (for example, listing/property or business facts).
* Can come from **synced sources** or **manual creation**.
### Knowledge lists
* Curated groups of items for specific use cases.
* Attach lists to agents to control what context they can use.
## Synced vs manual sources
### Synced sources
* Pulled from integrated systems on sync.
* Best for frequently changing operational data.
* May overwrite source-controlled fields on future syncs.
### Manual sources
* Created and edited directly in platform.
* Best for custom facts not present in external systems.
* Fully controlled by your workspace users.
## Attaching lists to agents
1. Open target agent.
2. Navigate to knowledge list attachment section.
3. Select relevant lists and save.
4. Run validation call to confirm retrieval quality.
Expected result:
* Agent references the intended knowledge without unrelated noise.
## Troubleshooting
### Synced data not appearing in list
* Run manual resync for affected provider.
* Confirm item still exists in source provider.
* Verify filters/list criteria include that item.
### Agent not using expected knowledge
* Confirm correct list is attached to the agent.
* Reduce list scope to avoid noisy retrieval.
* Validate prompt instructions are compatible with knowledge usage.
### Manual and synced records conflict
* Keep source-of-truth ownership explicit per item type.
* Prefer synced records for source-controlled fields.
* Use manual fields only where sync is not authoritative.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, list ID, item ID, and sync timestamp.
## Related docs
* [Choose and Connect Integrations](overview-integration)
* [Knowledge Route Policy](knowledge-surface-policy)
* [REA Setup](rea-setup)
* [Domain Setup](domain-setup)
* [Manage Agent Lifecycle](../agent-settings/agent-settings)
# Knowledge Route Policy
Source: https://docs.voqo.ai/tutorials/integrations/knowledge-surface-policy
Canonical documentation policy for `/knowledge_base` versus legacy `/knowledge` surfaces.
## Policy summary
* Canonical user-facing knowledge experience: `/knowledge_base`
* `/knowledge` now redirects to the **Documents** tab of `/knowledge_base`
## What this means for customers
* Follow knowledge setup and operations docs that reference **Knowledge Base** (`/knowledge_base`).
* `/knowledge_base` is a two-tab experience: **Properties** (synced listings and lists) and **Documents** (uploaded files).
* Any bookmarked or linked `/knowledge` URLs automatically redirect to the Documents tab — no customer action required.
* New workflows and support runbooks should reference `/knowledge_base` only.
## Deprecation posture
* `/knowledge` redirects to `/knowledge_base?tab=documents` for backward compatibility; it is not a separate page any more.
* Documentation is standardized on `/knowledge_base` to avoid contradictory guidance.
* Any migration timeline updates will be published in release notes.
## Support guidance
* If a customer is using legacy paths, guide them to `/knowledge_base` workflows first.
* Escalate only if required behavior exists only in legacy path and cannot be replicated.
## Related docs
* [Knowledge Base Lists and Sources](knowledge-base-integrations)
* [Choose and Connect Integrations](overview-integration)
* [Release Notes](../../change-log/product-updates)
# Choose and Connect Integrations
Source: https://docs.voqo.ai/tutorials/integrations/overview-integration
Compare providers and choose setup path with clear sync expectations and failure guidance.
## Audience
* Workspace admins configuring external systems
* Support teams diagnosing sync/auth issues
## Prerequisites
* Admin access to integrations
* Provider credentials or OAuth access
* Clear ownership of integration maintenance
## Provider matrix
| Provider | Auth method | Sync behavior | Visible outputs | Common failures |
| ----------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Google Calendar | OAuth consent flow (read-only `calendar.readonly` scope) | **No background sync** — live read-on-demand via `freeBusy`. Grants a workspace-level `read_calendar` capability consumed by any AI surface in Voqo (voice agent today; AI helper and SMS agent planned) | Connection status, **GCal — Check Availability** action available on voice agents, calendar multi-select picker populated from the connected account | OAuth denied or revoked at Google, expired consent, transient `freeBusy` timeouts |
| Realestate.com.au (REA) | Account credentials + agency context | Listing sync into knowledge sources | Connected status, synced property items/lists | Invalid agency details, source API errors |
| Domain | Profile lookup + credentials context | Listing sync into knowledge sources | Connected status, synced property items/lists | Profile mismatch, credential/provider validation |
| VaultRE | Provider credentials (workspace-managed) | CRM/property data sync where configured | Connected status, synced data artifacts | Credential mismatch, endpoint/source availability |
| Eagle MRI | Per-agency `client_id` + `client_secret` (workspace-managed) | Listings sync into the knowledge base + opt-in contacts API sync (full contact list, with an optional initial-backfill limit for test mode), twice-daily delta | Connected status, listings in knowledge base, contacts on the Contacts page with an Eagle source badge, per-job progress in Sync History | Invalid credentials, revoked API access in Eagle |
| AgentBox (Reapit) | Reapit-approved API access (`Client ID` + `API Key`, workspace-managed) **or** CSV export | Listings sync into the knowledge base + opt-in contacts API sync (full contact list, with an optional initial-backfill limit for test mode), scheduled delta sync — **or** one-shot bulk contact import via CSV upload | Connected status, listings in knowledge base, contacts on the Contacts page with an AgentBox source badge, per-job progress in Sync History | Invalid credentials, AgentBox unavailable, missing office permissions (API); invalid CSV format, missing required columns (CSV) |
## Choose your setup guide
Read-only calendar access for Voqo's AI surfaces. Powers voice-agent availability checks today; AI helper and SMS agent next.
Connect and sync Realestate.com.au listings.
Connect and sync Domain listings.
Configure VaultRE connection and sync expectations.
Connect Eagle MRI to sync listings and your full contact list.
Connect AgentBox (Reapit) to sync listings and your full contact list.
Import contacts from AgentBox via CSV upload (no API access required).
## Webhook integrations
* For event delivery setup and verification, use [Webhook Integration Guide](webhook-integration-guide).
* For canonical knowledge route policy, see [Knowledge Route Policy](knowledge-surface-policy).
## Troubleshooting
### Integration shows connected but data is stale
* Run manual resync and confirm timestamp updates.
* Check provider account is still active/authorized.
* Validate source data actually changed upstream.
### OAuth or credential auth fails
* Re-authenticate with correct provider account.
* Confirm required permissions/scopes were granted.
* Re-check copied credentials for formatting issues.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, integration provider, integration ID, and last sync timestamp.
## Related docs
* [Knowledge Base Lists and Sources](knowledge-base-integrations)
* [Knowledge Route Policy](knowledge-surface-policy)
* [Webhook Integration Guide](webhook-integration-guide)
* [Troubleshooting Hub](../troubleshooting/index)
# realestate.com.au Setup
Source: https://docs.voqo.ai/tutorials/integrations/rea-setup
Connect realestate.com.au (REA), sync active and sold listings, and understand the data fields REA's feed exposes.
realestate.com.au (REA) is one of Australia's two major property portals. Connecting it lets your active listings flow into Voqo's Knowledge Base automatically, and — when you opt in — your sold and leased listings as well, so your AI agent can speak to your recent sales on calls.
Once connected, Voqo keeps itself in step with REA on a scheduled sync. No manual exports or uploads.
## Prerequisites
* **Workspace admin** role (required to manage integrations)
* A realestate.com.au account with feed access
* Your REA agency details ready to enter
## Connect realestate.com.au
1. Go to **Integrations** in the sidebar.
2. Find the **realestate.com.au** card and click **Connect**.
3. Provide your agency details and confirm the connection.
4. Pick what to sync (see [Pick your sync scope](#pick-your-sync-scope) below).
5. Click **Connect**.
If your credentials are valid, listing sync begins automatically in the background. The first sync brings in your active stock; subsequent scheduled syncs pull in any state changes (sold, leased, off-market) on those listings.
## Pick your sync scope
You'll see the following scope options:
* **Live listings** — always on. Your active sale and rental stock flows into the Knowledge Base automatically.
* **Sold & off-market listings** — opt-in. Retain sold residential listings and off-market listings in your Knowledge Base with a **Sold** or **Off-Market** badge instead of silently removing them.
* **Leased listings** — opt-in. Retain leased rental listings in your Knowledge Base with a **Leased** badge.
REA does not have a pre-market stage in its feed (it's a portal, not a CRM), so there's no pre-market option here. If you need pre-market data, that lives in your CRM integration (Eagle MRI, AgentBox, or VaultRE).
You can change these later via the **⋮** Settings on the realestate.com.au card.
### Choose how far back to keep sold and leased listings
When you enable **Sold & off-market listings** or **Leased listings**, a **Historical listing window** selector appears in your realestate.com.au settings. It controls how far back Voqo includes sold, leased, and off-market listings on the next sync, based on when each listing was last updated.
* **Pick a window** — **Last 1 month**, **Last 3 months**, **Last 6 months**, **Last 12 months** (the default), or **Last 24 months**.
* **Older listings roll off automatically.** A sold or leased listing that hasn't been updated within your chosen window drops out of your Knowledge Base on the next sync.
* **Widen the window to bring older listings back.** Switch to a longer window and run a sync — the older sold and leased listings reappear.
* **The selector only shows when Sold or Leased is enabled.** Your live listings always sync in full and are never affected by this window.
### Turning a scope off — and getting your listings back
When you turn **off** a listing scope in your realestate.com.au settings, Voqo **removes** the already-synced listings of that type from your Knowledge Base. Because this removes records, Voqo always asks you to confirm first:
* **You'll see a confirmation dialog** telling you exactly **how many listings** will be removed, and **which manually managed lists** they sit in (if any), before anything is deleted.
* **Nothing is removed until you confirm.** Click **Cancel** to leave everything in place.
* **Nothing is lost permanently.** You can **restore** these listings at any time by re-enabling the scope and running a sync.
## Listing states from realestate.com.au
REA exposes sold, leased, and off-market states on its feed, but the feed is thinner than what CRMs publish. Voqo brings what REA provides into your Knowledge Base honestly, and tells you explicitly when a field isn't available.
### Sold listings
When you enable **Sold & off-market listings**, REA residential listings flipped to **sold** appear in the **Sold** tab with a red **Sold** badge.
Each sold listing carries:
* **Sold price** — REA's `` value, when published.
* **Sold date** — REA's `` value.
* **Sale method** — shown as **Not provided** in the Knowledge Base. realestate.com.au's feed does not include the sale method (Auction, Private Treaty, Tender, etc.) on sold listings. Your AI agent will quote the price and date without claiming a method.
* **Price-display flag** — REA's feed does not include a vendor-confidentiality flag, so sold prices are always displayed when REA provides them.
**Limitation — REA sold feed is thinner than Domain or your CRM.** This is a data gap on REA's side, not a Voqo limitation. If you need sale-method context for your AI agent's sold-listings prompts, connect your CRM (Eagle MRI, AgentBox, or VaultRE) — CRMs publish the sale method on sold properties.
### Leased listings
When you enable **Leased listings**, REA rental listings flipped to **leased** appear in the **For Lease** archive with a **Leased** badge.
Each leased listing carries:
* **Leased date** — falls back to the listing's last-modified time. REA's feed does not include a dedicated lease date.
* **Weekly rent** — **not available**. REA's feed does not include the rent on a leased rental.
* **Lease term (months)** — **not available**.
* **Lease end date** — **not available**.
* **Price-display flag** — derives from the rental's `` attribute when present, otherwise defaults to display.
**Limitation — REA leased feed is thin.** realestate.com.au's feed exposes the leased status but not the lease term, end date, or weekly leased rent. If you need this detail for your AI agent's prompts, connect your CRM — CRMs publish the full tenancy detail on leased properties.
### Off-market listings
REA listings flipped to **off-market** appear in the **Off-Market** tab with an **Off-Market** badge. Your AI agent prefixes these listings with **"OFF-MARKET —"** when speaking about them.
### Upcoming auctions
REA auction listings populate Voqo's **Upcoming Auctions** smart-list template. The auction date is pulled from REA's `` element on the listing. Build a list under **Quick Create → Upcoming Auctions** and attach it to your AI agent so it can prepare for auction-week calls.
***
## Smart lists for realestate.com.au listings
In the Knowledge Base **Quick Create** menu, you can build per-state smart lists that include REA stock:
* **Sold Properties** — every sold listing (across all integrations); narrow to REA with the source filter
* **Leased Properties** — every leased rental
* **Upcoming Auctions** — every listing with an auction date in the next 14 days
**`Lease Properties` vs `Leased Properties`** — these are different lists. **Lease Properties** is your current rental stock available to lease. **Leased Properties** is the archive of rentals that have already been leased out. Pick the one that matches your use case.
***
## Why your REA sold listings might look different from a Domain customer's
Different portals publish different fields on sold and leased listings. Voqo shows you the deepest detail your data source provides and is explicit when a field isn't available — rather than hiding the gap or filling it with a guess.
| Field | realestate.com.au | Domain |
| ---------------------------------------- | -------------------- | -------------------------- |
| Sold price | Yes (when published) | Yes |
| Sold date | Yes | Yes |
| Sale method (Auction, etc.) | Not provided | Yes |
| Settled price (post-titles registration) | Not provided | Yes |
| Price-display flag | Always display | Yes |
| Leased rent / term / end date | Not provided | n/a (Domain is sales-only) |
If you need richer sold or leased context for your AI agent, connect your CRM in addition to REA — CRM feeds (Eagle MRI, AgentBox, VaultRE) publish the full detail on sold and leased listings.
***
## Sync expectations
* **Initial sync** — imports your active listing data into the Knowledge Base.
* **Ongoing sync** — scheduled. The most recent state changes from REA (sold, leased, off-market flips) are picked up automatically.
* **Manual resync** — click **Sync now** on the realestate.com.au card if you want to pull updates between scheduled runs.
## Retry and recovery
* **Credential error** — re-check your agency details and reconnect.
* **Sync failure** — retry manual sync after credential validation.
* **Partial sync** — verify the source listing is published on realestate.com.au and run **Sync now**.
## Troubleshooting
| Issue | What to do |
| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sold listings show "Sale method: Not provided"** | realestate.com.au's feed does not include the sale method. Sold price and sold date are accurate; method is unavailable from the source. If you need sale-method context, connect your CRM. |
| **A leased listing doesn't show weekly rent** | realestate.com.au's feed does not include rent on leased rentals. If you need this detail, connect your CRM. |
| **A listing disappeared from For Sale but I can't find it in Sold** | Check the **Off-Market** tab. REA may have flipped the listing to off-market rather than sold. |
| **Sold listings haven't appeared yet** | Click **Sync now** on the REA card. Sold listings appear at the next scheduled sync if you wait. |
| **My sold or leased listings disappeared** | You may have turned off the matching scope, or an older listing rolled off your **Historical listing window**. Re-enable the scope (or widen the window) from the REA settings and run **Sync now** to bring them back. |
| **I want to keep more sold history** | Open the REA settings and set the **Historical listing window** to a longer period (up to **Last 24 months**), then run a sync. |
## Disconnect
1. Click **Disconnect** on the realestate.com.au card.
2. Confirm the action.
Disconnecting stops all future syncs. Previously synced listings remain in your workspace but are no longer linked to REA — the source badge disappears and scheduled syncs stop.
## Need help?
If anything's not working as expected, contact support with your workspace ID and the listing address.
## Related docs
* [Choose and Connect Integrations](overview-integration)
* [Knowledge Base Lists and Sources](knowledge-base-integrations)
* [Sold Listings in the Knowledge Base](../knowledge-base/sold-listings)
* [Leased Listings in the Knowledge Base](../knowledge-base/leased-listings)
# VaultRE Note Write-Back
Source: https://docs.voqo.ai/tutorials/integrations/vaultre-note-writeback
Automatically save notes from Voqo AI calls into your VaultRE contact records — and push your own notes too.
## What is it?
With note write-back on, Voqo saves a note against the matching VaultRE contact whenever your AI agent has a meaningful call with a synced contact, and whenever that contact replies to one of your texts. Your team sees the full story in VaultRE — who enquired, about what, and what happens next — without anyone re-typing call outcomes.
Write-back is **off by default**. Writing into your CRM is deliberate — you turn it on when you're ready.
## Prerequisites
* VaultRE is connected to your workspace (see [VaultRE Setup](vaultre-setup))
* Your VaultRE API token includes **note** permissions — the write-back option only appears when it does (see [Troubleshooting](#troubleshooting) if you can't find it). Voqo re-checks your token's permissions on every sync, so a permission you add in VaultRE later takes effect on the next sync — you don't need to reconnect.
## Turn on write-back
1. Go to **Integrations** and open the **⋮** Settings on the VaultRE card.
2. Select the **Contacts** tab.
3. Turn on **Write notes back to VaultRE**.
4. Choose the **Note types** to write — **Call**, **SMS**, or both.
5. Click **Save**.
That's it. From the next meaningful call — and the next SMS reply — onwards, Voqo writes a note to the contact's record in VaultRE.
### Two-way sync, handled for you
Turning on write-back automatically keeps **contact sync** on — Voqo needs your contacts synced so there's always a record to write back to. There's nothing else to set up.
While write-back is on, contact sync can't be switched off. If you want to stop syncing contacts, turn off write-back first.
## Which conversations create a note?
Calls and SMS replies are treated differently, on purpose.
### Calls — only the meaningful ones
Not every call creates a note. Voqo writes one when there's genuinely something worth recording:
* **Creates a note** — a property enquiry, a price or quote discussion, interest in an inspection, feedback on a listing, a follow-up commitment
* **Doesn't create a note** — a plain "call me back", a wrong number, a call with no real enquiry
This keeps your VaultRE records clean: every call note Voqo writes is one your team would actually want to read. You can raise or lower the bar with a [custom note style](#customise-your-notes).
### SMS replies — every one
**Every SMS reply from a contact creates a note**, including a short "no thanks". There's no judgement call applied to texts.
That's deliberate. A one-word reply to a campaign is often the most important thing that happened — "not interested" is a real answer and belongs in your CRM. Texts are also short enough that a filter would throw away the very replies you most want a record of.
SMS notes are recorded word-for-word, so you always see exactly what your contact wrote.
## What a note looks like
Notes are short, factual, and written in an activity-log voice — for example:
> Sarah Nguyen enquired about 19 Example Street, Sampleton. Keen on a Saturday inspection and asked about recent sale prices in the street.
Each note names the contact, says what was discussed, and includes the property when one came up — the house style leads with the contact's name (a [custom note style](#customise-your-notes) can change the voice and point of view, but always keeps those facts). How the conversation came in — an inbound call, an outbound call, or one of the three kinds of SMS reply — shows as a badge on the note in Voqo and as the note's type in VaultRE, so it never has to clutter the wording.
## Examples — what your notes look like in VaultRE
Here's how notes show up as **contact notes** in VaultRE across the different situations. Each example is the note as your team reads it in VaultRE — the note type, who it's recorded as being added by, and the note text.
**A call note** (your agent's post-call summary):
> **Buyer Enquiry** · Added by *Voqo AI*
> Michael Tran called about 42 Rosebank Avenue, Croydon. He's after a four-bedroom under \$1.2M and wants to inspect this Saturday. Asked whether the vendors would consider an early offer.
**An SMS reply note** — a text your contact sent back, recorded word-for-word:
> **Buyer Enquiry** · Added by *Voqo AI*
> Priya Sharma responded with "Hi there, I am interested" to the SMS campaign titled "Appraisal Batch One".
The sentence always reads the same way — the contact's name, their reply in quotes, and what they were replying to. What they were replying to depends on how the text reached them:
> Jamie Citizen responded with "Yes please send it through" to our follow-up SMS after the call on 25 July 2026 at 3:42 pm.
> Jamie Citizen responded with "Can you call me tomorrow?" to our SMS of 25 July 2026 at 3:42 pm.
Very long replies are shortened with an ellipsis so the note fits VaultRE's limit — the reply is always kept as the part that matters, never the wrapper around it.
**A manual note you typed in Voqo** and ticked *Also save to VaultRE*:
> **Vendor Enquiry** · Added by *Voqo AI*
> Spoke with the vendor at 15 Marne Street, Camberwell — happy to drop the asking price by \$20k ahead of the weekend. Wants a call back Monday with buyer feedback.
**Why there's no "written by Voqo AI" line in the note text.** In VaultRE, the note is recorded against the **Voqo AI user** in VaultRE's own *Added by* field — so it's already clear at a glance which notes came from your agent and which came from your team, without anything extra in the wording. (If you also run AgentBox, you'll notice its notes carry a short "— Logged via Voqo AI" line at the end instead. That's because AgentBox attributes differently, and the marker is how Voqo keeps its notes distinguishable there. VaultRE doesn't need it.)
## Customise your notes
Under **Advanced settings** (on the Contacts tab, once write-back is on) you'll find **Custom note style**. Describe in your own words how notes should read — the wording, the voice, the point of view (first person or third), and what's worth noting — for example:
> Short, third-person. Always name the property. Only note real property enquiries — skip plain callback requests.
Your custom style takes over completely for **call notes**: it controls their wording, voice, and point of view. The built-in house style is used only when you haven't set a custom style. Either way, each call note still includes the key facts — who the contact is, the property, and what was discussed — your style controls how those are phrased, never whether they're there.
Click **Preview** to see a sample note written in your style before you save. Leave the field blank to use our house style.
For call notes, one description controls both the wording **and** the bar for what gets noted — so "only note price discussions" means exactly that.
**SMS reply notes keep a fixed format.** Your custom style applies to call notes only. An SMS reply is recorded word-for-word in a consistent one-line format — the contact's name, what prompted the text, and their reply in quotes — so the exact wording your contact sent is never rephrased. That also means the "what's worth noting" part of your style doesn't apply to texts: every reply is saved.
## Save your own notes to VaultRE
You can write notes by hand too, and send them straight to VaultRE. Open a contact, find the **Notes** section, and select **Add note**:
1. **Choose a note type.** When the contact is linked to VaultRE and write-back is on, the note-type list is **your VaultRE account's own note types** — the same categories you already use inside VaultRE. If VaultRE isn't linked, you'll see Voqo's general categories instead.
2. **Link a property, if the type asks for one.** Some note types are about a specific property — pick one of those and a **Link a property** box appears. Search your properties by address and attach one, so the note lands against the right listing in VaultRE.
3. **Type your note** (up to 500 characters).
4. **Choose where it goes.** An **Also save to VaultRE** checkbox sits under the note. Tick it to send the note to VaultRE as well as Voqo; leave it unticked to keep the note in Voqo only — handy for internal observations you don't want in the CRM. If the checkbox is greyed out, hover it to see what's needed to switch write-back on for this contact.
5. Select **Save**.
If you leave **Also save to VaultRE** unticked, your note is saved in Voqo instantly. If you tick it, Voqo saves the note to VaultRE **first** and keeps it only once VaultRE has accepted it — so a note you add by hand is confirmed in your CRM the moment it appears. If VaultRE can't accept it — for example an enquiry-type note that needs a property, with none linked — **nothing is saved**: the note stays open with a short reason so you can fix it and save again, or cancel. You never end up with a half-saved note.
### Where the note types come from
When VaultRE is linked with write-back on, Voqo reads the note types straight from your VaultRE account, so the categories you pick from match your own setup — not a generic list. If you add or rename note types in VaultRE, the updated list flows through to Voqo automatically.
This is the same list you'll map from in [Choosing note types for automatic notes](#choosing-note-types-for-automatic-notes) below — here you're picking a type for one note by hand, there you're setting the default for a whole kind of conversation.
## Choosing note types for automatic notes
Notes you write by hand get the type you pick. For **automatic** notes — the ones Voqo writes after a call or an SMS reply — you can decide in advance which of your VaultRE note types each kind of conversation should use.
Open **Integrations → ⋮ Settings** on the VaultRE card, go to the **Contacts** tab, and find **Note types** under the write-back settings. You'll see a row for each kind of conversation:
| Conversation | What it covers |
| ----------------- | --------------------------------------------- |
| **Inbound call** | Someone called your agent |
| **Outbound call** | Your agent called them |
| **Campaign** | A reply to an SMS campaign |
| **Post-call** | A reply to a follow-up text sent after a call |
| **Direct** | A text that arrived on its own |
Pick one of your own VaultRE note types for any row you care about. Each row is independent — map one, map all five, or map none.
**Leaving rows unmapped is completely fine.** An unmapped conversation gets a sensible general type, exactly as it does today. Mapping is there for teams who want their Voqo notes to land in the same categories they already report on inside VaultRE.
Rows sit under the toggle that controls them — the SMS rows are greyed out while **SMS** is switched off in Note types, and the call rows while **Call** is off. Your choices are kept either way, so switching a type back on restores what you'd set.
### What each conversation gets
| Conversation | If you map a type | If you leave it unmapped |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Inbound call**, **Outbound call** | Your chosen type. If that type needs a property, it's used when the call is linked to one, and a general type when it isn't. | Your account's phone-enquiry type when the call is linked to a property, and a general type when it isn't. |
| **Campaign**, **Post-call**, **Direct** | Your chosen type. If that type needs a property, a general type is used instead — SMS replies are never linked to a property. | A general type. |
Unmapped rows are the reason write-back works the moment you switch it on: there's always a type to fall back to, so a note is never held back waiting on configuration.
### When a note type needs a property
Some VaultRE note types are about a specific property — a feedback type, for example, has to be attached to a listing. If you map one of those to a conversation that has no property attached, Voqo saves the note under a **general type** instead.
A worked example:
> You map **Campaign** to your **Property Feedback** type. A contact replies "Yes, still interested" to a campaign about no particular listing. That reply has no property attached, so Voqo saves it as a **general** note rather than a Property Feedback one.
The note is always saved — you never lose a reply because of a mapping.
Voqo tells you which situation you're in, right on the row:
* On an **SMS** row, a warning appears — those replies are never linked to a property, so a property-requiring type will always be swapped for a general one.
* On a **call** row, a short note appears instead of a warning, because calls *can* be linked to a property. Your chosen type is used when the call is linked to one, and a general type when it isn't.
Note types are also chosen **once, when the note is created**, and then kept. Changing a mapping later doesn't rewrite notes you've already got.
## See your notes in Voqo too
Every note Voqo writes to VaultRE also appears in the contact's **Notes** section in Voqo, and so do the notes you write by hand. Each note shows, at a glance, its type, who wrote it, when, and whether it reached your CRM:
* The **note type** (e.g. *General*, *Enquiry*, *Open Home*) sits above the note text. For automatic notes a **channel** badge sits alongside it, showing how the conversation came in — **Inbound call**, **Outbound call**, **Campaign**, **Post-call**, or **Direct**. The three SMS badges tell you what prompted the reply: **Campaign** is a reply to an SMS campaign, **Post-call** is a reply to a follow-up text after a call, and **Direct** is a text that arrived on its own. Hover any badge for the full description.
* Under the note you'll see **when it happened** and **who wrote it** — *Voqo AI* for automatic call and SMS notes (hover to confirm it was written by the system), or your team member's name for ones added by hand. If a note was later edited, the edit time shows here too.
* A **sync status** at the end of that line shows whether the note has reached VaultRE:
* **Synced to VaultRE** — a steady icon once the note is safely saved in your CRM. Notes you add by hand show this as soon as they appear, because Voqo confirms them in VaultRE before saving.
* **Syncing** — a small spinning icon while an automatic call or SMS note is on its way to VaultRE.
* **Needs attention** — if an automatic note couldn't reach VaultRE, the icon turns amber. Hover for the reason, and click it to **retry** the push. Nothing is lost in the meantime — the note is always safe in Voqo.
See [Add Notes to Contacts](../agent-settings/contact-notes) for everything else notes can do.
## Editing and deleting synced notes
Once a note is synced to VaultRE, Voqo keeps both copies in step:
* **Editing** a synced note updates VaultRE too. When you save, the button reads **Syncing to VaultRE…** while Voqo confirms the change landed in your CRM — then it saves. If VaultRE is briefly unavailable, you'll see a short message and can retry; your edit isn't lost. The note's **date** and any **linked property** are fixed when it's first created — VaultRE keeps the originals — so those two are locked while editing; you can still change the wording and the note type.
* **Deleting** a synced note removes it from **both Voqo and VaultRE**. You'll be asked to confirm first — the dialog reminds you the note is synced and that deleting removes it from both and can't be undone. If VaultRE is briefly unavailable, the delete shows an error and you can try again.
Notes that were only ever kept in Voqo (you unticked **Also save to VaultRE**) edit and delete instantly, with no CRM step.
## Troubleshooting
| Issue | Solution |
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| I can't see the write-back option on the Contacts tab | Your VaultRE API token doesn't include note permissions. If it already does, run **Sync** on the VaultRE card once — Voqo re-checks permissions on every sync and the option then appears. Otherwise generate a new token in VaultRE with note access and send it to support — we'll swap it over for you. Don't disconnect the integration to do this yourself: reconnecting needs the agency key VaultRE issued to us. |
| The **Also save to VaultRE** checkbox is greyed out when adding a note | The checkbox is there but disabled until the note can be written back — **hover it for the exact reason**. Common causes: the contact isn't linked to VaultRE, VaultRE is disconnected, your API token doesn't include note access, or **Write notes back to VaultRE** is turned off in the VaultRE Contacts settings. Fix the one the tooltip names and the checkbox becomes tickable. |
| The note types I'm choosing from look unfamiliar | When VaultRE is linked with write-back on, the list is pulled straight from your VaultRE account — so it matches your own note types, not a generic set. If a type is missing, add it in VaultRE and it'll appear in Voqo. |
| A call didn't create a note | Only meaningful calls create notes — a plain callback request or wrong number won't. If you've set a **Custom note style** that narrows what's worth noting, that applies to calls too. |
| Why did a "no thanks" SMS create a note? | Every SMS reply creates a note, by design — a short "no thanks" is a real answer and belongs on the contact's record. The meaningfulness filter and your custom note style apply to **calls only**, never to texts. |
| An automatic note used a general type instead of the one I mapped | The type you mapped needs a property attached and the conversation didn't have one — a campaign reply about no particular listing, for example. Voqo saves the note under a general type rather than losing it. Map that conversation to a type that doesn't require a property if you'd rather it were categorised. |
| I changed a note-type mapping but old notes didn't change | Note types are chosen when the note is created and then kept, so a new mapping applies to new notes only. You can change an individual note's type by editing it. |
| A note shows in Voqo but hasn't reached VaultRE | Its sync icon will be amber — hover for the reason and click it to retry. Notes usually reach VaultRE within a few minutes, and Voqo retries automatically if VaultRE is briefly unavailable. If it still won't sync, check the contact is synced from VaultRE — notes only push to contacts linked to your VaultRE account. |
| My edit or delete is stuck on "Syncing to VaultRE…" | Editing or deleting a synced note waits for VaultRE to confirm the change. If VaultRE is briefly unavailable you'll see a short error — just try again. Your note and your change are never lost. |
| My note wouldn't save and stayed open with a message | When **Also save to VaultRE** is ticked, the note is saved to VaultRE first — if VaultRE rejects it (for example an enquiry-type note with no property linked), nothing is saved and the note stays open with the reason. Fix what it mentions — link a property, or pick a different note type — and save again, or untick **Also save to VaultRE** to keep it in Voqo only. |
| A note reads plainer than usual | If our note-writing assistant is briefly unavailable, Voqo still saves a simple factual note of the call rather than losing it. |
| Emoji in a text reply show as `?` in VaultRE | VaultRE doesn't store emoji in note text, so each one becomes a question mark there. Nothing is lost — open the contact in Voqo and the reply appears exactly as it was sent, emoji included. |
## Related docs
* [VaultRE Setup](vaultre-setup)
* [Add Notes to Contacts](../agent-settings/contact-notes)
* [Choose and Connect Integrations](overview-integration)
# VaultRE Setup
Source: https://docs.voqo.ai/tutorials/integrations/vaultre-setup
Connect VaultRE to sync property listings (sold, leased, off-market, pre-market) and contacts into Voqo AI.
## Prerequisites
* **Workspace admin** role (required to manage integrations)
* A VaultRE account with API access enabled
* VaultRE must whitelist Voqo AI as an integrator for your account (see [Getting Whitelisted](#getting-whitelisted) below)
## Getting Whitelisted
Voqo AI is currently a private integrator with VaultRE. Before you can generate an API token, VaultRE must enable access for your account.
1. [Lodge a support ticket with VaultRE](https://support.vaultre.com.au/hc/en-au/requests/new) requesting integration access for **Voqo AI (Heffron Intelligence PTY LTD)**.
2. Alternatively, call VaultRE Support on **1300 788 689**.
Once whitelisted, you can generate an auth token from your [VaultRE integrations page](https://login.vaultre.com.au/cgi-bin/clientvault/integrations/tokens.cgi).
## Connect VaultRE
**VaultRE connections currently need a hand from our team to finish.** VaultRE approves integrators agency by agency and issues a separate access key for each one, sending it to us rather than to you — so there's no single key we can pair your token with automatically. Go ahead and try the steps below: if **Verify Token** doesn't go through, that's this requirement, not a problem with your token. Send the token to support and we'll finish the connection for you. This is a temporary step, for as long as VaultRE issues these keys agency by agency.
1. Go to **Integrations** in the sidebar.
2. Click **Connect** on the VaultRE card.
3. Paste your VaultRE auth token and click **Verify Token**.
4. Pick what to sync (see [Pick your sync scope](#pick-your-sync-scope) below).
5. If you turned on **Contacts**, you'll see a preview of how many contacts will be imported and how long it will take — click **Sync** to confirm. Otherwise, click **Connect**.
Listing sync (and contacts sync, if enabled) begins automatically in the background, and VaultRE keeps syncing twice a day from then on.
**If verification doesn't go through**, email your token to [support@voqo.ai](mailto:support@voqo.ai) and tell us what you'd like to sync — listings, contacts, or both. If you want your AI agent's call and SMS notes written back into VaultRE, mention that as well and generate the token with **note** permissions included. We'll set the connection up and let you know when it's ready; you then open **Integrations**, where the VaultRE card shows as connected, and click **Sync** to pull everything in. Anything you tell us at this point is still adjustable later in the card's **⋮** Settings.
## Pick your sync scope
You'll see the following scope options when you connect, and they stay adjustable afterwards on the **⋮** Settings of the VaultRE card:
* **Live listings** — always on. Your active sale and rental stock flows into the Knowledge Base automatically.
* **Sold & off-market listings** — opt-in. Retain settled, conditional, fallen, and withdrawn sale listings in your Knowledge Base instead of removing them, with a **Sold** badge (for completed sales) or **Off-Market** badge (for fallen / withdrawn).
* **Leased listings** — opt-in. Retain leased rentals in your Knowledge Base with a **Leased** badge, including weekly rent and lease term from VaultRE's tenancy history.
* **Pre-Market listings** — opt-in, default off. Pull in **Prospect** and **Appraisal** stage listings (work you're pitching but haven't formally listed yet) with a **Pre-Market** badge.
* **Contacts** — opt-in. Voqo imports your VaultRE contact list and keeps it in sync automatically, twice a day, with any changes — including new contacts (see [Keeping your contacts in sync](#keeping-your-contacts-in-sync) below).
Listing scopes live on the **Listings** tab, and contact sync (with its import limit) on the **Contacts** tab. Change them whenever you like. Turning **Contacts** off stops syncing; contacts you've already imported are kept, not deleted.
### Choose how far back to keep sold and leased listings
When you enable **Sold & off-market listings** or **Leased listings**, a **Historical listing window** selector appears in your VaultRE settings. It controls how far back Voqo includes sold, leased, and off-market listings on the next sync, based on when each listing was last updated.
* **Pick a window** — **Last 1 month**, **Last 3 months**, **Last 6 months**, **Last 12 months** (the default), or **Last 24 months**.
* **Older listings roll off automatically.** A sold or leased listing that hasn't been updated within your chosen window drops out of your Knowledge Base on the next sync.
* **Widen the window to bring older listings back.** Switch to a longer window and run a sync — the older sold and leased listings reappear.
* **The selector only shows when Sold or Leased is enabled.** Your live and pre-market listings always sync in full and are never affected by this window.
### Turning a scope off — and getting your listings back
When you turn **off** a listing scope in your VaultRE settings, Voqo **removes** the already-synced listings of that type from your Knowledge Base. Because this removes records, Voqo always asks you to confirm first:
* **You'll see a confirmation dialog** telling you exactly **how many listings** will be removed, and **which manually managed lists** they sit in (if any), before anything is deleted.
* **Nothing is removed until you confirm.** Click **Cancel** to leave everything in place.
* **Nothing is lost permanently.** You can **restore** these listings at any time by re-enabling the scope and running a sync.
**Rate limit caveat for high-volume tenants.** Your VaultRE account has its own daily API quota (currently 10,000 requests per day). If you run a high-volume agency with hundreds of active appraisals, enabling **Pre-Market listings** can add substantial daily quota usage. If you're not actively using pre-market data in your AI agent's context, leave the scope off. If you hit quota issues, contact support.
## Listing states from VaultRE
VaultRE exposes sale, rental, and pre-market lifecycle states across separate API surfaces. Voqo pulls each into a dedicated tab in your Knowledge Base when you opt in.
### Sold listings
When you enable **Sold & off-market listings**, VaultRE sale properties marked **Unconditional** or **Settled** appear in the **Sold** tab with a red **Sold** badge.
Each sold listing carries:
* **Sold price** — VaultRE's `salePrice` value.
* **Sold date** — the date the contract went unconditional (or fell back to settlement date).
* **Sale method** — Auction, Private Treaty, Tender, Expressions of Interest, or other, mapped from VaultRE's `SoldType` field.
* **Price-display flag** — honours VaultRE's `showSalePrice` setting; sold price is hidden if the vendor instructed VaultRE not to publish it.
### Leased listings
When you enable **Leased listings**, VaultRE rentals with an **Unconditional** tenancy appear in the **For Lease** archive with a **Leased** badge. The card carries:
* **Weekly rent** — VaultRE's rent value, normalised to weekly.
* **Lease start date** — the tenancy start date.
* **Lease end date** — the tenancy end date.
* **Lease term (months)** — derived from start-date-to-end-date in months.
### Off-market listings
VaultRE listings that have fallen through (**Fallen Sale**) or been withdrawn (**Withdrawn**) appear in the **Off-Market** tab with an **Off-Market** badge. Voqo pulls these from VaultRE's dedicated `/properties/sale/fallenSaleWithdrawn` endpoint, so the lifecycle is accurate end-to-end.
Your AI agent prefixes these listings with **"OFF-MARKET —"** when speaking about them.
### Pre-market listings (Prospect, Appraisal)
When you enable **Pre-Market listings**, VaultRE properties in **Prospect** or **Appraisal** stages appear in the **Pre-Market** tab with a **Pre-Market** badge.
These are useful when you want your AI agent to be aware of properties you're pitching, even before they go live. **Default off** so they don't clutter your Knowledge Base if you don't need them.
You can hide pre-market listings from your Knowledge Base view without un-syncing them — see [Pre-Market Listings](../knowledge-base/pre-market-listings) for the Hide toggle.
### Upcoming auctions
VaultRE auction listings populate Voqo's **Upcoming Auctions** smart-list template. The auction date is pulled from VaultRE's `auctionDetails.dateTime` field. Build a list under **Quick Create → Upcoming Auctions** and attach it to your AI agent so it can prepare for auction-week calls.
***
## Smart lists for VaultRE listings
In the Knowledge Base **Quick Create** menu, you can build per-state smart lists that include VaultRE stock:
* **Sold Properties** — every sold listing (across all integrations); narrow to VaultRE with the source filter
* **Leased Properties** — every settled leased rental
* **Pre-Market Properties** — every Prospect or Appraisal-stage VaultRE listing (only populated when pre-market scope is on)
* **Upcoming Auctions** — every listing with an auction date in the next 14 days
**`Lease Properties` vs `Leased Properties`** — these are different lists. **Lease Properties** is your current rental stock available to lease. **Leased Properties** is the archive of rentals that have already been leased out. Pick the one that matches your use case.
You can also build a **VaultRE Properties** list (under *By Integration Source* in Quick Create) that holds every listing synced from VaultRE.
***
## Keeping your contacts in sync
With **Contacts** turned on, Voqo brings in your full VaultRE contact list and keeps it in sync automatically — twice a day, including any new contacts. There's no CSV to export or upload, and nothing further to do after you connect.
### What gets imported
* First and last name
* Phone numbers (normalised to international format)
* Email addresses
* Categories and entity type (person, company, supplier, and so on)
* Whether the contact is on the **Do Not Call** register, or has unsubscribed from SMS or email — Voqo honours this for SMS from the moment your contacts sync
Archived VaultRE contacts, and contacts with no phone number or email, aren't imported. If a contact is later archived in VaultRE, Voqo removes it from your workspace on the next sync.
### Test with a limited import first
You can set a **Maximum contacts to import** — for example, 100 — to try the integration out on a subset of your contacts before going live. It's on the **Contacts** tab, and you can ask support to set it if we're completing your connection. While a limit is set, Voqo imports that many contacts once and does **not** keep syncing new or updated contacts. When you're ready to bring in everyone and keep syncing automatically, open the **⋮ Settings** on the VaultRE card, select **Sync all contacts** and **Save**, then click **Resync** — your existing contact data is preserved.
### Already imported contacts via CSV?
If you've previously brought VaultRE contacts into Voqo using a CSV upload, connecting VaultRE won't create duplicates. Voqo matches each contact against your CSV import by their VaultRE record, so your existing contacts are simply kept up to date going forward.
### If a contact is already synced from another CRM
If you have more than one CRM connected and a contact already came in from a different one, Voqo leaves that contact managed by its original CRM rather than overwriting it. You'll see it counted as **Claimed** in Sync History.
## Write notes back to VaultRE (two-way sync)
Voqo can also write **into** VaultRE: with note write-back on, meaningful calls with your synced contacts — and every SMS reply they send — are saved as notes on the matching VaultRE contact. You can push your own notes from Voqo too, and choose which VaultRE note type each kind of conversation uses. Turn it on from the **Contacts** tab of the VaultRE settings.
See [VaultRE Note Write-Back](vaultre-note-writeback) for the full guide.
## Disconnect
1. Click **Disconnect** on the VaultRE card.
2. Confirm the action.
Disconnecting removes the VaultRE link from your property listings and contacts. Previously synced contacts remain in your workspace but are no longer linked to VaultRE (the sync icon disappears and syncing stops until you reconnect).
**If our team completed your connection, talk to us before you disconnect.** Reconnecting needs the agency key VaultRE issued to us, which the existing connection holds — disconnecting clears it, and connecting again on your own will not verify. Contact support first and we'll reconnect you straight after. Disconnecting also resets your contact sync, so the next one re-imports your contacts from scratch.
## Troubleshooting
| Issue | Solution |
| -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "Invalid auth token" when I verify | First check VaultRE has whitelisted Voqo AI for your account, and regenerate the token if it's expired. If it still won't verify, that's the per-agency key requirement described above, not your token — email it to support and we'll finish the connection. |
| My VaultRE card says connected but nothing has synced | Click **Sync** on the card to run the first sync immediately; otherwise it runs on the next scheduled sweep. If it still shows nothing, check the **Listings** and **Contacts** tabs have the scopes you expect turned on. |
| My sync finished but brought in only a listing or two | That's the state of your VaultRE account, not a fault — Voqo syncs what's live there. Enable **Sold & off-market**, **Leased**, or **Pre-Market listings** in Settings to bring in more of your history. |
| Contacts missing after connecting | Contacts without any phone number or email aren't imported. Archived contacts are also excluded. |
| A contact isn't updating from VaultRE | If it's already synced from another CRM, it's shown as **Claimed** and stays managed by that CRM — see [If a contact is already synced from another CRM](#if-a-contact-is-already-synced-from-another-crm). |
| Sold or leased listings not appearing after enabling the scope | Click **Sync now** on the VaultRE card. The next scheduled sync also picks them up automatically. |
| Pre-market listings using too much quota | Disable **Pre-Market listings** from the VaultRE Settings if you don't actively need them. |
| My sold or leased listings disappeared | You may have turned off the matching scope, or an older listing rolled off your **Historical listing window**. Re-enable the scope (or widen the window) from the VaultRE settings and run **Sync now** to bring them back. |
| I want to keep more sold history | Open the VaultRE settings and set the **Historical listing window** to a longer period (up to **Last 24 months**), then run a sync. |
## Related docs
* [Choose and Connect Integrations](overview-integration)
* [VaultRE Note Write-Back](vaultre-note-writeback)
* [Knowledge Base Lists and Sources](knowledge-base-integrations)
* [Sold Listings in the Knowledge Base](../knowledge-base/sold-listings)
* [Leased Listings in the Knowledge Base](../knowledge-base/leased-listings)
* [Pre-Market Listings in the Knowledge Base](../knowledge-base/pre-market-listings)
# Webhook Integration Guide
Source: https://docs.voqo.ai/tutorials/integrations/webhook-integration-guide
Configure inbound/outbound webhook integrations with verification, retries, and idempotency.
## Audience
* Developers integrating event streams with external systems
* Admins/support teams operating webhook endpoints
## Prerequisites
* Public HTTPS endpoint
* Workspace webhook secret from **Settings → Workspace → Developer Tools**
* Ability to persist event IDs for idempotency
## Webhook event categories
* Call lifecycle events (status, completion, outcomes)
* Messaging events (for supported inbound SMS flows)
* Billing/identity/provider lifecycle events where applicable to your integration path
## Inbound vs outbound expectations
### Outbound (Voqo -> your endpoint)
* Voqo sends POST requests to your configured URL.
* Your endpoint should verify signatures and return `2xx` quickly.
* Non-`2xx` responses may be retried.
### Inbound (provider -> Voqo)
* Provider webhooks update user-visible state (for example call/billing/messaging outcomes).
* Delays or failures can affect state freshness in app surfaces.
## Signature verification
Use your webhook secret to verify message authenticity.
Recommended checks:
* Validate signature header
* Validate timestamp freshness
* Reject missing/invalid signatures
## Retry behavior
* Design for at-least-once delivery semantics.
* Return `2xx` only after successful persistence.
* For transient failures, rely on retry and keep handlers idempotent.
## Idempotency guidance
* Persist processed event IDs.
* Ignore duplicates safely.
* Make handlers side-effect safe when replayed.
## Minimal handler expectations
1. Parse payload and required headers.
2. Verify signature + timestamp.
3. Check idempotency store for prior processing.
4. Process business logic.
5. Return `200` once processing is durable.
## Troubleshooting
### Signature verification failing
* Confirm latest secret is used (not rotated one).
* Confirm request body is verified before mutation.
* Check timestamp skew tolerance.
### Duplicate events causing duplicate side effects
* Add event ID dedupe store.
* Make writes idempotent by unique event key.
### Webhook appears delayed
* Confirm endpoint latency and `2xx` responses.
* Check retry backlog and transient provider failures.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, webhook endpoint URL (redacted), event ID, and timestamps.
## Related docs
* [Manage API Keys and Secrets](../developer-tools/manage-api-keys-and-secrets)
* [API Reference](/api-reference/introduction)
* [Public Recording and SMS Replies API](/api-reference/public-recording-and-sms-replies)
# Documents
Source: https://docs.voqo.ai/tutorials/knowledge-base/documents
Add documents — FAQs, policies, pricing sheets, process guides — to the Knowledge Base so your AI agent can answer questions from them on calls.
## What are Knowledge Base documents?
Alongside property lists, the Knowledge Base holds **documents** — the reference material your agent needs that isn't a listing. Think office policies, storage or strata information, pricing sheets, rental application steps, onboarding guides, or a plain FAQ.
You upload a document once, add it to a knowledge list, and any agent attached to that list can answer callers' questions from it. When a caller asks something your document covers, your agent draws the answer straight from the document during the call.
***
## Uploading a document
1. In the Knowledge Base, open the **Documents** tab (below your knowledge lists).
2. Drag a file onto the upload area, or click **Add Document** to choose one.
3. Wait for processing to finish — the document shows a brief **Processing** state, then becomes ready to use.
Supported file types: **Markdown (`.md`)**, **plain text (`.txt`)**, **Word (`.docx`)**, and **PDF (`.pdf`)**.
Markdown is the best format for content you write yourself — FAQs, policies, process notes. Its headings and lists give your agent clean structure to answer from. Export or save your document as `.md` and upload it like any other file.
***
## Previewing a document
To check what you uploaded, click the document's row in the **Documents** tab to open its original contents in a preview inside Voqo — no download required.
* **PDF, plain text, and Markdown** open inline in the preview.
* **Word (`.docx`)** documents show an open-or-download option, since they don't render inline in the browser.
* The preview header shows the filename, an icon to open the document in a **new tab**, and a close button. **Delete** stays a separate action on the row, so previewing a document never risks removing it.
Documents you uploaded **before** in-app preview was introduced show an **unavailable** state — their original file wasn't kept. To enable preview for one of these, re-upload the file; the newly uploaded copy previews normally.
***
## Adding documents to a Document list
Documents reach your agent through a **Document list**. A knowledge list is one type or the other — a **Property list** holds property listings, a **Document list** holds documents — so you group your documents into their own list.
1. In the Knowledge Base, click **Create New List**.
2. Set **List Type** to **Document list**.
3. In the **Documents** section, select the documents you want to include.
4. Name the list and save it.
Any agent attached to that list will now use those documents on calls. To attach a list to an agent, open the agent's settings and add the list under its Knowledge — Document lists and Property lists both appear there.
A list's type is fixed once it's created. If you need to switch between properties and documents, create a new list of the other type.
***
## Keeping a document up to date
If the source content changes — new pricing, updated office hours, a revised policy — upload the corrected file and add it to the list in place of the old one. Your agent references the current version on its next call. Removing a document from a list stops your agent using it, without deleting the document itself, so you can re-add it later.
***
## Where documents appear
* **Documents tab** — every document in your workspace, with its processing state, lives here.
* **Inside a list** — the documents you've added to that specific list.
Uploading a document doesn't put it in front of an agent on its own — it becomes available to an agent only once it's added to a list that agent is attached to.
***
## Need help?
If a document isn't answering the way you expect, check that it finished **Processing**, that it's added to a list, and that the list is attached to the agent taking the call. Still stuck? Contact support and we'll take a look.
# Leased Listings
Source: https://docs.voqo.ai/tutorials/knowledge-base/leased-listings
Retain leased rentals in your Knowledge Base with weekly rent, lease term, and lease end dates — and give your AI agent accurate rental history to reference on calls.
## What are leased listings?
When a rental property you list on a connected CRM or portal is leased to a tenant, Voqo AI keeps it in your **Knowledge Base** as a leased listing. Previously, leased rentals were silently removed once the tenancy started. Now they stay — so your AI agent can answer "What's the rent on 12 King Street now that it's leased?" with real data, and you can search your leased history without leaving Voqo.
Leased listings are **opt-in per integration**. Tick **Leased listings** on your **realestate.com.au**, **Eagle MRI**, **AgentBox**, **VaultRE**, or **Domain** integration settings to enable them.
***
## The Leased badge
Leased listings display a **Leased** badge on the listing card, alongside the weekly rent (where available) and the lease start date. They appear in the **For Lease** archive tab in your Knowledge Base.
**Smart-list naming — `Lease Properties` vs `Leased Properties`** — these are different lists. **Lease Properties** is your current rental stock that is **available to lease right now**. **Leased Properties** is the archive of rentals that have **already been leased out** to a tenant. Pick the one that matches your use case.
***
## What appears on a leased listing — per integration
Different integrations expose different fields on leased rentals. Voqo shows you the deepest information your data source provides, and explicitly tells you when a field is unavailable rather than hiding the gap.
| Field | realestate.com.au | Eagle MRI | AgentBox | VaultRE | Domain |
| ----------------------- | ------------------------------------ | --------------------------- | -------- | ------- | --------------------------- |
| **Leased badge** | Yes | Yes | Yes | Yes | Yes |
| **Lease start date** | Listing modification date (fallback) | Yes | Yes | Yes | Yes |
| **Weekly rent** | Not provided | Yes | Yes | Yes | Yes |
| **Lease term (months)** | Not provided | Derived (weeks ÷ 4.345) | Yes | Yes | Derived (weeks ÷ 4.345) |
| **Lease end date** | Not provided | Derived (start + weeks × 7) | Yes | Yes | Derived (start + weeks × 7) |
If a field shows **"Not provided"** in the Knowledge Base, that means the source CRM or portal does not surface it in their feed — it is not a Voqo limitation. Your AI agent is told to phrase the leased listing without claiming a rent or end-date it doesn't actually know.
### Domain — derived lease end date caveat
Domain publishes the lease start date and weekly rent directly, plus a lease duration. Voqo derives the lease term in months and the lease end date from that duration (`start + duration`). As with Eagle MRI, the derived end date is accurate for **fresh leases** but will drift on **renewals** or **early termination** — Domain doesn't refresh the original duration when a tenancy changes. For ground-truth end dates after a renewal, check Domain directly. Your AI agent is prompted to phrase lease-end dates with appropriate caveats.
### Eagle MRI — derived lease end date caveat
Eagle MRI's API does not expose a direct lease end date. Voqo derives the end date from the original `letDate` plus `leasedDurationInWeeks × 7 days`. This is accurate for **fresh leases**, but will drift on **lease renewals** or **early termination** — Eagle doesn't update the original duration field when a tenancy is extended or cut short.
If you need ground-truth lease end dates after renewals or terminations, check Eagle directly. Your AI agent is prompted to phrase lease-end dates with appropriate caveats.
***
## Smart list behaviour with leased listings
Voqo's smart lists respond to leased state automatically.
**State-based lists** (Lease Properties, Under Offer Properties) **automatically drop a rental** when it becomes leased. Lease Properties shows your current rental inventory, so a leased property no longer belongs there.
**State-agnostic lists** (Houses, Apartments, Family Homes) **keep leased listings**. A leased apartment is still an apartment — these lists describe property attributes, not market status.
**Manual lists** (lists you build yourself) keep whatever you place in them. If you manually add a leased listing to a list, it stays there until you remove it or opt out of leased listings collection.
***
## The Leased Properties smart list template
Use the **Leased Properties** Quick Create template to build a list that automatically updates as new tenancies complete.
1. In the Knowledge Base, click **Create List**.
2. Under **Status**, select **Leased Properties**.
3. Give the list a name (for example, "Recent Bondi Rentals Leased").
4. Optionally apply sub-filters: listing agent or date range.
5. Save the list.
The list will include every leased rental in your workspace — across every connected integration where leased listings are enabled — and stay current without manual maintenance.
***
## Attaching leased listings to your AI agent
Attach a Leased Properties list to your AI agent so it can answer questions like *"What rentals have you leased recently in this suburb?"* or *"What's the rent on 12 King Street now that it's leased?"* with real data.
1. Open your **Agent Settings**.
2. Go to the knowledge list attachment section.
3. Add your Leased Properties list.
4. Save.
Your agent will now reference your leased rentals on calls, including weekly rent and (where available) lease term and end date.
***
## Visibility controls — hiding rent
If your agency needs to keep certain rents off-script (for example, confidential corporate lets), you can hide the rent from your AI agent per list without removing the listing itself.
1. Open the list in your Knowledge Base.
2. Click the **Visibility** settings for the list.
3. Toggle off **Weekly rent**.
The listing stays in the list and appears in the AI agent's context — but the rent is omitted from what the agent can quote.
***
## Enabling leased listings on each integration
Leased listings are **opt-in per integration**. To enable them on a connected integration:
1. Go to **Integrations** in the sidebar.
2. Click the integration card (or the **⋮** menu on the card).
3. Open **Settings**.
4. Tick **Leased listings**.
5. Click **Save**.
The next scheduled sync (or a manual resync) will pull your leased listings.
If you turn the toggle **off**, Voqo removes the leased listings synced from that integration from your workspace. Because this removes records, you'll see a **confirmation dialog** first — it tells you exactly how many listings will be removed and which manually managed lists they sit in before anything is deleted. **Nothing is lost permanently**: you can restore those listings any time by re-enabling the scope and running a sync.
### Choosing how far back to keep leased listings
When you enable **Leased listings** (or **Sold & off-market listings**) on **Domain**, **realestate.com.au**, or **VaultRE**, a **Historical listing window** selector appears in that integration's settings. It sets how far back Voqo keeps leased, sold, and off-market listings — **Last 1, 3, 6, 12 (default), or 24 months**, by the date each listing was last updated. Older leased listings roll off automatically once they fall outside the window; widening the window and running a sync brings them back. Your live rental stock is never affected.
For per-integration timing and behaviour:
* [realestate.com.au setup](../integrations/rea-setup)
* [AgentBox setup](../integrations/agentbox-setup)
* [Domain setup](../integrations/domain-setup)
***
## Troubleshooting
**I enabled leased listings but I don't see any in the For Lease archive.**
Leased listings appear after the next sync runs. If you just enabled the setting, click **Sync now** on the integration card or wait for the next scheduled sync.
**A leased listing shows no weekly rent.**
The source CRM or portal does not expose the rent on a leased rental. This is expected for **realestate.com.au** leased rentals. CRMs (Eagle MRI, AgentBox, VaultRE) publish the rent — if you need it, connect a CRM alongside REA.
**A leased listing's end date looks wrong after a renewal.**
If the listing is from **Eagle MRI**, the end date is derived from the original lease duration at the time the lease was created. Eagle doesn't refresh this when a tenancy is renewed or terminated early. Check Eagle directly for the ground-truth date. AgentBox and VaultRE publish the live lease end date and don't have this drift.
**A leased listing disappeared from my Lease Properties list.**
This is expected. Lease Properties shows your current rental inventory, so when a property is leased it drops out automatically. You can find it in the For Lease archive (with the Leased badge), or add it to a manual list if you want it in a specific place.
***
## Related docs
* [Sold Listings](sold-listings)
* [Pre-Market Listings](pre-market-listings)
* [realestate.com.au Setup](../integrations/rea-setup)
* [AgentBox Setup](../integrations/agentbox-setup)
* [Domain Setup](../integrations/domain-setup)
* [Knowledge Base Lists and Sources](../integrations/knowledge-base-integrations)
# Pre-Market Listings
Source: https://docs.voqo.ai/tutorials/knowledge-base/pre-market-listings
Bring appraisal-stage listings — properties you're pitching but haven't formally listed — into the Knowledge Base so your AI agent can speak to your full pipeline.
## What are pre-market listings?
A **pre-market listing** is a property you're working on but haven't formally listed yet. Different CRMs use different names for this stage:
* **AgentBox** — Appraisal, Listing Presentation, Missed Appraisal, Pending
* **Eagle MRI** — Draft
* **VaultRE** — Prospect, Appraisal
These are the listings sitting in your pipeline before a listing authority is signed. Pre-market listings are useful when you want your AI agent to be aware of properties you're pitching — so it can mention them in the right context on calls, or so future AgentOS playbooks can act on the pre-listing cohort.
Pre-market listings are **opt-in per integration** and **default off**, because they're typically high-volume and high-churn (most appraisals don't convert to listings). You enable them on your **Eagle MRI**, **AgentBox**, or **VaultRE** integration settings.
**Pre-market listings come from CRMs only.** Portals (Domain, realestate.com.au) don't surface pre-market data — they only publish listings that have gone live. If you want pre-market context in Voqo, you need a CRM integration connected.
***
## The Pre-Market badge and tab
Pre-market listings appear in a dedicated **Pre-Market** tab in your Knowledge Base, with a **Pre-Market** badge on each listing card.
The Pre-Market tab is parallel to the existing Sold and Off-Market tabs:
* **All** — every listing in your Knowledge Base
* **For Sale** — active sale stock
* **For Lease** — active rental stock
* **Sold** — completed sales
* **Off-Market** — withdrawn or archived listings
* **Pre-Market** — appraisal-stage listings (when you have at least one integration with the scope enabled)
The Pre-Market tab only appears when at least one of your integrations has pre-market scope enabled.
***
## Why default off?
Pre-market listings are common, change frequently, and often don't convert to live listings. Most agents don't want them cluttering their Knowledge Base by default — so they're explicitly opt-in.
Turn them on if:
* You actively want your AI agent to talk about properties you're pitching
* You're planning to use AgentOS playbooks that act on the pre-listing pipeline
* You want a cleaner view of your full property pipeline (live + pre-market) inside Voqo
Leave them off if:
* You only want your AI agent to talk about properties you've formally listed
* Your pre-listing pipeline is high-volume and high-churn (typical for AgentBox tenants)
* You want to keep the Knowledge Base focused on live + recently-sold inventory
***
## Hide pre-market from your Knowledge Base view (without un-syncing)
If you want the data ingested (so future AgentOS playbooks have access to it) but you don't want to see pre-market cards in your day-to-day Knowledge Base view, use the per-integration **Hide pre-market from KB** toggle.
1. Go to **Integrations** in the sidebar.
2. Click the **⋮** menu on the integration card.
3. Toggle **Hide pre-market from KB**.
When hidden:
* The Pre-Market tab still shows a count, so you know how much is ingested
* Pre-market cards are suppressed from the tab view
* Pre-market listings are still pulled into Voqo and available to future playbooks
* Toggling visible/hidden does **not** trigger a re-sync — it's a view-only setting and takes effect immediately
This is a per-browser setting — it's about how you personally view the Knowledge Base, not a workspace-wide config. Different users in your workspace can have different visibility preferences.
***
## What appears on a pre-market listing — per integration
Pre-market listings carry whatever fields the source CRM publishes at the appraisal stage. This is typically less than a live listing — addresses and vendor contacts may be present, but pricing guidance and marketing photos often aren't.
| Source | Pre-market stages | Typical fields |
| ------------- | ---------------------------------------------------------- | ----------------------------------------------- |
| **AgentBox** | Appraisal, Listing Presentation, Missed Appraisal, Pending | Address, vendor contacts, listing agent, status |
| **Eagle MRI** | Draft | Address, vendor contacts, listing agent, status |
| **VaultRE** | Prospect, Appraisal | Address, vendor contacts, listing agent, status |
Your AI agent is told these are pre-market — it phrases them accordingly ("I'm pitching this property at 14 Clarence Street — we haven't formally listed it yet…").
***
## Stale pre-market clean-up
Pre-market listings that haven't moved in 90+ days surface in your **Sync History** with a clean-up prompt:
> *"12 pre-market listings haven't moved in 90+ days — review in your CRM."*
Voqo doesn't auto-delete pre-market listings. Clean-up happens in your CRM (mark them lost, archive them, or convert them to a live listing) and Voqo will reflect the change at the next sync.
***
## Smart lists for pre-market listings
Use the **Pre-Market Properties** Quick Create template to build a list of appraisal-stage listings across every connected CRM. Attach it to an AI agent if you want the agent to be aware of your full pre-listing pipeline.
In **Quick Create**:
1. In the Knowledge Base, click **Create List**.
2. Under **Status**, select **Pre-Market Properties**.
3. Save the list and (optionally) attach it to your AI agent.
The list refreshes automatically as listings move through pre-market stages in your CRM.
***
## Enabling pre-market listings on each integration
Pre-market listings are **opt-in per CRM**. To enable them:
1. Go to **Integrations** in the sidebar.
2. Click the CRM integration card (or the **⋮** menu).
3. Open **Settings**.
4. Tick **Pre-Market listings**.
5. Click **Save**.
The next scheduled sync (or a manual resync) will pull your pre-market listings.
**VaultRE rate-limit caveat for high-volume tenants.** VaultRE's API quota is shared across all Voqo customers. If you run a high-volume agency with hundreds of active appraisals, enabling pre-market scope on VaultRE adds substantial daily quota usage. Leave it off unless you're actively using the pre-market data. If you hit quota issues, contact support.
If you turn the toggle **off**, Voqo will remove all pre-market KB items synced from that integration from your workspace. If any of those items were added to a manual list, you will see a confirmation prompt before anything is deleted.
For per-integration setup:
* [AgentBox setup](../integrations/agentbox-setup)
***
## Troubleshooting
**I enabled pre-market listings but I don't see the Pre-Market tab.**
The Pre-Market tab only appears when at least one integration has pre-market scope enabled **and** at least one pre-market listing has been ingested. Run **Sync now** on the integration card; if no pre-market listings exist in your CRM at the moment, the tab won't appear until at least one shows up.
**I enabled the scope but pre-market listings still aren't appearing.**
Check **Sync History** at the top of the Integrations page for the latest sync on this integration. If the job completed and you have appraisal-stage listings in your CRM, contact support with your workspace ID and the integration name.
**I want pre-market data ingested but I don't want to see it in my KB.**
Use the per-integration **Hide pre-market from KB** toggle on the integration card's **⋮** menu. The Pre-Market tab will still show a count, but the cards are suppressed from your view. The data remains ingested for future AgentOS playbooks.
**A listing I expected to see isn't there.**
Check the listing's status in your CRM. Voqo only treats specific stages as pre-market (Appraisal, Draft, Prospect, etc.); if the listing is in a status outside those, it won't appear in the Pre-Market tab.
***
## Related docs
* [Sold Listings](sold-listings)
* [Leased Listings](leased-listings)
* [AgentBox Setup](../integrations/agentbox-setup)
* [Knowledge Base Lists and Sources](../integrations/knowledge-base-integrations)
# Sold Listings
Source: https://docs.voqo.ai/tutorials/knowledge-base/sold-listings
Browse, filter, and share your recent sales in the Knowledge Base — and give your AI agent accurate sold data to reference on calls.
## What are sold listings?
When a property you list on a connected portal or CRM settles, Voqo AI keeps it in your **Knowledge Base** as a sold listing. Previously, settled properties were silently removed. Now they stay — so your AI agent can speak to your recent sales, and you can search your sold history without leaving Voqo.
Sold listings are **opt-in per integration**. You enable them on your **Domain**, **realestate.com.au**, **Eagle MRI**, **AgentBox**, or **VaultRE** integration settings.
***
## The Sold tab
Your Knowledge Base has five tabs at the top: **All**, **For Sale**, **For Lease**, **Sold**, and **Off-Market**.
* Click the **Sold** tab to see only settled properties.
* All other filters (search, property type, bedrooms, and so on) still apply within the tab.
* The **Under Offer** chip is separate — it works across all tabs.
When you have no sold listings yet, the tab shows: *"No sold listings yet. Sold listings will appear here as your integrations sync."*
***
## What appears on a sold listing — per integration
Different integrations expose different sold-listing fields. Voqo always shows you the deepest information your data source provides, and explicitly tells you when a field is unavailable rather than hiding the gap.
| Field | Domain | realestate.com.au | Eagle MRI | AgentBox | VaultRE |
| ------------------------------------------------ | ------ | ----------------- | -------------- | -------- | ------- |
| **Sold price** | Yes | Yes | Yes | Yes | Yes |
| **Sold date** | Yes | Yes | Yes | Yes | Yes |
| **Sale method** (Auction, Private Treaty, etc.) | Yes | Not provided | Not provided | Yes | Yes |
| **Settled price** (post-settlement, from titles) | Yes | No | No | No | No |
| **Price-display flag** (vendor confidentiality) | Yes | Always display | Always display | Yes | Yes |
If a field shows **"Not provided"** in the Knowledge Base, that means the source CRM or portal does not surface it in their feed — it is not a Voqo limitation. Your AI agent is told to phrase the sold listing as "sold for \$X on date Y" without claiming a method when the method is not available.
For per-integration detail, see:
* [Domain integration settings](../integrations/domain-com-au)
* [realestate.com.au setup](../integrations/rea-setup)
* [AgentBox setup](../integrations/agentbox-setup)
***
## Off-Market listings
When an integration marks a listing as off-market or archived — rather than sold — Voqo retains it in your Knowledge Base with an **Off-Market** badge instead of removing it silently.
Click the **Off-Market** tab to see all off-market properties in your workspace. Off-market listings do not appear in the **For Sale** or **For Lease** tabs, and they are excluded from state-based smart lists so your active-inventory lists stay clean.
When a listing returns to market or sells, it moves back to the correct tab automatically at the next sync or webhook event.
***
## Filtering by date
The **date range filter** next to the search bar lets you narrow sold listings by **sold date** — the date the sale was agreed (contracts exchanged), not the date Voqo first synced it.
Use the **Quick Create** dropdown to select a pre-set rolling window — **Last 30 days**, **Last 90 days**, **Last 12 months**, or a custom range. The window is recalculated each time the list evaluates, so a property sold today counts on day one and drops out automatically once it passes the cutoff.
For example, selecting **Last 30 days** shows every property whose contracts exchanged in today's calendar day plus the 29 prior calendar days — exactly 30 days, inclusive at both ends.
Date filtering applies to the sale date recorded on the source portal or CRM, so the figures match what your vendor and conveyancer see.
***
## The Sold badge
Sold listings display a red **Sold** badge on the listing card, alongside the sold date and, where available, the sale method (Auction, Private Treaty, and so on).
***
## Sold price display
Sold price appears in three ways, depending on the vendor's instructions and settlement status:
| What you see | What it means |
| ---------------------------- | -------------------------------------------------------------------- |
| **\$2,400,000** | The agreed sale price, cleared for display |
| **Price undisclosed** | The vendor has instructed the source portal not to publish the price |
| **Price pending settlement** | The sale is recorded but the price has not yet been registered |
### Settled price (Domain only today)
Once a property has fully settled, a verified figure is registered at the land titles office. This appears as **(settled: \$2,400,000)** beneath the sold price when available — currently only for Domain listings.
Settlement registration typically takes **30–90 days** after the sold date. The settled price only appears once that verified figure is received from Domain — it is not Voqo's estimate.
***
## Smart list behaviour with sold listings
Voqo's smart lists respond to sold state automatically.
**State-based lists** (Sale Properties, Lease Properties, Under Offer Properties) **automatically drop a listing** when it sells. These lists are designed to show your current inventory, so a settled property no longer belongs there.
**State-agnostic lists** (Houses, Apartments, Family Homes) **keep sold listings**. A sold house is still a house — these lists describe property attributes, not market status.
**Manual lists** (lists you build yourself) keep whatever you place in them. If you manually add a sold listing to a list, it stays there until you remove it or opt out of sold listings collection.
***
## The Sold Properties smart list template
Use the **Sold Properties** Quick Create template to build a list that automatically updates as new sales come in.
1. In the Knowledge Base, click **Create List**.
2. Under **Status**, select **Sold Properties**.
3. Give the list a name (for example, "Recent Surry Hills Sales").
4. Optionally apply sub-filters: listing agent or date range.
5. Save the list.
The list will include every sold listing in your workspace — across every connected integration where sold listings are enabled — and stay current without manual maintenance.
### Recently sold lists
To limit a Sold Properties list to recent activity, select a rolling window in the **Date range** dropdown when creating or editing the list:
| Option | What it covers |
| ------------------ | ----------------------------------- |
| **Last 30 days** | Today + 29 prior calendar days |
| **Last 90 days** | Today + 89 prior calendar days |
| **Last 12 months** | Today + 364 prior calendar days |
| **Custom range** | Specific from / to dates you choose |
The window is re-evaluated every time the list syncs, so it always reflects the most recent sales without any manual upkeep. A property that settled 31 days ago will drop off a **Last 30 days** list automatically.
***
## The Upcoming Auctions smart list template
Use the **Upcoming Auctions** Quick Create template to build a list of properties going to auction in the next 14 days, across every connected integration.
1. In the Knowledge Base, click **Create List**.
2. Under **Status**, select **Upcoming Auctions**.
3. Save the list and attach it to your AI agent so it can prepare for auction-week calls.
The list refreshes automatically — properties roll off once the auction date passes, and new auction listings appear as your integrations sync them.
***
## Attaching sold listings to your AI agent
Attach a Sold Properties list to your AI agent so it can answer questions like *"What have you sold lately?"* with real data.
1. Open your **Agent Settings**.
2. Go to the knowledge list attachment section.
3. Add your Sold Properties list.
4. Save.
Your agent will now reference your recent sales on calls, including sold price, sold date, and (where available) sale method.
When your agent reads an off-market listing from an attached list, it prefixes the listing with **"OFF-MARKET —"** so callers understand the property is not actively available. For example: *"OFF-MARKET — 14 Clarence Street, Sydney."*
***
## The Sold Listings War Room event
When a listing flips to sold, Voqo fires a **`LISTING_SOLD`** War Room event — used by AgentOS playbooks to trigger downstream workflows (post-sale outreach, neighbour-prospecting loops, and so on).
This event now fires for **every connected integration** that flips a listing to sold — not only Domain. The event payload shape is unchanged from earlier releases, so existing AgentOS playbooks continue to work without any migration.
### No event spam on first connect
When you connect a new CRM with historical sold listings, Voqo silently ingests the back-catalogue **without** firing `LISTING_SOLD` for each historical sale. The first complete sync of an integration suppresses the event entirely so AgentOS isn't flooded with stale sales the moment you connect. Going forward, every fresh `* → sold` flip fires the event normally.
***
## Visibility controls — hiding sold price
If your agency needs to keep certain sold prices off-script (for example, vendor confidentiality arrangements), you can hide the sold price from your AI agent per list without removing the listing itself.
1. Open the list in your Knowledge Base.
2. Click the **Visibility** settings for the list.
3. Toggle off **Sold price**.
The listing stays in the list and appears in the AI agent's context — but the price is omitted from what the agent can quote.
You can independently control visibility for:
* **Sold price** — on by default
* **Sale method** — on by default
* **Sold date** — on by default
* **Settled price** — off by default (opt in deliberately, as state-level display rules may apply)
***
## Enabling sold listings on each integration
Sold listings are **opt-in per integration**. To enable them on a connected integration:
1. Go to **Integrations** in the sidebar.
2. Click the integration card (or the **⋮** menu on the card).
3. Open **Settings**.
4. Tick **Sold & off-market listings**.
5. Click **Save**.
The next scheduled sync (or a manual resync) will pull your sold listings.
If you turn the toggle **off**, Voqo removes the sold listings synced from that integration from your workspace. Because this removes records, you'll see a **confirmation dialog** first — it tells you exactly how many listings will be removed and which manually managed lists they sit in before anything is deleted. **Nothing is lost permanently**: you can restore those listings any time by re-enabling the scope and running a sync.
### Choosing how far back to keep sold listings
When you enable **Sold & off-market listings** (or **Leased listings**) on **Domain**, **realestate.com.au**, or **VaultRE**, a **Historical listing window** selector appears in that integration's settings. It sets how far back Voqo keeps sold, leased, and off-market listings — **Last 1, 3, 6, 12 (default), or 24 months**, by the date each listing was last updated.
Older terminal listings roll off automatically once they fall outside the window; widening the window and running a sync brings them back. Your live listings are never affected. See each integration's setup page for the exact control.
For per-integration timing and behaviour:
* [Domain integration settings](../integrations/domain-com-au)
* [realestate.com.au setup](../integrations/rea-setup)
* [AgentBox setup](../integrations/agentbox-setup)
***
## Troubleshooting
**I enabled sold listings but I don't see any sold listings in the Sold tab.**
Sold listings appear after the next sync runs. If you just enabled the setting, click **Resync** on the integration card or wait for the next scheduled sync. Your integration's specific cadence (twice daily, every few hours, etc.) is listed on its setup page.
**A sold listing shows "Price undisclosed".**
The vendor has asked the source portal not to publish the sale price. Voqo honours this instruction and will not display or quote the price, regardless of your list's visibility settings.
**A sold listing shows "Price pending settlement".**
The property has settled, but the verified price has not yet been registered at the land titles office. This typically resolves within 30–90 days of settlement. Currently this lifecycle is reflected for Domain only — other integrations show the sold price directly.
**A sold listing shows "Sale method: Not provided".**
The source CRM or portal does not expose the sale method in its feed. This is expected for **realestate.com.au** and **Eagle MRI** sold listings — the price and date are accurate, but the method (Auction, Private Treaty, etc.) is not available.
**A sold listing disappeared from my Sale Properties list.**
This is expected. Sale Properties shows your current inventory, so when a listing sells it drops out automatically. You can find it in the Sold tab, or add it to a manual list if you want it in a specific place.
**A listing disappeared from my For Sale list but I can't find it in the Sold tab.**
Check the **Off-Market** tab. The source portal or CRM may have marked the listing as off-market or archived rather than sold. Off-market listings do not appear in the Sold tab — they have their own tab and badge.
**Some of my older sold listings vanished, but I didn't change anything.**
They likely fell outside the **Historical listing window** set on that integration. Open the integration's settings, choose a longer window (up to **Last 24 months**), and run a sync to bring them back.
**Where did all my sold listings go after I turned the scope off?**
Turning off **Sold & off-market listings** removes those listings on purpose. Nothing is lost permanently — re-enable the scope in the integration's settings and run a sync to restore them.
**My Recently Sold list seems to be missing a sale from exactly 30 days ago.**
The **Last 30 days** window covers today plus the 29 prior calendar days. A property settled 30 full calendar days ago falls outside the window. If you need to capture it, switch to **Last 90 days** or a custom range. If you think this looks wrong, contact support with your workspace ID and the listing address.
***
## Related docs
* [Leased Listings](leased-listings)
* [Pre-Market Listings](pre-market-listings)
* [Domain Integration Settings](../integrations/domain-com-au)
* [realestate.com.au Setup](../integrations/rea-setup)
* [AgentBox Setup](../integrations/agentbox-setup)
* [Knowledge Base Lists and Sources](../integrations/knowledge-base-integrations)
# Synced Lists
Source: https://docs.voqo.ai/tutorials/knowledge-base/synced-lists
Build auto-updating property lists in the Knowledge Base — filter by listing agent, integration source, and listing status, so your AI agent references exactly the right inventory.
## What is a synced list?
A **synced list** is a property list that keeps itself up to date. You choose what belongs in it once — for example "our sold listings" or "Lauren's current sales" — and Voqo AI re-checks the list every time your integrations sync. New matching properties are added, properties that no longer match drop out, and your AI agent always references the current set on calls.
You build one from the Knowledge Base using **Quick Create**.
***
## Creating a synced list with Quick Create
1. In the Knowledge Base, open **Quick Create**.
2. Pick a starting template — by **status** (For Sale, For Lease, Sold, Under Offer), by **property type** (Houses, Apartments & Units), by **feature** (Family Homes), or by **integration source** (realestate.com.au, Domain, VaultRE, AgentBox, Eagle MRI, or Manual).
3. Optionally narrow it further (see below).
4. Name the list and click **Create List**.
The match count shown as you build tells you exactly how many properties the list will contain before you create it.
***
## Filter by listing agent
Any property list can be narrowed to a single listing agent. Click **Filter by Agent** when creating the list and choose the agent — the list will then contain only that agent's properties, and stay in sync as their listings change.
Listing-agent filtering now works for **every connected source**, including realestate.com.au. Previously, agents on realestate.com.au listings could be missing from the agent picker; they now appear for all integrations, so you can build clean per-agent lists no matter where the listing came from.
***
## Combine an integration source with a listing status
When you sync more than one portal or CRM, the same property can appear twice — once from each source — which can clutter a list. To build a clean, single-source list, you can combine an **integration source** with a **listing status** in Quick Create.
For example:
* **realestate.com.au + For Sale** — only your current sales from realestate.com.au.
* **Domain + For Lease** — only your rental stock from Domain.
* **realestate.com.au + Sold** — only your settled sales from realestate.com.au.
You set each as a single choice, and they apply together. To keep things clear, Voqo only offers the narrowing options that add something: if you start from an integration template, you'll be offered a status to narrow by (and vice versa).
Combining a source with a status keeps a list focused on one source, but it does not remove duplicate properties across sources — the same property can still exist twice in your Knowledge Base, once per integration. Building single-source lists is the cleanest way to avoid mixing duplicates today.
***
## When does a synced list update?
A synced list re-checks its membership automatically every time the relevant integration syncs. You don't need to rebuild it — newly matching properties are added and stale ones drop out on their own. Your AI agent always speaks to the current contents.
***
## Need help?
If a list isn't picking up the properties you expect, check that the integration is connected and has finished an initial sync, and that the status you've chosen matches how the property is marked (a sold property won't appear in a "For Sale" list). Still stuck? Contact support and we'll take a look.
# Purchase and Manage Numbers
Source: https://docs.voqo.ai/tutorials/numbers/overview-numbers
Purchase and manage voice numbers for calling, and request an SMS sender number for campaigns, inbox replies, and inbound SMS conversations.
## Audience
* Workspace admins responsible for telephony setup
* Operators validating routing, forwarding, and SMS sender readiness
## Prerequisites
* You have admin-level access in the target workspace.
* Your workspace has an active plan that supports number purchase and SMS number requests.
* You know whether you need an extra voice number or an SMS sender number.
## Steps
### 1) Choose the number type you need
1. Open [platform.voqo.ai/numbers](https://platform.voqo.ai/numbers).
2. Select **Add Number**.
3. Choose **Voice number** or **SMS number**.
Use **Voice number** when you need a calling number for an agent. This keeps the existing Twilio purchase flow, including agent assignment, number category, and country.
Use **SMS number** when you need a dedicated sender for SMS campaigns, inbox replies, and inbound SMS conversations. This uses a Vonage number and is fulfilled on request after provider approval.
### 2) Add the number
For a **Voice number**:
1. Choose the agent, number category, and country.
2. Confirm purchase and save.
For an **SMS number**:
1. Enter a **number name** so your team can recognise it later.
2. Enter the **forward phone number** that should receive callback calls.
3. Submit the request.
After you submit the request, the Voqo team will contact you and help complete the setup. Your SMS number appears in the Numbers list only after it has been approved and attached to your workspace.
Expected in-product signal:
* Voice numbers appear in your numbers list with active status straight away.
* SMS numbers appear only after Voqo has completed the approval and setup process.
### 3) Configure the number
For a **Voice number**:
1. Open the purchased number details.
2. Assign the number to the target agent, or keep it unassigned temporarily.
3. Save any routing or label updates.
For an **SMS number**:
1. Open the number details.
2. Review the forwarding number and update it if needed.
3. Save the label or forwarding changes.
Expected in-product signal:
* Number shows correct assignment and configuration values.
* SMS numbers show the forwarding number in the details panel.
### 4) Verify it works
For a **Voice number**:
1. Place a test call to the configured number.
2. Confirm the target agent handles the call path.
3. Check [Call Logs](../call-logs/overview-call-logs) for the completed outcome.
For an **SMS number**:
1. Use the number in a new SMS campaign or send a reply from the inbox.
2. Confirm recipients see the SMS number as the sender.
3. If someone calls the SMS number back, confirm the call is forwarded to the configured phone number.
Expected in-product signal:
* The voice test call or SMS sender behaviour matches what you configured.
## Known constraints
* Availability and pricing can vary by country and provider inventory.
* Some operations require workspace admin/owner role.
* Your workspace can have **one active SMS number** at a time.
* The SMS number is an add-on request and is separate from the default onboarding voice number.
## Troubleshooting
### Cannot purchase number
* Confirm plan and billing status are active.
* Retry with another available number option.
* If inventory is unavailable, try again later or another region.
### SMS number request submitted but not active yet
* SMS numbers require manual approval and setup before they can be attached to your workspace.
* Watch for follow-up from the Voqo team if more information is needed.
* Contact support if you need an update on the request status.
### Why can't I buy a second SMS number?
Each workspace can have one active SMS number. Delete the current SMS number first if you need to replace it.
### Number purchased but call routing fails
* Confirm number is assigned to the intended agent.
* Confirm agent is enabled and phone connection setup is complete.
* Re-run a test call after saving configuration.
### SMS number isn't forwarding callbacks
* Confirm the forwarding number is entered correctly in the SMS number settings.
* Save the number again after updating the forwarding number.
* Test by calling the SMS number from another phone.
### Test call worked once but not consistently
* Check signal/network quality and agent availability.
* Verify no conflicting forwarding/routing setup is active.
If unresolved, contact support with your workspace ID, number ID, and the time of the test.
## Related docs
* [Connect Agent to Your Phone](../connect-agent/connect-agent-overview)
* [Set Up Agent and Verify First Call](../getting-started/setup-agent)
* [Review Call Logs](../call-logs/overview-call-logs)
# Post-Call Email Summary
Source: https://docs.voqo.ai/tutorials/post-call/post-call-email-summary
Send Email Summary is a post-call action that automatically sends an email containing a summary of the call, the full transcript, and a link to the call recording. This feature can be added to the post-call workflow per agent and ensures key stakeholders are kept informed after every interaction.
## Key Benefits
* Provides visibility into call outcomes for stakeholders
* Reduces the need for real-time supervision
* Enhances compliance and recordkeeping
## How It Works
When a call ends, the platform processes any configured post-call actions. If "Send Email Summary" is enabled:
* An email is dispatched to the destination email address.
* The email includes:
* Summary of the call
* Full call transcript
* Link to call recording (if enabled)
* Requires a valid email address and uses the platform’s outbound messaging infrastructure.
## Getting Started
1. Navigate to **Agent Settings**.
2. Scroll to **Post-call Actions**.
3. Click the **+** icon and select **Email Summary**.
4. Enter the desired email address.
5. Click **Add** to save the configuration.
## Use Cases
* Business managers monitoring team performance
* Teams operating asynchronously across time zones
* Supervisors needing to audit calls without logging into the platform
## API Reference
*This feature does not yet expose an API interface.*
## Troubleshooting
* **Not receiving emails?** Check your spam folder and mark messages from Voqo AI as safe.
* **Invalid email errors?** Ensure the destination is a properly formatted email address.
# Configure Post-Call Messaging
Source: https://docs.voqo.ai/tutorials/post-call/post-call-messaging
Choose how you receive conversation summaries of every call your agent picks up.
The **Post-Call Actions** feature allows you to receive a summary of every call your AI agent picks up, delivered via SMS, Email, Webhook, or all three.
Enabling both SMS and Email notifications will result in **higher credit usage**.
A maximum of **10 post-call actions** can be configured per call.
### Quick Overview
**Cost:** 5 credits / segment\
**Call Information:**
* Caller ID
* Contact name
* Call summary
**Cost:** 20 credits\
**Call Information:**
* Caller ID
* Contact name
* Call summary
* Caller phone type
* Call duration
* Call transcript
* Call recording url
**Cost:** Free\
**Call Information:**
* Caller ID
* Contact name
* Call summary
* Caller phone type
* Call duration
* Call transcript
* Call recording url
* Call status
* Call start time
* Call end time
* Post call actions results
* Call conversation timestamps
**Cost:** 5 credits / segment (only for custom messages)\
**Call Information (FREE Tier):**
* Your Caller ID
* Call summary
* Voqo's end call growth loop (based on caller's response)
* Voqo AI's branding
**Call Information (PAID Tier):**
* Your custom message (if configured)
* Otherwise, same as Free Tier
### SMS
When enabled, you will receive a **text message** containing key details about each call. The SMS includes:
* The **Caller ID** (phone number of the caller).
* The **Contact Name**, if the number is saved.
* A **conversation summary**, which provides a quick overview of the call.
SMS notifications are a great way to get instant updates without checking your email. However, since SMS messages have limited space, details like transcripts and call recordings are only available via email.
Every SMS costs **5 credits per segment**. A standard message fits in a single segment, but longer messages are split into multiple segments and cost 5 credits for each one. Credits are billed per *counted* segment, and messages containing special characters (emoji and some symbols) can split into more segments and therefore cost more — the counted segment is Voqo's billing unit and can differ slightly from a carrier's own split.
### Email
Choosing email notifications provides **everything in SMS**, plus:
* The **phone type** (mobile, landline, or VoIP).
* The **call duration**, showing how long the conversation lasted.
* A **full transcript** of the call for complete context.
* A **recording URL** allowing you to listen to the entire conversation.
Call recordings are saved for up to 6 months. Contact support if you need to remove a recording sooner.
Emails offer a more comprehensive record of your conversations, making them ideal for documentation and review purposes.
### Webhook
Configuring webhook post call messages provides **all call information**, which is **everything in email**, plus:
* The **status of the call**, whether it was "completed", "failed", or another outcome.
* The **call start and end times**, indicating exactly when the conversation began and concluded.
* The **results of post-call actions**, showing the outcomes of the other configured post call actions, if any.
* The **timestamps for key conversation events**, detailing when significant moments occurred during the call.
Webhook notifications deliver a complete JSON payload to your specified endpoint once a call ends. Unlike SMS or Email—which provide formatted text summaries—webhooks offer the raw, structured call data for full integration into your systems, which is perfect if you need:
* **Real-Time Data Integration:** Instantly process call data in your internal systems, dashboards, or third-party applications.
* **Automation:** Trigger custom workflows or alerts based on specific call events.
* **Comprehensive Logging:** Store detailed call records for further analysis without manual intervention.
A **Webhook Secret** must be configured if you wish to verify the webhook signature. This can be done in **Settings → Workspace → Developer Tools** on the Developer Tools tab.
View the Webhook Integration Guide page.
View API integration details for public recordings and replies: Public Recording and SMS Replies API.
### SMS to Caller
The **SMS to Caller** feature allows your agent to automatically send a follow-up SMS to the person who chatted with your AI agent, after every call.
#### How it works:
* **Free Tier:**
* The message is always Voqo-branded and cannot be customized.
* The SMS includes:
* Your number the caller rang
* A summary of the call
* Voqo's end call growth loop (if the caller expresses interest)
* Voqo AI's branding and signup link
* **Cost:** Free (no credits charged)
* **Paid Tier:**
* You can fully customize the message sent to your callers, utilising the allowed template variables (`call_summary`, `your_number`, `agent_number` and `agent_name`).
* If you leave the message field empty, the default Voqo-branded message is used (same as Free Tier, and still free).
* If you enter a custom message, your message is sent **exactly as written** (template variables will be dynamically filled, but no Voqo branding or growth loop appended), and you are charged **5 credits per segment**.
* **Cost:** 5 credits per segment for custom messages; free if using the default.
#### Growth Loop Logic
* The Voqo-branded message (default) includes a smart growth loop:
* If the caller expresses interest in learning more about the AI agent, the SMS will include a line inviting them to sign up for Voqo AI.
* This is detected automatically by analyzing the call transcript.
* If you use a custom message, **the growth loop and branding are not appended**—your message is sent as-is.
#### Non-Interactive Calls
* If the call transcript does **not** contain any human input (i.e., the agent only spoke to voicemail or silence), **no SMS to caller is sent** and no credits are charged.
#### Why use SMS to Caller?
* **Drive more signups:** The viral loop in the default message helps spread awareness of your business and Voqo AI.
* **Professional follow-up:** Paid users can send branded, personalized follow-ups to every caller.
* **No surprises:** You only pay for custom messages; the default is always free.
You can enable or disable the SMS to Caller action for each agent, and configure the message and End Call Growth Loop settings in your agent's dashboard.
# Configure Profile Enrichment
Source: https://docs.voqo.ai/tutorials/post-call/post-call-profile-enrichment
Automatically capture structured buyer, seller, investor and tenant details from every engaged call.
Profile Enrichment turns your agent's call transcripts into structured customer profiles attached to each contact. When a caller discusses buying a property, selling, investing, or renting, the relevant details are extracted from the conversation and saved to the contact — no manual note-taking required.
Profiles grow over time: every engaged call enriches whatever's already on file, and previously captured details are never overwritten with "unknown".
Profile Enrichment uses LLM credits on each engaged call it processes. Disable profile types or fields you don't need to keep usage predictable.
### Who this is for
Agencies handling inbound or outbound calls at scale who want to capture what each contact is actually looking for without manual data entry after every call.
### Quick Overview
Captures finance readiness, purchase timeframe, search activity level, property type preference, buyer journey stage and more.
Captures selling timeframe, selling motivation, price expectation alignment, property condition, current agent engagement and more.
Captures investment ownership status, current management arrangement, landlord pain points, tenancy status and more.
Captures rental requirements, move-in timeframe, household context and follow-up interest.
### How to configure
1. Open your agent and go to **Post-Call Actions**.
2. Click **Add Action** and choose **Profile Enrichment**.
3. Toggle which profile types to extract (Buyer, Seller, Investor, Tenant).
4. Expand each profile type to enable or disable individual fields.
5. Save your agent.
Profile Enrichment runs on **both inbound and outbound calls** by default — the value is in the conversation content, not the call direction. You can add it alongside your existing post-call actions (SMS, email, webhook); all actions fire independently after each call.
### What gets extracted
All fields default to **unknown** and only populate when the conversation gives a clear signal. For example, if a buyer says *"we've got pre-approval for eight hundred thousand"*, the agent captures:
* `finance_readiness: PRE_APPROVED`
* `buyer_journey_stage: ACTIVELY_SEARCHING`
But if the caller doesn't mention their timeframe, `purchase_timeframe_bucket` stays `UNKNOWN` until a future call reveals it. Previously captured values are **never overwritten with unknown** — the profile only grows richer over time.
A single contact can have **multiple profile types simultaneously**. A caller who is selling one property and buying another ends up with both a seller profile and a buyer profile, each enriched from the same conversation.
### When Profile Enrichment does not run
Profile Enrichment is deliberately conservative to avoid creating junk profiles and burning LLM credits on low-value calls. It is **skipped** when:
* **The call was not engaged** — fewer than 2 human turns, or less than 100 characters of human speech (wrong number, single-word replies, voicemail hangups).
* **The caller is not a known contact** — profiles attach to resolved contacts only, so calls from unknown numbers are skipped.
* **No profile types are enabled** in the action configuration.
* **The action has already run for this call** — Profile Enrichment is idempotent per call.
### Viewing enriched profiles
Open a contact and expand the **Customer Profiles** panel in the contact settings sidebar. Each profile type the contact has been tagged with appears as an accordion section showing:
* **Known fields** — only fields with a value are displayed; unknowns are hidden to keep the view clean.
* **Last enriched** — a relative timestamp showing when the profile was last updated by a call.
* **Recent calls** — links to the last three calls that enriched this profile, so you can jump straight to the transcript.
Profiles grow automatically with every engaged call — there's nothing to update manually.
You can also fetch profiles programmatically via `GET /api/v1/workspaces/{workspace_id}/contacts/{contact_id}/profiles`. See the [API Reference](/api-reference/introduction) for authentication and response shape.
#### Enrichment history in call logs
After each call, the post-call actions timeline on the call log page shows the Profile Enrichment result — including how many profiles were created or updated and the total fields extracted. If enrichment was skipped (e.g. the call wasn't engaged enough), the reason is displayed so you can understand why.
### Privacy
Profile data is extracted from call transcripts your agent has already processed. It stays inside your workspace, is never shared across workspaces, and respects the same soft-delete and retention rules as your contacts.
### Troubleshooting
#### Symptom: Profile did not update after a call
* **Likely cause:** the call failed the engagement gate (too brief or one-sided).
* **What to do:**
1. Check the call duration and transcript — was there a real back-and-forth conversation with the human?
2. Confirm the caller is resolved to a known contact on the call record (unknown callers are skipped).
3. Confirm Profile Enrichment is enabled on the agent and at least one profile type is toggled on.
#### Symptom: Wrong profile type was extracted
* **Likely cause:** the agent inferred a different intent from the conversation.
* **What to do:**
1. Review the transcript — does the conversation actually match the profile type you expected?
2. If a contact is both a buyer and a seller, both profiles are valid — check whether the "other" profile also updated.
3. For persistent misclassification, contact support with the call ID and workspace ID.
#### Symptom: A field I care about is still "unknown" after several calls
* **Likely cause:** the caller never volunteered that specific information during the conversation.
* **What to do:**
1. Check your agent's conversation prompt — is it actually asking about the topic?
2. Adjust the prompt to surface the information you want captured.
3. Re-run a test call to confirm the field now populates.
### Related docs
* [Configure Post-Call Messaging](post-call-messaging)
* [Configure Post-Call Email Summary](post-call-email-summary)
# Create and Bind Skills
Source: https://docs.voqo.ai/tutorials/skill-hub/create-and-bind-skills
Set up reusable skills and attach them to agents with role and plan checks.
## Audience
* Advanced operators and admins extending agent capabilities
## Prerequisites
* Access to Skill Hub in your workspace
* Existing agent(s) ready for skill binding
* Role permissions for skill create/update/bind actions
## Plan and role requirements
* Skill operations may be gated by plan and workspace role.
* If actions are disabled, verify plan entitlement and admin permission first.
## Steps
### 1) Create skill
1. Open **Skill Hub**.
2. Select **Create Skill** and define configuration.
3. Save and validate skill schema/inputs.
### 2) Bind skill to an agent
1. Open the target agent.
2. Navigate to skill bindings.
3. Attach the skill and save changes.
### 3) Validate runtime behavior
1. Run a controlled test call/flow.
2. Confirm skill invocation behavior matches expectation.
3. Iterate on skill configuration as needed.
## Expected result
Skills are reusable across agents, and each binding can be tested and governed without editing every prompt manually.
## Troubleshooting
### Skill cannot be created or saved
* Validate required fields and schema structure.
* Confirm role permissions in current workspace.
### Skill bound but not used at runtime
* Confirm binding is on the correct agent.
* Validate the scenario actually invokes the skill.
* Re-test with clearer trigger conditions.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, agent ID, skill ID, and test timestamp.
## Related docs
* [Refine and Test Prompts](../tools/refine-and-test-prompts)
* [Manage Agent Lifecycle](../agent-settings/agent-settings)
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
# Actionable Replies Report
Source: https://docs.voqo.ai/tutorials/sms-campaigns/actionable-replies-report
Export every reply that shows interest from your campaign, with the full conversation and which batch it came from.
An actionable replies report is your team's **working list** for a campaign. With one click, Voqo pulls together everyone who replied with **some interest** — and leaves out the dead ends — so your agents can open one file and start working leads straight away.
Think of it as the **inward** list your team uses to decide who to call next, rather than an outward, branded summary for a vendor or principal.
## What's in the report
Your report is an **Excel spreadsheet (XLSX)** you can sort, filter, and annotate as your team works through it. It contains one row per interested contact, with these columns:
* **First name** and **Last name**.
* **Mobile** number.
* **Batch** — which batch of the campaign the contact was in, so you can tell at a glance how each send wave performed.
* The **full conversation** — every message between you and the contact, in order with timestamps, in a single cell.
## Who makes the cut
Voqo reads each reply and includes anyone who showed **any interest at all** — someone who asked a question, requested a call, shared their details, or gave a tentative yes. The replies that are clearly going nowhere — not interested, wrong number, or an opt-out (STOP) — are **left out automatically**.
There is nothing to set up and no scoring to tune. The judgement is automatic, so every report you generate uses the same consistent bar.
Voqo errs on the side of including a reply. If a reply is borderline, it stays in the report rather than being dropped — it is better to skim one extra row than to miss a real lead.
## How to generate one
You can launch an actionable replies report from two places:
1. From the **SMS campaigns list**, open the **kebab menu (⋯)** on a campaign and choose **Actionable replies**.
2. From inside a campaign, use the **Actionable replies** button in the campaign header.
That's it — there are no options to choose. Voqo builds the report in the background so you are never stuck waiting on a slow page, and the download appears once it is ready.
## One report per campaign each hour
To keep things fair and fast, you can generate **one actionable replies report per campaign per hour**.
While that hour is counting down, the **Actionable replies** action is **disabled** and hovering over it shows how long until the next report is available — for example *"Next report available in 24 min"*. This is normal, not an error.
**Why is the button greyed out?** A report was generated for this campaign within the last hour. Wait for the countdown to finish, then you can generate a fresh one.
## Download links
Each download link is **short-lived** for security and is valid for a limited window after the report is built. If your link has expired, just generate the report again — your data isn't lost, only the temporary link.
## Why use it
* **Work the right leads first** — your team opens one file of interested contacts instead of scrolling every reply.
* **Keep the full context** — the complete conversation travels with each contact, so whoever picks up the lead has the whole story.
* **No more manual processing** — the filtered, ready-to-work list that used to be a bespoke job is now self-serve in a single click.
***
**Why is "Actionable replies" greyed out?** The action stays disabled until your campaign has sent at least one message — there are no replies to report on before then. Once your campaign starts sending, it becomes available.
**What if the report comes back empty?** That means your campaign hasn't received any interested replies yet. The report fills out as replies come in, so check back once more contacts have responded.
Need help? Contact support.
# Consent and Opt-outs
Source: https://docs.voqo.ai/tutorials/sms-campaigns/consent-and-opt-outs
See who has opted out of SMS, review the full consent history for any contact, and export records for compliance.
Voqo automatically tracks consent for every contact you message. When someone opts out, their record is captured immediately and Voqo stops sending them messages. The Consent and Opt-outs screen gives you a complete, auditable view of every consent event across your workspace.
## The opted-out contacts list
The consent screen shows all contacts who have opted out — whether they replied **STOP** to a message or you added the opt-out yourself. Each row shows:
* **Contact** — name and mobile number. When Voqo recognises the number, the contact's name is shown; otherwise you see the number alone.
* **Source** — how the opt-out was created: **Customer STOP** (the contact texted STOP) or **Added by operator** (someone on your team added it).
* **Opted out on** — the date and time the opt-out was recorded.
* **Last event** — the most recent consent-related activity (opt-out, re-subscription, or a HELP request).
Contacts on this list cannot receive SMS from your workspace until the opt-out is removed. Voqo enforces this automatically — no manual exclusion lists are needed.
You can **search** the list by part of a mobile number or by contact name to find a specific record quickly.
Even when a contact is not on this list, the SMS provider keeps its own opt-out list. A send can still be blocked independently by the provider if the contact opted out with the carrier directly — see the [Provider opt-out](scheduling-and-send-status#reason-chip-reference) reason chip.
## Consent events explained
Every consent change is recorded as an event, whether the contact triggered it or your team did:
| Event | What triggered it | What it means |
| ------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Opted out** | Contact replied STOP, or a team member added the opt-out | Voqo stops sending this contact any messages. |
| **Re-subscribed** | Contact replied START | Consent is restored. You can message this contact again. |
| **Opt-out removed** | A team member undid the opt-out | The contact can be messaged again. The event records who removed it. |
| **Help requested** | Contact replied HELP | Voqo sends the contact an automatic information message with your sending details. No change to consent status. |
Every event that a team member performs records **who** did it, so the trail always shows who added or removed an opt-out.
## Adding an opt-out manually
To record an opt-out yourself — for example, a contact who asked to stop by phone or email — click **Add opt-out** and enter their mobile number. The row appears immediately with the **Added by operator** source, attributed to you, and the contact stops receiving SMS straight away.
Adding the same number twice is safe — Voqo recognises it is already opted out and does not create a duplicate.
## Undoing an opt-out
You can undo an opt-out you no longer need — for example, one added by mistake, or a contact who has since given consent again. Open the contact and choose to remove the opt-out. Voqo shows a warning first, and the warning depends on how the opt-out was created:
* **Added by operator** — a standard confirmation: *"Removing it means your organisation can message them again."*
* **Customer STOP** — a stronger, more cautious warning: *"This person texted STOP. Removing their opt-out means your organisation may message them again. Only do this with their explicit consent."*
Both warnings carry the line *"This action will be recorded as performed by you"* — undoing an opt-out is always attributed to the person who did it, and the original opt-out event is never erased. Once you confirm, the contact becomes sendable again and an **Opt-out removed** event is added to their history.
Only undo a customer's STOP opt-out when you have their explicit consent to message them again. The original STOP is permanent in the audit trail, and the provider may still block delivery independently.
## Per-contact consent history
Click any contact's row to open their consent history. The history shows every consent event for that contact in chronological order — opt-outs, re-subscriptions, and HELP requests — with exact timestamps.
This gives you a complete picture of a contact's consent journey. If a contact claims they never opted out, their history shows precisely when the STOP reply arrived, from which number, and whether they have since re-subscribed.
## The audit trail
Every consent event is recorded in an **append-only, hash-chained audit trail**. This means:
* **Events are never edited or deleted.** Once a consent event is recorded, it cannot be changed. Every opt-out, re-subscription, and HELP request exists permanently in the record.
* **The record is tamper-evident.** Each entry is cryptographically linked to the one before it. Any attempt to alter the record breaks the chain and is immediately detectable.
* **The record stands up to a compliance audit.** If you are ever required to demonstrate that you respected a contact's opt-out request, the audit trail provides timestamped, immutable evidence of every consent event in your workspace.
You do not need to do anything to maintain the audit trail — Voqo captures every event automatically.
## Exporting consent records
You can export your workspace's consent record at any time for compliance, legal review, or internal reporting.
1. Open the **Consent and Opt-outs** screen.
2. Click **Export**.
3. Choose **CSV** or **JSON**.
4. The file downloads to your device immediately.
The export includes every consent event in your workspace: the contact's name and mobile number, the event type, the timestamp, and the current consent status.
**CSV** is useful for sharing with a compliance team or importing into a spreadsheet. **JSON** is useful for programmatic processing or submitting to a legal or regulatory body.
## Re-subscriptions
A contact who has opted out can re-subscribe themselves at any time by texting **START** to your sending number. Once they do:
* Their consent status updates immediately.
* They are removed from the opted-out list.
* A re-subscribed event appears in their consent history.
* You can include them in future campaigns and send them direct messages again.
A contact texting START is the cleanest path, because re-subscription is then an active, voluntary choice by the contact. Your team can also [undo an opt-out](#undoing-an-opt-out) manually — but only do so for a customer STOP when you have the contact's explicit consent.
## Troubleshooting
**How do I prove a contact opted out?**
Open the contact's consent history. You will see a timestamped opt-out event showing when the STOP reply arrived. Export the record in CSV or JSON if you need to submit it as evidence.
**Can the audit log be edited or deleted?**
No. The audit trail is append-only. No one — including Voqo staff — can edit or remove a recorded event. The log exists permanently and its integrity is verifiable.
**A contact says they didn't opt out but they're on the list**
The consent history will show the exact timestamp and source of the opt-out — whether it was a customer STOP or added by a team member, and by whom. If the contact disputes it, the history is the authoritative record. The contact can re-subscribe by texting START, or your team can undo the opt-out if appropriate.
**Can I undo an opt-out?**
Yes. Open the contact and remove the opt-out. Voqo shows a warning first — a stronger one if the contact texted STOP — and records the removal against your name. The original opt-out event is never erased, and the contact becomes sendable again once you confirm. Only undo a customer STOP with the contact's explicit consent.
**I removed an opt-out but the contact still isn't receiving messages**
The SMS provider keeps its own separate opt-out list. If the contact opted out with the carrier directly, the provider may still block delivery even after you remove the opt-out in Voqo — you'll see a **Provider opt-out** reason on the send. There is nothing you can change in Voqo to override the provider's list.
**What happens if a contact opts out mid-campaign?**
Voqo stops sending to that contact immediately. Any message that was queued for them but not yet sent is cancelled. No further messages will go out to that contact for any campaign until they re-subscribe.
**Can I export just the opt-outs for one campaign?**
The current export covers your full workspace consent record. Use your spreadsheet software to filter the exported CSV by campaign name or date range after downloading.
If you have a compliance question or need help with the consent record, contact support.
## Related docs
* [Unified Inbox](unified-inbox)
* [SMS Campaign Scheduling and Send Status](scheduling-and-send-status)
# Create an SMS Campaign
Source: https://docs.voqo.ai/tutorials/sms-campaigns/create-an-sms-campaign
Build and launch an SMS campaign in three steps: select contacts, write the message, review and send.
An SMS campaign sends one personalised text message to a list of contacts. The composer walks you through three steps: choose your audience, write the message, then review and launch. Nothing sends until you confirm on the final step.
To start, open **SMS Campaigns** and click **New campaign**.
Each workspace can have one active SMS number. That number is requested separately from the default onboarding voice number and becomes available after approval and setup. The **New campaign** button is disabled until your workspace has an active SMS number — visit the **Numbers** page to request one.
## Step 1 — Select contacts
Choose one of two source modes:
* **Upload a file** — upload a CSV or Excel file, review and adjust the detected mobile, email, and name columns, and choose how many valid rows to use.
* **Use contacts** — pick eligible contacts from your organisation's contact list. Select individual contacts, use **Fill N** to grab the first N sendable contacts, or tick the header checkbox to select every sendable contact in your workspace.
The composer keeps the audience count visible while you work. Contacts and rows that cannot be messaged are excluded before launch, not discovered after the fact.
### Upload a file
For a file audience, Voqo reads the file and shows a full mapping preview — the same one you get when importing contacts on the **Contacts** page:
* The detected **mobile**, **email**, and **name** columns.
* Valid, invalid, and duplicate counts.
* A **row-by-row preview** so you can see exactly which rows will send, which are duplicates, and which will be skipped, each flagged with the reason.
* Available merge-field columns.
* A **Use first N valid rows** control for smaller test sends or staged rollouts.
If any column is detected incorrectly, open **Change mapping** and pick the right column for mobile, email, or name. The preview and the valid/invalid/duplicate counts **refresh straight away** — you never re-upload the file to fix a mapping. Because a campaign can only text a valid mobile, a mobile column is always required here, so there is no "no phone column" option; if no valid mobile numbers are found, the composer blocks you from continuing until you fix the source.
### Use contacts
For a contacts audience, pick the people you want to message from your organisation's contact list. The audience counter at the top of the picker always shows the true number of sendable contacts across your entire database — not just the rows currently on screen — so you always know exactly how many people your campaign will reach.
Contacts without a sendable Australian mobile number, or contacts that are opted out or marked do-not-contact, are excluded from the sendable count.
**Selecting contacts**
You have three ways to build your audience:
* **Tick individual contacts** — click the checkbox next to any contact to add them to your campaign.
* **Select all N sendable contacts** — tick the header checkbox to select every sendable contact in your workspace that matches your current filters. The number shown is the true database total, not the visible page. Untick the header checkbox to clear your selection.
* **Fill N** — enter a number in the **Use first N contacts** field and click **Fill** to select that many sendable contacts from the top of the current sort. If you already have contacts selected, Voqo asks whether to **Replace** your selection or **Add** to it.
The **Fill** button label previews the exact count it will apply (for example, "Fill 200"). If you enter a number higher than the sendable total, Voqo clamps it down so the label never overpromises.
**Start from a recent upload**
Click **Recent upload** to reuse one import batch without uploading the file again. Uploads are listed newest first with their filename, upload date, total rows, created contacts, and status. Use **Next** and **Previous** to browse older uploads. Processing and failed uploads remain visible for context, but only completed uploads can be selected; an upload that completes while the picker is open appears as ready automatically.
Selecting an upload scopes the table, **Fill N**, and **Select all** to active contacts first created by that import. The created count can be lower than the file's row count because rows that updated an existing contact are not members of the new batch. A contact stays in its original batch if a CRM later takes over that contact, while contacts that have since been removed are excluded.
Choosing an upload resets **Source** to **All Sources**. Any source or contact filters you apply afterward narrow that upload further. Clear the upload beside its filename to return to the full contact directory.
**Auto-selection on entry**
For small and medium workspaces (up to 500 sendable contacts), Voqo pre-selects your full audience on entry so a single click gets you to the next step. For larger workspaces, nothing is selected by default — you have to opt in via **Fill N** or **Select all** so a big send is always a deliberate action, never an accident.
**Filtering contacts**
Use the filter popover to narrow the contact list before selecting. You can filter by:
* **Source** — where the contact came from (e.g. SMS Upload, Manual, CRM).
* **Contactability** — whether the contact is contactable, marked do not contact, or has unsubscribed.
* **Has name** — contacts with a recorded name versus those without.
Filters stack: applying more than one narrows the list further. Filters on **Source** shape the audience that **Select all** and **Fill N** act on. Filters applied client-side (Contactability, Has name, Exclude previously messaged) narrow only what you can see and tick manually — while those filters are active, the header checkbox falls back to selecting just the visible rows.
**Searching contacts**
Type in the search bar to find a specific contact by name, email, or mobile. Search is a **lens** for the table, not a scope for the audience — **Select all** and **Fill N** ignore the search term and act on the full filtered audience. Click the **×** button in the search field to clear it.
**Sorting contacts**
Use the sort control to reorder contacts by name (A to Z) or by date added (newest first). **Fill N** takes the first N contacts by the current sort, so change the sort before clicking **Fill** if you want a different slice.
**"Sent before" badges**
A contact who has already received a campaign from your workspace shows a **Sent before** chip on their row. Hover the chip to see the name of the campaign they were sent. This makes it easy to spot people who are already in the middle of a deal conversation before you add them to a new campaign.
**Overlap confirmation**
If you select contacts who have been previously messaged and click **Continue**, a confirmation dialog tells you how many of those contacts were messaged before and asks you to confirm. You can confirm and proceed to the message step, or go back and adjust your selection.
### File rows become organisation contacts
When you campaign from a file, the rows you reserve for the campaign are merged into your organisation's contacts automatically as the audience is confirmed — there is no toggle to turn this on, and it always runs. Voqo keeps **one contact per mobile number**: a row that matches an existing contact updates that contact (your saved names are preserved), and a new number becomes a new contact. Each imported contact is stamped with the **SMS Upload** source, so you can filter for exactly these people on the **Contacts** page. Contacts owned by a connected CRM are never overwritten. Voqo imports only the rows you reserve for this campaign, never the rest of the uploaded file, so imported contacts and campaign recipients stay one-to-one.
A high invalid count is your early warning. If most rows are flagged, check the detected mobile column first; CRM exports often include landline or office-phone columns before mobile numbers.
## Step 2 — Write the message
Write one message body, insert merge fields, and preview what a real recipient will receive. There are no AI-generated variants — the words in the message box are the words that will be sent.
### Your details (agent name and company name)
Click **Set details** to enter your name and agency name. These values pre-fill `{{agent_name}}` and `{{company_name}}` in your message. Once you've filled both fields, Voqo offers to save them as workspace defaults so they're pre-filled in future campaigns.
### Use merge fields
Use `{{first_name}}` for the recipient name and `{{mobile}}` for the phone number. Use `{{agent_name}}` and `{{company_name}}` for your details (set via the **Set details** button). If you add any other `{{variable}}`, map it to a column from the selected CSV before launch. CSV columns are source fields, not reusable template variables by default. If a recipient is missing data for a mapped variable, launch is blocked until you fix the data, change the mapping, or remove that merge field.
Variable chips highlight when already inserted into the message body. The segment counter below the editor turns orange when the message exceeds one SMS segment.
### Segment counter
Standard messages fit 160 characters. Emoji or special characters reduce that to 70. Longer messages are split into multiple segments (5 credits per segment per recipient). Tags like `{{first_name}}` may change the final character count per contact.
Voqo places a soft amber background behind characters that its current Unicode classification identifies. Replacing those characters is optional: Unicode messages can still be sent. Highlighting checks the raw template while you edit it; resolved merge values may change the final message encoding.
### Templates and message history
Click **Templates & History** to open a modal with two tabs:
* **History** — shows messages you've sent in previous campaigns, sorted by most recently used. Select a message to preview it, then click **Use this message** to fill it into the editor.
* **Templates** — shows starter templates for common use cases (vendor appraisal, seller check-in, open-home follow-up). Select one to preview, then click **Use this message** to apply it.
Use the search bar to filter messages by content. The history tab shows how many times each message was used and which campaigns it appeared in.
### Starter templates
Below the editor, three starter templates are available for quick selection. Click a template name to fill it into the editor. Hover over a template to preview it in the phone mockup on the right.
## Step 3 — Review and launch
The final step shows a summary of your campaign (name, audience count, segments per message) alongside the phone preview. Choose when to send:
### Hot reply alerts
Hot reply alerts are **off by default**. Turn on **Notify my team about hot replies** and add at least one consenting internal recipient (up to 10). When enabled, a new campaign reply classified as a hot lead triggers an immediate, best-effort SMS to every campaign recipient from the campaign's SMS number. Each recipient consumes the displayed SMS credits, so multiple recipients multiply the cost.
Workspace managers can maintain default recipients. Enabling a campaign with no saved recipients copies the workspace defaults into that campaign; campaigns never inherit a live recipient list. Turning alerts off preserves the campaign's recipients and message for later. Use **Reset to workspace recipients** to copy the latest workspace defaults explicitly. The reset affects only that campaign, and an enabled campaign must always have at least one recipient.
Workspace managers manage the default alert message in **Settings → Workspace → Hot lead SMS alerts**. Campaigns inherit the latest workspace default until you customize their message. Use **Reset to workspace default** to resume live inheritance. The editor supports lead name or phone, lead name, lead phone, reply snippet, campaign name, organization name, and Inbox link variables; the required context is identified inline.
Alert messages are plain-text SMS. Line breaks and blank lines are preserved exactly in the message that staff receive. The Voqo default uses a short structured format:
```text theme={null}
HOT LEAD
Lead: {{lead_name_or_phone}}
Campaign: {{campaign_name}}
Reply: {{reply_snippet}}
Open: {{inbox_url}}
```
The estimate uses representative rendered values, including a full Inbox link, to show the encoding, character count, segments, and credits for each recipient. Actual values can change the final length. Each accepted alert costs 5 credits per rendered SMS segment, per configured recipient. Emoji, smart punctuation, and other non-ASCII characters use Unicode SMS encoding, which has shorter segments and can increase the credit estimate. Provider rejection or a failed attempt is not charged. This is an immediate best-effort alert rather than guaranteed delivery or a delivery receipt.
Save the draft to keep recipient and message changes. You can also edit alert settings from the campaign overview. Leaving the recipient list empty disables alerts without blocking launch.
* **Send now** — start dispatching as soon as launch succeeds.
* **Schedule** — choose a specific date and time.
Click **Launch now** or **Schedule** to open the confirmation dialog. The dialog shows recipients, campaign name, and scheduled time (if applicable), then asks you to confirm. Once confirmed, messages begin sending (or are queued for the scheduled time).
Before launch, Voqo checks that the campaign has a message, a confirmed audience, enough credits, and no unresolved merge fields. If anything is missing, the composer shows the reason and blocks launch.
Once launched, open the campaign monitor to watch send status, reply count, failed sends, and pause/resume/cancel actions.
## Delete multiple campaigns at once
Old drafts, stale one-offs, and finished campaigns pile up quickly. You can select several campaigns from the SMS Campaigns list and delete them in a single confirmation, on both the active and archived tabs.
To select campaigns:
* In **List view**, tick the checkbox at the start of each row. Use the checkbox in the header to select every campaign on the current page.
* In **Grid view**, hover a campaign card and tick the checkbox that appears in the top-left corner. Use the **Select all on this page** checkbox above the grid to select every campaign visible.
* Press **Cmd + A** (Mac) or **Ctrl + A** (Windows) while your focus is on the campaigns list to select every campaign on the current page.
Once you've selected at least one campaign, a ** campaigns selected** bar appears above the list with a **Clear** button and a **Delete** button. Clicking **Delete** opens a confirmation dialog that asks you to confirm the action. If any of the selected campaigns are still sending, scheduled, or paused, the dialog warns you that deleting will stop message delivery for those live campaigns.
Deleting is permanent and cannot be undone. Your selected campaigns will be removed from your SMS Campaigns list, and any live sends they were doing will be cancelled. Reply threads that already exist stay in your **Inbox** so you don't lose recent conversations.
If a campaign can't be deleted — for example, because it was already removed from a different browser tab, or an unexpected error occurred — the dialog stays open, lists which campaigns were skipped and why, and confirms how many were successfully deleted. Deleted campaigns disappear from the list at the same time, so you always see the accurate remaining state.
Selection is scoped to the current page and current filter. Changing the search term, status filter, or page clears your selection.
## Troubleshooting
**Why is this contact greyed out in the picker?**
A greyed contact cannot receive your campaign, and the chip next to it tells you why: **No mobile number** means there is no Australian mobile on file, and **Do not contact** or **Opted out** means the contact has been marked do-not-contact or has previously opted out. These contacts are excluded as you select them, so the audience summary is always accurate.
**Why are so many of my file rows invalid?**
The most common cause is the wrong mobile column — CRM exports often list a landline or fax column before the mobile column. Open **Change mapping** and check the selected mobile column contains mobile numbers; the counts and row preview refresh as soon as you change it, so you can confirm the fix worked before continuing. Individual rows are invalid when the cell is empty, the number is too short, or it isn't a valid Australian mobile format.
**Why can't I move past the audience step?**
You have no valid recipients yet. Select at least one eligible contact, confirm a file with valid mobile numbers, or reduce **Fill N** to a value that still leaves sendable recipients.
**Why did "Select all" only tick the contacts I can see?**
You have a client-side filter active — **Contactability**, **Has name**, or **Exclude previously messaged**. While one of those is on, the header checkbox falls back to selecting just the visible rows so the tick doesn't silently ignore your filter. Clear those filters and **Select all** returns to covering the full database audience.
**Why aren't all my contacts pre-selected on entry?**
For workspaces with more than 500 sendable contacts, Voqo leaves the selection empty on entry so a giant send is never accidental. Use **Fill N** to select a batch, or tick the header checkbox to select the full audience.
**Where did my uploaded file go?**
There is no separate file library. The rows you campaign from a file are merged into your organisation's contacts automatically (one contact per mobile number) and tagged with the **SMS Upload** source. To reuse those people in another campaign, switch the source to **Use contacts** and filter by the **SMS Upload** source on the picker.
**Why is launch blocked for merge fields?**
A recipient is missing data for one of your variables. Fix the source data or remove the variable before launching; Voqo will not send messages with unresolved placeholders.
**Why is launch blocked?**
The composer lists exactly what's missing: a message, valid recipients, sufficient credits, a valid scheduled time, resolved merge fields, or a selected sender number. Resolve the flagged item and launch again.
If you're stuck at any step, contact support with your workspace ID and what step you're on.
## Related docs
* [SMS Campaign Scheduling and Send Status](scheduling-and-send-status)
* [Unified Inbox](unified-inbox)
* [Consent and Opt-outs](consent-and-opt-outs)
# Watch the SMS Campaigns Tour
Source: https://docs.voqo.ai/tutorials/sms-campaigns/explainer-video
A short welcome video walks you through building, launching and following up on an SMS campaign — it opens automatically on your first visit, and the Watch tour button reopens it any time.
The first time you open **SMS Campaigns**, a short welcome video opens automatically. It walks you through the whole flow — choosing your audience, writing the message, launching the campaign, and following up on replies in the inbox — so you know exactly what to expect before you build your first campaign.
## Watching the tour
When the welcome video opens, press the **play** button to start. The video plays with narration, so turn your sound on to follow along. You can pause, scrub back and forth, or expand the player to full screen using the standard video controls.
Close the video at any time by clicking the **X** in the top corner or clicking outside the player. You do not have to watch the whole thing before you start working.
## Reopening the tour
The welcome video opens automatically only on your first visit. After that, you can watch it again whenever you like:
* Open **SMS Campaigns**.
* Click **Watch tour** at the top of the page, beside the **New campaign** button.
The same walkthrough opens, ready to play.
## What the tour covers
The video follows the real campaign flow from start to finish:
* **Choosing your audience** — uploading a file or selecting contacts, and picking the sender number.
* **Writing your message** — using a starter template or writing your own, with a live preview of how each recipient will see it.
* **Launching** — sending now or scheduling a send time.
* **Following up** — where replies land in your unified inbox so you can call back while intent is fresh.
## Troubleshooting
**The video didn't open on my first visit**
The welcome video opens once per browser. If you have opened SMS Campaigns before — even briefly — it will not open again automatically. Click **Watch tour** to play it any time.
**I can't hear the narration**
Check that your device is not muted and your volume is up, then press play again. The video starts paused, so no sound plays until you press play.
**The Watch tour button isn't where I expect**
Look at the top of the **SMS Campaigns** page, immediately to the left of the green **New campaign** button.
If you need help, contact support.
## Related docs
* [Create an SMS Campaign](create-an-sms-campaign)
* [Unified Inbox](unified-inbox)
# SMS Campaign Scheduling and Send Status
Source: https://docs.voqo.ai/tutorials/sms-campaigns/scheduling-and-send-status
Launch an SMS campaign now or at a scheduled time, then follow every recipient in the live monitor.
An SMS campaign can send immediately or at a specific scheduled time. After launch, the live monitor shows every recipient and the reason behind any skipped, blocked, failed, or queued send.
## Scheduling your send
When you launch a campaign, choose one schedule:
* **Send now** - Voqo starts dispatching as soon as launch succeeds.
* **Send later** - choose a specific date and time for dispatch to begin.
If the selected scheduled time is already in the past, Voqo treats it as **Send now** instead of holding the campaign behind an impossible timestamp.
## Live send monitor
The send monitor shows every recipient and their current status. You do not need to refresh; the view updates automatically within seconds as messages are dispatched, skipped, blocked, or failed, and an **Updated ...** ticker shows you how fresh the numbers are.
Each row in the monitor shows:
* **Recipient** — name and mobile number.
* **Status** — what is happening with this send right now.
* **Reason chip** — when a send is not in the normal flow, a chip tells you exactly why. See the [Reason chip reference](#reason-chip-reference) below.
* **Timestamp** — when the status last changed.
### Filtering and searching
Use the status filter at the top of the monitor to focus on a specific group - for example, **Queued**, **Blocked**, or **Failed** recipients.
## Campaign statuses
Every campaign shows an honest status on its card and in the monitor — never a number we cannot stand behind:
| Status | What it means |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Draft** | The campaign is being built and has not launched. |
| **Scheduled** | The campaign has launched but is waiting for its sending window to open. |
| **Sending** | Messages are going out right now. |
| **Paused** | You paused the campaign; queued recipients are waiting for you to resume. |
| **Completed** | Every recipient is accounted for and none failed. |
| **Completed with failures** | The campaign finished, but one or more sends failed at the carrier. The exact failed count is shown, and you can [retry the failed messages](#retrying-failed-messages). |
| **Cancelled** | You cancelled the campaign; unsent recipients were finalised and no further messages went out. |
A campaign where some numbers were **blocked** by the provider — but nothing failed at the carrier — still completes as **Completed**, not "Completed with failures". A provider block is an honest, expected outcome (the number opted out with the carrier), not a failure to fix.
### Retrying failed messages
When a campaign ends as **Completed with failures**, a **Retry failed** action appears. Click it to re-send only the messages that failed; nothing already sent is sent again. The campaign moves back to **Sending** and re-checks consent and opt-outs before each send.
If the campaign has any recipients whose outcome could not be confirmed, the retry dialog shows them as a separate group behind a warned, **default-off** checkbox. Leave it off to retry only the genuinely failed messages; tick it only if you understand you may be re-sending to a number that already received the message.
## Reason chip reference
When a recipient's send is held, blocked, or skipped, a reason chip appears next to their status. The table below explains each chip and what to do.
| Chip | What it means | What happens next |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Opted out** | The recipient replied STOP to a previous message. Their consent has been withdrawn. | The message is not sent. You cannot override an opt-out. If the contact believes this is an error, they can reply START to re-subscribe. |
| **No consent** | The contact is marked do-not-contact in your organisation. | The message is not sent. Update the contact's consent status if appropriate. |
| **Provider opt-out** | The provider's own opt-out list refused the send — the number opted out with the carrier directly, outside Voqo. | The message is not sent, and you are not charged for it. This is an honest expected outcome, not a delivery failure. |
| **Invalid number** | The mobile number could not be normalised to a valid Australian format. | The message is skipped. Correct the number in your contact list and re-run the campaign for this recipient. |
| **Delivery failed** | The message reached the carrier network but the carrier could not deliver it (e.g. the number is disconnected or the handset is unreachable). | The message is not retried automatically. Use **Retry failed** to re-send, or review the number and resend manually. |
| **Rate limited** | The campaign's sending pace means this recipient is queued behind others. | Voqo will send the message as soon as capacity is available. No action needed. |
Nothing fails silently. Every recipient that does not receive a message has a reason chip explaining why.
## Pausing, resuming, and cancelling
You have full control over a campaign while it is running:
* **Pause** - Voqo stops dispatching new messages immediately. Recipients already being sent finish; queued recipients wait.
* **Resume** - Voqo picks up from where it left off. No messages are re-sent; only the remaining queue is processed.
* **Cancel** - Stops the campaign permanently. Unsent recipients are finalised as cancelled and no further messages go out. Messages already sent are unaffected because the provider already has them and they cannot be recalled. This cannot be undone, so Voqo asks you to confirm first.
To pause a sending campaign, open it and click **Pause** in the monitor header. To cancel, open the campaign actions menu in the monitor header and select **Cancel campaign**, then confirm.
## The campaign actions menu
Every campaign card in **SMS Campaigns** has an actions menu — the three-dot button in the top corner of the card. It opens on **every** campaign regardless of status, and clicking it never takes you into the campaign by mistake. From it you can:
* **Open campaign** - open the live monitor for this campaign.
* **Duplicate** - create a fresh draft copy of the campaign with the same message and goal. The copy starts with **no recipients** and in **Draft** status, so you can give it a new audience and launch it independently. The original is untouched.
* **Archive** — move the campaign into the collapsed **Archived** section to tidy your list. Archiving changes nothing about the campaign's sending — an archived campaign that is still sending keeps sending. Expand **Archived** and choose **Restore** to bring it back.
* **Delete** — permanently remove the campaign. Voqo asks you to confirm first.
## Credits and billing
Each SMS sent from a campaign deducts credits from your workspace balance. Credits are charged per message successfully dispatched — held messages that have not yet sent do not incur a charge until they are released.
You can review your credit balance and per-campaign usage in **Admin and Billing**.
For credit pricing details, see the Pricing Updates page.
## Troubleshooting
**A recipient shows "Opted out" but says they did not opt out**
The contact can text START to your sending number to re-subscribe. Once they do, their opt-out status clears and you can include them in future campaigns.
**A recipient shows "Invalid number"**
Open the contact record, correct the mobile number, and create a new campaign for the corrected recipient.
**Delivery failed for multiple recipients**
A cluster of delivery failures often points to a number-quality issue in the source list. Review the numbers for formatting errors, disconnected lines, or landlines that were included by mistake. Use **Retry failed** to re-send only the failed messages once the campaign has finished.
**Why does my campaign say "Completed with failures"?**
One or more sends failed at the carrier — the number may be disconnected or unreachable. The banner shows the exact failed count, and **every recipient is accounted for** in the funnel. Click **Retry failed** to re-send only the failed messages. A campaign where some numbers were merely blocked by the provider (not failed) completes as **Completed**, not "Completed with failures".
**A recipient shows "Provider opt-out" — what does that mean?**
The number opted out with the carrier directly, outside Voqo, so the provider's own opt-out list refused the send. The message was not delivered and you were not charged. There is nothing to fix — this is an honest expected outcome.
**Why does the report say "Sent" and not "Delivered"?**
Voqo reports **Sent** — the message was handed to the carrier successfully — because that is the number we can stand behind. We do not yet report delivery confirmation from the handset, so we never claim it.
If you are still seeing issues, contact support with your workspace ID and campaign ID.
## Related docs
* [Create an SMS Campaign](create-an-sms-campaign)
* [Unified Inbox](unified-inbox)
* [Run Batch Outbound Calls](../batch-outbound-calls/batch-outbound-calls-overview)
* [Admin and Billing](../admin-and-billing/manage-billing-and-subscription)
* [Troubleshooting Hub](../troubleshooting/index)
# SMS Number and Inbound Replies
Source: https://docs.voqo.ai/tutorials/sms-campaigns/sms-number-and-inbound-replies
Choose your workspace SMS number when building a campaign, and see how customer replies land back in your campaign inbox.
Every SMS campaign sends from your workspace's own SMS number, and every reply to that number comes back to you in the campaign inbox. This page explains how to choose the number when you build a campaign and what happens when a recipient texts back.
## Your workspace SMS number
Your workspace SMS number is the number recipients see as the sender and the number they reply to. It is requested separately from your default onboarding voice number, and it becomes available once it has been approved and set up on the **Numbers** page.
Each workspace has one active SMS number. That number is shared across all of your SMS campaigns, so every reply from a recipient is tied back to the right workspace automatically.
## Choose the number when you build a campaign
When you create a campaign, the composer asks for a **Sender number** in the first step. This is required.
* If your workspace already has an active SMS number, select it before continuing.
* If your workspace does not have one yet, the composer points you to the **Numbers** page to request one. You cannot advance past the first step until a sender number is selected.
Selecting the sender number is what links the campaign — and any replies to it — to your workspace. For a step-by-step walkthrough of the whole composer, see [Create an SMS Campaign](create-an-sms-campaign).
## How inbound replies work
When a recipient replies to your campaign message, the reply is delivered to your workspace SMS number and appears in your campaign inbox, attributed to the right campaign conversation.
* Replies to an active campaign appear in the **Unified Inbox**, threaded against the recipient and the campaign they replied to.
* Opt-out replies such as **STOP** are actioned automatically and recorded against the recipient's consent history.
* A message from someone you have not messaged before still appears in the **Unified Inbox** as an unmatched-number conversation, so your team can review it and reply if appropriate.
To read, search, and act on replies, see [Unified Inbox](unified-inbox). For how opt-outs are handled, see [Consent and Opt-outs](consent-and-opt-outs).
### Replies are also saved to the contact — and to your CRM
If the reply comes from a contact in your workspace, Voqo also records it as a **note on that contact**, word-for-word, timestamped at the moment it arrived. With note write-back turned on, that note is pushed to your CRM as well — so a campaign reply lands on the contact record your team already works from, not only in the inbox.
**Every reply is saved**, including a short "no thanks". A one-word answer is still an answer, and it belongs on the record.
The note says what the reply was replying to:
> Jamie Citizen responded with "Yes, still interested" to the SMS campaign titled "Spring outreach".
Two things this does *not* cover:
* **A reply from an unknown number** creates no note. There's no contact to attach it to, so it stays an unmatched-number conversation in the inbox.
* **Opt-out replies** (STOP and similar) are actioned as consent changes and recorded in the consent history, not written as notes.
See your CRM's note write-back settings for turning write-back on and for choosing which CRM note type each kind of conversation uses.
## Before inbound replies work in production
Inbound replies depend on your SMS number being set up to deliver them securely. Your Voqo administrator completes this once during setup:
* The SMS number is registered so replies are delivered to Voqo.
* Signed-webhook verification is enabled, with the shared signing secret and matching signature method configured in Voqo, so every inbound reply can be verified before it reaches the inbox.
* The provider's inbound SMS callback URL is pointed at Voqo for both staging and production before those environments are used for live replies.
Until this setup is complete, your campaigns can still send, but replies will not appear in the inbox. If you have requested an SMS number and replies are not arriving, this setup step is the first thing to check.
## Troubleshooting
**I selected a sender number but replies are not showing in the inbox.**
Your SMS number may not have completed its inbound setup. Confirm with your administrator that the number is registered for inbound delivery, the provider callback points at Voqo, and signed-webhook verification has the correct secret and method configured. Once setup is complete, new replies will appear in the inbox.
**A reply is in the inbox but not linked to a campaign.**
Replies are linked to a campaign only when the recipient was messaged from your workspace SMS number as part of that campaign. A message from a number you have not contacted from this campaign appears as an unmatched-number conversation.
**Can I use a different sender number per campaign?**
Each workspace has one active SMS number, and every campaign sends from it. This keeps all replies for your workspace in one place.
If replies still are not arriving after setup is confirmed, contact support with your workspace ID.
## Related docs
* [Create an SMS Campaign](create-an-sms-campaign)
* [Unified Inbox](unified-inbox)
* [Consent and Opt-outs](consent-and-opt-outs)
* [SMS Campaign Scheduling and Send Status](scheduling-and-send-status)
# Unified Inbox
Source: https://docs.voqo.ai/tutorials/sms-campaigns/unified-inbox
All your SMS conversations in one place — campaign replies, call follow-ups, and direct messages, organised by contact.
The Unified Inbox brings every conversation your agency has into a single view — campaign replies, calls, post-call texts, and direct messages. Whether a contact replied to a campaign, called in, or received a direct message from your team, you see the full thread — no switching between tools, no missed replies.
## What's in the inbox
Every conversation in the inbox belongs to one contact, identified by their mobile number. When the same number appears across multiple interactions — a campaign reply, a call, a post-call text, a direct message — they all appear in the same thread, in the order they happened.
If someone texts your workspace SMS number before they are linked to a contact or campaign, the message still appears as an unmatched-number conversation so your team can triage it.
## Sending a new message
You can start a conversation with any contact at any time — you don't need to wait for them to reach out first.
Click the **compose icon** (pencil icon) at the top-right of the conversation list. The thread pane opens in **compose mode** with:
* **From** — your workspace SMS number (read-only).
* **To** — search your CRM by name or type a mobile number directly. Only valid Australian mobile numbers are accepted.
* If the recipient already has message history, you'll see their thread while you compose. If not, the timeline stays empty until you send.
* The conversation **only appears in your list after the first message is sent successfully**.
You can also click **Send message** from any contact's profile (General tab) — you'll be taken to the inbox with that contact pre-filled in **To**.
If a contact has opted out, the send will be blocked and the composer will lock. Their opted-out status is always respected — you cannot override it.
## Tabs — triage the way you work
The inbox has four tabs:
* **Leads** — the people worth working. A conversation appears here when the contact is qualified as a lead — either because Voqo automatically recognised genuine interest in their reply, or because you marked them as a lead yourself. This is your focused "real opportunities" queue, and it stays your lead's home even after you've replied.
* **Important** — everything that needs your attention. Inbound messages awaiting a reply and recent call activity live here. The badge on this tab shows the unread count at a glance.
* **Sent** — conversations where your team sent the last message.
* **Other** — low-priority conversations you generally do not need to action. Opt-outs live here: when a contact replies **STOP** or **UNSUBSCRIBE** (or is unsubscribed by their provider), the conversation moves to Other. A **one-word "no"** reply lands here too — a bare "No" (in any capitalisation, with or without punctuation, such as "No.", "NO!", or "no 👎") is treated as a soft decline and kept out of Important so your queue isn't clogged after a campaign. If the same contact later sends a genuine reply, the conversation moves back to Important automatically.
### The Leads tab — your qualified pipeline
**Leads** answers a different question from Important. Important asks *"what needs a reply right now?"*; Leads asks *"who is actually a real opportunity?"*. Because roughly half of all campaign replies are "No thanks", these two are not the same — and mixing them buries your genuine leads.
A contact enters the Leads tab in one of two ways:
* **Automatically** — when someone replies with genuine interest (a "yes", a question about price or a property, a request to call), Voqo recognises the intent and marks that person as a lead. Their conversation appears in Leads straight away.
* **Manually** — you mark someone as a lead yourself (see [Marking someone as a lead](#marking-someone-as-a-lead) below).
Once someone is a lead, they **stay** in the Leads tab regardless of what their latest message says — even after you reply, and even if they later send an unrelated text. A lead only leaves the tab when you decide they are not a lead. This means the tab is a durable pipeline of everyone worth working, not just people with an unread message.
Your judgement always wins. If you've manually marked someone as a lead or not a lead, a later message will never quietly override your decision — Voqo only auto-marks people you haven't already decided on.
### Searching the inbox
Use the search box to find a contact by **name** or by any part of their **mobile number**. Search applies to whichever tab you have active.
### Staying up to date
The inbox keeps itself current — new replies and updates appear **automatically within seconds**, without you reloading the page. An **"Updated …"** indicator at the top of the list shows how fresh the view is.
## Important — keeping your queue honest
**Important** is your triage queue. A conversation appears here when it needs attention — for example, when a contact messaged last and you haven't replied, or when someone called in recently.
It leaves when:
* **You reply** — sending any message from the inbox clears it automatically (for SMS threads).
* **You mark it done** — if you've handled the conversation off-platform, click **Dismiss** in the thread header. The conversation leaves Important without requiring you to send a message.
If the same contact messages you again after you've marked a conversation done, it automatically reappears in Important.
## Marking someone as a lead
You are always in control of who counts as a lead. From a conversation, open the lead actions in the thread header and choose:
* **Mark as lead** — adds this person to your Leads tab.
* **Not a lead** — removes an auto-marked person you don't consider an opportunity.
* **Disqualify** — marks someone as not worth working; they stay out of the Leads tab even if they message again with something that looks interested.
Marking someone as a lead changes only their lead status — it does **not** affect their opt-out status, and it does not send them anything. Marking a conversation **Dismiss** / done clears it from Important but does **not** change whether the person is a lead: a lead you've dealt with today is still a lead tomorrow.
Marking someone as a lead never contacts them and never overrides an opt-out. Someone who has opted out will never appear in your Leads working queue.
## Opening a hot reply alert
If you are configured as an internal recipient for a campaign's **Hot reply alerts**, the alert includes a secure Inbox link for the relevant workspace and lead. Sign in with your normal Voqo account if prompted. Voqo verifies your workspace access before selecting the conversation; an invalid, deleted, or unauthorized workspace is not replaced with another workspace.
The alert is formatted as plain text with separate lead, campaign, reply, and action lines by default. Workspace managers can edit that default, and campaigns can override it. Intentional line breaks and blank lines are preserved in the delivered SMS.
The alert is a notification, not an action channel. Open its link to review context and respond in the Inbox. Replying directly to the staff alert does not reply to the lead or perform a campaign action, and that reply may appear as an ordinary untagged Inbox message.
Hot reply alerts do not change the **Important** tab: Important still contains all inbound conversations that need attention, not only replies classified as hot. Alerts are best-effort immediate attempts, so use the Inbox and its unread indicators as the source of truth.
## Conversation rows
Each row in the list shows:
* **Contact name** (or the raw phone number for unmatched contacts) with an unread dot to the left when there is a new message nobody has opened yet
* **Lead badge** — a green **Lead** pill appears on the row when the contact is qualified as a lead, so you can spot your opportunities at a glance in any tab
* **Preview** of the most recent message
* **Channel badge** — a coloured pill showing what happened most recently:
* **SMS** (violet) — the last activity was a text message
* **Inbound call** (green) — someone called in; green signals this needs your attention
* **Outbound call** (neutral) — your team made this call
* **Relative timestamp** — when the last activity happened
## Reading a conversation thread
Each conversation opens as a scrollable thread. Inbound messages appear on the left; outbound messages appear on the right. Timestamps show when each message was sent or received.
Every outbound message shows **who sent it**, so you can tell your team's replies apart from Voqo's at a glance:
* **Voqo · Campaign** — sent automatically as part of an SMS campaign.
* **Voqo AI** — sent by Voqo's AI on your behalf.
* **A teammate's name** — typed and sent by that person from the inbox.
Inbound messages from your contact have no sender label — they're always on the left.
The **thread header** shows the contact's name, phone number, and consent status — a green **Contactable** badge or a red **Opted out** badge. Click **View contact** to open their full contact record. If the conversation needs a reply, the **Dismiss** button appears in the header for when you've handled it without replying.
**Call records** appear inline in the thread as a compact call card, in order with the messages. The card shows the call direction, duration, and a summary of the conversation. Click **View transcript** to read the full transcript without leaving the inbox.
## Sending a reply
To reply to a conversation:
1. Open the contact's thread in the inbox.
2. Type your message in the reply field at the bottom of the thread.
3. Press **Send Message** (or use ⌘↵).
Your message is sent immediately and appears in the thread as an outbound message. Sending a reply automatically clears the conversation from Important when applicable.
If the message contains characters that Voqo's current Unicode classification identifies, those characters appear with a soft amber background. You can replace them to use more characters per segment, or leave them in place and send normally.
You can only send messages to contacts who have not opted out. If a contact has withdrawn their consent (by replying STOP), the reply field is locked and a notice appears explaining why. See [Consent and Opt-outs](consent-and-opt-outs) for more.
## AI-drafted replies
Click **Draft with AI** in the reply toolbar. Voqo generates a suggested response and places it in the reply field for you to review. Read it, edit it as needed, and press **Send Message** when you are happy with it. You can discard the draft and type your own message at any time.
**A draft is only ever created when you ask for it.** Opening a conversation never pre-fills the reply field. Nothing is sent automatically — the draft sits there until you choose to send it.
## Unread tracking
Conversations with a new inbound message nobody has opened are marked **unread** — an unread dot appears to the left of the contact name and the preview text is bold.
* **Unread is shared across your team.** When anyone in your workspace opens a conversation, it clears as read for everyone.
* **The sidebar badge** next to **Inbox** shows your workspace's unread count.
* **Mark all read** clears every unread conversation in one action.
## Locked conversations (opted-out contacts)
If a contact has replied **STOP**, their thread is locked. You will see a notice at the bottom explaining that this contact has opted out.
If the contact wants to re-subscribe, they can text **START** to your sending number. The thread unlocks automatically. See [Consent and Opt-outs](consent-and-opt-outs) for more.
## Troubleshooting
**A conversation is in Important but I've already dealt with it**
If you handled it outside the platform (called them back, met them in person), click **Dismiss** in the thread header. The conversation leaves Important. If they message you again later, it will reappear automatically.
**I can't see a reply I'm expecting**
Check the **Sent** tab, or search by the contact's name or number. The inbox updates automatically, so you shouldn't need to reload.
**Why did a STOP reply disappear from Important?**
Opt-outs now live in the **Other** tab. When a contact replies STOP or UNSUBSCRIBE (or is unsubscribed by their provider), the conversation moves to Other — these are the conversations you generally do not need to action, so they stay out of your Important queue.
**A contact replied "No" — why isn't it in Important?**
A reply that is just the single word "No" (in any capitalisation, and ignoring punctuation or an emoji — "No.", "NO!", "no 👎" all count) is a clear decline that needs no action, so it moves to the **Other** tab instead of clogging Important after a campaign. This only applies to a bare "No" on its own — a reply with more to it, like "No thanks, maybe next year", stays in Important so you never miss a lead who declined with context. If the same contact later sends a genuine reply, the conversation moves back into Important automatically.
**Someone is in my Leads tab that I don't think is a lead**
Open their conversation and choose **Not a lead** or **Disqualify** from the lead actions in the thread header. They'll leave the Leads tab. Disqualify also keeps them out even if they later send something that looks interested.
**Someone I marked as "not a lead" came back — will they be re-added automatically?**
No. Once you've made a decision about someone, Voqo won't quietly override it. If you later change your mind, just mark them as a lead again yourself.
**A lead I already replied to isn't in Important anymore — where did they go?**
They're still in your **Leads** tab. Replying moves a conversation out of Important (into Sent), but being a lead is a durable status — your leads stay in the Leads tab so you never lose track of an opportunity.
**Why is the Leads count zero when I have hot replies?**
The Leads tab counts *people qualified as leads*, not individual hot messages. If a reply looked interested but the person isn't showing as a lead yet, open the conversation and mark them as a lead — then they'll appear.
**A reply arrived after the campaign finished — will I still see it?**
Yes. Replies and STOP messages are processed even after a campaign has completed.
**The reply field is greyed out and I can't type**
The contact has opted out. They can re-subscribe by texting START to your sending number.
**The reply field is disabled and says I need an SMS number**
Your workspace does not have a Vonage SMS sender number set up yet. Open the **Numbers** page and request an SMS number. Once it is approved and active, return to the inbox — the reply field will unlock automatically.
**Why does the Inbox badge show a number?**
The badge shows your workspace's count of unread conversations in Important. Open a conversation to clear it, or use **Mark all read** to clear them all.
**Where do the call cards in the thread come from?**
Call records are linked automatically when Voqo places or receives a call with the same mobile number. No manual linking is needed.
**The AI draft doesn't look right**
Edit it before sending — it is a starting point, not a final message. You are always in control of what goes out.
If you need help with the inbox, contact support.
## Related docs
* [Consent and Opt-outs](consent-and-opt-outs)
* [SMS Campaign Scheduling and Send Status](scheduling-and-send-status)
* [Run Batch Outbound Calls](../batch-outbound-calls/batch-outbound-calls-overview)
# Refine and Test Prompts
Source: https://docs.voqo.ai/tutorials/tools/refine-and-test-prompts
Use prompt tools to improve agent behavior before deploying prompt changes.
## Audience
* Operators iterating on call behavior and tone
* Admins maintaining quality across multiple agents
## Prerequisites
* Access to prompt tools in workspace
* Existing agent prompt draft
* Test scenario for validation
## Plan and role requirements
* Prompt tooling availability may depend on plan.
* Editing production prompts should be limited to trusted roles.
### Working without AI access
The AI parts of Prompt Studio — optional **Review with AI** suggestions, the **Test** simulation, and **Convert to Intent Flows** — need an active subscription and available AI credits. If your workspace has no active plan, or you've used all your AI credits, those surfaces are shown **locked** with a short note explaining why; you won't see an error.
You can still use Prompt Studio in this state. Write your agent's instructions in plain language as usual and choose **Save Instructions** — your wording is saved into the agent's standard prompt so it still automatically follows all the standard call-handling rules. You only need to describe the call flows; the core structure is added around your instructions. To switch the AI features back on, open **Settings → Billing** to start a plan or top up your credits, then reopen Prompt Studio.
## Steps
### 1) Draft or import prompt
1. Open prompt tools.
2. Paste or draft your prompt content.
3. Define desired behavior outcomes.
**Already have a custom prompt?** Choose **Save** to preserve it exactly as written. This saves your text directly without using AI credits. Choose **Convert to Intent Flows** only when you want Voqo's standard format. Prompt Studio asks you to confirm because conversion is lossy: bespoke wording, tone, and instructions that aren't call-handling may not carry over.
### 2) Refine with prompt assistant
1. Choose **Review with AI** when you want refinement suggestions. Prompt Studio does not run AI review automatically while you type.
2. Apply improvements for clarity and constraints.
3. Save refined output for test.
### 3) Test in writing
1. Open the **Test** tab. Your agent opens the conversation with its greeting first — just like a real call, where it speaks before the caller does. Type a caller message to continue.
2. Compare output to expected behaviour.
3. Iterate until response quality is stable.
The test applies the same **date and time context** and **response-style rules** your agent receives on a live call, so its answers about dates, scheduling, and tone match production. The greeting is shown as the agent's first turn for realism, but — exactly as on a real call — it is spoken at the start and is not part of the prompt the agent reasons over.
If your agent uses a **personalised greeting**, the test shows your base opening line as a representative example; the live greeting is tailored to each caller. Caller details and callback context only apply to real return calls and are not simulated here.
### 4) Save or convert
1. Choose **Save** to keep a custom prompt verbatim.
2. If you want Voqo's structured format instead, choose **Convert to Intent Flows** and review the lossy-conversion warning before confirming.
3. Run a controlled call test and verify key workflows before wider deployment.
## When to use prompts vs skills
* Use **prompts** for language, behavior, and instruction quality.
* Use **skills** for reusable structured capabilities and tool-like functions.
## Troubleshooting
### Prompt quality regresses after update
* Roll back to known stable prompt version.
* Re-test with same scenario set.
* Apply smaller incremental changes.
### Tool output differs from call behavior
* Confirm deployed prompt matches tested prompt.
* Check skills/functions attached to agent that may alter behavior.
### AI review, Test, and Advanced are locked
* This means your workspace has no active plan, or you've run out of AI credits — not a fault.
* You can still write and **Save Instructions**; your instructions are saved into the agent's standard prompt so it follows all standard call-handling rules automatically.
* Open **Settings → Billing** to start a plan or top up credits, then reopen Prompt Studio to unlock the AI features.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, agent ID, prompt version context, and failing scenario.
## Related docs
* [Create and Bind Skills](../skill-hub/create-and-bind-skills)
* [Conversation Prompts](../agent-settings/conversation-prompts)
* [Manage Agent Lifecycle](../agent-settings/agent-settings)
# Skills vs Prompt Tools
Source: https://docs.voqo.ai/tutorials/tools/tools-overview
Choose the right tool: skills for reusable capabilities, prompts for behavior and language quality.
## Audience
* Admins and advanced operators extending agent behavior
## Quick decision guide
* Choose **Prompt Tools** when you need better responses, tone, flow, or instruction clarity.
* Choose **Skill Hub** when you need reusable structured capabilities to attach across agents.
## Role and plan notes
* Both surfaces can be role/plan gated.
* If a tool is unavailable, confirm workspace context, role permission, and plan entitlement.
## Paths
Improve prompt quality and test behavior safely before deployment.
Build reusable capabilities and attach them to one or more agents.
# Agent Not Connecting to Phone
Source: https://docs.voqo.ai/tutorials/troubleshooting/agent-not-connecting-to-phone
Diagnose phone connection setup failures with AU/US and device-specific fixes.
## Symptoms
* Setup code fails or is rejected
* Calls keep ringing your phone instead of routing to agent
* Connection appeared successful but test calls fail
## Likely causes
* Wrong carrier code or wrong SIM line
* iPhone Live Voicemail still enabled
* Carrier plan does not allow forwarding
## Fix steps
1. Re-run correct regional setup:
* [US setup](../connect-agent/connect-agent-us)
* [AU setup](../connect-agent/connect-agent-au)
2. Disable Live Voicemail on iPhone and retry.
3. Reconfirm forwarding code and agent number format.
4. Run fresh test call and check call logs.
## Escalate when
* Multiple retries still fail across verified carrier steps.
Include:
* Workspace ID
* Carrier and device model
* Forwarding code used
* Timestamp/timezone + screenshot/error
## Related docs
* [Connect Agent to Your Phone](../connect-agent/connect-agent-overview)
* [Troubleshooting Hub](index)
# Batch Campaign Stalled or Under-Delivering
Source: https://docs.voqo.ai/tutorials/troubleshooting/batch-campaign-stalled-or-under-delivering
Use job status and retry diagnostics to recover stalled or low-throughput campaigns.
## Symptoms
* Job stuck with no progress
* Dispatch rate far below expected
* High failure ratio in job logs
## Diagnostic steps
1. Capture campaign ID, batch job ID, upload ID.
2. Verify job status transitions and progress counters.
3. Check retry behavior and permit/concurrency constraints.
4. Validate contact quality and duplicate risk.
## Recovery actions
* Retry targeted subsets instead of full rerun when possible.
* Fix malformed numbers and duplicate rows before relaunch.
* Run small canary batch to validate recovery.
## Escalate when
* Job remains stalled after validated retry path.
Include:
* Workspace ID
* Campaign ID
* Batch Job ID
* Upload ID
* Failed/successful counts + timestamps
## Related docs
* [Batch Failure and Recovery Runbook](../batch-outbound-calls/batch-failure-recovery-runbook)
* [Run Batch Outbound Calls](../batch-outbound-calls/batch-outbound-calls-overview)
# Troubleshooting Hub
Source: https://docs.voqo.ai/tutorials/troubleshooting/index
Fix the most common setup, calling, integration, and access issues.
## Before you troubleshoot
* Confirm your active workspace in the app.
* Confirm your plan and role entitlements.
* Capture exact error text and timestamp.
## Top support intents (10)
1. [Agent not connecting to phone](agent-not-connecting-to-phone)
2. [Calls missing from logs, transcript, or recording](missing-calls-transcripts-recordings)
3. [Integration sync failed](integration-sync-failed)
4. [Batch campaign stalled or under-delivering](batch-campaign-stalled-or-under-delivering)
5. [Permission denied or feature unavailable](permission-denied-or-feature-unavailable)
6. [Workflow trigger or execution issues](../workflows/workflow-troubleshooting)
7. [Webhook signature or delivery failures](../integrations/webhook-integration-guide)
8. [Billing and plan-change issues](../admin-and-billing/manage-billing-and-subscription)
9. [API key or secret auth failures](../developer-tools/manage-api-keys-and-secrets)
10. [Number purchase/routing failures](../numbers/overview-numbers)
## What to gather before contacting support
* Workspace ID
* Relevant entity ID (agent, call, job, integration)
* Timestamp and timezone
* Screenshot or exact error message
## Contact support
* Email: [support@voqo.ai](mailto:support@voqo.ai)
* Community: [Voqo WhatsApp Community](https://chat.whatsapp.com/CHL5omlbYJH5vreq0SgtCu)
## Related docs
* [Connect agent to your phone](../connect-agent/connect-agent-overview)
* [Call logs](../call-logs/overview-call-logs)
* [Batch outbound calls](../batch-outbound-calls/batch-outbound-calls-overview)
* [Integrations](../integrations/overview-integration)
# Integration Sync Failed
Source: https://docs.voqo.ai/tutorials/troubleshooting/integration-sync-failed
Separate OAuth failures from credential/sync failures and recover safely.
## Symptoms
* Integration connect fails during auth
* Integration shows connected but sync fails
* Synced data is stale or incomplete
## Diagnose by failure class
### OAuth/connect failures
* Re-auth with correct account.
* Confirm consent/scopes granted.
* Retry callback flow in clean browser session.
### Credential/config failures
* Re-check credentials and profile mapping.
* Confirm provider account permissions are active.
* Reconnect integration and rerun sync.
### Sync/runtime failures
* Trigger manual resync.
* Validate upstream source data availability.
* Check last-sync timestamp progression.
## Escalate when
* Re-auth/reconnect succeeds but sync consistently fails.
Include:
* Workspace ID
* Provider and integration ID
* Last sync timestamp
* Error screenshot/text
## Related docs
* [Choose and Connect Integrations](../integrations/overview-integration)
* [REA Setup](../integrations/rea-setup)
* [Domain Setup](../integrations/domain-setup)
# Calls Missing from Logs, Transcript, or Recording
Source: https://docs.voqo.ai/tutorials/troubleshooting/missing-calls-transcripts-recordings
Check processing windows, call states, and artifact settings for missing post-call data.
## Symptoms
* Call not visible in logs
* Transcript missing for completed call
* Recording missing/unavailable
## Expected processing windows
* Call row may appear before all artifacts are finalized.
* Transcript/recording availability can lag shortly after completion.
## Validation steps
1. Confirm workspace context and refresh call logs.
2. Confirm call status is completed.
3. Confirm recording/transcript settings on agent.
4. Retry artifact check after short delay.
## If still failing
* Capture call ID and timestamps.
* Check whether this affects all calls or specific calls only.
## Escalate when
* Artifacts remain missing after validated retries and proper settings.
Include:
* Workspace ID
* Call ID
* Agent ID
* Timestamp/timezone + screenshot/error
## Related docs
* [Review Call Logs](../call-logs/overview-call-logs)
* [Public Recording and SMS Replies API](/api-reference/public-recording-and-sms-replies)
* [Troubleshooting Hub](index)
# Permission Denied or Feature Unavailable
Source: https://docs.voqo.ai/tutorials/troubleshooting/permission-denied-or-feature-unavailable
Resolve access issues with plan, role, and workspace-context checks.
## Symptoms
* Feature tab hidden or disabled
* Access denied message for admin/developer actions
* Workflow/developer tools unavailable unexpectedly
## Checks in order
1. Confirm correct workspace context.
2. Confirm user role in that workspace.
3. Confirm plan entitlement for the feature.
4. Retry with owner/admin account where applicable.
## Fix paths
* Role issue: request role update from workspace owner/admin.
* Plan issue: update subscription to required tier.
* Context issue: switch to correct workspace and retry.
## Escalate when
* Feature remains inaccessible despite confirmed plan + role + context alignment.
Include:
* Workspace ID
* User role
* Plan name
* Feature/action attempted
* Screenshot/error text
## Related docs
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
* [Manage Billing and Subscription](../admin-and-billing/manage-billing-and-subscription)
* [Settings Admin Controls](../admin-and-billing/settings-admin-controls)
# Plan multiple War Room signals safely
Source: https://docs.voqo.ai/tutorials/war-room/managing-signals-and-tasks
Select, queue and track related signals as one coordinated planning flow without creating duplicate tasks.
# Plan multiple War Room signals safely
The War Room can coordinate several signals for the same contact while showing
one clear planning flow. This prevents a task from being executed before all
related planning has finished.
## Before you begin
* Open **War Room** and choose the **Pipeline** view.
* You need a Workspace Admin or Member role to plan, retry or cancel work.
Viewers can follow progress and open history, but cannot make changes.
* Each signal must have a contact and a completed plan.
## Plan several signals together
1. In the **Signal** column, tick up to 20 signals for one contact.
2. Check the selected count and contact name above the board.
3. Select **Plan selected**.
The **Task** column shows one planning card. Its progress changes from
**Planning 1 of 3** as each signal is processed. Signals are sent for planning
one at a time. Task execution stays unavailable until planning and any queued
work for that contact are resolved.
You can also drag a signal into the **Task** column. If planning is already in
progress, the signal is not moved automatically. You must choose what happens
next.
Where you drop the signal decides what happens. Drop it onto a pending task card
for the **same contact** to add the signal to that task — the card highlights
when it can receive the signal. Drop it anywhere else in the column, including
over a task for a different contact, and the signal becomes a **new task**.
## Add a signal or keep it separate
When the contact already has active planning, choose one of these options:
* **Add to current planning** places the signal at the end of the active
planning flow. You can also drag it directly onto the active planning card.
* **Keep separate and plan next** creates a visible queued card. The card keeps
its queue position and starts only after earlier planning is resolved.
For keyboard use, tick the signal and use the matching button above the board
or **Add selected here** on the active card.
## Read planning progress
Each source row shows one of these states:
* **Waiting** — the signal is in sequence and has not been sent yet.
* **Processing** — the signal is being planned or awaiting confirmation.
* **Complete** — its result has been reconciled.
* **Retry available** — the request is known to be safe to send again.
* **Confirmation unknown** — AgentOS may already have accepted the signal.
If all signals return the same task ID, the board shows one task card with its
combined source count. If they return different task IDs, the board keeps them
as separate tasks and records why the planning flow split.
Open **History** on a task to review its sources and applied updates. Older
tasks show history only from the date this feature was enabled.
## Recover when planning needs attention
* If **Retry** is shown, you can safely retry the affected source.
* If the card says AgentOS may have accepted the signal, wait for confirmation
or select **Cancel planning**. Retry is deliberately unavailable because it
could create duplicate work.
* Cancelling an active group keeps tasks that were already resolved, releases
unresolved signals and allows the next queued group to proceed.
* Cancelling a queued group removes only that group and keeps the remaining
queue order.
The card displays the exact reason for a failure. If an unknown problem shows a
correlation ID, include that ID, your workspace ID and a screenshot when you
contact support.
## Finding older work
Newest work sits at the top of every column, so the most recent signals, tasks
and outcomes are the first thing you see.
Each column header shows how many items you are looking at and how many exist
in total — for example **50 of 234**. When the two numbers match, only one is
shown, because nothing is hidden. Hover the counter to see the exact total and
how it splits between AI and human work.
To reach older items, just keep scrolling inside a column. The next set loads
automatically as you approach the bottom, and a short **Loading more…** line
appears there while it arrives. There is no button to press. Each column
scrolls on its own, so the headers and the buttons above stay where they are.
The board keeps refreshing the whole time, including everything you have
already scrolled past, so what you are looking at stays current. Your place in
the column is kept, and any signals you have selected stay selected.
Switching between **All**, **AI** and **Human** narrows both numbers in the
counter, so it always describes what that filter would show.
## Limits and common messages
* Select signals for one contact at a time.
* A group can contain up to 20 signals.
* A contact can have up to 10 queued groups and 100 queued signals.
* Each column loads 50 items at a time, newest first, and loads the next 50 as
you scroll. Completed work does not take up those places. When a column holds
more than you are currently looking at, its counter shows both numbers.
* A column shows up to 500 items. If a column holds more than that, the counter
still tells you the true total — for example **500 of 800** — but scrolling
stops at 500. Use the **All**, **AI** and **Human** filters to narrow a very
busy column, or work through the oldest items so the column shrinks.
* If a signal or task changed in another tab, refresh the board and choose
again. Your previous command will not be applied silently.
* A task cannot be moved to **Execute** while its contact has active planning,
queued planning or an unresolved update conflict.
## Expected result
You can see one coordinated planning card, make an explicit decision for rapid
new signals, follow the queue, and understand whether retry or cancellation is
safe. Related updates to one task remain together with a complete history;
different tasks remain separate.
## Related docs
* [Permission denied or feature unavailable](../troubleshooting/permission-denied-or-feature-unavailable)
* [Troubleshooting hub](../troubleshooting/index)
# Build, Publish, and Trigger Workflows
Source: https://docs.voqo.ai/tutorials/workflows/build-publish-and-trigger-workflows
Create workflows, publish safely, regenerate trigger tokens, and monitor execution history.
## Audience
* Power users automating operational tasks
* Admins responsible for secure trigger-based automation
## Prerequisites
* Workspace access with workflow permissions
* Plan level that includes workflow functionality
* Clear ownership for trigger token distribution
## Plan and security caveats
* Workflows are plan-gated. If the feature is unavailable, verify subscription and workspace context first.
* Trigger tokens grant execution capability; treat token URLs as secrets.
* Regenerating a token invalidates old trigger links and integrations.
## Steps
### 1) Create workflow
1. Open **Workflows**.
2. Select **Create Workflow** and define flow logic.
3. Save draft and run initial validation.
### 2) Publish workflow
1. Review draft logic and connected actions.
2. Select **Publish** to enable runtime execution.
3. Confirm published state in workflow list/details.
### 3) Trigger workflow externally
1. Copy trigger URL/token from workflow settings.
2. Call trigger endpoint from external system.
3. Confirm execution appears in history.
### 4) Regenerate trigger token (when required)
1. Open workflow trigger settings.
2. Regenerate token after suspected leak or rotation policy.
3. Update all upstream systems with the new token URL.
### 5) Unpublish workflow
1. Open workflow settings.
2. Select **Unpublish** to stop new executions.
3. Verify that new trigger attempts no longer execute.
## Expected result
You can operate the full workflow lifecycle (create -> publish -> trigger -> monitor -> unpublish) with controlled token security and execution visibility.
## Troubleshooting
### Workflow does not trigger
* Confirm workflow is published.
* Verify token URL is current (not regenerated since integration setup).
* Confirm external caller sends expected payload shape.
### Execution starts but fails
* Review execution history details for failing step.
* Validate dependencies/integrations used by workflow action.
* Re-test with minimal payload.
### Feature unavailable/permission denied
* Confirm plan includes workflows.
* Confirm user role has workflow access in this workspace.
If unresolved, contact [support@voqo.ai](mailto:support@voqo.ai) with workspace ID, workflow ID, execution ID (if any), and timestamp.
## Related docs
* [Workflow Concepts and Safety](workflow-concepts-and-safety)
* [Workflow Troubleshooting](workflow-troubleshooting)
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
# Workflow Concepts and Safety
Source: https://docs.voqo.ai/tutorials/workflows/workflow-concepts-and-safety
Understand workflow states, trigger token security, and execution model expectations.
## Workflow model
* **Draft**: editable, not externally executable
* **Published**: executable via internal/external triggers
* **Unpublished**: retained configuration, execution disabled
## Trigger token security
* Treat trigger URLs as bearer secrets.
* Never expose token URLs in public docs, screenshots, or client-side logs.
* Rotate tokens if compromised or shared with the wrong party.
## Execution history
* Every trigger should produce an execution record.
* Execution records provide status and debugging context.
* Keep execution review in standard incident process for failed automations.
## Plan and role boundaries
* Workflow access depends on plan entitlement and workspace role.
* Support should verify plan and role before debugging workflow behavior.
## Related docs
* [Build, Publish, and Trigger Workflows](build-publish-and-trigger-workflows)
* [Workflow Troubleshooting](workflow-troubleshooting)
* [Plan and Permission Matrix](../admin/plan-and-permission-matrix)
# Workflow Troubleshooting
Source: https://docs.voqo.ai/tutorials/workflows/workflow-troubleshooting
Fix publish, trigger, token, and execution-history issues for workflow automation.
## Symptom: trigger returns error
* Confirm workflow is published.
* Confirm trigger token is current and not revoked.
* Validate request payload format.
## Symptom: trigger accepted but no execution shown
* Refresh workflow execution history.
* Verify workspace context and workflow ID.
* Re-run with minimal payload and compare.
## Symptom: workflow unavailable
* Check plan entitlement.
* Check role permissions.
* Confirm feature visibility in selected workspace.
## Escalation checklist
* Workspace ID
* Workflow ID
* Execution ID (if present)
* Trigger timestamp and timezone
* Request sample + error response
## Related docs
* [Build, Publish, and Trigger Workflows](build-publish-and-trigger-workflows)
* [Workflow Concepts and Safety](workflow-concepts-and-safety)
* [Troubleshooting Hub](../troubleshooting/index)