# Billing and Payments
Source: https://help.withallo.com/en/billing/billing-and-payments
Invoices, payment methods, and billing information
## How billing works
Your billing depends on where you subscribed:
**App Store (iOS):**
* Billed by Apple
* Charges appear on Apple account
* Manage through iPhone settings
**Play Store (Android):**
* Billed by Google
* Charges appear on Google account
* Manage through Play Store
**Web/Desktop (Stripe):**
* Billed directly by Allo via Stripe
* Charges appear as "Allo" or "The Mobile First Company"
* Manage through billing portal
***
## Get your invoices
### Subscribed in the app
## Apple invoices
**Invoices sent by Apple:**
* To your Apple ID email
* Check App Store purchase history
* Receipt in email from Apple
**View purchase history:**
1. iPhone Settings
2. Tap your name at top
3. Media & Purchases
4. View Account
5. Purchase History
6. Find Allo subscription
**Download invoice:**
* Open email from Apple
* Subject: "Your receipt from Apple"
* PDF attachment included
* Or request from Apple support
## Google invoices
**Invoices sent by Google:**
* To your Google account email
* Check Play Store order history
* Receipt in email from Google
**View order history:**
1. Go to [play.google.com/store/account/orderhistory](https://play.google.com/store/account/orderhistory)
2. Find Allo subscription
3. Click on order
4. View or download receipt
**Download invoice:**
* Open email from Google Play
* Subject: "Your Google Play Order Receipt"
* PDF or view in browser
### Subscribed on web
**Stripe invoices:**
**Automatic email:**
* Sent immediately after each payment
* From: [receipts@stripe.com](mailto:receipts@stripe.com)
* Subject: "Your Allo invoice"
* PDF attachment included
**Where to find your invoices:**
1. Open the Allo desktop or web app
2. Go to Settings > Billing
3. In the **Invoices** section, click "View invoices" (or "Manage" on your subscription)
4. The Stripe billing portal opens with your full invoice history
5. Open any invoice to view it or download the PDF
Only the **workspace owner** can open the billing portal and access invoices. Team admins, managers, and members don't have billing access — they'll see a note pointing them to the owner. Ask your workspace owner if you need a copy.
**Missing invoice?**
* Check spam/junk folder
* Search for "Allo" or "Stripe" in email
* Contact support with payment date
***
## Payment methods
### View and update payment
## Apple payment
**Payment managed by Apple:**
* Cannot change in Allo app
* Update in iPhone Settings
**Update payment method:**
1. iPhone Settings
2. Tap your name
3. Payment & Shipping
4. Add or update card
5. Changes apply to all Apple subscriptions
## Google payment
**Payment managed by Google:**
* Cannot change in Allo app
* Update in Google account
**Update payment method:**
1. Go to [pay.google.com](https://pay.google.com)
2. Payment methods
3. Add or update card
4. Changes apply to all Google subscriptions
## Stripe payment
**Update in billing portal:**
1. Desktop app > Settings > Billing
2. Click "Manage subscription"
3. Opens Stripe portal
4. Payment methods section
5. Add new card or update existing
6. Save changes
**Accepted cards:**
* Visa
* Mastercard
* American Express
* Discover
***
## Billing cycles
### Monthly billing
**How it works:**
* Charged same day each month
* Example: Subscribe Jan 15 → charged 15th monthly
* Automatic renewal
* Cancel anytime
**Pro-rated charges:**
* Adding seats mid-month → partial charge now, full next month
* Upgrading plan → difference charged immediately
### Annual billing
**How it works:**
* Charged once per year
* One-year commitment
* Better value (save up to 29%)
* Automatic renewal after year
**Reminder:**
* Email sent before renewal
* 7 days notice
* Cancel before renewal if needed
***
## Failed payments
### What happens
**If payment fails:**
**Day 1:**
* Payment attempt fails
* Email notification sent
* Service continues temporarily
**Day 3:**
* Automatic retry
* Second email notification
**Day 7:**
* Final retry attempt
* Service may be suspended
* Final notice email
**After 7 days:**
* Account suspended
* Cannot make/receive calls
* Data preserved for 90 days
### Fix payment issues
**Steps to resolve:**
1. **Update payment method**
* Follow instructions above for your platform
* Add valid card with sufficient funds
2. **Payment retries automatically**
* Once method updated
* Usually within 24 hours
* Service restored immediately
3. **Contact support if issues persist**
* We can manually retry
* Help resolve billing issues
* Restore access quickly
***
## Taxes and VAT
### United States
**Sales tax:**
* Applied based on billing address
* Varies by state
* Shown at checkout
* Included in invoice
### European Union
**VAT (Value Added Tax):**
* Applied to EU customers
* Rate depends on country
* Business customers can provide VAT ID
* Reverse charge may apply
**Provide VAT number:**
* Contact support with VAT ID
* We'll add to your account
* Future invoices adjusted
### Other countries
**Local taxes:**
* Applied where required by law
* Shown at checkout
* Included in final price
***
## Company information
### Update billing details
**For proper invoicing:**
**Web subscriptions:**
1. Billing portal > Account details
2. Update company name
3. Add business email
4. Add VAT number (if applicable)
5. Update address
6. Save changes
**App subscriptions:**
* Managed through Apple/Google
* Cannot customize invoice details
* Contact Apple/Google support
***
## Refunds
Full details, including trial charges and processing times: [Refund policy](/en/billing/refund-policy)
### Refund policy
**General policy:**
* No refunds for partial billing periods
* Monthly: Cancel anytime, no refund for current month
* Annual: One-year commitment, no refund for early cancellation (7-day window for special cases)
**We refund in full:**
* Technical issues preventing service use
* Billing errors
* Duplicate charges
* Charges after a completed cancellation, including trials you meant to cancel
**Request refund:**
1. Contact support
2. Explain situation
3. Provide payment details
4. We'll review and respond
### Platform-specific refunds
**App Store:**
* Request from Apple directly
* Apple decides on refunds
* We cannot process App Store refunds
**Play Store:**
* Request from Google
* Google decides on refunds
* We cannot process Play Store refunds
**Stripe/Web:**
* Contact Allo support
* We process directly
* Faster resolution
***
## Payment history
### View past payments
**Web subscriptions:**
1. Billing portal
2. Invoices section
3. Complete payment history
4. Download any invoice
**App subscriptions:**
* View in App Store or Play Store
* Purchase history
* Download receipts
***
## Troubleshooting
**Check:**
* Spam/junk folder
* Correct email on file
* Payment actually processed
**Solutions:**
* Check App Store/Play Store receipts
* Access Stripe billing portal
* Contact support to resend
**Possible reasons:**
* Pro-rated charges for mid-cycle changes
* Added seats
* Upgraded plan
* Taxes added
**Verify:**
* Check invoice details
* Review recent account changes
* Contact support if error
**If charged twice:**
* Contact support immediately
* Provide transaction dates
* Include amounts
* We'll investigate and refund if confirmed
**Common cause:**
* Multiple subscriptions (app + web)
* Check all platforms
**For EU business customers:**
* Contact support with VAT number
* We'll add to account
* Resend invoice with VAT details
* Future invoices include VAT number
**Common reasons:**
* Insufficient funds
* Expired card
* Bank blocking charge
* Wrong billing address
**Solutions:**
* Update payment method
* Contact your bank
* Try different card
* Contact support if persists
***
## Need help with billing?
**Contact support:**
* Email: [support@withallo.com](mailto:support@withallo.com)
* In-app: Settings > Support
* Response time: Under 24 hours
**Include in your message:**
* Account email
* Issue description
* Payment date (if applicable)
* Invoice number (if available)
***
## Related topics
Compare plans and features
Upgrade, downgrade, or cancel
Add or remove team members
Get help with billing issues
# How the free trial works
Source: https://help.withallo.com/en/billing/free-trial
Trial length, what's included, what's restricted, and how billing starts
## The basics
* **7 days**, on the Business plan
* Full access to the apps and features: desktop, mobile, AI Receptionist, team features
* A reminder email is sent 1 day before the trial ends
* Cancel anytime during the trial and you won't be charged
## Why a credit card is required
Phone service is a regulated industry: asking for a valid card at signup is one of the ways we verify that accounts are authentic and keep the network safe from fraud and spam. You won't be charged before the end of the 7 days.
## What's restricted during the trial
For the same security reasons, some capabilities are limited until you're on a paid subscription:
* **International calls** are disabled during the trial
* **SMS sending** is restricted to a low daily volume
* **Outbound calling** is capped at **100 minutes per rolling 24-hour window**
This is normal and it protects trial numbers from being abused. If you want the full experience before the 7 days are up, you can switch to a paid subscription at any moment: [contact us](/en/support/contact) and we'll do it for you right away.
## When the trial ends
* Your card is charged and your subscription starts automatically
* If you cancelled before the end, nothing is charged: your access simply stops. You may still see payment prompts in the app after cancelling, but no payment is taken
* Your trial number stays reserved for a **3-day grace period** after an expired trial: reactivate within that window to keep it
## Cancel the trial
On [web.withallo.com](https://web.withallo.com), go to **Settings > Billing**.
Open your subscription and choose **Manage**, then cancel.
You'll receive a cancellation confirmation by email. Keep it.
Subscribed on iPhone or Android? Cancel through your Apple or Google subscription settings instead: [how to cancel](/en/billing/manage-subscription#cancel-subscription).
## Charged after the trial you meant to cancel?
It happens, and we make it right: see the [refund policy](/en/billing/refund-policy). Contact us within a few days of the charge.
## Need more time?
If SMS verification or number porting delays ate into your testing window, we can extend your trial: reply to your onboarding email or [contact support](/en/support/contact).
# International calling
Source: https://help.withallo.com/en/billing/international-calling-rates
How international calling works on Allo: enabling it on a number, buying credits, auto-recharge, checking rates, and what gets billed.
International calling on Allo lets you reach any country in the world. Each destination has a transparent per-minute rate, billed from a credit balance on your account. Some popular destinations are free.
***
## Enable international calling on a number
International calling is off by default on every phone number. An admin or manager has to turn it on before anyone on the team can place an international call from that number.
Go to the phone number you want to enable and open its **Settings**.
Switch the toggle and save. Flip it off the same way when you need to disable it.
Once enabled, every member assigned to that number can place international calls.
***
## Credits and rates: where to find them
Everything related to international credits and rates lives in one place: **Settings → Billing**, in the **Credits** section. From there you can:
* **See your current credit balance.**
* **Buy credits** manually, any time.
* **Set up or manage auto-recharge.** A fixed top-up amount is added automatically when your balance hits zero.
* **Open the live rate list for the selected line.** Click the "rates for the selected line" link to see the exact per-minute price for every destination, for that specific number.
You can also browse every rate publicly at [rates.withallo.com](https://rates.withallo.com).
***
## How calls are billed
Every international destination has a transparent per-minute rate. When you place a call, the rate for that destination is deducted from your credit balance in real time.
Some popular destinations are marked as **Free** in the rate list. They do not consume credits.
If your balance hits zero during a call, the call ends and you're prompted to top up. If auto-recharge is on, a new top-up is triggered automatically.
***
## Free destinations
A handful of destinations are free and do not consume credits when you call them. The exact list depends on your Allo number's origin country. Free destinations are marked as **Free** in the rate list inside Billing and on [rates.withallo.com](https://rates.withallo.com).
***
## What's not supported
**International SMS.** SMS can only be sent to numbers in the same country as the sender.
**Emergency numbers.** International emergency numbers (112, 999, etc.) are not accessible through VoIP. Use your native dialer for emergencies.
A small set of high-risk destinations (satellite phones, known-fraud prefixes) is blocked for account safety.
***
## FAQ
### Getting started
Any team member assigned to a number on which an admin has enabled international calling.
No. Inbound international calls are always free on all plans.
An admin opens the phone number's Settings and toggles International calling on. Once enabled, every team member assigned to that number can place international calls, and the Billing section shows the rates and credit balance.
### Credits and billing
It depends on your expected usage. A $25 top-up typically covers 20 to 35 hours of calls to popular destinations, $50 covers 35 to 70 hours. If you're not sure, start small and enable auto-recharge so calls are never interrupted.
No. Credits never expire and stay on your account until used.
Credits are non-refundable, but they never expire, so there's no deadline to use them.
The call ends and the user is prompted to top up. If auto-recharge is on, a new top-up is triggered automatically and the next call can go through.
Every international call shows the exact amount deducted in your call history.
Rates are displayed in USD on [rates.withallo.com](https://rates.withallo.com) and in the currency of the number's home country inside the app. Top-ups are charged to your payment method in your local currency, with conversion handled automatically.
### Rates and destinations
The per-minute rate depends on the country of origin of your Allo number. Our carrier wholesale cost is different for a US number, a French mobile number, a French landline, a UK number, etc. The Credits section of Billing shows the exact rate list for each of your numbers.
In some cases, yes. If you frequently call a destination that is free from a French mobile number but paid from a US number, it may be worth placing those calls from your French line. The per-origin rate comparison is public on [rates.withallo.com](https://rates.withallo.com).
Yes, typically they go down. As Allo grows and we negotiate better deals with our carrier partners, rates drop and more destinations move to the free list. The Billing section and [rates.withallo.com](https://rates.withallo.com) always reflect the latest pricing.
In theory yes, if a carrier raises our wholesale cost beyond what we can absorb. In practice this is rare. We notify customers ahead of any change that would impact pricing.
### Team and admin
You can disable international calling entirely on a number from its Settings. More granular per-destination blocks are not available yet. If you need this, contact support.
Credits are account-wide. All international calls from any of your numbers draw from the same credit balance.
### Other
Leaving a voicemail requires the full call to be placed and connected, so it's billed at the same per-minute rate as a regular call.
No. The rate is per minute of connection, regardless of whether you're on Wi-Fi or mobile data.
Both. International calling works from any Allo client (desktop, iOS, Android, web), and the per-minute rate is the same across all of them.
# Manage Subscription
Source: https://help.withallo.com/en/billing/manage-subscription
Plans, pricing, billing, and subscription management
## Plans and pricing
Allo offers two plans designed for different business needs. Both include core features with Business plan adding advanced capabilities.
## Starter Plan
Perfect for solo entrepreneurs and small businesses getting started with professional phone service.
### Pricing
**Annual billing only:**
* US: \$16/month (billed annually, \$192/year)
* France: 16€/month (billed annually, 192€/year)
### What's included
iOS and Android apps included
One business number assigned
Automatic recording and transcription
AI-generated call summaries
Automatic spam detection
Custom voicemail messages
Interactive menu system
Set availability schedule
Transfer to team or external numbers
Automatic call summaries via email
Connect with popular CRMs
### What's NOT included
* Desktop app (Business plan only)
* AI Receptionist (Business plan only)
* SMS sending (receive only)
* French mobile numbers 06/07 (Business plan only)
* Team performance dashboard (Business plan only)
### Best for
* Solo entrepreneurs
* Freelancers
* Small businesses with one user
* Testing Allo before upgrading
## Business Plan
For growing teams that need advanced features like AI receptionist, SMS, and desktop apps.
### Pricing
**Monthly:**
* US: \$45/month
* France: €45/month
* Canada: CAD \$59/month
* Switzerland: CHF 45/month
**Yearly:** (Save 29%)
* US: $384.99/year (saves $155)
* France: €420/year (35€/month, saves €120)
* Canada: CAD $539.99/year (saves $168)
* Switzerland: CHF 400/year (saves CHF 140)
### Free trial
Try Business plan free for 7 days. Credit card required. Cancel anytime.
* 7 days completely free
* Full access to all features (international calls and SMS restricted during trial)
* Reminder email 1 day before charges
* No commitment required
[How the trial works](/en/billing/free-trial)
### What's included
**Everything in Starter, PLUS:**
Mac and Windows applications
Access from any browser
AI receptionist with custom knowledge
Full SMS capabilities
Premium French mobile numbers
Performance analytics for your team
Review team calls (not real-time yet)
Configure summary email content
### Best for
* Growing sales teams
* Customer support teams
* Businesses needing 24/7 coverage
* Teams requiring desktop access
* Businesses sending SMS campaigns
***
## Switch plans
### Upgrade to Business
Go to [withallo.com/pricing](https://withallo.com/pricing)
Choose monthly or yearly billing
Use your existing Allo credentials
Your account upgrades immediately. All data and settings are preserved.
**If subscribed via Apple:**
1. Cancel your Apple subscription first
2. Then subscribe on [withallo.com](https://withallo.com) using same credentials
3. Your session and data remain intact
### Downgrade to Starter
Contact support to downgrade from Business to Starter plan.
**What happens when you downgrade:**
* Lose access to Business-only features
* Desktop/web app access removed
* AI Receptionist disabled
* SMS sending disabled (receive still works)
* Pricing adjusts on next billing cycle
### Switch to yearly
Visit [withallo.com/pricing](https://withallo.com/pricing)
Choose your plan with yearly billing
If subscribed via Apple, cancel first
Use same credentials to keep your session
**Savings:**
* Starter: \$16/month, billed annually (\$192/year)
* Business yearly: Save \$155/year (29% discount)
***
## Billing and payments
### Payment methods
**Stripe (website subscriptions):**
* Credit cards (Visa, Mastercard, Amex)
* Debit cards
* Automatic monthly or yearly billing
**Apple App Store (iOS):**
* Apple Pay
* iTunes account payment methods
* Billed through Apple
**Google Play Store (Android):**
* Google Pay
* Play Store payment methods
* Billed through Google
### Update payment method
**For Stripe subscriptions:**
1. Go to [withallo.com](https://withallo.com)
2. Sign in to your account
3. Navigate to billing settings
4. Update payment method
**For Apple subscriptions:**
1. Open iPhone Settings
2. Tap your name at top
3. Select Subscriptions
4. Manage payment info
**For Google subscriptions:**
1. Open Google Play Store
2. Tap profile icon
3. Go to Payments & subscriptions
4. Manage payment methods
### Invoices and receipts
**Stripe subscriptions:**\
Invoices are automatically sent to your email after each payment.
**Apple subscriptions:**\
Receipts sent to email associated with your Apple ID.
**Google subscriptions:**\
Receipts available in Google Play order history.
**Download invoices:**\
Access past invoices in your account billing section.
[Learn how to get invoices](/en/billing/billing-and-payments#get-your-invoices)
***
## Cancel subscription
### How to cancel
**For subscriptions through withallo.com:**
Go to [web.withallo.com](https://web.withallo.com)
Click Settings in the menu
Go to billing section
Click "Handle my subscription"
Follow prompts to cancel
**Cancellation policy:**
* Monthly: Access until end of current billing period
* Yearly: No refund, access until end of annual term
* No cancellation fees
**For iOS subscriptions:**
Launch Allo on your iPhone
Tap Settings tab at bottom
Tap Profile section
Tap "Manage my subscription"
Follow Apple's cancellation flow
**Alternative method:**
1. Open iPhone Settings
2. Tap your name
3. Select Subscriptions
4. Find Allo
5. Tap Cancel Subscription
**For Android subscriptions:**
Launch Play Store on your device
Tap profile icon > Payments & subscriptions > Subscriptions
Find Allo in your subscription list
Tap "Cancel subscription"
Complete cancellation process
### What happens after cancellation
**Immediate effects:**
* No new charges
* Cancellation confirmed via email
**Access continues:**
* Use Allo until end of billing period
* All features remain available
* Data remains accessible
**After period ends:**
* Account becomes inactive
* Cannot make or receive calls
* Data preserved for 90 days
* Can reactivate anytime
**Important:**\
Deleting the app does NOT cancel your subscription. You must cancel through proper channels.
***
## Additional costs
### Extra phone numbers
**Standard pricing:**\
\$5/month (€5, £5, CAD \$7, CHF 5) for most countries
**Premium pricing:**
* Germany landline: \$15/month
* Belgium numbers: from 5€/month, on request and subject to stock
* Portugal mobile: \$45/month
* Australia numbers: \$45/month
[Learn more about phone numbers](/en/billing/phone-numbers)
### Additional team members
**Per-seat pricing:**
* Each team member costs the same as your plan
[Learn more about team management](/en/billing/team-management)
### SMS costs
**Included:**
* SMS receive (both plans)
* SMS send (Business plan only)
**Limits:**
* During trial: SMS limited to reduce fraud
* After trial: 150 SMS/day via app, 25/day via API
* No additional SMS charges
### What's included (no extra cost)
* All integrations
* Unlimited call recordings
* Unlimited transcripts
* AI summaries
* Email notifications
* Call forwarding
* Voicemail
* IVR setup
***
## Troubleshooting
**Common causes:**
* Insufficient funds
* Expired card
* Card declined by bank
* Incorrect billing address
**Solution:** Update your payment method and retry. Contact support if issues persist.
**Check these items:**
* Using same email address
* Cancel Apple/Google subscription first if applicable
* Payment method is valid
**Solution:** Try upgrading directly on withallo.com/pricing
**What happened:** Cancellation may not have processed, or charge was already scheduled.
**Solution:** Contact support immediately with proof of cancellation for refund. See the [refund policy](/en/billing/refund-policy).
**Not available:** Allo doesn't offer subscription pausing. You must cancel and resubscribe later.
**Alternative:** Cancel before next billing cycle and reactivate when ready.
**Policy:** Annual subscriptions are non-refundable. You keep access until the year ends.
**Exception:** Contact support within 7 days of purchase for special cases.
Yes. If you need more time to evaluate Allo, especially when SMS verification or porting delays cut into your testing window, reply to your onboarding email or [contact support](/en/support/contact) and we'll extend it.
***
## Need help?
View detailed pricing and features
Get help with billing questions
# Plans and Pricing
Source: https://help.withallo.com/en/billing/plans-and-pricing
Compare Solo, Business and Ultra. Per-user pricing, no setup fees, no contracts.
Allo has three plans: **Solo**, **Business** and **Ultra**. Every plan includes AI transcription, AI summaries, the AI Receptionist and native CRM sync at no extra cost. Yearly billing saves up to 29%.
## Plans at a glance
### \$18/month
For 1 user, billed yearly
Best for solopreneurs and freelancers. 30-day money-back guarantee.
**Coming soon**
### \$32/user/month
Billed yearly, or \$45 billed monthly
Best for modern sales and support teams. Most popular plan.
**Try free for 7 days →**
### \$100/user/month
Billed yearly, or \$120 billed monthly
Best for large teams and contact centers.
**Contact sales →**
The cards above show USD, as on [withallo.com/pricing](https://withallo.com/pricing). See [all prices by currency](#prices-by-currency) below. The exact amount for your country is displayed at checkout.
***
## Prices by currency
All amounts are **per user, per month**. Solo is a single user, billed yearly only. For Business and Ultra, the yearly column is the per-month price when billed yearly (up to 29% less than monthly).
| Currency | Solo (billed yearly) | Business yearly | Business monthly | Ultra yearly | Ultra monthly |
| -------- | :------------------: | :-------------: | :--------------: | :----------: | :-----------: |
| USD (\$) | \$18 | \$32 | \$45 | \$100 | \$120 |
| EUR (€) | 14€ | 35€ | 45€ | 100€ | 120€ |
| GBP (£) | £11 | £20 | £30 | £100 | £120 |
| CAD | CA\$25 | CA\$45 | CA\$59 | CA\$100 | CA\$120 |
| CHF | 17 CHF | 34 CHF | 45 CHF | 100 CHF | 120 CHF |
| AUD | A\$17 | A\$45 | A\$65 | A\$100 | A\$120 |
Prices are charged in your local currency based on your billing country. International calls are billed separately, per minute, see the [international calling rates](/en/billing/international-calling-rates).
***
## What each plan includes
### Solo
Your first real business phone, for one user.
* 1 business number included
* Keep your number, free porting
* Mobile, desktop and web apps
* Unlimited national calls
* Call recording
* Send and receive SMS
* Native CRM autofill
* AI summaries and transcripts
* AI Receptionist
* AI Appointment Booker
* Email support
* Reliable calls, 99.94% uptime
### Business
Everything in Solo, plus:
* Unlimited users, a number each
* CRM sync: [HubSpot](/en/integrations/hubspot), [Pipedrive](/en/integrations/pipedrive), [Attio](/en/integrations/attio), [Salesforce](/en/integrations/salesforce) and more
* Collaborative inbox and notes
* [Power Dialer](/en/features/power-dialer)
* Custom AI summary templates
* AI call tags, synced to your CRM
* AI post-call actions
* [Allo MCP](/en/integrations/mcp): connect to Claude and ChatGPT
* Call analytics and team leaderboards
* Live chat and priority support
### Ultra
Everything in Business, plus:
* AI SDR
* AI Customer Support Agent
* AI Lead Qualifier
* AI CRM Manager
* AI Sales Coach
* AI Data Analyst
* Create your own AI agent
* Custom analytics dashboards
* Custom AI voice for your IVR
* Slack support
* Dedicated account manager
* Custom onboarding and SLA
* Granular admin controls
***
## Compare plans
### Phone numbers
| | Solo | Business | Ultra |
| ------------------------------ | :--------: | :-----------------: | :-----------------: |
| Business number | 1 included | 1 included per user | 1 included per user |
| Keep your number, free porting | ✅ | ✅ | ✅ |
### Calling
| | Solo | Business | Ultra |
| ------------------------------ | :-----------: | :-----------: | :-----------: |
| Mobile, desktop and web apps | ✅ | ✅ | ✅ |
| Unlimited national calls | ✅ | ✅ | ✅ |
| Call recording | ✅ | ✅ | ✅ |
| Picture-in-picture call window | ✅ | ✅ | ✅ |
| Click-to-call extension | — | ✅ | ✅ |
| Power Dialer | — | ✅ | ✅ |
| International calling | Pay as you go | Pay as you go | Pay as you go |
### Messaging
| | Solo | Business | Ultra |
| ---------------------------- | :-----------: | :-----------: | :-----------: |
| Inbound SMS | Unlimited | Unlimited | Unlimited |
| Outbound SMS | 150/day | 150/day | 150/day |
| 10DLC registration (US) | \$24 one-time | \$24 one-time | \$24 one-time |
| Missed-call text-back | ✅ | ✅ | ✅ |
| Internal notes and @mentions | — | ✅ | ✅ |
### AI
| | Solo | Business | Ultra |
| -------------------------------------------------------------------------------- | :--: | :------: | :---: |
| AI summaries and transcripts | ✅ | ✅ | ✅ |
| AI Receptionist | ✅ | ✅ | ✅ |
| AI Appointment Booker | ✅ | ✅ | ✅ |
| Custom AI summary templates | — | ✅ | ✅ |
| AI call tags, synced to CRM | — | ✅ | ✅ |
| AI post-call actions | — | ✅ | ✅ |
| Allo MCP (Claude, ChatGPT) | — | ✅ | ✅ |
| AI agents (SDR, Support, Lead Qualifier, CRM Manager, Sales Coach, Data Analyst) | — | — | ✅ |
| Create your own AI agent | — | — | ✅ |
### Analytics
| | Solo | Business | Ultra |
| --------------------------- | :--: | :------: | :---: |
| Call analytics | — | ✅ | ✅ |
| Team leaderboards | — | ✅ | ✅ |
| Custom analytics dashboards | — | — | ✅ |
### Support
| | Solo | Business | Ultra |
| ------------------------------ | :--: | :------: | :---: |
| Email support | ✅ | ✅ | ✅ |
| Live chat and priority support | — | ✅ | ✅ |
| Slack support | — | — | ✅ |
| Dedicated account manager | — | — | ✅ |
| Custom onboarding and SLA | — | — | ✅ |
The full feature-by-feature comparison lives on [withallo.com/pricing](https://withallo.com/pricing).
***
## Free trial
Full access to all Business features during the trial. Credit card required, and you won't be charged until the trial ends. You get an email reminder 1 day before the charge, and you can cancel anytime during the trial.
[How the trial works →](/en/billing/free-trial)
***
## Billing basics
You pay per user. Add or remove team members anytime, and changes are prorated so you never pay for seats you don't use.
Upgrade, downgrade or cancel anytime. Yearly billing costs less per month, monthly billing keeps you flexible.
### Additional costs
* **International calls** are billed per minute, on every plan. See the [international calling rates](/en/billing/international-calling-rates).
* **Extra phone numbers** can be added to any plan. See [buying additional numbers](/en/phone-numbers/buy-additional-numbers).
* **10DLC registration** is a \$24 one-time fee required by US carriers to send SMS from a US number. See the [SMS overview](/en/phone-numbers/sms-overview).
***
## Frequently asked questions
**Choose Solo** if you work alone and want a business line with AI summaries, the AI Receptionist and CRM autofill.
**Choose Business** if you work with a team, or need CRM sync, the Power Dialer, call analytics or the MCP.
**Choose Ultra** if you run calls at scale and want AI agents (SDR, support, lead qualification), custom dashboards and a dedicated account manager.
Not sure? Start the Business trial, then adjust.
Included. Every plan comes with AI transcription, AI summaries, the AI Receptionist and native CRM sync at no extra cost. Agentic features unlock as you move from Solo to Business to Ultra.
Both, for Business and Ultra: yearly billing costs less per month (up to 29% less). Solo is billed yearly only. You can switch billing or plan whenever you want.
Yes. Upgrades take effect immediately with prorated billing. Downgrades take effect at the end of the billing cycle.
[How to switch plans →](/en/billing/manage-subscription)
You're billed per seat. Add or remove team members whenever you need. Changes are prorated, so you never pay for seats you don't use.
No. Solo and Business start in minutes straight from the app. Ultra and larger migrations get a dedicated onboarding when you contact sales.
No. We port your existing numbers for free, usually live within minutes. New numbers can be generated instantly in 80+ countries.
[How porting works →](/en/phone-numbers/port-existing-number)
You can cancel anytime. Access continues until the end of the paid period, and there are no refunds for partial periods ([refund policy](/en/billing/refund-policy)). Your data is kept for 90 days and you can resubscribe anytime.
[Cancellation policy →](/en/billing/manage-subscription#cancel-subscription)
Credit cards (Visa, Mastercard, Amex, Discover), Apple Pay (App Store), Google Pay (Play Store) and Stripe on the web.
[Billing and payments →](/en/billing/billing-and-payments)
***
## Ready to get started?
Set up your number and make your first call in minutes. AI takes care of the notes, your CRM and the follow-ups.
For Ultra, larger teams or a guided migration.
Already have an account
Per-minute pricing by country
CRMs and 1000+ tools
# AI Assistant
Source: https://help.withallo.com/en/features/ai-assistant
Chat with AI about your calls to get insights, draft follow-ups, and find information
## What is AI Assistant
An intelligent chatbot that helps you work with your calls. Ask questions about what was said, draft follow-up messages, extract tasks, or search across all your conversations.
**Think of it as:** ChatGPT or Claude, but with full access to your call history.
**Available on:** All plans (Starter and Business)
***
## Two ways to use AI Assistant
## Chat about a specific call
Open any call and chat with AI about that conversation only.
### How to access
1. Go to Inbox
2. Open any call
3. Tap AI Assistant icon
4. Start chatting
### What AI knows
**Access to:**
* That specific call's recording
* Full transcript of that call only
* All details discussed in that conversation
**Does not know:**
* Other calls
* Your call history
* Information from other conversations
### What you can do
**Draft follow-ups for that caller:**
**You ask:**\
"Draft a follow-up email thanking Sarah for the call and confirming our next meeting."
**AI provides:**\
Complete email draft based on what was discussed in that call.
***
**Extract action items:**
**You ask:**\
"What are my action items from this call?"
**AI provides:**
* Tasks you committed to
* Deadlines mentioned
* Follow-up actions needed
***
**Remember details:**
**You ask:**\
"What budget did they mention?"
**AI answers:**\
"The client mentioned a budget of \$15,000 for the project."
**You ask:**\
"When do they need this done by?"
**AI answers:**\
"They need the project completed by March 15th."
***
**Draft SMS:**
**You ask:**\
"Write a short text to confirm our meeting tomorrow at 2 PM."
**AI provides:**\
"Hi Sarah, confirming our meeting tomorrow at 2 PM. Looking forward to it!"
***
**Summarize conversation:**
**You ask:**\
"Summarize the main points we discussed."
**AI provides:**\
Concise summary of key topics and decisions.
### Example conversation (per call)
**You:** What were their main concerns about switching to Allo?
**AI:** Based on this call, they raised three main concerns:
1. **Team adoption** - Worried their sales team won't want to change from current system
2. **Data migration** - Asked how to import existing call history
3. **Cost** - Current system is \$30/user, want to ensure Allo provides better value
They seemed most concerned about team adoption.
**You:** Draft an email addressing the team adoption concern.
**AI:** Here's a draft:
```
Hi Sarah,
Thank you for discussing your team's needs today. I understand
your concern about team adoption - it's one we hear often.
Here's how we typically handle this:
- Free training session for your entire team
- Dedicated onboarding specialist for first 2 weeks
- 7-day trial so team can test before committing
- Mobile-first design means most reps find it easier than
desktop systems
I'd be happy to set up a demo specifically focused on the
user experience. Would Tuesday work?
Best,
[Your name]
```
Would you like me to adjust the tone or add anything?
### Best for
* Understanding one specific call
* Drafting immediate follow-ups
* Quick reference during next call with same person
* Extracting action items right after call
## Chat about all your calls
Access AI from Inbox to search and analyze across your entire call history.
### How to access
1. Go to Inbox
2. Tap AI icon (top right of search bar)
3. Start asking questions
### What AI knows
**Access to:**
* All calls on that specific number
* Complete call history
* All transcripts and summaries
* Full conversation database
**Can search:**
* Across multiple calls
* By date ranges
* By topics discussed
* By people mentioned
### What you can do
**Find information across calls:**
**You ask:**\
"Which prospects mentioned they're interested in our Enterprise plan?"
**AI searches all calls and provides:** List of calls where Enterprise was discussed with key details.
***
**Complex calculations:**
**You ask:**\
"What's the total pipeline value from calls this month?"
**AI calculates:**\
Adds up all deal values mentioned and provides breakdown.
***
**Pattern analysis:**
**You ask:**\
"What's the most common objection I'm hearing from prospects?"
**AI analyzes:**\
Reviews all calls and identifies recurring concerns.
***
**Find specific details:**
**You ask:**\
"What did John from ABC Company say about implementation timeline last week?"
**AI retrieves:**\
Specific information from that conversation.
***
**Track commitments:**
**You ask:**\
"Show me all calls where I promised to follow up this week."
**AI lists:**\
All calls with pending follow-ups and deadlines.
### Example conversation (global)
**You:** Which prospects mentioned they currently use Aircall?
**AI:** I found 3 calls where prospects mentioned using Aircall:
**1. John Smith (ABC Company) - Nov 15, 2:34 PM**
* Currently on Aircall but frustrated with pricing
* Paying \$1,200/month for 12 users
* Contract renews in February
* Interested in switching
**2. Maria Garcia (XYZ Corp) - Nov 12, 10:15 AM**
* Using Aircall for 2 years
* Happy with features but wants AI capabilities
* Budget approved for new solution
**3. Tom Wilson (123 Industries) - Nov 8, 3:45 PM**
* Evaluated Aircall last year
* Chose RingCentral instead due to pricing
* Still open to alternatives
Would you like more details on any of these calls?
***
**You:** Calculate total pipeline value from calls with budget over \$10,000.
**AI:** Analyzing calls with budgets over \$10,000...
**Total pipeline: \$127,000**
**5 qualified opportunities:**
1. ABC Company - \$35,000 (John Smith)
* Proposal sent Nov 15
* Decision by Dec 1
2. XYZ Corp - \$28,000 (Maria Garcia)
* Demo scheduled Nov 20
* Evaluation phase
3. Tech Solutions - \$25,000 (David Lee)
* Contract review stage
* Starts Q1 2025
4. Global Industries - \$22,000 (Sarah Chen)
* Waiting on approval
* Timeline: January
5. Premium Services - \$17,000 (Mike Johnson)
* Technical review
* POC next month
**Average deal size:** \$25,400
Would you like me to analyze close probability or timeline details?
### Best for
* Finding information across multiple calls
* Complex questions and calculations
* Remembering what different prospects said
* Analyzing patterns and trends
* Pipeline analysis
* Preparation before calls (reviewing history)
***
## What AI can do (both modes)
### Draft messages
**AI can write:**
* Follow-up emails
* SMS messages
* Thank you notes
* Meeting confirmations
* Proposal summaries
AI drafts the messages but cannot send them. Copy the text and send manually via email or SMS.
### Extract information
**AI can identify:**
* Action items and tasks
* Deadlines and dates
* Budget amounts
* Decision makers
* Pain points and concerns
* Next steps
### Answer questions
**AI can tell you:**
* What was discussed
* Who said what
* When things were mentioned
* Why decisions were made
* How processes were explained
***
## Tips for best results
### Ask clearly
**Good questions:**
* "What budget did they mention?"
* "Draft a follow-up email for this prospect"
* "List all action items from this call"
* "Find calls where pricing over \$5,000 was discussed"
**Vague questions:**
* "What happened?"
* "Tell me everything"
* "Help me with this"
### Be specific
**Better:** "Draft an SMS to confirm our meeting tomorrow at 2 PM at their office"
**Not as good:** "Write a text message"
### Use follow-ups
**Initial:** "What concerns did they raise?"
*AI responds*
**Follow-up:** "Draft a response addressing the pricing concern"
**Refine:** "Make it shorter and more casual"
### Choose the right mode
**Use Per Call when:**
* Working on one specific conversation
* Just finished a call
* Need immediate follow-up
* Want details from that call only
**Use Global Search when:**
* Need to find something across calls
* Analyzing multiple conversations
* Calculating totals or trends
* Preparing for calls (reviewing history)
***
## Limitations
### What AI cannot do
❌ Send emails or SMS directly\
❌ Access calls from other numbers\
❌ Modify or delete calls\
❌ Make phone calls\
❌ Access external data or internet\
❌ Remember context between chat sessions
Each AI conversation is independent. Starting a new chat means providing context again.
### Per call AI limitations
* Only sees that one call
* Cannot compare with other calls
* Cannot do calculations across calls
* Cannot search your history
### Global AI limitations
* Only searches calls on current number
* Cannot access team members' calls (unless shared)
* Cannot search calls from different numbers
***
## Privacy and data
### What AI knows
**Per-call AI:**
* Only that specific call
* Nothing from other calls
* No personal data beyond what's in the call
**Global AI:**
* All calls on that number
* Complete transcripts
* Call metadata
* Nothing from other numbers or users
### Data security
**All AI processing:**
* Encrypted in transit
* Not stored separately
* Uses same security as your calls
* GDPR compliant
**AI does not:**
* Share data with other users
* Train on your data
* Store conversations permanently
* Access anything outside Allo
***
## Troubleshooting
**Check:**
* Call has been processed (takes 1-2 minutes)
* Transcript is available
* You're on latest app version
* Internet connection active
**Note:**\
AI needs transcript to work. Calls without transcripts won't have AI chat.
**Common causes:**
* Poor audio quality in recording
* Transcript has errors
* AI misunderstood context
**Solution:**
* Listen to recording to verify
* Be more specific in question
* Correct AI and ask again
**Try:**
* Ask more specifically
* Use different keywords
* Specify date range
* Check if information was actually discussed
**Example:**\
Instead of "Did they mention price?" try "What exact amount did they say for the project budget?"
**Refine it:**
* Ask AI to make it more casual/formal
* Request shorter/longer version
* Add specific points to include
* Give example of your style
**You can say:**\
"Make this more casual" or "Add a sentence about our next steps"
**Remember:**
* Only searches calls on current number
* Cannot search other team members' private calls
* Information must exist in transcripts
**Check:**
* Are you on the right number?
* Did that conversation actually happen?
* Was it recorded through Allo?
**Per-call AI opened but need Global:**
* Go back to Inbox
* Tap AI icon in search bar (top right)
* Now you have access to all calls
**Global AI opened but need specific call:**
* Close AI Assistant
* Open the specific call
* Tap AI icon in that call
***
## Related features
Access recordings AI analyzes
AI answers calls too
Sync AI insights to CRM
Team-wide call insights
# AI Receptionist
Source: https://help.withallo.com/en/features/ai-receptionist
An AI agent on your line that answers calls, takes messages, transfers callers, and books meetings
## What the AI receptionist does
The AI receptionist is an AI agent that answers calls on your line. It greets callers, holds a natural conversation, and acts on what they need:
* **Answers questions** using your website, your documents, and the facts you give it
* **Takes messages** and asks the questions you defined, until it has everything you need
* **Transfers callers** to a teammate, another line, or an external number, based on your rules
* **Books meetings** directly in your calendar (Google Calendar, Cal.com, or Calendly)
Each line gets its own agent. The agent you configure belongs to the line you are currently on, so a support line and a sales line can run two different receptionists.
The AI receptionist is included in every paid plan, at no extra cost.
## Set up your agent
Go to **Agents** in the sidebar of the [web app](https://web.withallo.com) or the desktop app, then click **Set up** next to your agent. A guided setup walks you through everything below. Your progress saves as you go, so you can take a call and pick up where you left off.
Pick the name your agent uses on calls and across Allo. You can rename it anytime.
Three settings control how it sounds:
* **Voice**: pick a language, then a voice. You can listen to each one before choosing.
* **Tone of voice**: Friendly, Professional, or Enthusiastic.
* **Answer length**: Concise, Standard, or Detailed. Shorter works well for quick triage, longer for detailed FAQs.
Start from a pre-built agent and tune it for your business:
* **AI Receptionist**: greets callers, routes them to the right person, takes a message, or books a meeting
* **Customer support**: troubleshoots step by step, verifies identity, and transfers to a human when needed
* **Lead qualifier**: qualifies inbound leads, then books a meeting or transfers the hot ones
* **Appointment setter**: confirms the date and time, reads it back, and books it on the calendar
You can also start from blank and write your own instructions.
Enable what your agent can do during a call:
* **Answer questions**: uses your website and documents to answer callers
* **Transfer to a human**: sends important calls to the right person or team ([transfer rules](#transfer-rules))
* **Book meetings**: offers free slots and books directly into your calendar ([meeting booking](#meeting-booking))
Define what the agent collects on every call. It starts with the essentials (full name, reason for calling, best callback time) and you can add your own questions.
Mark a question as **Must get before hanging up** and the agent keeps asking until it has the answer. Leave it as **If it comes up** for optional information.
Three sources, all optional but highly recommended:
* **Websites**: add your pages, the agent reads them to answer questions about your business
* **Files**: upload menus, price lists, or FAQs (PDF or TXT, up to 3 files, 5 MB each)
* **Extra context**: plain-text facts in your own words (office hours, pricing tiers, refund policy)
Write what the agent says when it picks up and before it hangs up, and make them sound like you. You can listen to both lines in your agent's voice before saving.
* **Only missed calls** (suggested): the agent steps in when your team doesn't answer
* **Every call**: the agent answers all inbound calls
* **Business hours only**: the agent answers only during your open hours
Everything your agent will do is written out in plain words, in four sections: what it should do, who it should be, how it should behave, and what it should never do. Read it over and edit any line to match your business.
Place a test call from your computer and talk to your agent exactly like your callers will. When it sounds right, click **Go live**: your agent starts answering on your line right away.
You can change any of these settings after going live, from the agent's page in the **Agents** tab. Changes apply immediately, and you can place a test call anytime with the **Test call** button.
## Transfer rules
Transfer rules tell the agent when to hand a call to a human. Each rule has three parts:
* **Transfer to**: a team member, another inbox in your workspace, or an external number
* **When**: the condition, written in plain language. For example "Billing questions go to the office" or "Urgent jobs go straight to me"
* **Message before transfer** (optional): a line the caller hears right before the transfer
### Warm transfer
By default, the agent transfers calls directly. Turn on **Warm transfer** (beta) and the caller waits on hold while Allo rings your teammate, announces the caller's name and reason, and only connects them if they accept.
## Meeting booking
The agent can book meetings for you during the call. It works with **Google Calendar**, **Cal.com**, and **Calendly**.
Go to **Settings** → **Integrations** and connect Google Calendar, Cal.com, or Calendly. The connection is shared across your workspace.
In your agent's **Calendar scheduling** settings, select the calendar to book into. Each agent books into one calendar.
* **Google Calendar**: meetings are created directly on the calendar you pick. Set the event duration (30 minutes by default).
* **Cal.com**: select the event type to book.
* **Calendly**: connect your Calendly account and the agent books meetings on it.
Control when the agent is allowed to book: booking hours, blocked dates, buffer between meetings, minimum advance notice, and how far out callers can book.
With Cal.com, always choose an event type. Otherwise the AI books your first one, which may be the wrong meeting.
When a caller asks for an appointment, the agent finds an open slot that respects your rules and books it straight into your calendar.
## How it fits with voicemail and business hours
The AI receptionist takes the place of voicemail or external transfer as your missed-call handler. When you set it live, it becomes what callers reach when your team doesn't pick up (or on every call, depending on your pickup setting).
To turn it off, click **Unpublish** on the agent's page and choose what replaces it: voicemail or an external transfer.
If you use [business hours](/en/features/business-hours), your closed-hours behavior applies as usual: the agent answers after hours when your closed setting points to your missed-call handling.
## After every call
Every call your agent handles lands in your Calls tab, with an **AI Receptionist** filter to find them fast. Open a call to get:
* **Summary**: the key points of the conversation
* **Transcript**: the full exchange, with the agent's lines labeled
* **Recording**: the audio of the whole call
* **Collected details**: the caller's name, number, and answers to your questions, with one-click suggestions to create or update the contact
* **Suggested actions**: follow up by email or SMS, create the contact, or add the meeting to your calendar
The agent's page also shows its recent calls and what it did on each one, like "Transferred to Sarah" or "Took a message".
## Languages
The agent speaks the language of the voice you pick. Choose the language first, then the voice, in the **Personality** settings. Voices are available in English (US and UK) and French (France and Canada).
## Troubleshooting
Check that the agent is live: its status dot in the **Agents** tab should show "Live". If you picked **Only missed calls**, the agent waits for your team to miss the call before stepping in. If you picked **Business hours only**, it stays silent outside your open hours.
Its answers come from your knowledge sources. Update your website pages, remove outdated files, and add corrections in the extra context field. Then place a test call to check the fix.
Open your agent's **Goal** settings and pin the question as **Must get before hanging up**. The agent keeps asking until it has an answer for every pinned question.
With Cal.com, check that an event type is selected in **Calendar scheduling**. Without one, the AI books your first event type.
Edit the **Goal** tab: it holds the agent's instructions in plain words, and you can rewrite any line. For tone and answer style, adjust the **Personality** tab. Test your changes with a test call before your next real one.
Open your agent's page and click **Unpublish**, then choose voicemail or an external transfer as the replacement. Your configuration is kept, so you can set it live again later.
## Need help?
Get help configuring your AI receptionist
Control when your team rings and when the agent answers
# Business Hours
Source: https://help.withallo.com/en/features/business-hours
Set when you're available and what happens outside hours
## What are business hours
Business hours define when you're available to take calls. Outside these hours, calls automatically route to voicemail, your AI Receptionist, or another destination.
**Benefits:**
* Professional boundaries
* Automatic after-hours handling
* No missed calls
* Work-life balance
***
## Setup business hours
Go to Settings in the Allo app
Tap "Business Hours" option
Toggle "Activate Business Hours" at the top
For each day:
* Toggle day on/off
* Set opening time
* Set closing time
* Repeat for all days
Choose what happens when you're unavailable:
* Send to voicemail
* Forward to another number
* Route to AI Receptionist
* Play custom message
Changes apply immediately
***
## How it works
### During business hours
**Calls ring normally:**
* Your phone rings as usual
* You can answer or decline
* Standard call handling applies
### Outside business hours
**Calls route automatically:**
* No ringing on your phone
* Caller hears your message
* Call goes to chosen destination
* You receive notification
**Caller experience:**
1. Dials your number
2. Hears greeting message
3. Routed to voicemail or other destination
4. Can leave message or follow instructions
***
## Configuration options
## Set different hours per day
Configure each day independently.
**Example schedule:**
| Day | Status | Hours |
| --------- | ------ | ----------------- |
| Monday | Open | 9:00 AM - 6:00 PM |
| Tuesday | Open | 9:00 AM - 6:00 PM |
| Wednesday | Open | 9:00 AM - 6:00 PM |
| Thursday | Open | 9:00 AM - 6:00 PM |
| Friday | Open | 9:00 AM - 5:00 PM |
| Saturday | Closed | - |
| Sunday | Closed | - |
*You can also set split shifts if needed.*
## Send to voicemail
Default option for outside hours.
**What happens:**
* Caller hears greeting
* Prompted to leave message
* Voicemail transcribed automatically
* You receive notification
**Customize greeting:** "You've reached \[Your Name]. Our office hours are Monday through Friday, 9 AM to 6 PM. Please leave a message and we'll return your call during business hours."
[Customize voicemail message](/en/features/voicemail)
## Forward to another number
Route calls to mobile, home, or colleague.
**Setup:**
1. Choose "Forward to another number"
2. Enter destination number
3. Include country code
4. Test forwarding
**Use cases:**
* Forward to personal mobile
* Route to on-call team member
* Send to answering service
* Redirect to home office
Forwarded calls use the destination carrier. Standard rates may apply.
## AI Receptionist
Intelligent after-hours handling.
**What it does:**
* Answers calls professionally
* Provides business information
* Takes messages
* Qualifies urgency
* Schedules callbacks
**Configure:**
1. Enable AI Receptionist
2. Add after-hours instructions
3. Specify emergency handling
4. Test with sample call
**Example script:**\
"Thank you for calling \[Company]. Our office is currently closed. I can help answer questions about our services or take a message for our team."
[Setup AI Receptionist](/en/features/ai-receptionist)
## Play announcement only
Inform callers without taking messages.
**What happens:**
* Caller hears your message
* Call ends automatically
* No voicemail option
* No recording
**Use cases:**
* Closed for holidays
* Emergency closure
* Temporary unavailability
* Directory information only
**Example message:**\
"Thank you for calling \[Company]. We're closed for the holiday and will reopen on Monday, January 6th at 9 AM."
***
## Special configurations
### Holidays and exceptions
**Temporary closures:**
Close for specific dates without changing weekly schedule.
**How to handle:**
1. Create custom voicemail message
2. Temporarily disable business hours
3. Re-enable after holiday
Dedicated holiday calendar coming soon.
### Multiple time zones
**For distributed teams:**
Each team member sets their own business hours on their own phone numbers based on local time zone.
**Best practice:**
* Document team coverage hours
* Use cascade routing across time zones
* Set main number business hours to longest coverage window
***
## Bypass options
### Allow favorites through
Let important contacts reach you anytime.
**Setup:**
1. Business Hours settings
2. Scroll to "Who can bypass"
3. Choose bypass level:
* All contacts
* Favorites only
* No one
**Mark favorites:**
1. Open contact
2. Tap star icon
3. Now they bypass business hours
### Emergency access
**For critical situations:**
Provide an emergency bypass number.
**Use IVR option:**\
"If this is an emergency, press 9 to reach on-call support."
[Setup IVR menu](/en/features/ivr)
***
## Troubleshooting
**Check:**
* Business hours are activated (toggle at top)
* Schedule is saved
* Time zone is correct
* Current time falls outside set hours
**Test:** Temporarily set hours to closed now and call yourself.
**Verify:**
* Contact is marked with star
* Bypass setting is "Favorites only" or "All contacts"
* Contact is saved in Allo (not just phone)
**Re-add:** Remove star and re-add to refresh.
**Check:**
* Business hours show as "open" for current day/time
* Phone is not on Do Not Disturb
* You're not on another call
* Internet connection is active
[Connection troubleshooting](/en/support/common-issues#connection-problems)
**Verify:**
* Destination number is correct
* Includes country code
* Number can receive forwarded calls
* No typos in number
**Test:** Call destination number directly first.
**Allo uses your device time zone:**
* Check phone Settings > General > Date & Time
* Enable "Set Automatically"
* Restart Allo app
**For teams:** Each member's hours use their local time zone.
***
## Related features
Customize your voicemail greeting
Intelligent after-hours handling
Route calls to team members
Create press 1 for sales menu
# Call Flows
Source: https://help.withallo.com/en/features/call-flows
Build what happens when someone calls your line, step by step, on a visual canvas
A call flow is the path a caller takes through your line: a menu, an announcement, ringing your team, voicemail. You build it on a canvas, one step at a time, and you can see the whole journey at a glance instead of piecing it together from four separate settings screens.
Call flows are in beta and rolling out team by team. If you do not see the Call flow section on your line, your team is not in the beta yet.
## Where to find it
Go to [web.withallo.com](https://web.withallo.com), then Settings and Numbers, and pick the line you want to work on.
Scroll to **Call flow**. It carries a **Beta** badge. If the line already has a flow, a small read-only map of it appears under the heading.
Select **Open designer**. The flow opens full screen, with your steps on the canvas and a settings panel on the right.
## How a flow is built
Every flow starts with **Incoming call**. That step cannot be removed, and everything else hangs off it.
From there you add steps. Each step does one thing, and some of them split the call into branches: a phone menu branches per key, business hours branches into Open and Closed, and so on. You configure the selected step in the panel on the right.
### The steps you can add
Steps are grouped in the picker under Calling, Conditions and AI.
| Step | What it does |
| --------------------------- | -------------------------------------------------------------------- |
| **Incoming call** | The start of every flow. Not removable. |
| **Phone menu** | Reads out options and waits for the caller to press a key. |
| **Play announcement** | Plays a message, then carries on to the next step. |
| **Ring this line** | Rings the people on the line, all at once, in cascade or as a queue. |
| **Business hours** | Splits the call into Open and Closed, on this line's schedule. |
| **Contact property** | Splits the call on who is calling, into Match and No match. |
| **Voicemail** | Sends the caller to voicemail. |
| **Forward to a number** | Sends the call to a number outside Allo. |
| **Forward to another line** | Hands the call to another of your Allo lines. |
| **AI receptionist** | Lets the AI receptionist take the call. |
| **Go to** | Jumps to another step in the same flow, instead of repeating it. |
| **Hang up** | Ends the call. |
Some steps must always say what happens next, so Allo creates that branch for you and will not let you leave it empty:
* A **Phone menu** always has a **No selection** branch, for callers who press nothing or press the wrong key.
* **Ring this line** always has an **If missed** branch, for when nobody picks up.
* **Business hours** always has **Open** and **Closed**.
* **Contact property** always has **Match** and **No match**.
## Saving and going live
Select **Save** in the top right. There is no separate publish button: saving is what puts the flow in front of callers.
While you have unsaved work, the header shows **Unsaved**. **Discard** throws your unsaved edits away and puts the last saved version back.
Saving takes effect on the next call. Test it by calling the line yourself before you leave for the day.
If a step is still missing something, Save is blocked and the step that needs attention is highlighted with what to fix, for example "Choose what this step does" or "Add at least one member to ring".
### What the flow replaces
Once your flow is live, it decides what happens to calls on that line. The four sections that used to do this separately step aside, and each one points back at your flow:
* Business hours
* Interactive menu
* Call routing
* Missed call handling
They are not lost. If the flow stops governing the line, those settings come back exactly as you left them.
Everything else on the line, including members, automatic SMS, notifications and your number settings, works as it always did.
## Limits
| | |
| ----------------------- | --------------------- |
| Steps per flow | 100 |
| Nested phone menus | 6 levels |
| Keypad options per menu | 1 to 10 (keys 0 to 9) |
| Ring duration | 15 to 90 seconds |
| Audio file | MP3 or WAV, up to 5MB |
## Related pages
The step by step walkthrough
Record, upload or write what callers hear
Business hours and contact property steps
When a flow does not behave
# Recordings and Audio
Source: https://help.withallo.com/en/features/call-flows-audio
Record, upload or write every message a caller hears in your call flow
Anywhere your flow speaks to a caller, you choose how that message is made: record it yourself, upload a file, or write the text and let Allo read it out.
## The three sources
On any step that talks, select **Edit** on the audio row and pick one:
| Source | What it is | Good for |
| ------------------ | ----------------------------------------------- | -------------------------------------- |
| **Record audio** | Record straight into Allo from your microphone. | A real voice, without leaving the app. |
| **Upload a file** | Upload an MP3 or WAV you already have. | A studio recording or a jingle. |
| **Text to speech** | Write the words, Allo reads them out. | Anything you expect to edit again. |
Uploads must be **MP3 or WAV**, up to 5MB. Other audio formats can look like they saved and then play as silence to your callers. If you have an m4a file, convert it before uploading.
## One source at a time
A step plays one thing. If a step has a recording and you then write text for it, the text replaces the recording, and Allo warns you before it does: "This step plays a recording. The text you write here replaces it."
Menu option names are the exception. There, the name you type is also the label on the canvas, so the name and the recording live side by side: the name is what you read on screen, the recording is what the caller hears. The row shows **Named by your recording**, and **Remove recording** takes you back to the spoken name.
## Where audio shows up
* **Phone menu greeting**, played before the options.
* **Menu option names**, the "For Sales, press 1" line for each key.
* **Play announcement**, the message played mid-flow.
* **Voicemail greeting**, played before the caller records.
## Writing text that reads well
Allo reads your text exactly as written, so write it the way you would say it.
* Spell out anything you want heard as words. "24/7" is read back as digits and a slash.
* Give phone numbers room to breathe: "zero one, four four, five five" reads better than one long string.
* Punctuation sets the pace. A full stop is a real pause.
* Listen to it once with the player on the row before you save.
## Announcements need their text
A **Play announcement** step will not save without written text, even when a recording is what actually plays. Write the message first, then add the recording if you want a human voice on it. The text stays as the label for that step.
## Recordings and barge-in
With a text-only menu, a caller can press their key at any point while the menu is being read.
As soon as any part of a menu uses a recording, that changes: callers can only press once the last option starts playing. If your regulars are used to pressing 1 straight away, keep that menu on text to speech.
## Related pages
Greeting, options and fallbacks
Callers hear silence, or hear the menu twice
# Build a Phone Menu
Source: https://help.withallo.com/en/features/call-flows-phone-menu
Greet callers, give them keypad options, and send each one to the right place
A phone menu greets the caller, reads out the options, and waits for a key press. This page walks through building one inside a call flow.
Call flows are in beta. If your line has no Call flow section, see the [Call flows overview](/en/features/call-flows).
## Build it
Open the designer, select the plus under **Incoming call**, and choose **Phone menu**.
In the panel on the right, fill in **Greeting message**: what callers hear before the options.
Keep it to one line, such as "Thanks for calling Dupont Plumbing."
Select **Add option**. Each option takes a keypad key and a name.
Give it a short name in the **Option name** field, then choose what the key does: ring the line, forward the call, play an announcement, send to voicemail, or open another menu.
Every menu has a **No selection** branch for callers who press nothing or press a key you have not used. Point it somewhere sensible, usually voicemail or ringing the line.
Select **Save**, then call the number from your phone and press each key.
## How the menu is read out
Allo speaks your greeting first, then builds one line per option from the option's name:
> **You write:** Sales
>
> **Callers hear:** "For Sales, press 1"
The name is dropped into that sentence, so it has to fit inside it.
Write short noun phrases: "Sales", "Support", "Opening hours", "A new appointment". A full sentence turns into nonsense, because "For if you would like to book an appointment please press one, press 1" is what actually gets read out.
Options are read in keypad order, 1 to 9 and then 0. So an option on 0 is always announced last, which is what you want for the usual "press 0 to reach the operator" catch-all.
## Choosing keys
You have keys 0 to 9, one option each. A menu needs at least one option before Allo lets you save it.
A few habits that hold up on real calls:
* Three to five options. Callers forget the rest.
* Put the most common reason first.
* Keep the same key for the same thing if you rebuild the menu later. Regulars dial from memory.
## When the caller does nothing
If the caller presses a key you have not assigned, Allo repeats the menu. After three tries it takes the **No selection** branch. Callers who press nothing at all wait about five seconds before the menu repeats.
## Menus inside menus
An option can open another **Phone menu**, up to six levels deep. Every sub-menu needs its own greeting, its own options and its own **No selection** branch.
Deep menus test the patience of the person calling you. Two levels is usually plenty.
## Letting some callers skip the menu
The **Who can skip the menu** setting on the menu step lets known contacts bypass it and ring the line directly. Use it so regulars are not put through the keypad every time.
## Related pages
Use a recording instead of a synthesized voice
Menu announced twice, wrong routing, silence
# Route by Schedule and by Caller
Source: https://help.withallo.com/en/features/call-flows-routing
Send calls down different paths depending on the time of day or on who is calling
Two steps split a call without asking the caller anything. **Business hours** looks at the clock. **Contact property** looks at who is calling.
## Business hours
The **Business hours** step splits your flow into **Open** and **Closed**, using the schedule already set on that line.
Add **Business hours** where the call should split, usually straight after Incoming call.
The step reads this line's own opening times. Set them in the line's Business hours settings if you have not already.
**Open** normally rings the line. **Closed** normally goes to voicemail or the AI receptionist.
### Worked example
> **Incoming call** → **Business hours**
>
> **Open** → Ring this line → if missed, Voicemail
>
> **Closed** → Play announcement ("We're closed, our hours are…") → Voicemail
### Things to know
* **One per path.** You cannot put a Business hours step underneath another one. Both would check the same schedule, so one of the two paths could never run, and Allo blocks the save with an explanation.
* **Two on separate branches are fine.** A Business hours step inside the Sales branch and another inside the Support branch never meet, so they are allowed.
* **If business hours are switched off on the line**, every call takes the **Open** path, whatever the time.
## Contact property
The **Contact property** step branches on something Allo knows about the person calling. It splits into **Match** and **No match**.
You pick a property and the value it has to have. On the call, Allo looks up the caller's number in your contacts and compares.
### Which properties you can use
The picker has two groups.
**Contact fields** are built in and available to everyone:
| Field | Notes |
| ----------------- | ---------------------------------------------- |
| Company | Matched on the company name |
| Job title | Free text |
| Interaction level | None, Low, Medium or High |
| Website | Free text |
| Deal status | Free text, whatever your CRM pipeline calls it |
**Custom properties** are the contact properties your own workspace has. If a property has a fixed list of options, you pick the value from that list. Otherwise you type it.
### Worked example
Send your best customers straight to their account manager, and everyone else through the normal menu:
> **Incoming call** → **Contact property**: Interaction level matches High
>
> **Match** → Ring this line (the account manager) → if missed, Voicemail
>
> **No match** → Phone menu
### No match is where most callers land
Anything Allo cannot confirm takes the **No match** path: an unknown caller, a withheld number, a first-time caller with no contact record yet, a contact whose property is empty, or a value that simply differs. Always give No match a real destination.
### How values are compared
* Text is compared without case sensitivity, and spaces around the value are ignored. "acme" matches "Acme".
* Values you pick from a list are matched exactly, so there is nothing to get wrong.
* Interaction level is one of None, Low, Medium or High.
### Things to know
* **Do not test the same property twice on one path.** The answer is already settled by the first step, so the second one has a dead branch and the save is blocked. Two steps testing *different* properties are fine.
* **If you rename or delete a property in your CRM**, a flow using it stops saving until you pick another one. The message names the property so you know which step to open.
## Related pages
Set the schedule this step reads
Steps, saving and limits
# Call Flow Troubleshooting
Source: https://help.withallo.com/en/features/call-flows-troubleshooting
Fixes for the problems people hit most often when building a call flow
Work through the symptom that matches what your callers are getting. If none of these fit, contact support with the number you called and roughly when.
Almost always the file format. Allo plays **MP3 and WAV**. An m4a file, the default for voice memos on an iPhone, can save without complaint and then play as nothing on the call.
**Fix:** convert the file to MP3 or WAV and upload it again, or use **Record audio** to record straight into Allo, which cannot produce a format that fails to play.
Then call your own line and listen to the whole flow before you leave it.
Your recorded greeting already lists the options, and the named options are read out after it.
Allo plays the greeting first, then one line per option: "For Sales, press 1". A greeting that already says "press 1 for sales, press 2 for support" gets both.
**Fix:** cut the list out of the greeting and leave it as a welcome only, such as "Thanks for calling Dupont Plumbing". The option names do the listing.
Recording each option separately does not help. Allo always plays the greeting and then every option, so a greeting that lists the options is announced twice whichever source each option uses.
The option name is dropped into a sentence: "For , press 1". A full sentence in that field produces "For if you would like to book an appointment please press one, press 1".
**Fix:** shorten the name to a noun phrase, such as "Sales", "Support" or "A new appointment".
Expected, if any part of that menu uses a recording. Callers can then only press once the last option starts playing. On a text-only menu they can press at any point.
**Fix:** if pressing early matters more than the recorded voice, switch that menu to text to speech.
Check that what you think you built is what is saved. Unsaved work stays on your screen and never reaches a caller.
1. Open the line's **Call flow** section and look at the map under the heading. That is the live version.
2. If the designer header shows **Unsaved**, your edits are not live. Select **Save**.
3. Follow the branch a real caller would take, including **No selection**, **If missed** and **No match**. An empty-looking branch is often the one being used.
4. Call the line yourself and press the keys.
The **Contact property** step sends every uncertainty down **No match**, not just a different value. It takes No match when the caller has no contact record yet, when their number is withheld, when the property is empty on their contact, and when the value differs.
**Check:**
* The caller exists in your contacts, with the number they actually called from.
* The property is filled in on their contact.
* The value matches what you typed. Case and surrounding spaces do not matter, so "acme" and "Acme" are the same, but "Acme Ltd" and "Acme" are not.
A first-time caller has no contact record at the moment the call arrives, so a brand new number always takes No match. Point that branch somewhere real.
A step is missing something it needs. The step says what, for example "Choose what this step does", "Add at least one member to ring" or "Write or record a name for this option".
Two rules catch people out:
* A menu needs at least one keypad option, and every option needs a name, written or recorded.
* A **Business hours** step cannot sit underneath another one, and a **Contact property** step cannot test the same property as one above it. In both cases one branch could never run.
They have not been deleted. A live call flow decides all four of those things, so each section now shows a note pointing at your flow instead of its own controls.
Change them by editing the matching step in the flow. If the flow ever stops governing the line, the old settings come back exactly as they were.
Call flows are in beta and rolling out team by team. If your line settings have no **Call flow** section, your team has not been switched on yet.
Your line keeps working on its Business hours, Interactive menu, Call routing and Missed call handling settings in the meantime.
## Related pages
Steps, saving and limits
Formats, sources and replacing audio
# Call Recording Compliance
Source: https://help.withallo.com/en/features/call-recording-compliance
Configure Allo's compliance tools for call recording laws in the US, EU, and beyond
You are responsible for complying with local recording laws. This guide helps you configure Allo's compliance features, but does not constitute legal advice. Consult legal counsel for your specific situation.
## Allo's compliance tools
Allo gives you four tools to stay compliant with recording laws. Mix and match based on your needs.
## Inbound consent message
An automated message plays before the call connects: *"This call is recorded for quality and training purposes."*
**Who it's for:** Teams receiving inbound calls that need to notify callers.
**How it works:**
* Message plays automatically before the phone rings
* Caller hears it before anyone picks up
* Customizable text
* Set up per phone number or org-wide
### Enable consent message
The inbound consent message can't be self-served from your account — our support team sets it up for you.
[Reach out to Allo support](/en/support/contact) to enable the inbound consent message
Tell us whether to enable it per phone number or org-wide
Share any custom wording and support will configure it for you
Support will confirm once enabled. Changes take effect immediately.
## Privacy mode
Disables audio recording storage. Transcription and AI summaries still work normally. The audio file is never saved.
**Who it's for:** Teams doing outbound calls to dual-consent states (like California) who want transcripts and AI summaries without storing audio. This is what most outbound sales teams need.
**What you keep:**
* Full transcription
* AI-generated summaries
* CRM sync (transcript + summary)
* Call metadata (duration, time, outcome)
**What's removed:**
* Audio recording file (never stored)
* Playback in Allo app
* Audio link in email notifications
### Enable privacy mode
[Reach out to Allo support](/en/support/contact) to enable privacy mode
Privacy mode can be set per line, per user, or org-wide
Support will confirm once enabled. Changes take effect immediately.
Privacy mode is ideal for outbound sales teams. You still get transcripts pushed to your CRM (Attio, HubSpot, Salesforce, etc.) — just no audio file.
## Transcription control
Disable transcription entirely. Only AI summaries are generated from the live conversation — no verbatim transcript is stored.
**Who it's for:** Maximum data minimization. Useful when you need call intelligence but want to avoid storing word-for-word conversation records.
**What you keep:**
* AI-generated summaries
* Call metadata
* CRM sync (summary only)
**What's removed:**
* Full transcript
* Searchable call text
* Speaker-attributed text
### Enable transcription control
Contact [Allo support](/en/support/contact) to disable transcription per line or org-wide. Audio recording behavior is controlled separately.
## AI provider choice
Switch from the default AI provider to **Mistral**, a European AI company, for data processing.
**Who it's for:** Businesses with data sovereignty requirements. Keeps AI processing within a European provider.
**What changes:**
* AI summaries generated by Mistral
* Transcription processing by European infrastructure
**What stays the same:**
* Feature quality and speed
* CRM sync behavior
* All other Allo features
### Switch AI provider
Contact [Allo support](/en/support/contact) to switch to Mistral. Available on all plans.
***
## US recording laws
Federal law (one-party consent) allows recording if one party consents. But when calls cross state lines, the stricter state's law applies. For outbound sales teams calling all 50 states, this matters.
These states require **all parties** to consent before recording:
| State | Key notes |
| ----------------- | ----------------------------------------------------------------------- |
| **California** | All-party consent. Violations carry criminal penalties. |
| **Connecticut** | All-party consent for in-person and phone. |
| **Delaware** | All-party consent. |
| **Florida** | All-party consent. Criminal and civil penalties. |
| **Illinois** | All-party consent. Also has BIPA for biometric data (see AI section). |
| **Maryland** | All-party consent. |
| **Massachusetts** | All-party consent. Strictest state — secret recordings are a felony. |
| **Michigan** | All-party consent. |
| **Montana** | All-party consent. |
| **Nevada** | All-party consent for in-person. One-party for phone (but courts vary). |
| **New Hampshire** | All-party consent. |
| **Pennsylvania** | All-party consent. Criminal penalties. |
| **Washington** | All-party consent. Criminal and civil penalties. |
**All other states** follow one-party consent (federal baseline).
If your team calls all 50 US states:
1. **Enable consent message** for all inbound calls — covers you everywhere
2. **Enable privacy mode** for outbound calls — no audio stored, transcripts + AI summaries still sync to your CRM
3. **Train your team** to verbally disclose recording at the start of outbound calls to dual-consent states
This gives you the best of both worlds: full AI intelligence for sales coaching, zero audio liability.
Allo is building area-code-based compliance rules. This will let you automatically apply different recording settings based on the state you're calling.
**Example:** Calls to California numbers automatically use privacy mode, while calls to Texas numbers record normally.
This feature is on the roadmap. [Contact support](/en/support/contact) for updates or to join the early access list.
***
## EU & international
Recording requires a legal basis — typically **consent** or **legitimate interest**.
**Key requirements:**
* Inform callers before recording starts
* Document your legal basis
* Provide access to recordings on request
* Honor deletion requests (right to erasure) — GDPR recommends 30 days
* Data processing agreement (DPA) available from Allo
**France (CNIL):**
* CNIL enforces strict consent rules
* Consent must be freely given, specific, and informed
* Recordings used for training must be anonymized or consented to separately
* Allo's Mistral AI option keeps processing with a European provider
[Visit our Trust Center](https://trust.themobilefirstcompany.com/)
Federal PIPEDA follows one-party consent for calls. But provincial laws add requirements:
* **Quebec** — Stricter privacy law (Law 25). Consent required for recording.
* **British Columbia & Alberta** — PIPA applies. Similar to PIPEDA but with provincial enforcement.
**Recommendation:** Enable consent message for all Canadian inbound calls.
Recording laws vary widely. For country-specific guidance:
* Check local telecommunications authority rules
* Consult legal counsel in target markets
* [Contact Allo support](/en/support/contact) for configuration help
Allo supports numbers in 50+ countries. We can configure compliance settings per number.
***
## AI & transcription compliance
Real-time transcription and AI analysis receive the same legal treatment as call recording. The same consent that covers recording also covers transcription.
**Key considerations:**
* **BIPA (Illinois)** — Speaker identification (voiceprints) may qualify as biometric data under BIPA. If you handle calls with Illinois residents, consult legal counsel about biometric consent.
* **AI disclosure laws** — California (AB 2013) and Texas require disclosure when AI is used to analyze calls. Your consent message should mention AI analysis.
* **AI-generated summaries** — Treated as derived data. Same retention and access rules apply as for recordings.
***
## Data retention
**Default:** Recordings and transcripts are kept indefinitely in your Allo account.
**Custom retention:** Contact [Allo support](/en/support/contact) to set auto-deletion after a specific number of days.
**Regulatory benchmarks:**
| Regulation | Guideline |
| ---------- | ------------------------------------------------------------------------- |
| **GDPR** | Delete when no longer necessary. 30 days recommended for call recordings. |
| **CCPA** | Respond to deletion requests within 45 days. |
| **HIPAA** | 6-year retention minimum. BAA available for healthcare customers. |
| **SOX** | 7-year retention for financial records including call records. |
Need a HIPAA Business Associate Agreement? [Contact support](/en/support/contact) — available for healthcare customers on Business plan.
***
## FAQ
Yes. Enable **Privacy Mode** — audio is never stored, but transcription and AI summaries work normally. Transcripts sync to your CRM as usual.
Not yet. This feature is on the roadmap. For now, [contact support](/en/support/contact) to configure privacy mode per line or user.
Legally, no (if you're the consenting party). But best practice: always disclose. Interstate calls default to the stricter state's law. A blanket consent policy protects you everywhere.
Only for numbers where it's enabled. Support can enable it per number or org-wide.
Yes. Courts treat real-time transcription the same as recording. One consent disclosure covers both.
Not yet via an automated mechanism. Agents can manually note opt-outs. [Contact support](/en/support/contact) for custom workflows.
Encrypted at rest and in transit on Allo's secure infrastructure. SOC 2 compliant. [Visit our Trust Center](https://trust.themobilefirstcompany.com/) for details.
Business Associate Agreements (BAA) are available for healthcare customers on the Business plan. [Contact support](/en/support/contact) to set one up.
Yes. [Contact support](/en/support/contact) to configure custom retention periods. Common settings: 30 days (GDPR), 90 days, or 1 year.
***
## Need help?
Recording features, transcripts, and AI summaries
Get help configuring compliance settings
# Call Recordings
Source: https://help.withallo.com/en/features/call-recordings
Automatic call recording, transcription, and AI summaries
## Overview
Every call made through Allo is automatically recorded, transcribed, and summarized by AI. Three things happen after a call ends:
A clean audio file you can replay any time
Word-for-word, searchable across your history
Key points, action items, and next steps
Available on both Starter and Business plans.
You are responsible for complying with local laws regarding call recording. Many jurisdictions require informing callers that the call is being recorded. See [Recording compliance](/en/features/call-recording-compliance).
***
## AI summaries
After each call, AI analyzes the conversation and generates a summary. By default, Allo shows you an **enhanced summary**: a complete overview of the call. Or pick a template to refocus the summary around what matters for that call type.
Every summary is editable: open a call, edit inline, add your own notes. Changes sync to your connected CRM in real time.
### Built-in templates
Opening, hook, objections, disposition, next steps
Objections raised, next steps, commitments made
Issue, resolution, follow-up needed
Pain points, current solution, budget, decision process
### Set a default per line
Build your own summary template for any Allo number. Edit the prompt the AI uses, add the sections you want, and every future call on that line uses it automatically.
Head to **Settings** > **Numbers**, then select the number you want to configure
Find the **Summary template** field in the general settings section
Edit the **Call context** (the prompt that tells the AI how to summarize) and add the sections that matter for that line
Every future call on that line uses your template by default. Past summaries stay unchanged.
***
## Transcripts
Every call is transcribed within seconds after ending.
* Complete conversation text
* Speaker identification (you vs. caller)
* Timestamps and punctuation
* Multi-language support (English, French, Spanish, German, and more, auto-detected)
**Search your call history:**
Tap the Inbox tab in the Allo app
Type any keyword from a past conversation
Allo searches inside transcripts, not just names or numbers
Typical accuracy is **90–95%** for clear audio in supported languages.
**Higher accuracy with:**
* Clear audio quality
* Minimal background noise
* Standard accents and pace
**Lower accuracy with:**
* Poor connection
* Heavy background noise
* Multiple people talking at once
Transcripts are a convenience feature. For critical information, listen to the audio recording.
**Tips to improve transcripts:**
* Use Allo in a quiet environment
* Speak clearly at normal pace
* Use headphones or a good phone connection
* Avoid speakerphone when possible
**Storage:** Transcripts are stored on Allo's secure servers, encrypted at rest and in transit. Switch to Mistral (European) for data sovereignty. See [Recording compliance](/en/features/call-recording-compliance).
**Retention:** Kept indefinitely until you delete them manually.
**Access:** You, team members you invite (Business plan), and connected CRMs. Allo support cannot see transcripts unless you share them for troubleshooting.
**Delete a transcript:** open the call in Inbox, tap delete, confirm. Deleting in Allo doesn't delete from connected CRMs or email. Handle those separately.
[Read our privacy policy](https://withallo.com/privacy-policy) · [Visit our Trust Center](https://trust.themobilefirstcompany.com/)
***
## What gets recorded
All calls made or received through the Allo app
Calls forwarded to your Allo number
Calls between team members
Calls handled by the AI assistant
### What is not recorded
Calls outside the Allo app using your phone's dialer
WhatsApp voice calls
Calls made with "Call with iPhone" (France only)
Recording starts when the call connects and stops when it ends. No action required.
***
## Where to find everything
Tap the Inbox tab on mobile or desktop
Tap any call to view its details
* **Play button**: listen to the audio recording
* **Transcript**: full text of the conversation
* **Summary**: AI-generated key points
* **Call details**: duration, time, outcome
After each call, you receive an email with the summary, the full transcript, a link to the audio recording, caller info, and timestamp.
**Set your email:** Go to **Settings** > **Profile** > **Work email**.
**Turn off:** Contact support to disable automatic email notifications.
If you've connected a CRM, recordings and transcripts sync automatically:
* Call logged as activity
* Recording attached
* Transcript included
* AI summary added
[View all CRM integrations](/en/integrations/overview)
***
## Settings & alternatives
### Disable call recording
There's no toggle in the app to fully turn off recording. Two lighter alternatives:
Disables audio storage but keeps transcripts and AI summaries. Ideal for dual-consent states.
Disables transcription, keeps only AI summaries. Maximum data minimization.
**Full disable:** Contact Allo support.
Fully disabling recording also disables transcripts and AI summaries. Consider Privacy Mode first.
### Recording consent
In many jurisdictions, you must inform callers that the call is being recorded.
**How to comply:**
* Add an announcement to your IVR menu
* Include it in your voicemail greeting
* Have the AI Receptionist mention it
* State it verbally at the start of every call
**Example announcement:** "This call may be recorded for quality and training purposes."
See our [Call Recording Compliance guide](/en/features/call-recording-compliance) for US state requirements and how to configure Allo's compliance features.
### Recording retention
Recordings are kept indefinitely in your account by default. Contact support for custom retention policies.
***
## Best practices
### Quality recordings
* Use headphones or earbuds
* Choose a quiet location
* Ensure a stable internet connection
* Avoid speakerphone when possible
### Team use
* Review recordings for coaching
* Share best calls as training material
* Use the Cold call or Discovery call template to spot patterns
* Random call reviews for quality assurance
### Compliance
* Inform callers at call start
* Add a disclaimer in the voicemail greeting
* Include it in the IVR announcement
* Document your consent process
***
## Troubleshooting
Common reasons:
* Call made outside the Allo app (native dialer)
* WhatsApp call (not supported)
* "Call with iPhone" used (France personal number)
* Call too short (under 3 seconds)
**Verify:** check the call appears in your Inbox.
* Call still processing (wait 1–2 minutes)
* Audio quality too poor
* Call too short to transcribe
* Language not supported
Audio recording is still available even without a transcript.
Background noise, poor connection, strong accents, or multiple speakers all reduce accuracy. Listen to the audio for the source of truth.
* You're logged into Allo
* Recording link not modified or truncated
* Active internet connection
**Solution:** open the recording from the Inbox instead of the email link.
Recording links require authentication. Team members need their own Allo account on your team. For external sharing, use the Google Sheets integration.
There's no in-app toggle. Contact Allo support to request recording be disabled for your account. Note: this also disables transcripts and summaries. Consider Privacy Mode first.
# Call Routing
Source: https://help.withallo.com/en/features/call-routing
Configure how calls reach you and your team
## What is call routing
Call routing controls how incoming calls are distributed to you and your team members. Choose between ringing everyone at once or sequential ringing.
**Available routing methods:**
* Simultaneous - Ring everyone at once
* Cascade - Ring one after another
Routing rings **users** (people with Allo accounts), not phone lines. If you're new to how numbers and users work together, [start here →](/en/get-started/numbers-and-users)
***
## Routing methods
## Ring everyone at once
All team members ring simultaneously. First person to answer gets the call, others stop ringing automatically.
**Best for:**
* Small teams (2-5 people)
* Fast response needed
* Customer support
* Sales teams
**How it works:**
1. Call comes to your Allo number
2. All assigned team members ring
3. First to tap "Answer" gets the call
4. Their phones stop ringing
**Setup:**
1. Desktop > Settings > Call routing
2. Select "Simultaneous Ringing"
3. Choose who to include
4. Select what happens if no one answers
5. Save settings
Perfect for ensuring no call goes unanswered during business hours.
## Ring sequentially
Ring team members one at a time in priority order. If first person doesn't answer, moves to next.
**Best for:**
* Priority-based routing
* Backup coverage
* Escalation paths
* On-call schedules
**How it works:**
1. Call rings Person A for 20 seconds
2. If no answer, rings Person B for 20 seconds
3. If no answer, rings Person C
4. Continues through list
5. Final destination if no one answers
**Setup:**
1. Desktop or Mobile > Settings > Call routing
2. Activate "Call routing"
3. Select "Cascade Ringing"
4. Set ring duration
5. Choose who to include
6. Arrange team members in order
7. Select what happens if no one answers
8. Save settings
**Ring duration options:**
* 5 seconds to 60 seconds
Drag and drop to reorder team members in cascade sequence.
***
## Combine with other features
### Routing + IVR
**Route based on menu selection:**
Press 1 (Sales) → Sales team (simultaneous)\
Press 2 (Support) → Support team (cascade)\
Press 3 (Billing) → Billing person
**Setup:**
1. Create IVR menu
2. Assign each option to team or person
3. Configure routing per destination
[Setup IVR menu](/en/features/ivr)
### Routing + Business Hours
**Different routing by time:**
**During hours:**
* Simultaneous to full team
**After hours:**
* Cascade to on-call only
* Or voicemail
* Or AI Receptionist
**Setup:**
1. Configure business hours
2. Set "during hours" routing
3. Set "outside hours" routing
4. Test both scenarios
***
## For teams
### Assign team members to numbers
**Multiple numbers, different routing:**
**Main line (555-0100):**
* Ring all sales reps simultaneously
* 9 AM - 6 PM
**Support line (555-0200):**
* Ring support team in cascade
* 8 AM - 8 PM
**Direct lines:**
* Each rep has own number
* Personal business hours
**Setup:**\
Configure routing separately for each number.
***
## Best practices
### Optimize response time
**Goals:**
* Answer within 3 rings (15 seconds)
* Maximum 30 seconds before voicemail
* No more than 2 handoffs
**Tips:**
* Use simultaneous for small teams
* Keep cascade lists short (max 3 people)
* Set realistic ring durations
### Test your setup
**Before going live:**
1. Call during business hours
2. Call outside business hours
3. Test with busy team members
4. Verify voicemail fallback
5. Check notifications work
**Monthly:**
* Review routing efficiency
* Update team member order
* Adjust ring times
* Optimize rules
### Communicate with team
**Everyone should know:**
* How routing works
* Their position in sequence
* Expected response time
* What to do if unavailable
**Best practice:**\
Document routing rules and share with team.
***
## Troubleshooting
**Check:**
* Team members are added to number
* Routing is enabled
* Team members have active Allo accounts
* They're not all on Do Not Disturb
**Test:** Call the number while monitoring team devices.
**Verify:**
* Team members are in correct order
* Ring duration is set
* Final destination is configured
* Each person has valid number
**Common issue:**\
If someone's phone is off, it may not skip to next person. Ensure "skip if busy" is enabled.
**Check:**
* All team members are selected in routing settings
* They have notifications enabled
* Their app is up to date
* They're logged in
**Solution:**\
Have missing team members log out and back in.
**Adjust:**
* Increase ring duration
* Add more team members to sequence
* Check business hours aren't closing early
**Recommended:**\
Minimum 20 seconds per person in cascade.
**Verify their setup:**
* Allo app is installed and logged in
* Notifications are enabled
* Not on Do Not Disturb
* Internet connection active
* They're included in routing rules
[Connection troubleshooting](/en/support/common-issues#connection-problems)
***
## Related features
Route by menu selection
Time-based routing
Transfer live calls
Add and manage team members
# Call Tags
Source: https://help.withallo.com/en/features/call-tags
Categorize calls during or after they happen, manually or automatically with AI, and sync them to HubSpot
## What are Call Tags
Call Tags let you qualify every call along any dimension that matters to your team. Use them for:
* **Business outcomes** (Demo booked, Not interested, Follow-up needed)
* **Topics discussed** (Pricing, Competitor mentioned, Technical question)
* **Anything else your team needs to track** (Account tier, Region, Lead source)
You can apply as many tags as needed to a single call.
Tags are distinct from the automatic **call outcome** (answered, voicemail, busy) that Allo already detects. Tags capture context that only humans (or an AI prompt you control) can decide.
**Available on:** All plans (Starter and Business)
**Configured by:** Team admins and managers
***
## Three ways to tag a call
Apply tags from the dialer while the call is still happening
Tag from the call list, the call detail view, or the summary
Let Allo read the transcript and apply tags based on your own prompt
You can apply **multiple tags** to the same call. Tags can always be edited, added, or removed later from the call detail view.
***
## Set up your team's tags
Only team admins and managers can create, edit, or remove tags.
Go to **Settings** in the Allo web or desktop app.
Open the **Call tags** section.
Click **Add tag** and give it a clear, short name. A tag can describe anything you want to track on a call.
Examples by category:
* **Outcome:** Demo booked, Not interested, Callback requested, Voicemail left
* **Topic:** Pricing question, Competitor mentioned, Technical objection, Integration request
* **Qualification:** Hot lead, Cold lead, Enterprise, SMB
* **Other:** Wrong number, Existing customer
Add a prompt that describes exactly when this tag should be applied. Allo reads every call transcript and applies the tag when the prompt matches. See the prompt guide below.
Your tag is now available to everyone on your team.
Tags apply to your whole team. All team members can use them on their calls, but only admins and managers can create or edit the list.
***
## Auto-tagging with prompts
Each tag can have its own prompt. After a call ends, Allo reads the transcript and checks every prompt. If a prompt matches, the corresponding tag is applied automatically.
### How to write a good prompt
A good prompt is specific about when to apply the tag AND when NOT to apply it.
**Structure:**
1. State the condition in one sentence
2. List the signals that qualify
3. List what should NOT trigger the tag
**Example: auto-tag a call as "Conversion"**
```
Tag this call as a conversion when the prospect explicitly agrees
to a concrete next step that advances the sales process.
Primary conversion indicators (in order of importance):
1. Meeting scheduled: the prospect agrees to a specific meeting,
demo, or call with a date/time mentioned or a clear commitment
to schedule one.
2. Follow-up accepted: the prospect agrees to receive a proposal,
quote, additional information, or a follow-up call and provides
or confirms contact details.
3. Decision-maker referral: the prospect agrees to connect the
caller with a decision-maker or arrange an internal meeting.
DO NOT tag as conversion if:
- The prospect only shows polite interest without committing
("sounds interesting", "maybe", "send me an email and I'll see").
- The prospect asks to be called back later without agreeing to
a specific time or action.
- The call ends without a clear mutual agreement on next steps.
- The prospect declines or hangs up.
Look for explicit verbal commitments like "Yes, let's schedule
that", "I'm available on Tuesday", "Send me the proposal",
"Let me give you my manager's contact".
```
### Tips for better auto-tagging
**Be specific.** "Tag as interested" is too vague. "Tag as interested when the prospect asks a question about pricing OR asks for a demo" is actionable.
**Use negative examples.** Telling Allo what to ignore is as important as telling it what to catch.
**Iterate.** Review auto-tagged calls for a few days. If the tag fires too often or not enough, refine the prompt.
**One tag per prompt.** Keep each prompt focused on a single outcome. If a call qualifies for several tags, Allo will apply them all.
If a call was manually tagged before it ended, Allo will not overwrite it with auto-tags.
***
## Apply tags to a call
### During the call
From the Allo dialer, the HubSpot dialer, or the desktop PiP, open the tag selector and pick one or more tags. The caller doesn't notice anything.
### After the call
Tags can be added or changed from:
* The call list (filter and bulk-tag)
* The call detail view
* The call summary
* The HubSpot activity view
### Mandatory tags
Admins can enforce tag selection after every call. When mandatory tags are enabled, reps must pick at least one tag before they can move on. Useful for teams that need 100 percent disposition tracking for pipeline reporting.
Turn mandatory tags on from **Settings > Call tags**.
***
## Filter and analyze by tag
Every tag flows into the Analytics view. Filter by one or several tags to answer questions like:
* How many calls resulted in a demo booked this week?
* What is my team's connect rate on cold calls versus warm follow-ups?
* Which rep has the highest conversion rate?
Combine tag filters with date ranges, team members, or phone numbers for deeper analysis.
***
## HubSpot sync
If your team is connected to HubSpot, every tag applied on a call is pushed to HubSpot automatically.
**Where tags appear:**
* On the HubSpot call object
* In a custom property called **Allo Tags**
* As a multi-value field (multiple tags per call are preserved)
**What you can do in HubSpot:**
* Build views and dashboards filtered by Allo Tags
* Trigger workflows based on tag values (for example, notify a manager when a rep tags a call as "Demo booked")
* Report on tag distribution across reps and time periods
Tag sync is one-way for now (Allo to HubSpot). Editing the Allo Tags property directly in HubSpot will not change the tag on the call in Allo. Bi-directional sync is on our roadmap.
### Legacy behavior
Before April 2026, tags were synced to HubSpot's native **Meeting Type** field and only one tag per call was supported. The new **Allo Tags** custom property supports multiple tags and keeps Meeting Type free for its original HubSpot use.
[Learn more about the HubSpot integration](/en/integrations/hubspot)
***
## Troubleshooting
**Check these items:**
* Only team admins and managers can configure tags. Team members can apply tags but not create them.
* The feature is rolling out progressively. If your team isn't enabled yet, contact your account manager.
* Make sure you are on the latest version of the Allo app.
**Common causes:**
* The prompt is too vague or matches conditions the call doesn't meet.
* The call has no transcript (call too short, audio quality too poor, or call handled outside Allo).
* The call was already manually tagged before it ended.
**Solution:** Review the transcript and refine the prompt. Be explicit about both inclusion and exclusion criteria.
**Verify the integration:**
* HubSpot is connected and the Allo user is mapped to a HubSpot user.
* The call successfully logged in HubSpot (check the activity timeline).
* The **Allo Tags** property exists on the HubSpot call object. Allo creates it automatically on first sync. If it's missing, contact support.
**Note:** Tags are pushed asynchronously. Allow a few minutes after the call ends.
Tags can be edited at any time. Open the call, remove the incorrect tag, and apply the right one. Changes sync to HubSpot on save.
Enable **Mandatory tags** in Settings. Once activated, the tag selector appears after every call and reps can't skip it until at least one tag is picked.
***
## Best practices
**Keep the list short.** 5 to 10 tags is usually enough. A long list slows down reps and dilutes your analytics.
**Standardize tag names.** "Demo booked" is clearer than "D.B." or "Meeting". Consistent names make reports readable.
**Mix manual and auto.** Use auto-tagging for things Allo can reliably detect from the transcript (topics mentioned, objections raised, conversion signals). Keep manual tagging for the judgment calls reps do best (hot lead, strategic account, account tier).
**Review quarterly.** Archive tags that nobody uses. Add new ones when your sales process evolves.
***
## Related features
Every tag is backed by a recording and transcript
Ask AI to analyze tagged calls across your history
See how tags sync to the Allo Tags property
Filter your dashboards by call tags
# Call Transfer
Source: https://help.withallo.com/en/features/call-transfer
Transfer live calls to team members
## What is call transfer
Transfer an active call to another team member. The caller stays on hold while the call connects to the new person.
**How it works:**
* You transfer during a call
* Caller goes on hold
* Team member's phone rings
* When they answer, call connects automatically
* You're disconnected
***
## How to transfer a call
Tap the transfer icon during the call
Choose which team member to transfer to from the list
Tap "Transfer" to initiate
* Caller is placed on hold
* Team member's phone rings
* When they answer, call connects
* You're automatically disconnected
Live in-call transfers work to other team members with Allo accounts. To send callers to a number **outside** Allo, use the IVR step [Forward to a number](/en/features/ivr#menu-option-actions): the forwarded leg is billed as an outbound call to that number, at [your calling rates](/en/billing/international-calling-rates) based on its destination.
***
## What happens during transfer
### For you (transferring person)
1. **Tap transfer button** - During active call
2. **Select team member** - From transfer menu
3. **Confirm** - Tap transfer
4. **Automatic disconnect** - You're removed from call
### For the caller
1. **On hold** - Hears hold music or message
2. **Wait** - While team member's phone rings
3. **Connect** - When team member answers
4. **Continue conversation** - With new person
### For the recipient (team member)
1. **Phone rings** - Incoming transfer notification
2. **See caller info** - Who's being transferred
3. **Transferred by** - Shows who transferred the call
4. **Answer** - Tap to accept
5. **Call connects** - Speaks with caller directly
***
## Transfer scenarios
### Route to right person
**Situation:** Caller needs different department or expertise
**Process:**
1. Listen to caller's need
2. Determine who can help
3. Tap transfer button
4. Select team member
5. Confirm transfer
**Tell the caller:**\
"I'm going to transfer you to \[Name] who can help you with that. One moment please."
### Escalation
**Situation:** Issue requires manager or senior team member
**Process:**
1. Understand the situation
2. Tap transfer
3. Select manager
4. Transfer immediately
**Tell the caller:**\
"Let me connect you with my manager who can help resolve this."
### During busy periods
**Situation:** You need to handle another urgent call
**Process:**
1. Find available team member
2. Initiate transfer
3. Move to next call
**Important:**\
Verify someone is available before transferring when possible.
***
## Transfer best practices
### Before transferring
**Tell the caller:**
* Who you're transferring them to
* Why this person can help better
* That they'll be on hold briefly
* Set expectations
**Good script:**\
"I'm going to transfer you to Sarah on our support team who specializes in this. You'll hear hold music for just a moment while I connect you."
**Bad script:**\
"Let me transfer you." *click*
### Choose the right person
**Make sure:**
* Team member is available
* They have the right expertise
* They can actually help
* You're not creating a transfer loop
**Avoid:**
* Guessing who can help
* Transferring multiple times
* Sending to random person
* Creating bad caller experience
### What you cannot do
**Current limitations:**
* Cannot speak with recipient before transfer
* Cannot add context to transfer
* Cannot transfer to external numbers
* Cannot conference call
* Cannot retrieve call after transfer
Once you transfer, you cannot get the call back. Make sure the transfer is correct before confirming.
***
## For teams
### Transfer directory
**Quick access:**
* Transfer menu shows all team members
* See their names
* One-tap to transfer
* Fast routing
**Setup:**
1. Admin adds team members
2. Everyone appears in transfer list
3. Transfer available immediately
[Add team members](/en/team/manage-members)
### Transfer notifications
**Team members see:**
* Who is transferring the call
* Caller's phone number
* Time of transfer
* Can accept or decline
### Communication
**Train your team:**
* When to accept transfers
* What to say to callers
* How to handle context gaps
* Follow-up procedures
**Key message:**\
Since you can't brief the recipient, ensure clear communication with the caller about who they're being transferred to and why.
***
## Alternative: Add context first
Since you can't speak with the recipient before transferring, consider these workarounds:
### Option 1: Quick message
Before transferring:
1. Put caller on brief hold
2. Send quick message to team member (Slack, etc.)
3. Give them context
4. Then transfer the call
### Option 2: Take information
If transfer might fail:
1. Get caller's information
2. Explain you'll have \[Name] call them back
3. Pass information to team member
4. Ensure callback happens
### Option 3: Three-way introduction
For important calls:
1. Take caller's number
2. Call team member separately
3. Brief them on situation
4. Call caller back with team member
These workarounds take more time but ensure better handoffs for important calls.
***
## Troubleshooting
**Check:**
* You're on an active call (answered, not ringing)
* You have team members added
* App is up to date
* You're not on personal number call
**Location:**\
Transfer icon appears during active Allo calls.
**Verify:**
* Team members have Allo accounts
* They're added to your team
* Your subscription includes team features
* You're logged into correct account
**Solution:**\
Ask admin to verify team setup.
[Team management](/en/team/manage-members)
**Check:**
* Their Allo app is open and logged in
* They have internet connection
* Notifications are enabled
* They're not on Do Not Disturb
**What happened to caller:**\
If team member doesn't answer, call goes to their voicemail.
**Common causes:**
* Team member declined
* Team member didn't answer in time
* Network issue
* Recipient's app crashed
**Solution:**\
You cannot recover the call. Follow up with caller if you have their number.
**Prevention:**\
Verify recipient availability before transferring when possible.
**Current limitation:**\
You cannot speak with recipient before transfer completes.
**Workarounds:**
* Message them before transferring
* Explain clearly to caller who they're being transferred to
* Have caller explain situation to new person
* Follow up after transfer to ensure success
**Live in-call transfer:** only works to team members with Allo accounts.
**Routing to an external number is possible** through your line's IVR: add a [Forward to a number](/en/features/ivr#menu-option-actions) step with the external number (include the country code). Missed-call forwarding to an external number is also available in your number settings.
**Two things to know:**
1. The forwarded leg is a new outbound call from your Allo number, billed at [your calling rates](/en/billing/international-calling-rates) for that destination, based on where the external number is
2. The person receiving the forwarded call sees **your Allo number** as the caller, not the original caller's number
Forwarding doesn't bypass calling rules: a call forwarded abroad is an international call and is billed as one, whatever the origin of the incoming call.
***
## Comparison with routing
### Transfer vs. Automatic Routing
**Transfer (manual):**
* During active call
* You choose recipient
* One-time action
* For unexpected routing
**Automatic Routing:**
* Before call answered
* Pre-configured rules
* Happens automatically
* For predictable routing
**Use both:**
* Automatic routing for most calls
* Manual transfer for exceptions
[Learn about call routing](/en/features/call-routing)
***
## Common questions
No. Once you transfer and disconnect, you cannot retrieve the call. The recipient must handle it or transfer to someone else.
Yes. They hear hold music and a message indicating the transfer. Always tell them before transferring so they're not surprised.
No. Transfer goes to one team member at a time. If they don't answer, it goes to their voicemail.
Their phone will still ring. They can see the transfer and choose to answer or decline. If they decline or don't answer, caller goes to their voicemail or AI receptionist.
Yes. The recipient can transfer to another team member if needed. But try to avoid multiple transfers as it frustrates callers.
Yes. The call continues to be recorded after transfer. The recording includes both your portion and the recipient's portion.
***
## Related features
Automatic call distribution
Let callers choose department before ringing
Add team members for transfers
Auto-route outside hours instead of manual transfer
# IVR (Interactive Menu)
Source: https://help.withallo.com/en/features/ivr
Create professional phone menus for call routing
## What is IVR
IVR (Interactive Voice Response) lets callers choose where to route their call using their phone keypad. Perfect for departments, multiple services, or professional call routing.
**Example:**\
"Press 1 for Sales, Press 2 for Support, Press 3 for Billing"
**Benefits:**
* Professional image
* Efficient call routing
* Reduce misdirected calls
* Self-service options
***
## Setup IVR menu
Go to Settings in Allo app
Tap "Interactive Menu" at the top
Toggle "Activate Interactive Menu" in top left corner
Write the message callers hear first.
Example: "Thank you for calling \[Company]."
For each option:
1. Tap "Add option"
2. Write what AI should say
3. Choose destination
4. Save option
Choose what happens if caller doesn't press anything:
* Repeat menu
* Send to voicemail
* Forward to number
Call your Allo number to test the experience
***
## How it works
### Caller experience
1. **Call connects** - Hears your welcome message
2. **Menu plays** - AI lists all options
3. **Caller chooses** - Presses number on keypad
4. **Call routes** - Connects to chosen destination
**Example flow:**
> "Thank you for calling ABC Company. Press 1 to reach our Sales team, Press 2 for Customer Support, Press 3 for Billing questions."
>
> *Caller presses 2*
>
> Call routes to Support team.
### What callers hear
The AI voice announces each option automatically:
**You write:**\
"reach our sales team"
**AI says:**\
"Press 1 to reach our sales team"
AI automatically adds "Press \[number]" before each option. Just write what comes after.
***
## IVR types
## Keypad-based menu (default)
Callers press numbers on their phone keypad.
**How it works:**
* AI announces options
* Caller presses 1-8
* Routes to destination
* Simple and reliable
**Available to:**
* All Allo users
* Starter and Business plans
* Setup in-app anytime
**Best for:**
* Clear department routing
* Multiple teams
* Professional businesses
* Consistent routing needs
## Natural language routing (Beta)
Callers speak naturally and AI routes automatically.
**How it works:**
* AI asks: "How can I help you?"
* Caller speaks naturally: "I need help with my order"
* AI understands intent
* Routes to correct team automatically
**Example:**
> **AI:** "Thank you for calling ABC Company. How can I help you today?"
>
> **Caller:** "I want to speak to someone about pricing"
>
> *AI routes to Sales team*
**Advantages:**
* More natural for callers
* No menu to remember
* Faster routing
* Better caller experience
**Availability:**
* Currently in Beta
* Available on request only
* Contact sales team to enable
* May require Business plan
Voice IVR is in beta and available only through our sales team. Contact us to request access.
**Contact sales:**\
Email: [sales@withallo.com](mailto:sales@withallo.com)\
WhatsApp: [Get in touch](https://api.whatsapp.com/send/?phone=15557015299)
***
## Menu option actions
Every menu option is a pair: the message callers hear, and the action that runs when they press the key.
### Available actions
**Play announcement**
Plays a message to the caller. Use it for self-service information: office hours, address, directions.
**Ring this line**
Rings the people who normally answer this number, following its call routing settings (simultaneous or cascade).
**Forward to a number**
Forwards the call to a phone number outside your workspace: an external service, a call center, a partner. Include the country code.
The forwarded leg is a new outbound call from your Allo number, billed at [your calling rates](/en/billing/international-calling-rates) based on the destination of the external number. Forwarding abroad is billed as an international call, whatever the origin of the incoming call. The recipient sees your Allo number as the caller.
**Forward to another line**
Pick another of your Allo lines from a list, by its name. The call is redirected to that line and behaves like a normal incoming call on it: that line's routing, business hours, and voicemail apply. No need to type the line's phone number.
**Ring a team member**
Rings one specific person. Only their phone rings, the rest of the team is not disturbed. Best for options that should always reach the same person, like billing or management.
**AI Receptionist**
Hands the call to your AI Receptionist, which answers, handles inquiries, and routes intelligently. Available on the Business plan.
[Learn about AI Receptionist](/en/features/ai-receptionist)
### Which action should I use?
| The caller should reach | Use |
| ---------------------------------------------------------------- | ----------------------- |
| A department with its own Allo number (Sales line, Support line) | Forward to another line |
| One specific person on the team | Ring a team member |
| The team behind this same number | Ring this line |
| Someone outside Allo (external service, call center) | Forward to a number |
| Information only, no human (hours, address) | Play announcement |
| An assistant that answers and routes by itself | AI Receptionist |
***
## Menu structure
### Single-level menu (current)
Allo currently supports one level of menu options.
**Structure:**
```
Main menu
├── Press 1: Sales
├── Press 2: Support
├── Press 3: Billing
└── Press 4: Other
```
**Limit:** 8 options maximum
Multi-level menus (sub-menus) are not currently supported. Keep your menu simple with one level.
### Best practices
**Recommended:**
* 3-5 options for best experience
* Clear, specific destinations
* Logical order (Sales first, etc.)
**Avoid:**
* More than 6 options
* Vague categories
* Overlapping choices
***
## Voice and tone
### Customize AI voice
Choose voice characteristics:
**Voice type:**
* Male or female voice
* Different accents available
* Natural conversational tone
**Speaking pace:**
* Normal (recommended)
* Slower for clarity
* Faster for efficiency
**Professional or friendly:**
* Professional for business
* Friendly for service
* Match your brand voice
**Access:**\
Settings > AI Voice
***
## Menu best practices
### Writing clear options
**Good examples:**
✅ "Press 1 to reach our Sales team"\
✅ "Press 2 for Customer Support"\
✅ "Press 3 to hear our office hours and location"
**Bad examples:**
❌ "Press 1 for Department A"\
❌ "Press 2 if you have questions"\
❌ "Press 3 for other stuff"
### Keep it short
**Ideal menu:**
* 3-5 options maximum
* Under 30 seconds total
* Clear, specific destinations
**Too long:**
* 8 options
* Over 60 seconds
* Vague or overlapping choices
### Professional scripting
**Welcome message:**
Good: "Thank you for calling ABC Consulting."\
Better: "Thank you for calling ABC Consulting. To help us direct your call..."
**Option wording:**
Good: "reach Sales"\
Better: "speak with our Sales team"\
Best: "speak with our Sales team about new projects"
***
## Common menu structures
### Small business (3 options)
```
"Thank you for calling [Company]."
1. Sales and new customer inquiries
2. Customer support
3. Billing and account questions
```
### Service business (4 options)
```
"Thank you for calling [Company]."
1. Schedule an appointment
2. Check appointment status
3. Billing questions
4. All other inquiries
```
### Professional services (5 options)
```
"Thank you for calling [Company]."
1. Speak with an advisor
2. Check account status
3. Make a payment
4. Office hours and locations
5. All other questions
```
### Department routing (4 options)
```
"Thank you for calling [Company]."
1. Sales
2. Technical Support
3. Customer Success
4. Administration
```
***
## Bypass IVR menu
### Let important contacts skip menu
**Setup bypass:**
1. IVR settings
2. Scroll to "Who can skip the menu"
3. Choose option:
* All contacts
* Favorites only
* No one
**Mark favorites:**
1. Open contact profile
2. Tap star icon
3. They now skip IVR and ring you directly
### Emergency bypass
**Add emergency option:**
"If this is an emergency, press 9 now."
Route press 9 to:
* On-call team member
* Emergency line
* Direct to key person
***
## Troubleshooting
**Check:**
* IVR is activated (toggle on)
* At least one option is configured
* Welcome message is not blank
* Not bypassed by business hours settings
**Test:** Call your number and verify menu plays.
**Verify:**
* Options are saved (not drafted)
* Each option has text
* Voice settings are configured
* No special characters in text
**Try:** Re-save each option one by one.
**Check each option:**
* Destination is set correctly
* Phone number includes country code
* Team member has active Allo number
* External number can receive calls
**Test:** Press each option and verify routing.
**Verify:**
* Contact is marked with star (favorite)
* Bypass setting is enabled
* Contact is saved in Allo
* Using correct phone number
**Refresh:** Remove and re-add favorite status.
**Check:**
* Caller is pressing keys (not voice)
* Tone dial (not pulse) enabled on caller phone
* Options are mapped to destinations
* Destination numbers are valid
**Solution:** Test from different phone to rule out caller phone issue.
**Voice IVR is in beta:**
* Available on request only
* Contact our sales team
* May require Business plan
* Currently limited availability
**Contact:**\
Email [sales@withallo.com](mailto:sales@withallo.com) or reach out via WhatsApp
***
## Examples by industry
### Real estate
```
"Thank you for calling [Agency]."
1. Schedule a property showing
2. Speak with an agent
3. Property information
4. Office hours and location
```
### Medical office
```
"Thank you for calling [Practice]."
1. Schedule or change appointment
2. Prescription refills
3. Billing questions
4. Medical emergency - press 9
```
### Law firm
```
"Thank you for calling [Firm]."
1. New client consultations
2. Existing client matters
3. Office administration
4. After-hours urgent matters
```
### E-commerce
```
"Thank you for calling [Store]."
1. Order status
2. Returns and exchanges
3. Product information
4. Customer service
```
***
## Related features
Route calls to team members
Set availability schedule
Intelligent call handling
# Power Dialer
Source: https://help.withallo.com/en/features/power-dialer
Load a list of numbers and let Allo dial them back to back, so reps spend their time talking instead of clicking
The Power Dialer turns a list of contacts into a single, uninterrupted calling session. Instead of looking up each number, copying it, and dialing by hand, you build a queue once and Allo moves you from one call to the next automatically.
**Available on:** Business plan
**Who can use it:** Every team member has their own queue. Admins and managers can also build a queue for a teammate.
***
## How it works
Add the numbers you want to call. You can add contacts from your call list, paste numbers in bulk, or push a list from your CRM.
Open the queue and press start. Allo dials the first number right away.
When a call ends, Allo automatically queues up the next contact. Tag the call, leave a note, and move forward — no manual dialing in between.
Allo keeps going until the queue is empty. Pause any time, and pick up where you left off later.
Each person has at most one active queue at a time. Building a new queue from scratch replaces the current one.
***
## Build your queue from **everywhere**
There are several ways to add numbers, and you can mix them in the same queue.
Import one or more contacts directly from your Allo CRM or your Calls view.
Upload a CSV of contacts to add them in one sweep.
Using our Chrome Extension, import numbers from virtually any web page.
Connect Claude to Allo and ask it to import contacts with a natural language prompt.
Each entry can carry contact details — name and company — so you see who you're calling before the line connects. When a number matches an existing contact, Allo links the call to it automatically.
***
## Run a session
Open your queue from **web.withallo.com** or the desktop app and press **Start**.
During a session you can:
* **See what's next** — the current contact and the upcoming ones are always visible.
* **Pause and resume** — stop between calls whenever you need a break, then continue from the same spot.
* **Skip a contact** — jump past a number without calling it.
* **Tag and take notes** — apply [call tags](/en/features/call-tags) and write notes between calls, before the next one starts.
Allo waits for you to finish wrapping up before dialing the next number, so you stay in control of the pace.
## Manage a queue
A queue is editable while you build it and between calls.
* **Reorder** — move high-priority contacts to the top.
* **Remove a contact** — drop a single number you no longer want to call.
* **Clear the rest** — remove every contact you haven't reached yet, while keeping the ones you've already called.
* **Reset** — discard the queue entirely and start fresh.
***
## Tips for a productive session
**Filter before you build.** A focused list — one segment, one campaign — beats a giant unsorted queue. Use CRM filters to pull exactly the contacts you want.
**Turn on Do not disturb.** Block inbound calls during a session so nothing breaks your rhythm.
**Tag as you go.** Apply a call tag right after each call while it's fresh. Your analytics stay clean and you don't have to revisit calls later.
**Take short breaks.** Pause between calls rather than abandoning the queue — your progress is saved either way.
***
## Troubleshooting
The Power Dialer is available on the Business plan. Also make sure you're on the latest version of the Allo app. If you see it on the web application but not your desktop, you might need to update Allo.
Check that the number is in a valid format with a country code (for example +1 415 555 0142). Numbers Allo can't recognize as dialable are skipped when you add a list in bulk.
***
## Related
Qualify every call as you work through the queue
Every call in a session is recorded and transcribed
Measure connect rates and outcomes across your sessions
Build and manage queues programmatically
# Threads
Source: https://help.withallo.com/en/features/threads
Discuss a call or a message with your team, right where it happened. Threads are internal and the contact never sees them
## What is a thread
A thread is an internal discussion attached to one item in a conversation: a call, a text message, or an internal note. A call needs a second opinion, a message needs a follow-up, so you open a thread right on it instead of pasting a screenshot into a chat somewhere else.
Threads are **team-only**. The contact never sees them, and they are never sent to anyone outside your workspace.
**Available on:** the web and desktop apps. Coming soon to mobile.
**Who can use them:** anyone with access to the conversation.
***
## Start a thread
Go to **Conversations** and select the contact.
A thread button appears next to the timestamp. Its tooltip reads **Start a thread**, or **Open thread** when one already exists.
The composer opens right underneath the item, with **Threads are only visible to your team** under it.
Press **Enter** to post. Use **Shift + Enter** for a line break.
An item carries at most one thread, and the thread only exists once you post the first comment. If you open the composer and change your mind, nothing is created.
Once posted, the thread collapses into a compact card under the item showing the comment count, the participants and the time of the last activity. Click it to open the discussion again.
***
## Mention a teammate
Type **@** in the composer to bring up your team, then pick the person you need. **@all** mentions everyone in the workspace.
The teammate you mention gets a notification that takes them straight to the call or message, so they read your question with the recording, the summary and the whole conversation in front of them. Replies in a thread you take part in notify you the same way.
Everything else stays quiet: when someone else starts or resolves a thread on your line, the badges update without a sound or a notification.
A comment can be up to 4000 characters.
***
## Reply, edit, resolve
Answer from the **Reply internally…** field at the bottom of the open thread
Edit your own comments in place. An edited comment is marked **edited**
Mark the discussion as handled with the check icon on the thread header
A resolved thread reads **Thread resolved** and shows who resolved it and when. It stays on the call, so you can read it later or **Reopen** it if the situation changes. Anyone with access to the conversation can resolve or reopen a thread, and doing so notifies nobody.
Replying to a resolved thread leaves it resolved.
***
## Where you can start a thread
On any call, text message or internal note in the timeline
Hover a row and use the thread action. The conversation preview opens with the thread ready
The thread sits in the bottom-right corner of the summary page
Your internal conversations with teammates carry threads too
***
## Good to know
* **One thread at a time.** Opening a thread minimizes the one that was open. Pressing **Escape**, or clicking outside the card, closes it.
* **Your draft is kept.** Close a thread mid-sentence and the card shows **1 draft**. Your text is still there when you come back.
* **Unread comments** show a dot on the thread card. Opening the thread clears it, and it never changes whether the conversation itself is marked as read.
# Voicemail
Source: https://help.withallo.com/en/features/voicemail
Set up voicemail and customize greeting messages
## What is Voicemail
Voicemail lets callers leave messages when you can't answer. Messages are automatically transcribed and sent to your email with the audio recording. Customize your greeting to match your brand.
**Key benefits:**
* Automatic voicemail transcription
* Custom greeting messages
* Email notifications with recordings
* Smart voicemail with AI summaries
Available on both Starter and Business plans.
***
## Setup voicemail
Go to **Settings** in the Allo app
Navigate to **Settings** > **Voicemail**
Selct voicemail to activate it instead of AI Receptionist for example.
Select your voicemail greeting:
* **Default greeting** - Standard Allo message
* **Custom message** - Your personalized greeting
Voicemail messages are transcribed automatically. You receive both the audio and text via email.
***
## Custom greeting messages
### Writing effective greetings
**Professional greeting template:** Hello, you've reached \[Your Name] at \[Company Name]. I'm unable to take your call right now. Please leave your name, number, and a brief message, and I'll return your call as soon as possible.
**Casual greeting template:** Hi, this is \[Your Name]. Sorry I missed your call. Leave me a message and I'll get back to you soon.
**Out of office greeting:** Thank you for calling \[Company Name]. Our office is currently closed. Our business hours are \[hours]. Please leave a message or call back during business hours.
### Best practices
**Keep it short:**\
20-30 seconds maximum. Callers want to leave their message quickly.
**Be clear:**\
State your name, that you can't answer, and what they should do.
**Set expectations:**\
Tell them when to expect a callback. "I'll return your call within 24 hours."
**Update regularly:**\
Change your greeting for holidays, vacations, or extended absences.
**Professional tone:**\
Even casual greetings should be clear and polite.
***
## Smart voicemail
### What is smart voicemail
Smart voicemail uses AI to transcribe and summarize voicemail messages. You get:
* Full text transcription
* AI summary of key points
* Caller information
* Suggested actions
Available automatically on all voicemail messages.
### What you receive
After someone leaves a voicemail, you get:
Sent to your registered email address
Alert in Allo app with badge
Full voicemail audio file
Text version of the message
### Email notifications
**What's included:**
* Caller name (if known)
* Caller phone number
* Date and time of call
* Voicemail transcription
* Link to audio recording
* AI summary
**Configure email:** Set your email in **Settings** > **Profile** > **Work email**
**Disable email notifications:** Contact support to turn off voicemail emails.
***
## Voicemail settings
## When voicemail activates
Configure when callers reach voicemail:
### Unanswered calls
**Settings** > **Unanswered Calls** > **Voicemail**
When you don't answer within a set number of rings, calls go to voicemail.
### Outside business hours
**Settings** > **Business Hours** > **Outside Business Hours** > **Voicemail**
Automatically send calls to voicemail when you're closed.
[Learn more about Business Hours](/en/call-features/call-management#business-hours)
### When busy
**Settings** > **When you are busy** > **Voicemail**
If you're on another call, new callers go to voicemail.
## Customize voicemail greetings
### Access custom messages
1. Go to **Settings**
2. Tap on your **phone number**
3. Select **Unanswered calls**
4. Tap **Custom Message**
### Text-to-speech greeting
**How it works:**
* Type your greeting message
* AI reads it with natural voice
* Adjustable voice and tone
**Character limit:**\
500 characters maximum
**Voice options:**
* Multiple voice choices
* Male or female voices
* Different accents available
### Change greeting message
You can update your greeting anytime:
1. Go to voicemail settings
2. Edit the custom message text
3. Save changes
4. New greeting is active immediately
### Multiple greetings
Set different greetings for:
* Business hours vs. after hours
* When busy on another call
Each context can have its own custom message.
### Message preview
**Test your greeting:** Call your own number to hear how it sounds to callers.
Adjust wording, pacing, or voice if needed.
## Voicemail notifications
### Email notifications
**Automatic emails:** Every voicemail sends an email with:
* Caller information
* Transcription
* Audio recording link
* AI summary
**Set email address:**
1. Go to **Settings** > **Profile**
2. Tap **Work email**
3. Enter your email address
4. Save
**Multiple email recipients:** Contact support to add additional email addresses for voicemail notifications.
### In-app notifications
**Push notifications:** Receive instant alerts on your phone when you get a voicemail.
**Enable notifications:**
1. Go to phone settings
2. Find Allo app
3. Enable notifications
**Badge counter:** Allo app icon shows number of unread voicemails.
### Notification settings
**Disable specific notifications:**
* Turn off email notifications: Contact support
* Turn off push notifications: Phone settings
* Keep in-app badge: Always visible
**Do not disturb:** Use phone's Do Not Disturb mode to silence voicemail alerts temporarily.
***
## Voicemail vs. AI Receptionist
You must choose between voicemail and AI Receptionist. Both cannot be active simultaneously.
| Feature | Voicemail | AI Receptionist |
| ---------------------- | ------------------ | ------------------------ |
| Availability | Starter & Business | Business only |
| Caller experience | Leave message | Interactive conversation |
| Information collection | One-way message | Can ask questions |
| Transcription | Yes | Yes |
| Custom greeting | Yes | Yes |
| Answer questions | No | Yes |
| Pricing | Included | Business plan required |
### When to use voicemail
**Best for:**
* Simple message collection
* Starter plan users
* Traditional business model
* Callers who prefer leaving messages
### When to use AI Receptionist
**Best for:**
* 24/7 customer service
* Answering common questions
* Collecting specific information
* Modern, interactive experience
[Learn more about AI Receptionist](/en/features/ai-receptionist)
***
## Access voicemail messages
### In the Allo app
1. Open Allo app
2. Go to **Inbox** tab
3. Voicemails appear with other call records
4. Tap a voicemail to:
* Listen to audio
* Read transcription
* View AI summary
* Call back
### Via email
1. Check your email inbox
2. Find voicemail notification from Allo
3. Read transcription in email
4. Click link to listen to recording
### Voicemail history
All voicemails are saved in:
* Allo app inbox (indefinitely)
* Email inbox (until you delete)
* Connected CRM (if integrated)
***
## Troubleshooting
**Check these settings:**
* Voicemail toggle is ON in Settings
* Not using AI Receptionist instead
* Business hours configured correctly (if using)
**Test:** Call your number and don't answer to verify voicemail plays.
**Common causes:**
* Still using default greeting setting
* Custom message not saved properly
* Message exceeds character limit
**Solution:**
1. Go to voicemail settings
2. Select "Custom message"
3. Re-enter your greeting
4. Save and test by calling yourself
**Verify email settings:**
1. Check email address in Settings > Profile
2. Look in spam/junk folder
3. Verify email is spelled correctly
**Whitelist Allo:** Add Allo's email address to your contacts to prevent spam filtering.
**Why this happens:**
* Poor audio quality
* Background noise
* Caller speaking unclearly
* Strong accents or language mixing
**What you can do:** Listen to the audio recording for accurate information. Transcription is a convenience feature, not always perfect.
**Check these items:**
* Recording links expire after 90 days
* Internet connection is active
* Link wasn't modified or truncated
**Solution:** Voicemails remain in Allo app inbox even if email links expire.
You can update anytime:
1. Go to Settings > your phone number
2. Select context (Unanswered calls, etc.)
3. Tap Custom Message
4. Edit the text
5. Save
Changes are immediate.
***
## Need help?
Get help with voicemail settings
# Help Center
Source: https://help.withallo.com/en/get-started/index
Find answers, explore features, and build with our API.
## Quick Access
Common questions answered
Fix call or connection issues
Reach our team directly
Latest updates & features
***
## New to Allo?
Start here.
The AI phone system, in 2 minutes
Create workspace, buy numbers
Compare Solo, Business and Ultra
***
## AI Features
24/7 AI receptionist to handle your calls
Summaries, transcripts and post-call actions
Call through lists back to back
Professional Interactive Voice Response
***
## Phone Numbers
Send and receive text messages
Transfer an existing number to Allo, free
Use your own phone number
***
## Integrations
Two-way sync
Auto call logging
1000+ automations
View all
***
## For Developers
Build powerful integrations with Allo. Access calls, SMS, contacts, webhooks, and more.
Get started with API keys
Real-time event notifications
Connect Allo to Claude and ChatGPT
***
## Account & Billing
Change plan, update payment
Compare Solo, Business and Ultra
Add members, set permissions
# Numbers and users
Source: https://help.withallo.com/en/get-started/numbers-and-users
Two distinct building blocks — and why understanding the difference matters
## Two building blocks
Every Allo workspace is built on two distinct concepts: **phone numbers** and **users**. They're not interchangeable, and understanding the difference is key to setting up your team correctly.
### Phone numbers (lines)
A phone number is the line your callers dial. Each number has its own independent settings:
* Business hours
* Call routing (who rings when a call comes in)
* IVR menu
* Voicemail
A team can share one number — a single "Sales" line, for example — or have several, one per department or per person.
### Users
A user is a person with an Allo account. Each user:
* Has their own login and profile
* Occupies one seat on your plan
* Can be assigned to one or more numbers
* Is the one who answers calls
***
## How they connect
Users and numbers are independent. Adding one doesn't automatically configure the other.
**For a user to receive calls on a number, two things need to happen:**
1. They must be a member of your workspace (invited and signed in)
2. They must be assigned to that number — Settings → Numbers → select a line → add members
Once assigned, they can be added to that number's call routing, which determines whether and when they ring.
Assigning a user to a number and adding them to routing are two separate steps.
***
## What this means in practice
**Small team, one shared number**\
You don't need multiple numbers for multiple people to answer calls. One number + one Allo account per person is the standard setup. Each person needs their own account (seat), not their own number.
**Multiple users can be on calls at the same time**\
A shared number is not a single physical line. Two or more users assigned to the same number can each be on their own call simultaneously, inbound or outbound. If one user is in conversation, the next inbound call still rings every other available user instead of being dropped.
**Multiple lines**\
Add numbers when you want separate lines for different purposes: a main line, a support line, direct lines per rep. Each number has its own routing and business hours configured independently.
**One user, multiple numbers**\
A user can be assigned to several numbers at once — for example, an admin who handles both the main line and the support line.
***
## Common mix-ups
**"I invited a new team member — why aren't they ringing?"**\
Inviting someone adds them as a user, but doesn't automatically assign them to a number or add them to routing. Go to Settings → Numbers, select the line, and add them. Then configure routing.
**"Do I need a separate number for each person?"**\
No — unless you want individual direct lines. Multiple users can share one number and all be part of its routing.
***
## Related
Configure who rings when a call comes in on a number
Set availability per number
Invite users and assign them to numbers
Add more lines to your workspace
# Solo User
Source: https://help.withallo.com/en/get-started/solo-user
Set up Allo for yourself in minutes
## Setup for freelancers and solo entrepreneurs
Get your Allo account ready in 5 minutes. No team setup needed.
***
## Setup steps
**Starter - \$16/month (billed annually)**
* Mobile app
* Business number
* Call recordings and AI summaries
* CRM integrations
* SMS receive only
**Business - \$45/month**
* Everything in Starter
* Desktop app (Mac & Windows)
* AI Receptionist
* SMS send and receive
* 7-day free trial
[Compare plans in detail](https://withallo.com/pricing)
Sign up with email address (recommended), phone number, Google, or Apple account.
**Mobile app:**\
[Download "Allo"](https://withallo.com/download) from App Store or Play Store, then tap "Log in"
**Desktop:**\
Go to [web.withallo.com](https://web.withallo.com)
Desktop access requires Business plan.
Select a number from available options in your region. This becomes your professional business line.
**Available:**
* US numbers
* Canada numbers
* France numbers (landline)
* UK numbers
* And 50+ other countries on demand
[Learn about phone numbers](/en/phone-numbers/understanding-allo-number)
**Required:**
* Microphone access (to make calls)
* Notifications (call alerts and summaries)
**Optional:**
* Contacts sync (can be enabled later)
You can change these anytime in your phone settings.
Open the dial pad, enter a number, and call. Your Allo number displays to recipients.
**During the call:**
* Everything is recorded automatically
* Transcript generated in real-time
* AI prepares summary after you hang up
***
## After your first call
Every call is automatically:
Full audio saved for playback anytime
Converted to searchable text
AI extracts key points and action items
Sent to your CRM if connected
**Where to find your calls:**
Go to Inbox tab to see all calls with recordings, transcripts, and summaries.
[Learn about call recordings](/en/features/call-recordings)
***
## Next steps
### Essential setup
Forward your existing phone number to Allo to get AI features on all incoming calls.
**Benefits:**
* Record calls to your personal number
* AI summaries for all calls
* Automatic CRM logging
**Setup takes 2 minutes:** Settings > Connect my personal number > Follow automatic setup
[Full setup guide](/en/phone-numbers/connect-personal-number)
Connect HubSpot, Salesforce, Attio, or other CRMs for automatic call logging.
**What syncs:**
* Call recordings
* AI summaries
* Transcripts
* Contact information
**Popular integrations:**
* HubSpot - Click-to-call and two-way sync
* Salesforce - Call tracking
* Attio - Automatic notes
* folk - Recording sync
[View all integrations](/en/integrations/overview)
Set when you're available so calls go to voicemail outside hours.
**Setup:**
1. Settings > Business hours
2. Activate business hours
3. Set schedule for each day
4. Choose what happens outside hours
**Options outside hours:**
* Voicemail
* AI Receptionist (Business plan)
* Forward to another number
[Learn about business hours](/en/features/business-hours)
Change your voicemail greeting to match your business.
**Setup:**
1. Settings > Voicemail
2. Write your custom message
3. Choose voice type
4. Save and test
AI reads your message with a natural voice.
[Voicemail setup guide](/en/features/voicemail)
### Advanced features (optional)
Intelligent call handling (Business plan only)
Press 1 for sales, 2 for support
Get numbers from 50+ countries
***
## Tips for solo users
### Maximize your productivity
**Use email summaries:**\
Get call summaries sent to your email automatically. Enable in Settings > Profile > Work email.
**Connect Google Sheets:**\
Auto-log all calls to a spreadsheet for easy tracking and reporting.
[Google Sheets integration](/en/integrations/google-spreadsheets)
**Set up call forwarding:**\
Forward calls when you're busy to voicemail or another number.
[Call routing options](/en/features/call-routing)
***
## Upgrade to team later
Started solo but need to add team members?
**Easy upgrade:**
1. Upgrade to the business plan (contact us)
2. Go to Settings > Manage my team
3. Invite members by email
4. Each costs same as your plan
5. They get full access and their own number
[Learn about team features](/en/team/overview)
***
## Troubleshooting
**Check:**
* Internet connection is active
* Microphone permission granted
* App is updated to latest version
**Try:**
* Restart the app
* Switch between WiFi and cellular data
* Check subscription is active
[View all common issues](/en/support/common-issues)
**Improve quality:**
* Use headphones instead of speakerphone
* Move closer to WiFi router
* Close other apps using internet
* Ensure minimum 1 Mbps connection speed
[Call quality troubleshooting](/en/support/common-issues#call-quality)
**Remember:**
* Only calls through Allo app are recorded
* Calls via "Call with iPhone" are not recorded
* Processing takes 1-2 minutes
**Check:**
* Call appears in Inbox
* Recording hasn't been deleted
* Subscription includes recordings
**Common issues:**
* Carrier doesn't support call forwarding
* Authorization not granted
* Wrong format when setting up
**Solutions:**
* Try manual setup method
* Contact your carrier to enable forwarding
[Forwarding troubleshooting](/en/phone-numbers/connect-personal-number#troubleshooting)
***
## Need help?
Quick answers to common questions
Get help from our team
Compare plans and features
# Team Admin
Source: https://help.withallo.com/en/get-started/team-admin
Set up Allo for your entire team
## Setup for team administrators
Configure Allo for your sales team, support team, or entire company. This guide walks you through the complete setup process.
***
## Initial setup
If you received a quote from the Allo team, sign it first. This activates your account with the correct number of seats.
If you don't have a quote, you can start directly and add team members later through in-app billing.
**Contact sales for quotes:**\
Email [sales@withallo.com](mailto:sales@withallo.com) or message us on WhatsApp
**On mobile:**
1. Download "Allo" app (iPhone or Android)
2. Tap "Log in"
3. Use your email address (recommended for first login)
**On desktop:**
1. Go to [web.withallo.com](https://web.withallo.com)
2. Log in with your email address
Use a company email that you'll keep long-term. This becomes your admin account.
Select a number even if you won't use it directly. You need a number to access team configuration settings.
**Tip:**\
Choose a general company number that can serve as the main line.
Grant microphone and notification access. You can skip contacts sync if preferred.
Download for your team:
* **Mac:** [Download](https://withallo.com/download)
* **Windows:** [Download](https://withallo.com/download)
* **Web:** [web.withallo.com](https://web.withallo.com)
Desktop and web apps require Business plan.
***
## Invite team members
### From mobile app
Go to Settings (bottom right) > "Manage my team"
Tap "Invite a member" > Enter team member's email address
Tap Send. They'll receive an email invitation immediately.
### From desktop app
Go to Settings > Billing
Click "Add a seat" > Enter email address
Review cost per seat and confirm
**What happens next:**
* Team member receives invitation email
* They create their account using that email
* They choose their own number
* They get full access immediately
[Detailed team management guide](/en/team/manage-members)
***
## Configure team settings
### CRM integrations
Connect your team's CRM for automatic call logging.
Click-to-call, automatic logging, two-way sync
Call tracking and contact sync
Two-way sync with automatic notes
Contact recognition and call logging
**Setup once, works for everyone:**\
Configure integrations at the account level. All team members' calls sync automatically.
[View all CRM integrations](/en/integrations/overview)
### Business hours
Set when your team is available.
**Setup:**
1. Settings > Business hours
2. Tap "Activate business hours"
3. Configure each day (toggle on, set time ranges)
4. Choose what happens outside hours
**Options outside hours:**
* Send to voicemail
* Forward to on-call number
* Play custom announcement
* Route to AI Receptionist
[Business hours guide](/en/features/business-hours)
### Call routing
Define how calls reach your team.
**Ring everyone at once**
All team members ring simultaneously. First to answer gets the call.
**Best for:**
* Small teams (2-5 people)
* Urgent response needed
* Customer support lines
**Ring sequentially**
Call rings team members one after another.
**Best for:**
* Priority-based routing
* Backup coverage
* Overflow handling
[Setup cascade routing](/en/features/call-routing)
**Let callers choose**
"Press 1 for Sales, 2 for Support"
**Best for:**
* Department routing
* Multiple teams
* Professional image
[Create IVR menu](/en/features/ivr)
**Intelligent routing**
AI asks questions and routes appropriately.
**Best for:**
* Complex routing rules
* After-hours coverage
* Qualifying calls
[Setup AI Receptionist](/en/features/ai-receptionist)
***
## Team features setup
### Performance dashboard (Business plan)
Monitor team call activity and performance.
**Available metrics:**
* Total calls per team member
* Call duration averages
* Answer rate
* Missed calls
* Response time
* Call volume trends
**Access:**\
Desktop app > Dashboard tab
[Learn about analytics](/en/team/analytics)
### Call monitoring (Business plan)
Listen to team calls for training and quality assurance.
**What you can do:**
* Review call recordings
* Read transcripts
* View AI summaries
* Leave comments for coaching
**Access:**\
Desktop app > select team member > view their calls
Call monitoring is post-call only. Real-time monitoring coming soon.
[Call monitoring guide](/en/team/analytics#call-monitoring)
### Shared contacts
Enable contact sharing across your team.
**Setup:**
1. Connect CRM (HubSpot, Salesforce, etc.)
2. All CRM contacts import to Allo
3. Team members see shared contacts
4. Call history visible to all
**Alternative:**\
Use Google Contacts integration for simple contact sharing.
[Google Contacts integration](/en/integrations/google-contacts)
***
## Troubleshooting
**Check:**
* Email address is correct
* Check their spam folder
* Verify invitation was sent
**Solution:** Resend invitation from Settings > Manage my team
**Likely causes:**
* Reached seat limit on quote
* Payment method needs updating
* Subscription issue
**Solution:** Contact support or update billing information
**Check:**
* Routing rules are configured
* Team members are online
* Business hours are set correctly
* IVR menu is active (if using)
**Test:** Call your number to see where it routes
**Verify:**
* Integration is connected at account level
* Each team member has CRM access
* Contacts exist in CRM
* Internet connection during calls
**Solution:** Disconnect and reconnect integration
***
## Need help?
Complete team features guide
Get help from our team
Schedule a call with our team
Team pricing and features
# Team Member
Source: https://help.withallo.com/en/get-started/team-member
Join your team on Allo
## Joining a team that uses Allo
Your team admin has invited you to Allo. Follow these steps to get set up and start taking calls.
## Setup steps
Your team admin will send you an email invitation to join Allo.
**Subject line:** "You're invited to join \[Company] on Allo"
**Didn't receive it?**\
Check spam folder or ask your admin to resend.
**On mobile:**
* iPhone: [Download from App Store](https://withallo.com/download)
* Android: [Download from Play Store](https://withallo.com/download)
**On desktop:**
* Mac: [Download](https://withallo.com/download)
* Windows: [Download](https://withallo.com/download)
* Web: [web.withallo.com](https://web.withallo.com)
Desktop and web access require Business plan.
**On mobile:**
1. Open Allo app
2. Tap "Join a team"
3. Log in with the email address from the invitation
**On desktop:**
1. Go to [web.withallo.com](https://web.withallo.com)
2. Log in with your invitation email address
Use the exact email address from your invitation. Using a different email creates a new separate account.
Select a number from available options. This becomes your direct line.
**Ask your admin:**\
Which number you should choose based on team setup.
Accept permissions when prompted:
**Required:**
* Microphone (to make calls)
* Notifications (call alerts)
**Optional:**
* Contacts sync (recommended)
You can change these later in phone settings.
Ask your admin to connect your company CRM if your team uses one:
* HubSpot
* Salesforce
* Attio
* Odoo
* Others
[View integration guides](/en/integrations/overview)
Personalize your Allo experience:
**Essential:**
* Set your business hours
* Customize voicemail message
* Enable email summaries
**Optional:**
* Connect your personal number
* Set up call forwarding
* Configure notifications
***
## Using Allo as a team member
### Make and receive calls
**Your Allo number:**\
Use your assigned number for calls. Recipients see this number when you call.
**Shared team number:**\
If your team shares a number, you'll ring when calls come in. First to answer gets the call.
**All calls are:**
* Recorded automatically
* Transcribed to text
* Summarized by AI
* Synced to your CRM (if connected)
### Access call history
**View your calls:**
* Go to Inbox tab
* See all your calls
* Listen to recordings
* Read transcripts and summaries
**View team calls:**\
Depending on permissions set by admin, you may see other team members' calls for collaboration.
### Team features
**What you can do:**
* Transfer calls to team members
* Access shared contacts from CRM
* Collaborate on call notes
* View team availability
* Use shared IVR menu
* Route calls to colleagues
**Ask your admin about:**
* Your specific permissions
* Team call routing rules
* Shared number usage
***
## Personalize your setup
### Business hours
Set when you're available for calls.
**Setup:**
1. Settings > Business hours
2. Activate business hours
3. Set schedule for each day
4. Choose what happens when unavailable
**Options when unavailable:**
* Voicemail
* Forward to team member
* Send to main line
[Business hours guide](/en/features/business-hours)
### Voicemail greeting
Customize your voicemail message.
**Setup:**
1. Settings > Voicemail
2. Write your custom message
3. Choose voice type
4. Save and test
**Example message:**\
"Hi, you've reached \[Your Name] at \[Company]. I'm unable to take your call right now. Please leave a message and I'll get back to you soon."
[Voicemail customization](/en/features/voicemail)
### Email summaries
Get call summaries sent to your email.
**Setup:**
1. Settings > Profile
2. Add your work email
3. Summaries arrive after each call
**What's included:**
* Call recording link
* AI summary
* Transcript
* Caller information
### Notifications
Control how you're alerted about calls.
**Customize:**
1. Phone Settings > Allo > Notifications
2. Choose notification style
3. Set sounds and badges
4. Configure Do Not Disturb
***
## Common questions
Yes. Log in on mobile, desktop, and web simultaneously. Your calls and settings sync across all devices.
**Desktop access:**\
Requires team to be on Business plan.
Your admin can access your call recordings for training and quality purposes. This is standard for team accounts.
**Ask your admin:**\
About your team's call monitoring policy.
Yes. You can set your own:
* Business hours
* Voicemail greeting
* Email preferences
* Personal number forwarding
**Team settings:**\
Some settings like CRM integration and routing are set by admin for everyone.
If you leave the company:
* Admin removes you from team
* Your access stops immediately
* Your call history is preserved for the team
* Your personal settings are deleted
**Your own calls:**\
Contact admin if you need copies of recordings.
Yes, but use a different email address. Your team account email is tied to your team membership.
**Use cases:**
* Personal freelance work
* Side business
* Separate company
***
## Troubleshooting
**Check:**
* Spam/junk folder
* Promotions tab (Gmail)
* Correct email address with admin
**Solution:**\
Ask admin to resend invitation
**Verify:**
* Using exact email from invitation
* No typos in email address
* Tapping "Join a team" not "Log in"
**Solution:**\
Contact admin or support for help
**Check:**
* You're logged into team account (not personal)
* Admin has granted necessary permissions
* Team is on correct plan (Business for some features)
**Ask admin:**\
About your role and permissions
**Verify:**
* Integration is connected
* You have CRM access
* Contact exists in CRM
* Internet connection during call
**Solution:**\
Ask admin to check integration settings
**Check:**
* Your status is available (not busy)
* Business hours are correct
* Routing rules set by admin
**Ask admin:**\
How calls should route to you
***
## Need help?
Your team admin is your first resource for questions about team setup and usage
Quick answers to common questions
Get help from Allo support team
# What is Allo?
Source: https://help.withallo.com/en/get-started/what-is-allo
Learn about Allo, the AI-first phone system built for small sales teams
## The AI phone system built for sales teams
Allo is a mobile-first phone system designed for small sales teams. Every call is automatically recorded, transcribed, and synced to your CRM.
Built for teams of 2-15 people who want to spend more time selling and less time on admin work.
## How Allo works
**Get your number**\
When you sign up, you get a professional business number instantly.
**Make and receive calls**\
Use the Allo app on your phone or desktop for crystal-clear calls.
**AI does the work**\
After each call, AI generates a summary with key points and action items. Everything syncs to your CRM automatically. No manual note-taking required.
## What makes Allo different
Designed from the ground up with AI at its core.
Best mobile calling experience. Setup in minutes.
Plans from \$16/month. Everything included.
## Who uses Allo
Allo is built for small sales teams who need professional phone features without complexity.
**Perfect for:**
* Sales teams managing customer relationships
* Small businesses handling client calls
* Solo entrepreneurs needing a professional presence
* Teams working remotely or on the go
* Companies using CRM systems like HubSpot or Salesforce
**Key benefits:**
* Automatic CRM updates after every call
* Professional business numbers for your team
* Complete call recordings and transcripts
* Smart call routing and AI receptionist
* Team call management and monitoring
## Key features
### Call management
Allo handles every aspect of your business calls:
* **Automatic recording and transcription** - Every call is captured
* **AI-generated summaries** - Key points and action items extracted automatically
* **Smart voicemail** - Transcribed messages delivered instantly
* **Business hours scheduling** - Control when you're available
* **Interactive menu (IVR)** - Route callers to the right person
* **Call transfer and routing** - Seamless handoffs between team members
### AI capabilities
Built-in intelligence that works for you:
* **AI Receptionist** - An AI agent answers, routes calls, and books meetings
* **Automatic call summaries** - No manual note-taking required
* **CRM data extraction** - Key information synced automatically
* **Intelligent call routing** - Calls reach the right person every time
### Team features
Manage your sales team effectively:
* **Add team members** - Invite unlimited users (per-seat pricing)
* **Call monitoring and coaching** - Listen to calls for training
* **Performance dashboard** - Track team metrics
* **Simultaneous and cascade ringing** - Multiple routing options
## Integrations
Connect with the tools you already use:
### CRM platforms
### Productivity tools
### Automation
[View all integrations →](/en/integrations/overview)
## Pricing
### \$16/month, billed annually
**Included features:**
* Mobile app
* Business number
* Call recordings and summaries
* Call transcripts
* Spam blocking
* CRM integrations
* SMS receive only
* Voicemail with transcription
* Business hours
* IVR menu
**Best for:** Solo users and freelancers
### \$45/month per user
**Everything in Starter, plus:**
* Desktop app (Mac & Windows)
* AI Receptionist
* SMS send and receive
* Team dashboard
* Call monitoring
* French mobile numbers (06/07)
**Includes:** 7-day free trial
**Best for:** Sales teams and growing businesses
Business plan requires credit card for free trial. You'll receive a reminder 1 day before charges begin.
## Getting started
Ready to try Allo? Here's what happens next:
Create your account in less than 5 minutes. Get a professional business number instantly.
[Start here →](/en/get-started/getting-started)
Forward calls from your existing number to Allo for AI features on all calls.
[Learn how →](/en/get-started/connect-personal-number)
Every call is automatically recorded, transcribed, and synced to your CRM.
## Need help?
We respond in under 24 hours
Find quick answers to frequent questions
# Identity Verification
Source: https://help.withallo.com/en/help/get-started/getting-started/identity-verification
Understand the identity verification process to activate your Allo account
## Why this verification?
Allo is a professional phone service. To ensure the security of our platform and comply with current regulations, we need to verify that our users operate a legitimate business.
During registration, our system may flag your account as requiring additional verification. In this case, we ask you to provide documents proving your business exists.
This verification is a standard step for professional phone services and helps protect all our users.
## Required documents
To complete your account verification, you must provide a **business registration certificate** or **company incorporation document**.
### Business registration certificate
The business registration certificate is the official document proving your company's legal existence. It must:
* Be dated within the last 3 months
* Include your company name
* Show your business registration number
* Be readable and complete
### Other accepted documents
Depending on your situation, we also accept:
* **Certificate of Incorporation** for registered companies
* **Business license** issued by local authorities
* **Tax registration certificate** with business ID number
* **Chamber of Commerce extract** or equivalent official document
Unreadable, incomplete, or expired documents will be rejected. Make sure your document is up to date and clearly visible.
## How to submit your documents
You have two options to submit your verification documents:
Upload your documents directly from the Allo interface during the registration process or in your account settings.
Send your documents to **[legal@withallo.com](mailto:legal@withallo.com)** including the email address associated with your Allo account.
### Submission tips
* **Accepted formats:** PDF, JPG, PNG
* **Maximum size:** 10 MB per file
* **Quality:** Make sure the document is readable and not blurry
* **Complete:** The entire document must be visible
## Processing time
Once your documents are sent, our team receives them immediately.
Our team reviews your documents to validate authenticity and compliance.
If everything is in order, your account is activated within **24 business hours**.
You receive an email confirming your account activation.
The 24-hour timeframe refers to business days. Documents sent on weekends will be processed on Monday.
## Frequently asked questions
Our system analyzes several criteria during registration to detect potentially risky accounts. This may be related to:
* The email address used
* The country of connection
* The information provided during registration
This verification helps us protect our platform and users against abuse.
As a freelancer or sole proprietor, you can provide:
* Your **business registration certificate**
* Your **tax registration document** showing your business ID
* An official **self-employment certificate** from your local authorities
For businesses outside France, send the equivalent business registration document from your country:
* **UK:** Companies House certificate or confirmation statement
* **US:** Certificate of Incorporation, LLC filing, or EIN confirmation
* **Germany:** Handelsregisterauszug (commercial register extract)
* **Other countries:** Official business registration certificate from your jurisdiction
Contact us at [legal@withallo.com](mailto:legal@withallo.com) if you're unsure which document to provide.
The most common reasons for rejection are:
* Unreadable or poor quality document
* Expired document (more than 3 months old)
* Incomplete document (missing pages)
* Unofficial document
**Solution:** Resubmit a document that meets the requirements listed above.
During verification, access to calling features is limited. Once your account is validated, you will have access to all Allo features.
Yes, your documents are processed confidentially and securely. They are used only for verifying your professional identity and are stored in compliance with GDPR.
## Need help?
If you encounter difficulties with the verification process or have questions about which documents to provide:
Our team is available to help you
[legal@withallo.com](mailto:legal@withallo.com)
# Notion
Source: https://help.withallo.com/en/help/integrations/productivity/notion
Automatically log call recordings and summaries to your Notion workspace
## What this integration does
The Allo-Notion integration automatically logs every call to your Notion workspace. Calls are organized by contact type (Client or Lead) with summaries and audio recordings. Perfect for teams using Notion as their workspace hub. Contacts from a specified Notion database are also automatically synced into Allo every 5 minutes.
**Key benefits:**
* Automatic call logging to Notion database
* Calls organized by Client and Lead categories
* AI summaries included in each call entry
* Audio recordings attached automatically
* Contacts synced from Notion into Allo every 5 minutes
Do not modify the column names or structure of the Notion template. Any change can break the integration.
## Setup
Launch Allo on mobile or desktop
Navigate to **Settings** > **Integrations**
Locate **Notion** in the integrations list and tap **Connect**
Follow the connection steps to link your Notion workspace
If you have multiple workspaces, choose the one where you want call logs to appear
Grant Allo permission to create and update pages in your workspace
Allo automatically creates a database in your Notion workspace for call logs. Don't modify the template structure.
## How it works
Allo creates a dedicated database in your Notion workspace for all call logs.
Contacts are automatically organized as "Client" or "Lead" categories.
Each call entry includes an AI-generated summary with key points.
Full call recordings are attached to each Notion entry.
### Call logging structure
Each call logged to Notion includes:
* Contact name
* Contact category (Client or Lead)
* Call date and time
* Call duration
* Call direction (inbound/outbound)
* AI-generated summary
* Audio recording link
### Contact categorization
**Clients:**\
Existing customers or established contacts
**Leads:**\
New prospects or potential customers
Allo automatically categorizes contacts based on your call history and frequency.
## What syncs
**From Allo to Notion:**
* Call logs with metadata
* Contact names
* Contact categories (Client/Lead)
* Call summaries (AI-generated)
* Audio recordings (links)
* Call date, time, duration
* Call direction
**From Notion to Allo:**
* Contacts from a specified Notion database, synced automatically every 5 minutes
Only contacts sync from Notion to Allo. Edits to call notes or other fields in Notion do not affect Allo.
## Troubleshooting
**Common causes:**
* Notion authorization denied
* Insufficient workspace permissions
* Network timeout during connection
**Solutions:**
* Make sure you authorized Allo in Notion
* Verify you have edit permissions in the workspace
* Try disconnecting and reconnecting
**Check these items:**
* Integration shows as "Connected" in Allo Settings
* You have internet connection during calls
* The Notion database wasn't deleted
**Solution:** If issues persist, disconnect and reconnect the integration to create a fresh database.
**What happened:**\
If you modified column names or the database structure, the integration stops working.
**Solution:**
1. Go to **Settings** > **Integrations** > **Notion**
2. Tap **Disconnect**
3. Reconnect to generate a fresh database template
4. Don't modify the new database structure
**Check these items:**
* Call was made through Allo app (not native dialer)
* Recording permissions are enabled in Allo
* Internet connection was stable during call
**Note:**\
Some calls may not have recordings if they were very short or disconnected.
To reconnect the integration:
1. Go to **Settings** > **Integrations** > **Notion**
2. Tap **Disconnect**
3. Follow the connection steps again
Reconnecting creates a new database. Previous call logs remain in the old database.
## Manage your integration
### Disconnect Notion
To disconnect the integration:
1. Open Allo app
2. Go to **Settings** > **Integrations**
3. Select **Notion**
4. Tap **Disconnect**
Disconnecting stops call logging to Notion. The existing database and call logs remain in your workspace.
### Working with the database
You can customize the Notion database view without breaking the integration:
* Change view type (table, board, calendar, etc.)
* Add filters
* Sort entries
* Create linked databases
**Don't modify:**
* Column names
* Column types
* Database structure
## Use cases
### Team knowledge base
Build a searchable database of all customer calls in Notion. Team members can review call summaries and recordings.
### Client documentation
Maintain complete call history alongside other client documentation in Notion. Keep everything in one workspace.
### Sales training
Review call recordings and AI summaries to train new team members. Create playbooks based on successful calls.
### Project management
Link call logs to project pages in Notion. Track communication alongside tasks and deliverables.
## Need help?
Get help with the integration
Learn more about Notion features
# Apollo
Source: https://help.withallo.com/en/integrations/apollo
Auto-sync calls, texts, and voicemails to Apollo. Contacts, companies, and deals stay aligned with no manual updates. Business plan only.
## How to connect
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Find **Apollo** in the list and click **Connect**.
You'll be redirected to Apollo. Sign in if needed, then grant Allo all requested permissions.
Once authorized, you're redirected back to Allo. Your integration is now active.
## What syncs
**From Apollo to Allo:**
* Contacts
* Accounts (as companies)
* Opportunities (as deals)
Contacts created in Allo are not pushed to Apollo.
**Sync direction:** One-way (Apollo → Allo).
## How calls are synced
After each call, Allo pushes the call as an Apollo call on the matching contact or company with the call summary and a link to the recording.
## How SMS are synced
SMS sync is not available for this integration.
## Click-to-call
Click on any phone number in Apollo to open the call directly in the Allo app. The Allo app must be installed on your device.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
This integration does not support SMS sync.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Attio
Source: https://help.withallo.com/en/integrations/attio
Automatically sync call recordings and summaries to your Attio CRM
## How to connect
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Find **Attio** in the list and click **Connect**.
You'll be redirected to Attio. Sign in if needed, then grant Allo all requested permissions.
Once authorized, you're redirected back to Allo. Your integration is now active.
## What syncs
**From Attio to Allo:**
* Companies
* Deals
* People
**From Allo to Attio:**
* Contacts created or updated in Allo are pushed back to Attio
**Sync direction:** Two-way — changes in either system are reflected in the other.
**Custom fields:** Allo syncs custom fields from Attio for people and companies. Supported field types: Text, Number, Checkbox, Date, Timestamp, Rating, Select, Status, and Currency.
## How calls are synced
After each call, Allo creates a note on the matching company, deal, and person in Attio with the call summary and transcript. Allo also adds a column on companies and people tracking the total number of calls, useful for reporting.
## How SMS are synced
SMS conversations are synced as a single note on the matching person. The note is updated each time a new message is sent or received, keeping the full conversation thread in one place.
## Click-to-call
Click any phone number in Attio to start the call instantly in Allo. This requires the **Allo desktop app** installed on your computer. The desktop app is what actually places the call, so click-to-call won't work without it. [Download the desktop app](https://www.withallo.com/download) if you haven't yet.
## Power Dialer
When you connect the integration, Allo automatically installs a Power Dialer app inside Attio. From any list of records in Attio, you can send contacts straight to your Allo Power Dialer queue.
### Connect the Power Dialer
You only need to do this once.
Go to [**web.withallo.com**](https://web.withallo.com), open the **Power Dialer**, and click **Connect your CRM**.
Choose **Attio** from the list. Allo prompts you to create an API key with the **Power Dialer** and **user** permissions already selected. Keep them as is.
Create the key, then copy it.
In Attio, open **Settings**, search for the **Allo** app, and paste the API key into the **Connections** field. Save.
The Power Dialer is connected. You're ready to send contacts from Attio.
### Send contacts to the queue
Open any record list in Attio (Contacts, Companies, or another object) and select the records you want to call.
Click the **more** button and choose **Send to Power Dialer**.
Admins can push the contacts to a teammate's Power Dialer queue. Members send them to their own queue.
A toast confirms the status of your request. The contacts are now in the Power Dialer, ready to call.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo. Attio also supports custom phone number fields.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
If your SMS conversations are not appearing, verify the integration is connected in **Settings** > **Integrations** and check the integration indicator on the call list at [web.withallo.com](https://web.withallo.com) for error details.
If SMS still don't appear, disconnect and reconnect the integration.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
Click-to-call relies on the **Allo desktop app**. If clicking a phone number in Attio does nothing, make sure the desktop app is installed and running on the computer you're using. Download it from [withallo.com/download](https://www.withallo.com/download), then reload Attio.
# Brevo
Source: https://help.withallo.com/en/integrations/brevo
Automatically sync call recordings and summaries to your Brevo CRM
## How to connect
### Get your Brevo API key
Go to [app.brevo.com](https://app.brevo.com)
Click your account dropdown and select **Settings** > **SMTP & API** > **API Keys & MCP**
Click **Generate a new API key** and name it "Allo" (or any name you prefer)
Click **Generate**, then copy your API key immediately.
Your API key is only visible at this step. Once created, you won't be able to copy it again — you'll need to create a new one if you lose it.
### Connect in Allo
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Locate **Brevo** in the integrations list and click **Connect**.
Enter the API key you copied from Brevo.
Click **Save & Connect** and wait for confirmation.
## What syncs
**From Brevo to Allo:**
* Contacts
* Companies
* Deals
Contacts created in Allo are not pushed to Brevo.
**Sync direction:** One-way (Brevo → Allo).
## How calls are synced
After each call, Allo creates a note and an event on the matching contact in Brevo with the call summary and a link to the recording.
## How SMS are synced
SMS sync is not available for this integration.
## Click-to-call
Click on any phone number in Brevo to open the call directly in the Allo app. The Allo app must be installed on your device.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
This integration does not support SMS sync.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Chrome Extension
Source: https://help.withallo.com/en/integrations/chrome-extension
Click-to-call from any website and bulk-import contacts to the Power Dialer
The Allo Chrome Extension lets you call any phone number you see on the web with one click, and bulk-import contacts from virtually any web page into your Power Dialer queue.
**Available on:** All plans
***
## Install the extension
Go to the [Allo Click-to-Call extension](https://chromewebstore.google.com/detail/allo-click-to-call/bjjbpnjndjmamflhendfjfefdbpleclk) page in the Chrome Web Store.
Click **Add to Chrome**, then **Add extension** when prompted.
Click the Allo icon in your browser toolbar and sign in with your Allo account.
Once installed, the extension is ready. You can also find the installation link at any time in **Settings > Integrations > Chrome Extension** in the Allo web or desktop app.
***
## Click-to-call from any website
When you see a phone number on the web, the extension detects it and shows a small Allo icon next to it.
The Allo icon appears automatically next to recognized phone numbers.
The extension opens a small popup showing the number and contact details if the number is already in your Allo contacts.
Click **Call** in the popup. The call starts immediately in your Allo app (web or desktop).
You can call numbers from:
* CRM pages (HubSpot, Salesforce, Pipedrive, and more)
* LinkedIn profiles
* Company websites
* Google search results
* Any web page with a visible phone number
The extension automatically formats numbers for you, so even numbers written without formatting (like 4155550142) work.
***
## Import contacts to the Power Dialer
The extension can also scrape phone numbers from a web page and send them directly to your Power Dialer queue.
This works on pages with multiple phone numbers visible, like a CRM contact list, a directory, or a search results page.
Open the extension from your browser toolbar.
The extension scans the page for phone numbers and displays how many it found.
The extension shows a preview of the numbers it will import. Click **Import** to add them to your queue.
All imported numbers are added to your active Power Dialer queue. If you don't have an active queue, the extension creates one for you.
The Power Dialer feature is available on the Business plan. If you're on the Starter plan, you can still use click-to-call from the extension.
***
## Manage the extension
You can control the extension's behavior from the popup:
* **Enable/disable click-to-call highlighting** — Turn off automatic number detection if you don't want the Allo icon to appear next to every phone number.
* **Sign out** — Disconnect the extension from your Allo account.
To access these settings, click the Allo icon in your browser toolbar and open the extension menu.
***
## Troubleshooting
Some websites format phone numbers in a way the extension can't recognize. If a number isn't detected automatically, you can still select it, copy it, and paste it into Allo to dial.
Make sure you're signed in to the extension. Click the Allo icon in your browser toolbar and check that your account is connected.
Check that you're signed in to the Allo web app or desktop app in the same browser. The extension needs an active Allo session to place calls.
If you're using the desktop app, make sure it's running before you click the call button in the extension.
The Power Dialer is available on the Business plan. If you're on the Starter plan, you won't see the Power Dialer import option in the extension.
If you're on the Business plan and contacts still aren't importing, check that the page you're importing from actually has phone numbers visible. The extension can only import numbers it can see on the page.
The extension imports every phone number it finds on the page. If a contact has multiple phone numbers listed (for example, mobile and office), both will be imported.
You can remove duplicates manually from your Power Dialer queue before starting a session.
***
## Related
Work through imported contact lists with the Power Dialer
Connect Allo with your CRM and other tools
# Claap
Source: https://help.withallo.com/en/integrations/claap
Automatically send your call recordings and transcriptions to Claap for analysis
## What this integration does
The Allo-Claap integration automatically sends every call recording and transcription to your Claap workspace for analysis. Perfect for sales teams who want to review conversations, coach reps, and improve their sales techniques.
**Key benefits:**
* Automatic sync of call recordings to Claap
* Full transcriptions included with each call
* AI-powered call analysis in Claap
* Review and learn from your sales conversations
You need a Claap Business plan to access API features required for this integration.
## Setup
Log into your Claap workspace and go to **Settings** > **API**. Generate a new API key. You must be a workspace admin to create API keys.
Launch Allo on web, mobile, or desktop
Navigate to **Settings** > **Integrations**
Locate **Claap** in the integrations list and tap **Connect**
Paste the API key you generated from Claap
Click **Save** to activate the integration
Once connected, all your future call recordings and transcriptions will automatically sync to Claap.
## How it works
Every time you finish a call in Allo, the recording and transcription are automatically sent to Claap.
Claap analyzes your calls to help you understand conversation quality and identify coaching opportunities.
Complete call transcripts are included so you can review exactly what was said.
Full audio recordings are attached to each Claap entry for playback and review.
### What gets synced
Each call sent to Claap includes:
* Full audio recording
* Complete transcription
* Call date and time
* Call duration
* Contact information (when available)
### Use cases
**Sales coaching:**\
Review call recordings to coach your team and improve sales techniques.
**Deal review:**\
Go back to important calls to understand customer objections and requests.
**Onboarding:**\
Use recorded calls to train new team members on best practices.
**Quality assurance:**\
Monitor call quality across your team to maintain high standards.
## What syncs
**From Allo to Claap:**
* Call recordings (audio files)
* Full transcriptions
* Call metadata (date, time, duration)
* Contact owner information
**From Claap to Allo:**
This is a one-way integration. Nothing syncs from Claap back to Allo.
Call analysis and insights are available directly in Claap.
## Requirements
You need a **Claap Business plan** to access the API features required for this integration. The API key option is not available on free or starter plans.
You must be a **workspace admin** in Claap to generate an API key. Regular members cannot access API settings.
If you don't see the API option in your Claap settings, contact your workspace admin.
Any Allo plan with call recording enabled works with this integration.
## Troubleshooting
**Check these items:**
* You need a Claap Business plan
* You must be a workspace admin
**Solution:** If you're on a Business plan but don't see the API option, contact your workspace admin or Claap support to verify your permissions.
**Common causes:**
* Invalid or expired API key
* API key copied incorrectly
* Network issues during connection
**Solutions:**
* Generate a new API key in Claap
* Make sure you copy the full key without extra spaces
* Try disconnecting and reconnecting
**Check these items:**
* Integration shows as "Connected" in Allo Settings
* You have internet connection during and after calls
* Call recording is enabled in Allo
**Note:** Calls may take a few minutes to appear in Claap after the call ends.
**Check these items:**
* Call was long enough to generate a transcription
* Audio quality was sufficient for transcription
**Note:** Very short calls or calls with poor audio quality may not have transcriptions.
To reconnect the integration:
1. Go to **Settings** > **Integrations** > **Claap**
2. Tap **Disconnect**
3. Generate a new API key in Claap if needed
4. Follow the connection steps again
Previous calls already synced to Claap remain in your workspace.
## Manage your integration
### Disconnect Claap
To disconnect the integration:
1. Open Allo app
2. Go to **Settings** > **Integrations**
3. Select **Claap**
4. Tap **Disconnect**
Disconnecting stops call syncing to Claap. Existing recordings and transcriptions remain in your Claap workspace.
### Regenerate API key
If you need to regenerate your API key in Claap:
1. Go to Claap **Settings** > **API**
2. Revoke the existing key
3. Generate a new key
4. Update the key in Allo by disconnecting and reconnecting
## Need help?
Get help with the integration
Learn more about Claap features
# Claude Connector
Source: https://help.withallo.com/en/integrations/claude-connector
Use Allo from inside Claude.ai — look up contacts, send SMS, and check calls without leaving the chat.
Add Allo as a custom connector and use it inside any Claude.ai conversation.
## How it works
Think of an MCP as a security badge you hand to Claude. Claude can walk into the rooms you authorized (calls, contacts, SMS, analytics), but never the rooms you didn't. You can revoke the badge any time from your Claude or Allo settings.
The setup takes around 60 seconds. No code, no API key.
## How to connect
Go to [claude.ai/customize/connectors](https://claude.ai/customize/connectors), click **+**, and pick **Add custom connector**. You're telling Claude you want to introduce it to a new tool.
In the modal, paste the values below. Open **Advanced** to add the Client ID. Leave Client Secret empty. These three values are Allo's address and ID card. Just copy-paste, you don't need to understand what they mean.
* **Name**: `Allo`
* **Remote MCP server URL**: `https://mcp.withallo.com/mcp`
* **Advanced → Client ID**: `b82803e6-31d4-47e0-9d7e-db9826ee451b`
Click **Add**, then **Connect**. Sign in to Allo, review the permissions, and **Authorize**. Allo never sees your Claude password, Claude never sees your Allo password.
Allo is now in your connectors. Open any Claude conversation and pick one of the prompts below to get started.
## Try one of these
Copy any prompt below and paste it into Claude. Adjust the names and dates to match your team.
`Show me contacts I called more than twice but never closed. Suggest a follow-up message`
`Compare my reps' connect rates this week vs last. Who's slipping?`
`Pull all calls tagged "enterprise" from the last 30 days. Summarise the top asks`
`List contacts who called 3+ times last week with no owner. Tag them "needs follow-up"`
## What you can do
16 tools to search calls, send SMS, manage contacts, and pull team analytics — full list with required scopes.
## Troubleshooting
A few things to check:
* You must be a **workspace admin** in Claude to add a Custom Connector.
* The **Client ID** must be exactly `b82803e6-31d4-47e0-9d7e-db9826ee451b` with no extra spaces.
* The account you're signing in with on the Allo consent screen must have an active Allo account.
Reload the Claude conversation. Open the **connector status** panel in Claude and confirm Allo is listed as connected. If it isn't, remove the connector and add it again following the steps above.
This is a standard MCP guard rail that Claude shows for any third-party connector — it's not specific to Allo. It's safe to proceed and authorize Allo.
## Using Claude Code instead?
For Claude Code, Claude Desktop, Cursor, or any other MCP client. Uses an API key — no admin required.
# folk
Source: https://help.withallo.com/en/integrations/folk
Automatically sync call recordings and summaries to your folk CRM
## How to connect
### Get your folk API key
Go to [app.folk.app](https://app.folk.app)
Click **Settings** > **API**
Click **New API key** and name it "Allo" (or any name you prefer)
Click **Create key** and copy it immediately.
You won't be able to see the API key again after closing this window.
### Connect in Allo
Launch Allo on mobile or desktop
Navigate to **Settings** > **Integrations**
Locate **folk** in the integrations list and tap **Connect**
Enter the API key you copied from folk
Tap **Save & Connect** and wait for confirmation
When you connect folk, all your contacts are imported into Allo automatically. You can call them directly from the app.
## What syncs
**From folk to Allo:**
* Contacts
* Companies
**From Allo to folk:**
* Contacts created or updated in Allo are pushed back to folk
**Sync direction:** Two-way — changes in either system are reflected in the other.
## How calls are synced
After each call, Allo creates a call activity on the matching contact or company in folk with the call summary, transcript, and a link to the recording.
## How SMS are synced
SMS sync is not available for this integration.
## Click-to-call
Click on any phone number in folk to open the call directly in the Allo app. The Allo app must be installed on your device.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
This integration does not support SMS sync.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# GoHighLevel
Source: https://help.withallo.com/en/integrations/gohighlevel
Sync contacts and companies from GoHighLevel into Allo. Every call logs back to GoHighLevel automatically with AI summaries and recordings.
## How to connect
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Find **GoHighLevel** in the list and click **Connect**.
You'll be redirected to GoHighLevel. Sign in if needed, then grant Allo all requested permissions.
Once authorized, you're redirected back to Allo. Your integration is now active.
## What syncs
**From GoHighLevel to Allo:**
* Contacts
* Companies
**From Allo to GoHighLevel:**
* Contacts created or updated in Allo are pushed back to GoHighLevel
**Sync direction:** Two-way — changes in either system are reflected in the other.
## How calls are synced
After each call, Allo creates a note on the matching contact in GoHighLevel with the call summary, transcript, and a link to the recording.
## How SMS are synced
SMS sync is not available for this integration.
## Click-to-call
Click on any phone number in GoHighLevel to open the call directly in the Allo app. The Allo app must be installed on your device.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
This integration does not support SMS sync.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Google Contacts
Source: https://help.withallo.com/en/integrations/google-contacts
Two-way sync between Allo and your Google Contacts
## What this integration does
The Allo-Google Contacts integration keeps your contacts in sync automatically. Changes in either system update the other in real-time. Perfect for users who want their phone contacts and Allo contacts always matched.
**Key benefits:**
* Two-way contact sync
* Automatic updates in both directions
* Phone number matching
* Contact photo sync
## Setup
Launch Allo mobile app
Navigate to **Settings** in bottom navigation
Tap **Contacts**
Turn on the toggle for **Google Contacts**
You'll be redirected to Google. Select your Google account and authorize Allo to access your contacts.
Return to Allo and wait for initial sync to complete
Initial sync can take 1-5 minutes depending on how many contacts you have. New contacts sync in real-time after setup.
## How it works
All Google contacts import into Allo automatically with names and numbers.
New contacts created in Allo sync back to Google Contacts instantly.
### Two-way sync
**Google Contacts to Allo:**
* Contact names
* Phone numbers
* Email addresses
* Contact photos
* Notes
**Allo to Google Contacts:**
* Contact names
* Phone numbers
* Email addresses
* Notes added in Allo
**Real-time updates:**\
Changes in either system sync within seconds.
### Duplicate handling
If a contact exists in both systems with the same phone number:
* Allo merges the information
* The most complete data is kept
* No duplicate contacts are created
## What syncs
**From Google Contacts to Allo:**
* Contact names (first and last)
* Phone numbers (all numbers)
* Email addresses
* Company name
* Job title
* Contact photo
* Notes
* Birthday
**From Allo to Google Contacts:**
* Contact names
* Phone numbers
* Email addresses
* Notes added in Allo
* Call history tags
**Note:** Contact photos added in Allo don't sync back to Google.
## Contact matching
Contacts are matched using these methods:
1. **Phone number** (primary method)
2. **Email address** (secondary method)
3. **Exact name match** (tertiary method)
If no match is found, Allo creates a new contact.
## Troubleshooting
**Common causes:**
* Google authorization denied
* Using wrong Google account
* Browser blocking popup
**Solutions:**
* Make sure you authorize Allo when prompted
* Select the correct Google account
* Allow popups for Allo domain
**Check these items:**
* Integration shows as "Connected" in Settings
* You granted contacts permission to Allo
* Your Google account is active
* You have internet connection
**Force resync:** Disconnect and reconnect the integration to trigger a fresh sync.
**Why this happens:** If phone numbers are formatted differently (with or without country code), Allo may not recognize them as the same contact.
**Solution:** Manually merge duplicates in Google Contacts, then wait for sync to complete.
**Check data in both systems:**
* Verify the contact exists in Google Contacts
* Ensure the phone number format is consistent
* Check that contact isn't in Google's "Other Contacts"
**Move to My Contacts:** In Google Contacts, move the contact from "Other Contacts" to "My Contacts".
**From Google to Allo:**\
Photos sync automatically if they exist in Google Contacts.
**From Allo to Google:**\
Photos added in Allo don't sync back to Google Contacts. This is a Google API limitation.
To reconnect the integration:
1. Go to **Settings** > **Contacts**
2. Turn off **Google Contacts** toggle
3. Turn it back on
4. Reauthorize access to Google
## Manage your integration
### Disconnect Google Contacts
To disconnect the integration:
1. Open Allo app
2. Go to **Settings** > **Contacts**
3. Turn off the **Google Contacts** toggle
4. Confirm disconnection
Disconnecting stops sync between Allo and Google Contacts. Existing contacts remain unchanged in both systems.
### Selective sync
Currently, Allo syncs all Google contacts. There's no option to sync only specific contact groups.
**Workaround:**\
Create a separate Google account for business contacts and sync only that account with Allo.
### Revoke access
To completely revoke Allo's access to Google Contacts:
1. Go to [Google Account permissions](https://myaccount.google.com/permissions)
2. Find "Allo" in the list
3. Click **Remove access**
## Use cases
### Unified contact management
Keep business and personal contacts in sync automatically. Update once, reflect everywhere.
### Team collaboration
Share Google Contacts with team members. All changes sync to Allo for everyone.
### Backup and recovery
Maintain automatic backup of all Allo contacts in Google. Recover contacts if you switch devices.
### Cross-platform access
Access Allo contacts on any device through Google Contacts web interface.
## Need help?
Get help with the integration
Learn more about Google Contacts
# Google Spreadsheet
Source: https://help.withallo.com/en/integrations/google-spreadsheets
Automatically log all calls to a Google Spreadsheet
## What this integration does
The Allo-Google Spreadsheet integration automatically logs every call to a Google Sheet. Perfect for teams that want simple call tracking without a full CRM. All call data exports in real-time to your spreadsheet.
**Key benefits:**
* Automatic call logging to Google Sheets
* Real-time sync after each call
* Customizable spreadsheet layout
* Easy data analysis and reporting
## Setup
On your computer or phone, create a new Google Sheet
1. Click **Share** button
2. Under "General access", select **Anyone with the link**
3. Set permission to **Editor**
4. Click **Copy link**
Launch Allo on mobile or desktop
Navigate to **Settings** > **Integrations**
Locate **Google Spreadsheet** in the integrations list and tap **Connect**
Paste your Google Sheet URL (the link you copied)
Tap **Save** to activate the sync
The Google Sheet must be set to "Anyone with the link can edit" for the integration to work.
Allo automatically creates column headers on first use. New calls appear as rows in real-time.
## How it works
Every call logs to your spreadsheet within seconds after ending.
Allo creates column headers automatically on first sync.
Each row includes a clickable link to the call recording.
Download as CSV or Excel anytime for external analysis.
### Spreadsheet structure
Allo creates two tabs on your Spreadsheet: `Allo Log Calls` and `Allo Sync Contacts`.
In `Allo Log Calls`, the following columns are created automatically:
| Column | Content |
| ------------ | ------------------------------ |
| Date | Call date and time |
| Contact Name | Name from Allo contacts |
| Phone Number | Caller's phone number |
| Direction | Inbound or Outbound |
| Duration | Call length in minutes:seconds |
| Outcome | Answered, Voicemail, Missed |
| Summary | AI-generated call summary |
| Recording | Link to audio file |
| Transcript | Link to full transcript |
In `Allo Sync Contacts`, the following columns are created automatically:
* Identifier
* First Name
* Last Name
* Email
* Phone Numbers
* Company
* Job Title
### Data updates
**Real-time sync:**\
New calls appear in the spreadsheet within 5-10 seconds after the call ends.
**No deletion:**\
Allo never deletes rows from your spreadsheet. All historical data remains.
## What syncs
**From Allo to Google Sheets:**
* Call date and timestamp
* Contact name
* Phone number
* Call direction (inbound/outbound)
* Call duration
* Call outcome (answered, voicemail, missed)
* AI summary
* Recording link
* Transcript link
* Contact tags (if any)
**From Google Sheets to Allo:**
All contacts that you enter on the `Allo Sync Contacts` table will be created in Allo automatically.
Important note: each contact must have an Identifier on it in order to be synced to Allo. It can just be
the row number.
## Customizing your spreadsheet
### Safe customizations
You can freely customize:
* Add new columns for your own data
* Add formulas and calculations
* Create charts and pivot tables
* Apply formatting and colors
* Add filters and sorting
* Create additional sheets in the workbook
### What to avoid
Don't delete or rename these columns:
* Date
* Contact Name
* Phone Number
* Direction
* Duration
* Outcome
* Summary
* Recording
* Transcript
Deleting these columns may break the integration.
## Troubleshooting
**Common causes:**
* Google Sheet not set to public
* URL copied incorrectly
* Sheet permissions set to "View only"
**Solutions:**
* Make sure sheet is set to "Anyone with the link can edit"
* Copy the full URL from the browser address bar
* Check sharing settings in Google Sheets
**Check these items:**
* Integration shows as "Connected" in Allo Settings
* Google Sheet still exists (not deleted)
* Sheet permissions haven't changed
* You have internet connection during calls
**Solution:** Disconnect and reconnect with a fresh URL.
**If columns are missing:** Delete the integration and reconnect. Allo will recreate column headers.
**If specific calls are missing:** Check that those calls were made through Allo app, not your phone's native dialer.
**Common causes:**
* Recording still processing (wait 1-2 minutes)
* Call was too short to record
* Recording disabled for your account
**Check recording status:** Open the call in Allo app to verify recording exists.
To connect a different Google Sheet:
1. Create a new Google Sheet and make it public
2. Go to **Settings** > **Integrations** > **Google Spreadsheet**
3. Tap **Disconnect**
4. Follow setup steps with the new sheet URL
To reconnect the integration:
1. Go to **Settings** > **Integrations** > **Google Spreadsheet**
2. Tap **Disconnect**
3. Follow the connection steps again
## Manage your integration
### Disconnect Google Spreadsheet
To disconnect the integration:
1. Open Allo app
2. Go to **Settings** > **Integrations**
3. Select **Google Spreadsheet**
4. Tap **Disconnect**
Disconnecting stops new calls from logging. Existing data in the spreadsheet remains unchanged.
### Share with team
To give team members access:
1. Open your Google Sheet
2. Click **Share**
3. Add team member email addresses
4. Set permission level (Viewer or Editor)
Team members can view and analyze call data without accessing your Allo account.
## Use cases
### Simple call tracking
Track all calls without setting up a full CRM. Perfect for solo entrepreneurs and small teams.
### Call volume analysis
Use Google Sheets charts to visualize call volume trends. Identify busy periods and staffing needs.
### Performance reporting
Create monthly reports by filtering calls by date range. Share with stakeholders easily.
### Custom workflows
Connect your spreadsheet to other tools:
* Import sheet data into Looker Studio for advanced dashboards
* Trigger Zapier workflows when new rows appear
* Build custom reports with Google Apps Script
* Share read-only views with external clients
## Support
Help with setup
# HubSpot
Source: https://help.withallo.com/en/integrations/hubspot
Automatically sync call recordings and summaries to your HubSpot CRM
## How to connect
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Find **HubSpot** in the list and click **Connect**.
You'll be redirected to HubSpot. Sign in if needed, then grant Allo all requested permissions.
Once authorized, you're redirected back to Allo. Your integration is now active.
## What syncs
**From HubSpot to Allo:**
* Contacts
* Companies
* Deals
**From Allo to HubSpot:**
* Contacts created or updated in Allo are pushed back to HubSpot
**Sync direction:** Two-way — changes in either system are reflected in the other.
**Custom properties:** Allo syncs custom properties from HubSpot for contacts. Supported property types: Text, Number, Checkbox, Date, Timestamp, and Select/Dropdown.
## How calls are synced
After each call, Allo creates a note on the matching contact, company, and deal in HubSpot with the call summary, transcript, and a link to the recording.
## How SMS are synced
SMS conversations are pushed to HubSpot as entries in the **Communications** object.
## Click-to-call
Click on any phone number in HubSpot to start a call through Allo. You can also use the **Allo Dialer** directly inside your HubSpot dashboard.
### Using the Allo Dialer in HubSpot
Click the **Dial** icon at the top of your HubSpot dashboard.
Click "HubSpot" to open the dropdown menu, and select **Allo**.
Log into Allo if prompted. Once done, you'll have access to the dialer.
Calls made through the dialer are automatically recorded and synced to HubSpot.
## Manage your integration
### Disconnect HubSpot
To disconnect the integration:
1. Go to **Settings** > **Integrations** > **HubSpot**
2. Click **Disconnect**
You can also uninstall the Allo integration directly from HubSpot by following [HubSpot's guide to uninstalling an app](https://knowledge.hubspot.com/integrations/connect-apps-to-hubspot#uninstall-an-app).
Disconnecting stops all sync between Allo and HubSpot. Existing data in HubSpot remains unchanged.
### Reconnect
If you need to reconnect after disconnecting:
1. Go to **Settings** > **Integrations**
2. Find **HubSpot** and click **Connect**
3. Reauthorize access in HubSpot
## Uninstalling Allo from HubSpot
To uninstall Allo directly from HubSpot, click the **marketplace icon** in the top navigation bar, then select **HubSpot Marketplace**.
You will find the Allo app in the list. In the **Actions** dropdown menu, click **Uninstall**.
For a more in-depth, general explanation on uninstalling apps from the HubSpot marketplace, [check out their own guide](https://knowledge.hubspot.com/marketplace/install-apps-in-the-hubspot-marketplace#uninstall-an-app).
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo. HubSpot also supports custom phone number fields.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
If your SMS conversations are not appearing, verify the integration is connected in **Settings** > **Integrations** and check the integration indicator on the call list at [web.withallo.com](https://web.withallo.com) for error details.
If SMS still don't appear, disconnect and reconnect the integration.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
Call tags are stored in a custom property called **Allo Tags** on the HubSpot **Call** object, automatically created by Allo on first sync. HubSpot's call activity view is not customizable, so the **Allo Tags** property won't appear in the activity timeline — this is a HubSpot limitation, not a sync issue.
The tags are still synced and can be used in **workflows**, **lists**, and **dashboards**. To filter or report on calls by tag, build a custom **Calls** report and add the **Allo Tags** property as a filter or breakdown.
Watch this video for a walkthrough of building a HubSpot dashboard with the **Allo Tags** property:
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Intercom
Source: https://help.withallo.com/en/integrations/intercom
Automatically sync call recordings and summaries to your Intercom workspace
## What this integration does
The Allo-Intercom integration keeps your customer support conversations organized. Every call syncs to Intercom as a conversation with recordings and AI summaries. Perfect for support teams using Intercom to manage customer relationships.
**Key benefits:**
* Import Intercom contacts into Allo automatically
* Call recordings and summaries logged to Intercom
* Calls tracked as conversations and events
* Keep customer history complete in one place
This integration requires the **Business plan**.
## Setup
Launch Allo on mobile or desktop
Navigate to **Settings** > **Integrations**
Locate **Intercom** in the integrations list and tap **Connect**
You'll be redirected to Intercom to authorize the connection
Tap **Confirm** to accept the integration request
Tap **Allow** when prompted to return to Allo automatically
Your Intercom contacts will sync to Allo automatically. Contact information displays during calls based on phone numbers.
## How it works
Your Intercom contacts import into Allo with basic details like name, phone, and email.
Every call logs to Intercom as a conversation with recordings, summaries, and events.
### Contact sync
**One-way sync:**\
Contacts flow from Intercom to Allo. New contacts added to Intercom will appear in Allo automatically.
**Matching:**\
Contacts are matched by phone number. Ensure phone numbers are formatted consistently in Intercom.
### Call logging
After each call, Allo automatically logs to Intercom:
Full audio with recording link
Key points and action items extracted
Direction, duration, timestamp, outcome
Full text transcription of the call
Calls are logged as both **conversations** and **events** in Intercom, giving you full visibility in customer timelines.
## What syncs
**From Intercom to Allo:**
* Contact names
* Phone numbers
* Email addresses
**From Allo to Intercom:**
* Call recordings (audio link)
* Call transcripts
* Call summaries (AI-generated)
* Call metadata (date, time, duration, direction)
* Call outcome (answered, voicemail, missed)
* Logged as conversations and events
**Not synced:**
* New contacts created in Allo
## Troubleshooting
**Common causes:**
* Intercom authorization denied
* Insufficient Intercom permissions
* Network timeout during OAuth
**Solutions:**
* Make sure you confirmed authorization in Intercom
* Verify you have appropriate workspace permissions
* Try disconnecting and reconnecting
**Check these items:**
* Integration shows as "Connected" in Allo Settings
* Contact exists in your Intercom workspace
* Contact has a matching phone number
* Internet connection is stable during calls
**Solution:** If issues persist, disconnect and reconnect the integration.
**Wait for sync:**\
New contacts added to Intercom can take a few minutes to appear in Allo.
**Verify connection:**\
Check that the integration shows as "Connected" in Allo Settings.
**Phone number required:**\
Contacts must have a phone number to sync to Allo.
To reconnect the integration:
1. Go to **Settings** > **Integrations** > **Intercom**
2. Tap **Disconnect**
3. Follow the connection steps again
## Manage your integration
### Disconnect Intercom
To disconnect the integration:
1. Open Allo app
2. Go to **Settings** > **Integrations**
3. Select **Intercom**
4. Tap **Disconnect**
Disconnecting stops all sync between Allo and Intercom. Existing data in Intercom remains unchanged.
### Reconnect
If you need to reconnect:
1. Disconnect the current integration in Allo
2. Follow the setup steps to reconnect
3. Reauthorize access in Intercom
## Use cases
### Customer support tracking
Keep a complete record of all customer phone conversations in Intercom. Support agents can review call summaries alongside chat history.
### Escalation handling
When customers call after a chat conversation, agents see the full context. Call recordings and summaries add to the existing conversation thread.
### Team collaboration
Share call recordings and AI summaries through Intercom. Everyone on the support team stays informed about customer interactions.
## Need help?
Get help with the integration
Learn more about Intercom features
# Make
Source: https://help.withallo.com/en/integrations/make
Build custom workflows and automations using Allo call data
## What this integration does
The Allo-Make integration lets you build powerful custom workflows using your call data. Connect Allo to thousands of apps and services through Make's visual automation platform. Perfect for teams that need custom integrations beyond standard CRM sync.
**Key benefits:**
* Custom workflow automation
* Connect Allo to 1000+ apps
* Use call data to trigger actions
* No coding required
Make (formerly Integromat) is a no-code automation platform. You'll need a Make account (free tier available).
## Setup
### Get your Allo webhook URL
Sign up at [make.com](https://www.make.com) (free tier available)
Click **Create a new scenario**
1. Click the **+** button
2. Search for **Webhooks**
3. Select **Custom webhook**
Click **Create a webhook** and give it a name like "Allo Calls"
Make generates a unique webhook URL. Copy it.
### Connect Allo to Make
Launch Allo on mobile or desktop
Navigate to **Settings** > **Integrations**
Locate **Make** in the integrations list and tap **Connect**
Enter the webhook URL you copied from Make
Choose which events to send:
* **Calls** - Call recordings and summaries
* **SMS** - Text messages
* **Contacts** - Contact changes
* **All events** - Everything (recommended for testing)
Tap **Save**. Make a test call to verify the connection.
After your first call, return to Make and click **Determine data structure** to see available call data fields.
## How it works
Allo sends webhook events to Make when calls, SMS, or contact changes occur.
Build workflows with Make's visual editor to process Allo data.
Connect Allo to any of Make's 1000+ supported apps.
Use Make's tools to filter, format, and transform call data.
### Available data
When Allo sends a webhook to Make, you receive:
**Call events:**
* Call ID
* Contact name and phone number
* Call direction (inbound/outbound)
* Call duration
* Call timestamp
* Call outcome (answered, voicemail, missed)
* Recording URL
* Transcript text
* AI summary
* Contact tags
**SMS events:**
* Message ID
* Sender and recipient
* Message text
* Timestamp
* Direction (sent/received)
**Contact events:**
* Contact ID
* Name and phone number
* Email address
* Tags and notes
* Event type (created, updated, deleted)
## Example workflows
### Log calls to Airtable
1. **Trigger:** Allo call webhook
2. **Action:** Create record in Airtable
3. **Map fields:** Call data to Airtable columns
### Send Slack notifications
1. **Trigger:** Allo call webhook
2. **Filter:** Only calls over 10 minutes
3. **Action:** Send Slack message to sales channel
### Create Trello cards
1. **Trigger:** Allo call webhook
2. **Filter:** Missed calls only
3. **Action:** Create Trello card with callback task
### Update Google Sheets
1. **Trigger:** Allo call webhook
2. **Action:** Add row to Google Sheet
3. **Include:** Call summary and recording link
### Multi-step automation
1. **Trigger:** Allo call webhook
2. **Action 1:** Log to Airtable
3. **Action 2:** Send email summary
4. **Action 3:** Create task in Asana
5. **Action 4:** Post to Slack
## What syncs
**From Allo to Make:**
* All call events with complete metadata
* Call recordings (URL links)
* Call transcripts (full text)
* AI summaries
* SMS messages (sent and received)
* Contact changes (create, update, delete)
* Custom event data
**From Make to Allo:**
Make can't trigger actions in Allo directly. This is a one-way integration for exporting Allo data to other systems.
Use Make to process and distribute Allo data to other apps.
## Troubleshooting
**Common causes:**
* Webhook URL copied incorrectly
* Scenario not activated in Make
* Wrong events selected in Allo
**Solutions:**
* Verify the full webhook URL in both Make and Allo
* Make sure your Make scenario is turned ON
* Select "All events" in Allo for testing
* Make a test call to trigger the webhook
**How to fix:**
1. Make sure integration is connected in Allo
2. Make a test call or send a test SMS
3. Return to Make and click **Determine data structure**
4. Make will capture the data fields automatically
**Check execution history:**
1. Open your scenario in Make
2. Click on the scenario name to see execution history
3. Review error messages for failed runs
4. Common issues: missing field mappings, API limits, authentication errors
**Verify access:**
* Recording URLs require authentication
* Use Make's HTTP module to fetch recordings with proper headers
* Contact Allo support for recording access instructions
**Free tier limits:**
* 1,000 operations/month
* 15-minute scenarios max
**Solutions:**
* Upgrade to paid Make plan
* Add filters to reduce operations
* Combine multiple actions into fewer operations
To reconnect the integration:
1. In Allo: Go to **Settings** > **Integrations** > **Make**
2. Tap **Disconnect**
3. Generate a new webhook in Make
4. Follow connection steps with new URL
## Manage your integration
### Disconnect Make
To disconnect the integration:
1. Open Allo app
2. Go to **Settings** > **Integrations**
3. Select **Make**
4. Tap **Disconnect**
Disconnecting stops webhook events to Make. Your Make scenarios will no longer receive Allo data.
### Update webhook URL
If you need to change the webhook URL:
1. Create a new webhook in Make
2. Disconnect the Make integration in Allo
3. Reconnect with the new webhook URL
### Multiple webhooks
To send Allo data to multiple Make scenarios:
1. Create multiple webhook connections in Allo
2. Each can have different event filters
3. Build separate workflows for different purposes
## Need help?
Get help with the integration
Learn more about Make
# MCP Server
Source: https://help.withallo.com/en/integrations/mcp
Connect Allo to AI assistants like Claude, Cursor, and VS Code using the Model Context Protocol
Connect Allo to any AI assistant that supports the [Model Context Protocol](https://modelcontextprotocol.io) (MCP). Search calls, read transcripts, send SMS, manage tags, and analyze team performance — directly from your AI tool.
Connecting from Claude.ai web or desktop? See the Claude Connector guide — no API key needed.
## Prerequisites
Go to [Settings > API](https://web.withallo.com/settings/api) and click **Create API Key**.
Select the scopes your workflow needs. For full MCP access, enable all scopes. For read-only access, select only the `READ` scopes.
Copy the key — it won't be shown again.
Follow the setup instructions for your client below.
Only **admins** and **owners** can create API keys. Team members cannot generate keys.
## Connect your AI client
### Claude Code
Run this command in your terminal:
```bash theme={null}
claude mcp add Allo --transport http https://mcp.withallo.com/mcp \
--header "Authorization: YOUR_API_KEY"
```
Replace `YOUR_API_KEY` with your Allo API key.
### Claude Desktop
Open **Settings > MCP** in Claude Desktop and add a new server with this configuration:
```json theme={null}
{
"mcpServers": {
"Allo": {
"url": "https://mcp.withallo.com/mcp",
"headers": {
"Authorization": "YOUR_API_KEY"
}
}
}
}
```
### Cursor
Open **Settings > MCP** in Cursor, click **Add new MCP server**, and select **Type: HTTP**.
Alternatively, add this to your `~/.cursor/mcp.json`:
```json theme={null}
{
"mcpServers": {
"Allo": {
"url": "https://mcp.withallo.com/mcp",
"headers": {
"Authorization": "YOUR_API_KEY"
}
}
}
}
```
### VS Code
Add this to your `.vscode/mcp.json` file (create it if it doesn't exist):
```json theme={null}
{
"servers": {
"Allo": {
"type": "http",
"url": "https://mcp.withallo.com/mcp",
"headers": {
"Authorization": "YOUR_API_KEY"
}
}
}
}
```
### Windsurf
Open **Settings > MCP** in Windsurf and add:
```json theme={null}
{
"mcpServers": {
"Allo": {
"serverUrl": "https://mcp.withallo.com/mcp",
"headers": {
"Authorization": "YOUR_API_KEY"
}
}
}
}
```
### Other clients
Any MCP-compatible client can connect to Allo using:
* **Server URL:** `https://mcp.withallo.com/mcp`
* **Transport:** HTTP
* **Authentication:** `Authorization` header with your API key
Refer to your client's documentation for how to configure remote MCP servers with custom headers.
## Available tools
Once connected, your AI assistant can use these tools:
| Tool | What it does |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `allo_get_me` | Discover your API key's scopes, available endpoints, and team info |
| `allo_list_users` | List team members with roles and status |
| `allo_list_numbers` | List phone numbers with capabilities (voice, SMS) |
| `allo_list_tags` | List all tags configured on your team |
| `allo_list_conversations` | List conversations grouped by contact, sorted by recent activity |
| `allo_search_conversation_items` | Search calls and SMS with filters: keyword, type, direction, tags, date range |
| `allo_get_conversation_item` | Get full details of a call or SMS, including transcript |
| `allo_batch_get_conversation_items` | Fetch up to 100 items in a single request |
| `allo_mark_conversation` | Mark conversations as read, unread, archived, or unarchived |
| `allo_add_call_tags` | Add tags to a call |
| `allo_remove_call_tag` | Remove a tag from a call |
| `allo_send_sms` | Send an SMS from one of your Allo numbers |
| `allo_get_team_analytics` | Get team KPIs: total calls, talk time, answer rate, per-user breakdown |
| `allo_get_team_outbound_analytics` | Get outbound metrics: dial funnel, time series, heatmap, leaderboard |
| `allo_get_dialing_queue` | Read the user's Power Dialer queue: settings, ordered numbers, and per-entry call state |
| `allo_add_to_dialing_queue` | Append numbers to the user's Power Dialer queue (creates the queue on first call); accepts optional contact metadata |
| `allo_get_agent` | Read a line's whole AI receptionist configuration in one call |
| `allo_update_agent` | Configure the AI receptionist: business details, voice, capabilities, hours, transfer rules, calendars, knowledge text |
| `allo_set_agent_prompt` | Write the AI receptionist's prompt, section by section |
| `allo_set_agent_status` | Turn the AI receptionist on or off for a line |
| `allo_add_agent_knowledge_website` | Give the receptionist a web page to answer callers from |
| `allo_set_agent_knowledge_website_status` | Take a knowledge website out of use without deleting it |
| `allo_delete_agent_knowledge` | Delete a knowledge website or an uploaded document |
| `allo_list_calendars` | List the calendars connected to your workspace |
| `allo_get_calendar` | Get one calendar with the event types its provider offers |
| `allo_list_voices` | List the voices an AI receptionist can speak with |
The server also serves two guides as MCP resources, `allo-mcp://guides/ai-receptionist-setup` and `allo-mcp://guides/ai-receptionist-prompt`. The receptionist tools point your assistant at them, so ask it to set a receptionist up rather than to fill fields one at a time.
## Required scopes
Each tool requires specific API key scopes. Select the scopes matching the tools you need:
| Scope | Tools |
| -------------------------- | ------------------------------------------------------------------ |
| `CONVERSATIONS_READ` | List conversations, search, get item, batch get, mark conversation |
| `USERS_READ` | List users, get me |
| `PHONE_NUMBERS_READ` | List numbers |
| `TAGS_READ` | List tags |
| `TAGS_WRITE` | Add tags, remove tag |
| `SMS_SEND` | Send SMS |
| `DIALING_QUEUE_READ_WRITE` | Read and append to the Power Dialer queue |
| `AGENTS_READ` | Read the AI receptionist configuration, calendars, voices |
| `AGENTS_WRITE` | Configure the AI receptionist, its prompt and its status |
For full access to every tool, select all scopes when creating your API key.
## Example prompts
Once connected, try asking your AI assistant:
* "Show me all missed calls from this week"
* "What was my team's answer rate last month compared to the month before?"
* "Find all calls tagged 'demo' from the past 30 days and summarize the transcripts"
* "Send an SMS to +33612345678 from my main number saying we'll call back in 10 minutes"
* "Who on my team made the most outbound calls this week?"
* "List all unread conversations and mark them as read"
* "Tag the last 5 inbound calls as 'support'"
* "Show me what's in my Power Dialer queue right now"
* "Add these numbers to my Power Dialer queue: +14155551234, +33612345678"
* "Set up the AI receptionist on my main line, ask me what you need to know"
* "Add a transfer rule sending billing questions to +14155551234"
## Troubleshooting
Verify your API key is correct and has not been revoked. Go to [Settings > API](https://web.withallo.com/settings/api) to check your active keys. If needed, create a new key.
Your API key is missing a required scope. Check the [required scopes](#required-scopes) table above and create a new key with the needed scopes.
Make sure the MCP server is connected and active. Restart your AI client and verify the server URL is exactly `https://mcp.withallo.com/mcp`. Some clients require a restart after adding a new MCP server.
## Need help?
Full API key and scopes documentation
Get help from the Allo team
# Odoo
Source: https://help.withallo.com/en/integrations/odoo
Automatically recognize contacts from your Odoo CRM and log all calls and messages
## How to connect
The setup steps below apply to both Odoo Web (cloud) and self-hosted Odoo instances. The API key generation process is the same.
### Get your Odoo credentials
You'll need three pieces of information from your Odoo account:
#### 1. Odoo account username
This is the email address you use to log into Odoo.
#### 2. Odoo database name
This is the first part of your Odoo URL.
**Example:**\
If your Odoo URL is `https://your-company.odoo.com/odoo`, your database name is `your-company`
#### 3. Odoo API key
Open your Odoo account
Click your profile icon > **Preferences**
Select **Account Security** > **New API Key**
* Name: "Allo"
* Duration: "Persistent Key"
Click **Generate**
Copy the generated API key immediately.
You can only see the API key once. Store it securely.
### Connect in Allo
Launch Allo on mobile or desktop
Navigate to **Settings** > **Integrations** > **Odoo**
Fill in the three required fields:
* Odoo account username (your email)
* Odoo database name
* Odoo API key
Tap **Save** and wait for confirmation
Your Odoo contacts will sync to Allo automatically. Contact information displays during calls.
## What syncs
**From Odoo to Allo:**
* Contacts
Contacts created in Allo are not pushed to Odoo.
**Sync direction:** One-way (Odoo → Allo).
## How calls are synced
After each call, Allo creates a note on the matching contact in Odoo with the call summary and a link to the recording.
## How SMS are synced
SMS sync is not available for this integration.
## Click-to-call
Click on any phone number in Odoo to open the call directly in the Allo app. The Allo app must be installed on your device.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
This integration does not support SMS sync.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Overview
Source: https://help.withallo.com/en/integrations/overview
Connect Allo with your favorite tools and automate your workflow
## Connect Allo with your tools
Allo integrates with the apps you already use. Automatically sync call recordings, transcripts, and AI summaries to your CRM, spreadsheets, and productivity tools. No manual data entry required.
**All integrations include:**
* Automatic call logging
* AI-generated summaries
* Call recordings and transcripts
* Real-time sync
## CRM integrations
Keep your customer relationships organized. Every call syncs automatically to your CRM with complete details.
Click-to-call, automatic logging, two-way contact sync
Enterprise call tracking with complete activity logging
Modern CRM with automatic call notes and enrichment
Simple CRM with instant call and contact sync
CRM automation via Zoho Flow
Gmail-based CRM with automatic call activities
ERP contact recognition and call logging
Sync contacts, calls & deals
Full call syncing
SMB-focused, French CRM
AI-Powered Customer Platform
Sync contacts, companies and calls
## Accounting & finance
Recognize customers instantly with accounting data displayed during calls.
Real-time financial context and invoice data during calls
## E-commerce
See customer order history and purchase data when they call.
Customer recognition with order history and lifetime value
## Customer support
Keep your support conversations organized with call data synced automatically.
Log calls as conversations with recordings and AI summaries
## Productivity tools
Log calls to your workspace and keep everything organized in one place.
Automatic call logging to workspace databases
Simple call tracking in spreadsheets
Two-way contact sync with Google
## Automation platforms
Build custom workflows and connect Allo to thousands of apps.
Connect to 5000+ apps with no-code automation
Advanced workflows with visual automation builder
## How integrations work
Link Allo with your chosen app in Settings > Integrations. Most connections take under 2 minutes.
Contacts import from your connected app to Allo. You'll see customer information during calls instantly.
Every call syncs back to your app with recordings, transcripts, and AI summaries. No manual work required.
## Integration features comparison
| Feature | CRM Integrations | Productivity | Automation |
| ---------------- | ----------------- | ------------ | ---------- |
| Contact sync | Two-way | One-way | Webhook |
| Call logging | Automatic | Automatic | Custom |
| Click-to-call | Yes (select CRMs) | No | Custom |
| Custom workflows | Limited | No | Unlimited |
| Real-time sync | Yes | Yes | Yes |
## Multiple integrations
You can connect multiple integrations simultaneously. For example:
* HubSpot for CRM
* Google Spreadsheet for backup
* Slack via Zapier for notifications
All integrations work together without conflicts.
## Common questions
Yes. All integrations are available on both Starter and Business plans at no extra cost.
Yes. Connect as many integrations as you need. They all work together seamlessly.
No. Integrations sync in the background without affecting call quality or app performance.
Each integration page has a **Troubleshooting** section with common issues and fixes. Go to the specific integration page and scroll to Troubleshooting.
Yes. Disconnect anytime in Settings > Integrations. Your data in the connected app remains unchanged.
Yes. On the Business plan, you can send every call (with recording, transcript, AI summary, and contact data) into any tool that accepts webhooks, either directly or through Zapier and Make. That covers hundreds of destinations including monday.com, Housecall Pro, Airtable, Slack, and most field-service or vertical CRMs. If you want a native integration instead, tell us which one and we'll add it to the roadmap.
[Webhooks](/en/integrations/webhooks) | [Zapier](/en/integrations/zapier) | [Make](/en/integrations/make)
For teams with specific needs, we can build custom integrations. Contact our sales team to discuss requirements.
## Need help?
Get help connecting your integrations
Suggest a new integration
# Pipedrive
Source: https://help.withallo.com/en/integrations/pipedrive
Automatically log every call as a Pipedrive activity with AI summaries and recordings. Business plan only.
## How to connect
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Find **Pipedrive** in the list and click **Connect**.
You'll be redirected to Pipedrive. Sign in if needed, then grant Allo all requested permissions.
Once authorized, you're redirected back to Allo. Your integration is now active.
## What syncs
**From Pipedrive to Allo:**
* Contacts
* Companies
* Deals
**From Allo to Pipedrive:**
* Contacts created or updated in Allo are pushed back to Pipedrive
**Sync direction:** Two-way — changes in either system are reflected in the other.
## How calls are synced
After each call, Allo creates a note on the matching contact, company, and deal in Pipedrive with the call summary, transcript, and a link to the recording.
## How SMS are synced
SMS conversations are synced to Pipedrive as a custom activity.
## Click-to-call
Click-to-call is available when the Allo app is installed in Pipedrive. Click any phone number to start a call through Allo.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
If your SMS conversations are not appearing, verify the integration is connected in **Settings** > **Integrations** and check the integration indicator on the call list at [web.withallo.com](https://web.withallo.com) for error details.
If SMS still don't appear, disconnect and reconnect the integration.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Salesforce
Source: https://help.withallo.com/en/integrations/salesforce
Automatically sync call recordings and summaries to your Salesforce CRM
## How to connect
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Find **Salesforce** in the list and click **Connect**.
You'll be redirected to Salesforce. Sign in if needed, then grant Allo all requested permissions.
Once authorized, you're redirected back to Allo. Your integration is now active.
## What syncs
**From Salesforce to Allo:**
* Contacts
* Leads
* Accounts (as companies)
* Opportunities (as deals)
**From Allo to Salesforce:**
* Contacts created or updated in Allo are pushed back to Salesforce
**Sync direction:** Two-way — changes in either system are reflected in the other.
## How calls are synced
After each call, Allo creates a task on the matching Salesforce lead or contact with the call summary and a link to the recording.
## How SMS are synced
SMS conversations are synced as a single task on the matching lead or contact. The task is updated each time a new message is sent or received, keeping the full conversation thread in one place.
## Click-to-call
Click on any phone number in Salesforce to start a call through Allo. You can also set up the **Allo Dialer** directly inside Salesforce.
### Using the Allo Dialer in Salesforce
Requires **System Administrator** permissions in Salesforce before proceeding.
1. Log in to [**web.withallo.com**](https://web.withallo.com) and go to **Settings** > **Integrations** > **Salesforce**.
2. Click **Add Allo dialer CTI**. You'll be redirected to Salesforce.
3. Select **Install for Admins Only** (recommended) or **Install for All Users**.
4. Click **Install**, approve third-party access, and wait for the "Installation Complete" message.
1. Click the gear icon in the top right and select **Setup**.
2. In the Quick Find box, type **App Manager** and select it.
3. Find the app your team uses (e.g., **Sales** or **Service Console**) with a Lightning Developer Name.
4. Click the dropdown arrow at the end of the row and select **Edit**.
5. In the left menu, click **Utility Items (Desktop Only)**.
6. Click **Add Utility Item** and search for **Open CTI Softphone**.
7. Set the following properties:
* **Label:** Allo Dialer
* **Panel Width:** 600
* **Panel Height:** 400
8. Click **Save**.
1. Go back to **Setup**.
2. In the Quick Find box, type **Call Centers** and select it.
3. Click the name of the installed call center (e.g., **Allo CTI**).
4. Click **Manage Call Center Users** > **Add More Users**.
5. Search for the users to enable, check the box next to their names, and click **Add to Call Center**.
Users may need to refresh their browser to see the dialer in the utility bar.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
If your SMS conversations are not appearing, verify the integration is connected in **Settings** > **Integrations** and check the integration indicator on the call list at [web.withallo.com](https://web.withallo.com) for error details.
If SMS still don't appear, disconnect and reconnect the integration.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
Call tags are stored in a custom field called **Allo Tags** on the Salesforce **Task** (Activity) object, automatically created by Allo on first sync. Field-level security is granted only to the profile of the user who connected the integration — other users won't see the field until an admin enables visibility.
A Salesforce admin needs to:
1. In Salesforce, go to **Setup** > **Object Manager** > **Task**.
2. Click **Fields & Relationships** and open **Allo Tags**.
3. Click **Set Field-Level Security** and enable **Visible** for every profile that should see tags.
1. Still in the **Task** object, go to **Page Layouts**.
2. Open each layout used by your team and drag **Allo Tags** into the **Task Detail** section.
3. Click **Save**.
Users may need to refresh the page to see the field.
By default, Salesforce records the **Created By** of the call activity (Task) as the user who connected the Allo integration — not the agent who actually made the call. This is a Salesforce platform behavior: the **Created By** audit field is always set to the user the integration authenticates as.
Allo already sets **Assigned To** (the activity owner) to the agent who made the call, as long as that agent exists in Salesforce as an **active Standard user with a matching email address**.
To also have **Created By** reflect the agent, a Salesforce admin must enable the **Set Audit Fields upon Record Creation** permission:
1. In Salesforce, go to **Setup** > **User Interface**.
2. Check **Enable "Set Audit Fields upon Record Creation" and "Update Records with Inactive Owners" User Permissions**.
3. Click **Save**.
1. Go to **Setup** > **Permission Sets** and create or edit a permission set.
2. Under **System Permissions**, enable **Set Audit Fields upon Record Creation** and save.
3. Assign the permission set to the user who connected the Allo integration.
This only affects calls created **after** the permission is enabled — existing activities keep their original Created By. If the agent has no matching active Standard user in Salesforce, both **Created By** and **Assigned To** fall back to the user who connected the integration.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Sellsy
Source: https://help.withallo.com/en/integrations/sellsy
Automatically sync contacts and log calls with summaries to your Sellsy CRM
## How to connect
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Find **Sellsy** in the list and click **Connect**.
You'll be redirected to Sellsy. Sign in if needed, then grant Allo all requested permissions.
Once authorized, you're redirected back to Allo. Your integration is now active.
## What syncs
**From Sellsy to Allo:**
* Contacts
* Companies
Contacts created in Allo are not pushed to Sellsy.
**Sync direction:** One-way (Sellsy → Allo).
## How calls are synced
After each call, Allo creates a Phone Call object on the matching contact in Sellsy with the call summary and a link to the recording.
## How SMS are synced
SMS sync is not available for this integration.
## Click-to-call
Click on any phone number in Sellsy to open the call directly in the Allo app. The Allo app must be installed on your device.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
This integration does not support SMS sync.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Shopify
Source: https://help.withallo.com/en/integrations/shopify
Automatically recognize customers from your Shopify store when they call
## What this integration does
The Allo-Shopify integration enriches your calls with customer data from your online store. When customers call, see their order history, customer status, and account details instantly. Perfect for e-commerce businesses providing phone support.
**Key benefits:**
* Automatic customer recognition during calls
* Display order history and customer info
* View customer lifetime value
* Access customer status instantly
This integration requires creating a custom app in your Shopify admin. Follow the setup steps carefully.
## Setup
### Create Shopify app
Log into your Shopify store admin panel
Go to **Settings** > **Apps and sales channels**
Click **Develop apps** (you may need to enable app development first)
Click **Create an app** and name it "Allo" (or any name you prefer)
Click **Configure Admin API scopes**
Search and enable these two scopes:
* `read_customers`
* `read_orders`
Then click **Save**
Click **Install app** to confirm the permissions
Click **Reveal token once** to display your API access token.
You can only see this token once. Copy it immediately and store it securely.
Copy the entire access token to your notes app or password manager
### Connect in Allo
Launch Allo mobile app
Navigate to **Settings** > **Integrations** > **Shopify**
Paste the Shopify access token you copied earlier
Add your Shopify store domain (e.g., `your-store.myshopify.com`)
Tap **Save** and wait for confirmation
Your Shopify customers will sync to Allo automatically. Customer information displays when they call.
## How it works
Customer info displays automatically when they call, pulled from Shopify.
See recent orders, amounts, and order status during calls.
All Shopify customers import into Allo contacts.
View total customer spend and order count.
### Customer information displayed
When a Shopify customer calls, you see:
* Customer name
* Email address
* Order count
* Total amount spent
* Most recent order date
* Customer status (active/disabled)
### Contact synchronization
**Shopify to Allo:**\
All Shopify customers sync automatically. New customers appear within 10 minutes.
**One-way sync:**\
Contacts are synced from Shopify to Allo only. Calls are not logged back to Shopify.
## What syncs
**From Shopify to Allo:**
* Customer names and phone numbers
* Email addresses
* Order history
* Total amount spent
* Order count
* Customer status
* Customer tags
**From Allo to Shopify:**
Nothing syncs from Allo to Shopify. This is a read-only integration for customer recognition only.
Call recordings and summaries remain in Allo.
## Troubleshooting
**Common causes:**
* Incorrect access token
* Wrong store domain
* Missing API scopes
* Token copied incorrectly
**Solutions:**
* Verify you copied the entire access token
* Check your store domain format (include `.myshopify.com`)
* Ensure both `read_customers` and `read_orders` scopes are enabled
* Generate a new access token if needed
Shopify only shows the access token once for security.
**Solution:**
1. Go back to Shopify admin
2. Delete the old Allo app
3. Create a new app following the setup steps
4. Copy the new token immediately
**Wait for sync:**\
New customers can take up to 10 minutes to appear in Allo.
**Check connection:**\
Verify the integration shows as "Connected" in Allo Settings.
**Phone number required:**\
Shopify customers must have a phone number to sync.
**Verify phone number:**\
The calling number must match exactly what's in Shopify customer records.
**Format differences:**\
Check that phone numbers are formatted consistently (with or without country code).
**Check API scopes:**\
Make sure you enabled both `read_customers` AND `read_orders` when creating the app.
**Solution:**\
Disconnect, update the Shopify app scopes, and reconnect.
To reconnect the integration:
1. Go to **Settings** > **Integrations** > **Shopify**
2. Tap **Disconnect**
3. Generate a new access token in Shopify
4. Follow the connection steps again
## Manage your integration
### Disconnect Shopify
To disconnect the integration:
1. Open Allo app
2. Go to **Settings** > **Integrations**
3. Select **Shopify**
4. Tap **Disconnect**
Disconnecting stops customer sync. Existing contacts in Allo remain unchanged.
### Revoke API access
To completely revoke Allo's access to Shopify:
1. Log into Shopify admin
2. Go to **Settings** > **Apps and sales channels** > **Develop apps**
3. Find the Allo app
4. Click **Delete app**
## Use cases
### Customer support
See complete order history when customers call about their orders. Provide informed support without asking them to repeat information.
### Order status inquiries
Quickly check order status, tracking numbers, and delivery dates while on the phone with customers.
### VIP customer recognition
Identify high-value customers instantly based on total spend and order frequency. Provide premium service accordingly.
### Returns and refunds
Access order details immediately when handling return or refund requests. Speed up resolution time.
## Need help?
Get help with the integration
Learn more about Shopify features
# Streak
Source: https://help.withallo.com/en/integrations/streak
Automatically sync call recordings and summaries to your Streak CRM
## How to connect
### Get your Streak API key
Open Streak in your Gmail account
Click the **Streak logo** in Gmail's left-navigation menu to open Streak Home
Click on **Integrations & Automation** in the top right corner
Scroll down and select **Custom Integrations**
Click **Create new key** and name it "Allo" (or any name you prefer)
Click **Create** and copy your API key immediately.
Store your API key securely. You won't be able to see it again after closing this window.
### Connect in Allo
Launch Allo on mobile or desktop
Navigate to **Settings** > **Integrations**
Locate **Streak** in the integrations list and tap **Connect**
Enter the API key you copied from Streak
Tap **Save & Connect** and wait for confirmation
When you connect Streak, all your Streak contacts are imported into Allo automatically. You can call them directly from the app.
## What syncs
**From Streak to Allo:**
* Contacts
* Companies
Contacts created in Allo are not pushed to Streak.
**Sync direction:** One-way (Streak → Allo).
## How calls are synced
After each call, Allo syncs the call to all Streak boxes the contact is part of. You can customize which Allo number maps to which Streak boxes in the Streak integration settings within Allo.
## How SMS are synced
SMS conversations are synced as a single note on the matching contact. The note is updated each time a new message is sent or received, keeping the full conversation thread in one place.
## Click-to-call
Click on any phone number in Streak to open the call directly in the Allo app. The Allo app must be installed on your device.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
If your SMS conversations are not appearing, verify the integration is connected in **Settings** > **Integrations** and check the integration indicator on the call list at [web.withallo.com](https://web.withallo.com) for error details.
If SMS still don't appear, disconnect and reconnect the integration.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Webhooks
Source: https://help.withallo.com/en/integrations/webhooks
Receive real-time notifications when calls, SMS, and contacts events happen in your Allo account
Webhooks send automatic HTTP notifications to your server when events happen in your Allo account — a call finishes, an SMS arrives, a contact is created, and more.
## What you can do with webhooks
* Log calls and messages in your CRM or database
* Trigger workflows when calls finish or SMS arrive
* Sync contacts with external systems
* Build real-time dashboards and alerts
## Available events
| Event | Description |
| ----------------- | ----------------------------------------------------- |
| `call.received` | Inbound call starts ringing |
| `call.triggered` | Outbound call initiated |
| `call.answered` | Call answered on the other side |
| `call.completed` | Call finished with recording, transcript, and summary |
| `tag.added` | Tag added to a call |
| `tag.removed` | Tag removed from a call |
| `sms.received` | Inbound SMS received |
| `sms.sent` | Outbound SMS sent |
| `contact.created` | Contact created |
| `contact.updated` | Contact updated |
## How to set up webhooks
Go to [Settings > API](https://web.withallo.com/settings/api) and create an API key with the `WEBHOOKS_READ_WRITE` scope.
```bash theme={null}
curl -X POST https://api.withallo.com/v2/webhooks \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/webhooks/allo",
"topics": ["call.completed", "sms.received"]
}'
```
Your server receives a POST request for each event. Return a `200` status code within 20 seconds to acknowledge receipt.
Every webhook includes a cryptographic signature. Verify it to ensure the request came from Allo. See [Verifying signatures](/en/v2/api-reference/webhooks/verifying-signatures).
Go to **Settings > Integrations > Webhooks** in the Allo mobile app.
Toggle the webhook switch on.
Enter your HTTPS endpoint URL. The URL must be publicly accessible.
Choose which events you want to receive.
Tap **Test** to send a test event to your endpoint and verify it works.
## Webhook payload format
Every webhook uses the same envelope:
```json theme={null}
{
"topic": "call.completed",
"version": "2.0",
"timestamp": "2025-03-15T14:45:00.000Z",
"data": {
"id": "cll_2NfDKEm9sF8xK3pQr1Zt",
"from_number": "+33612345678",
"to": "+33112345678",
"type": "INBOUND",
"result": "ANSWERED",
"summary": "Customer called about a billing question.",
"recording_url": "https://storage.withallo.com/recordings/abc123.mp3"
}
}
```
For the full payload specification of each event, see the [Event catalog](/en/v2/api-reference/webhooks/event-catalog).
## Security
* Your endpoint URL must use **HTTPS**.
* Every webhook includes a cryptographic signature in the `webhook-signature` header. [Verify it](/en/v2/api-reference/webhooks/verifying-signatures) to ensure the request is authentic.
* Store your signing secret securely — treat it like a password.
## Reliability
* Allo retries failed deliveries up to **8 times** over approximately 27.5 hours with exponential backoff.
* If your endpoint fails continuously for 5 days, it is automatically disabled.
* You can [recover missed events](/en/v2/api-reference/webhooks/delivery-and-retries#bulk-recovery) by replaying them after fixing your endpoint.
See [Delivery and retries](/en/v2/api-reference/webhooks/delivery-and-retries) for the full retry schedule.
## Example implementations
```javascript theme={null}
const express = require("express");
const app = express();
app.post(
"/webhooks/allo",
express.raw({ type: "application/json" }),
(req, res) => {
const event = JSON.parse(req.body);
switch (event.topic) {
case "call.completed":
console.log("Call finished:", event.data.id);
break;
case "sms.received":
console.log("SMS from:", event.data.from_number);
break;
}
res.sendStatus(200);
}
);
app.listen(3000);
```
```python theme={null}
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhooks/allo", methods=["POST"])
def handle_webhook():
event = request.get_json()
if event["topic"] == "call.completed":
print(f"Call finished: {event['data']['id']}")
elif event["topic"] == "sms.received":
print(f"SMS from: {event['data']['from_number']}")
return "", 200
```
## Troubleshooting
Verify your endpoint is publicly accessible over HTTPS. Check that the webhook is enabled and subscribed to the correct event types. Use the [test endpoint](/en/v2/api-reference/webhooks/testing) to verify.
Your endpoint must respond within 20 seconds. Return `200` immediately and process the event in the background.
This is expected — Allo guarantees at-least-once delivery. Use the `webhook-id` header to deduplicate. See [Best practices](/en/v2/api-reference/webhooks/best-practices#implement-idempotency).
Make sure you use the raw request body (not parsed JSON) for verification. Check that your signing secret is correct and your server clock is accurate. See [Verifying signatures](/en/v2/api-reference/webhooks/verifying-signatures).
## Need help?
Complete webhook API documentation
Get help from the Allo team
# Zapier
Source: https://help.withallo.com/en/integrations/zapier
Connect Allo with 5000+ apps using Zapier automation
## What this integration does
The Allo-Zapier integration connects your calls and messages to 5000+ apps automatically. Build custom workflows without coding. Perfect for teams that want to integrate Allo with tools not directly supported.
**Key benefits:**
* Connect to 5000+ apps
* No coding required
* Visual workflow builder
* Automatic triggers and actions
Zapier is a no-code automation platform. You'll need a Zapier account (free tier available).
## Setup
### Get your Allo webhook URL
Sign up at [zapier.com](https://zapier.com) (free tier available)
Click **Create Zap** button
1. Search for **Webhooks by Zapier**
2. Select **Catch Hook** as trigger event
3. Click **Continue**
Zapier generates a unique webhook URL. Copy it.
### Connect Allo to Zapier
Launch Allo on mobile or desktop
Navigate to **Settings** > **Integrations**
Locate **Zapier** in the integrations list and tap **Connect**
Enter the webhook URL you copied from Zapier
Choose which events to send:
* **Calls** - Call recordings and summaries
* **SMS** - Text messages
* **Contacts** - Contact changes
* **All events** - Everything (recommended for testing)
Tap **Save**. Make a test call to verify the connection.
### Complete Zap setup
Go back to your Zap in Zapier
Click **Test trigger**. Zapier should find your test call data.
Choose what to do with Allo data (send to another app, create records, etc.)
Once configured, turn on your Zap to activate automation
Your Zap is now live. Allo will send data to Zapier automatically after each call or SMS.
## How it works
Allo sends webhook events to Zapier when calls, SMS, or contact changes occur.
Zapier processes events and triggers actions in other apps instantly.
Chain multiple actions together in a single workflow.
Connect Allo to Gmail, Slack, Airtable, and thousands more.
### Available data
When Allo sends a webhook to Zapier, you receive:
**Call events:**
* Call ID
* Contact name and phone number
* Call direction (inbound/outbound)
* Call duration
* Call timestamp
* Call outcome (answered, voicemail, missed)
* Recording URL
* Transcript text
* AI summary
* Contact tags
**SMS events:**
* Message ID
* Sender and recipient
* Message text
* Timestamp
* Direction (sent/received)
**Contact events:**
* Contact ID
* Name and phone number
* Email address
* Tags and notes
* Event type (created, updated, deleted)
## Example Zaps
### Send Gmail notifications
1. **Trigger:** Allo call webhook
2. **Action:** Send email via Gmail
3. **Include:** Call summary and recording link
### Create Google Calendar events
1. **Trigger:** Allo call webhook
2. **Filter:** Only scheduled callback calls
3. **Action:** Create Google Calendar event
### Add to Monday.com
1. **Trigger:** Allo call webhook
2. **Action:** Create item in Monday.com board
3. **Include:** Call details and action items
### Slack team updates
1. **Trigger:** Allo SMS received
2. **Action:** Post message in Slack channel
3. **Include:** Sender and message content
### Airtable call log
1. **Trigger:** Allo call webhook
2. **Action:** Create record in Airtable
3. **Map:** Call data to Airtable fields
### Multi-step automation
1. **Trigger:** Allo call webhook
2. **Action 1:** Send email via Gmail
3. **Action 2:** Create Trello card
4. **Action 3:** Post to Slack
5. **Action 4:** Update Google Sheet
## What syncs
**From Allo to Zapier:**
* All call events with complete metadata
* Call recordings (URL links)
* Call transcripts (full text)
* AI summaries
* SMS messages (sent and received)
* Contact changes (create, update, delete)
* Custom event data
**From Zapier to Allo:**
Zapier can't trigger actions in Allo directly. This is a one-way integration for exporting Allo data to other systems.
Use Zapier to process and distribute Allo data to other apps.
## Troubleshooting
**Common causes:**
* Webhook URL copied incorrectly
* Zap not turned on
* Wrong events selected in Allo
**Solutions:**
* Verify the full webhook URL in both Zapier and Allo
* Make sure your Zap is turned ON (not paused)
* Select "All events" in Allo for testing
* Make a test call to trigger the webhook
**How to fix:**
1. Make sure integration is connected in Allo
2. Make a test call or send a test SMS
3. Return to Zapier and click **Test trigger** again
4. Zapier will capture the most recent webhook data
**Check Zap history:**
1. Open your Zap in Zapier
2. Click **Zap history** to see execution log
3. Review error messages for failed runs
4. Common issues: missing fields, API limits, authentication errors
**Verify access:**
* Recording URLs require authentication
* Some apps may not support authenticated URLs
* Contact Allo support for recording access instructions
**Free tier limits:**
* 100 tasks/month
* Single-step Zaps only
**Solutions:**
* Upgrade to paid Zapier plan
* Add filters to reduce task usage
* Prioritize most important automations
To reconnect the integration:
1. In Allo: Go to **Settings** > **Integrations** > **Zapier**
2. Tap **Disconnect**
3. Generate a new webhook in Zapier
4. Follow connection steps with new URL
## Manage your integration
### Disconnect Zapier
To disconnect the integration:
1. Open Allo app
2. Go to **Settings** > **Integrations**
3. Select **Zapier**
4. Tap **Disconnect**
Disconnecting stops webhook events to Zapier. Your Zaps will no longer receive Allo data.
### Update webhook URL
If you need to change the webhook URL:
1. Create a new webhook in Zapier
2. Disconnect the Zapier integration in Allo
3. Reconnect with the new webhook URL
### Multiple Zaps
To send Allo data to multiple Zaps:
1. Create multiple webhook connections in Allo
2. Each can have different event filters
3. Build separate workflows for different purposes
## Popular app connections
Send email notifications for every call
Post call summaries to team channels
Log calls to spreadsheets automatically
Create cards for follow-up calls
Build custom call databases
Track calls as work items
## Need help?
Get help with the integration
Learn more about Zapier
# Zoho CRM
Source: https://help.withallo.com/en/integrations/zoho
Automatically sync contacts and log calls with summaries to your Zoho CRM
## How to connect
Go to [**web.withallo.com**](https://web.withallo.com) and navigate to **Settings** > **Integrations**.
Find **Zoho CRM** in the list and click **Connect**.
You'll be redirected to Zoho CRM. Sign in if needed, then grant Allo all requested permissions.
Once authorized, you're redirected back to Allo. Your integration is now active.
## What syncs
**From Zoho CRM to Allo:**
* Contacts
Contacts created in Allo are not pushed to Zoho CRM.
**Sync direction:** One-way (Zoho CRM → Allo).
## How calls are synced
After each call, Allo pushes the call to both Zoho CRM call logs and contact notes. The contact note contains the full call summary, while the call log has basic call metadata only.
## How SMS are synced
SMS conversations are synced as notes on the matching contact in Zoho CRM.
## Click-to-call
Click on any phone number in Zoho CRM to open the call directly in the Allo app. The Allo app must be installed on your device.
## Troubleshooting
Check the sync status of any call from the **call list on [web.withallo.com](https://web.withallo.com)** — each call has an integration indicator showing its sync state.
Only **admins** and **managers** of an Allo workspace can connect integrations. If you don't see the option, ask your workspace admin or manager to set it up.
Check the integration indicator on the call in the web app. The error will be one of these:
* **Contact not found** — The contact doesn't exist in your CRM. By default, Allo only syncs calls to existing contacts. To auto-create contacts, go to your integration settings and enable **Create lead for unknown calls**.
* **Contact deleted** — The contact was removed from your CRM. Allo is additive and won't sync calls for deleted contacts. Re-create the contact in your CRM, then retry the sync.
* **Integration disconnected** — Your OAuth token or API key was revoked on the integration side. Allo still appears connected but requests fail. Disconnect and reconnect the integration in Allo.
* **Call pending (spinner icon)** — Allo is still matching the contact. This can take up to 24 hours before being marked as an error. Once the contact exists in your CRM, you can retry manually.
* **Contact is a favorite** — By default, calls with a favorite contact are not synced to your CRM. Remove the contact from your favorites if you want these calls to sync.
The first sync can take up to **15 minutes** for large contact databases. After that, contacts sync incrementally every **10 minutes** — not in real time.
Allo only syncs contacts that have at least one phone number in a native phone number field. Contacts without a phone number will not appear in Allo.
If contacts still don't appear after 15 minutes, disconnect and reconnect the integration.
If your SMS conversations are not appearing, verify the integration is connected in **Settings** > **Integrations** and check the integration indicator on the call list at [web.withallo.com](https://web.withallo.com) for error details.
If SMS still don't appear, disconnect and reconnect the integration.
Allo mirrors your integration exactly. If your CRM has duplicate contacts with the same phone number, they appear as separate contacts in Allo.
Clean up duplicates in your CRM — Allo will reflect the change on the next sync.
Call tags require a **paid** Zoho CRM plan (Standard or above). The Free edition does not support tags. If you are on a paid plan and still don't see tags, disconnect and reconnect the integration to refresh permissions.
When multiple contacts share the same phone number, Allo syncs the call to all matching contacts. Before reporting a missing sync, check all contacts that share that phone number — the call may already be synced to another one. Click the integration indicator on any call in the web app to see exactly which contacts it was synced to.
# Buy additional numbers
Source: https://help.withallo.com/en/phone-numbers/buy-additional-numbers
Add more phone numbers to your Allo account
## Why add more numbers
Additional numbers help you organize your business:
* Separate lines for sales, support, and billing
* Local numbers for different cities
* Dedicated numbers for marketing campaigns
## Pricing
### Standard pricing
Most countries: **\$5/month** (or local currency equivalent)
| Country | Number Type | Monthly Price |
| -------------- | ---------------- | -------------------- |
| France | Landline (09) | 5€ |
| France | Mobile (06/07)\* | 5€ |
| Belgium | Landline | From 5€ (on request) |
| Belgium | Mobile | From 5€ (on request) |
| United States | Landline | \$5 |
| United States | Mobile | \$5 |
| Canada | Landline | 7 CAD |
| Canada | Mobile | 7 CAD |
| United Kingdom | Landline | £5 |
| United Kingdom | Mobile | £5 |
| Spain | Landline | 5€ |
| Switzerland | Landline | 5 CHF |
| Portugal | Landline | 5€ |
\*French mobile numbers (06/07) require Business plan
**Belgian numbers** are available on request only, subject to stock, and pricing can vary. Belgian law also requires identity verification (KYC): company address, proof of address, VAT number, ID, and business registration certificate. [Contact support](/en/support/contact) to order one.
### Premium pricing
Some countries have higher carrier fees:
| Country | Number Type | Monthly Price |
| --------- | ----------- | ---------------------------------- |
| Germany | Landline | 15€ / \$15 / £15 / 25 CAD / 15 CHF |
| Portugal | Mobile | 50€ / \$45 / £35 / 60 CAD |
| Australia | Landline | 35€ / \$45 / £45 / 60 CAD / 35 CHF |
| Australia | Mobile | 35€ / \$45 / £45 / 60 CAD / 35 CHF |
## How to buy
Go to Settings in the Allo app
Tap **Buy Number**
Select country, region, and number type. Pick from available numbers.
Review pricing and confirm. Your number activates immediately.
## After purchase
Once you buy a number, you can:
* Give it a custom name for easy identification
* Set up call routing (IVR, team members, voicemail, AI Receptionist)
* Configure separate business hours
* Customize voicemail messages
[Learn about call routing →](/en/features/ivr)
## Common questions
Yes. Toll-free numbers (833, 844, 855, 866, 877, 888) are available on Business plans. You can add a toll-free number at signup or any time later, alongside your local lines, from Settings > Numbers. Contact support to request one.
True 1-800 numbers are very limited and significantly more expensive. The other toll-free prefixes are widely available and work the same way for callers.
Yes. Go to Settings, select the number, and choose "Cancel number." You'll be billed for the current month only.
**Starter plan:** Receive SMS only\
**Business plan:** Send and receive SMS
Yes. Each team member can have a dedicated number, or multiple members can share numbers.
No limit. Add as many numbers as your business needs.
Very often, yes. Local regulation and stock vary by country, so [contact support](/en/support/contact) with the country you need: we'll confirm availability, required documents, and send you a quote.
**Consider international calling instead.** Allo can call **200+ destinations** with [international calling credits](/en/billing/international-calling-rates). It's usually cheaper than buying and maintaining local numbers, and it works immediately, no paperwork.
## Next steps
Transfer your current business number to Allo
Route calls with interactive menu
Set availability for each number
Assign team members to numbers
# Caller ID Name (CNAM)
Source: https://help.withallo.com/en/phone-numbers/caller-id-name
Display your business name when you call US and Canadian numbers
CNAM (Caller ID Name) is the name displayed next to your number when you call someone in the US or Canada. Setting it to your business name makes your calls recognizable and improves answer rates.
Two different things, both supported by Allo:
* **Caller ID** = which *number* is displayed. You choose it in the dialer when you have several lines.
* **CNAM** = which *name* is displayed. That's this page.
## Set your Caller ID Name
Go to **Settings > Numbers** and select the number.
Find the **Number reputation** section (also called Caller Name).
Enter the name and submit. Registration is free.
## Rules and timing
* **15 characters maximum** (letters and numbers): pick a short form of your business name, for example "SMITH PLUMBING" rather than "Smith Plumbing & Heating Services LLC"
* Propagation across carriers takes **up to 72 hours**
* CNAM applies to **US and Canadian numbers**: other countries don't use the CNAM system
## Fix a wrong or outdated name
If your calls display someone else's name (for example the previous owner of the number), or you need to change an approved name, [contact support](/en/support/contact): we correct the listing directly with the carrier.
## Calls still showing as spam?
CNAM helps, but spam labeling is a separate system managed by carrier analytics. If your number is labeled "Spam Likely", see [Number flagged as spam](/en/phone-numbers/number-flagged-as-spam).
# Click-to-call number
Source: https://help.withallo.com/en/phone-numbers/click-to-call-number
Choose which number appears when you make outbound calls with multiple numbers assigned
## What it does
When you have multiple Allo numbers assigned to your account, you can choose which one to use for outbound calls. This setting controls the caller ID that recipients see when you dial out.
**This applies to:**
* Manual dialing from the Allo app
* Click-to-dial from CRM integrations (HubSpot, Salesforce, Attio, etc.)
* Any outbound call you initiate
This setting does **not** affect inbound calls. Routing for incoming calls is configured per number in Settings → Numbers.
***
## How to set your click-to-call number
Open the Allo web app at [web.withallo.com](https://web.withallo.com), then click Settings in the left sidebar and select Profile.
Find the **Click-to-call number** dropdown and select the number you want to use for outbound calls.
All outbound calls will now use this number as the caller ID until you change it again.
Tap the Settings icon in the bottom navigation bar.
Select **Profile** from the settings menu.
Tap **Click-to-call number** and select the number you want to use for outbound calls.
All outbound calls will now use this number as the caller ID until you change it again.
***
## When to change it
### Rotating numbers to avoid spam flags
If you're making high volumes of outbound calls, rotating between multiple numbers can help protect your caller reputation. Switch your click-to-call number periodically to distribute call volume across your available lines.
[Learn about spam flags and caller reputation →](/en/phone-numbers/number-flagged-as-spam)
### Department-specific lines
If you handle multiple departments or clients, you can switch your click-to-call number to match the context of your call. For example:
* Use your main line for general outreach
* Switch to a support line when handling customer issues
* Use a dedicated sales number for prospecting
### Testing new numbers
When you add a new number, you can test it by setting it as your click-to-call number and making a few outbound calls before assigning it to your team.
***
## Common questions
No. Multiple team members can share the same number and still make outbound calls. Each person sets their own click-to-call number preference independently.
[Learn about numbers and users →](/en/get-started/numbers-and-users)
Not directly at the moment of dialing. You need to change your click-to-call number in Settings → Profile before making the call.
A per-call selector is not currently available, but we're tracking interest in this feature.
Yes. When you use click-to-dial from HubSpot, Salesforce, Attio, or any other CRM, Allo uses your click-to-call number setting as the outbound caller ID.
If you only have one number assigned, that number is automatically used for all outbound calls. You don't need to configure this setting.
***
## Related
Add more numbers to your account
Understand how numbers and users work together
Configure who receives inbound calls
Protect your caller reputation
# Connect personal number
Source: https://help.withallo.com/en/phone-numbers/connect-personal-number
Forward calls from your existing phone number to Allo to get AI features on all your calls
## Why connect your personal number
Forward your existing phone number to Allo to unlock AI features on all incoming calls:
Every call gets recorded
Instant summaries and transcripts
Automatic CRM updates
Track call metrics
Automatic spam detection
IVR and business hours
Your callers won't notice any difference. They call your regular number, and you answer through Allo.
## How it works
Call forwarding redirects incoming calls from your personal number to your Allo number.
Someone calls your regular phone number
The call automatically redirects to your Allo number
All AI features activate automatically
The call rings in your Allo app
Call forwarding only works for **incoming calls**. For outbound calls, see caller ID section below.
## Caller ID for outbound calls
What number displays when you make calls depends on your region:
**Caller ID masking enabled**
When you make outbound calls through Allo, your **personal number displays** to recipients (not your Allo number).
This happens automatically. No configuration needed.
**Benefits:**
* Clients see your familiar number
* Return calls go to your personal number (and forward to Allo if connected)
* Professional consistency
**Allo number displays by default**
When you make outbound calls through Allo, your **Allo number displays** to recipients by default.
**To use your personal number instead:**
1. Long-press the phone icon or contact number in Allo
2. Choose **Call with iPhone** (or Android equivalent)
3. Call uses your regular SIM card
Calls made via "Call with iPhone" are **not recorded** and don't appear in Allo history.
**Allo number displays**
In most other countries, your Allo number displays when making outbound calls through the app.
Contact support if you need caller ID masking in your region.
In order to configure Caller ID for outbound calls, please contact support.
## Set up call forwarding
### Automatic setup (recommended)
Launch the Allo mobile app
Tap the Settings icon in bottom navigation
Select **Connect my personal number**
Pick the number you want to forward
Complete the on-screen setup process
Tap **Start test** to verify forwarding works
Allo attempts to configure forwarding automatically with your carrier. Success rate is high for most carriers.
### Manual setup (if automatic fails)
If automatic setup doesn't work, configure forwarding manually:
1. Open iPhone **Settings** app
2. Select **Phone** > **Call Forwarding**
3. Turn on the toggle switch
4. Type your Allo number manually (don't copy-paste)
1. Launch your Phone application
2. Tap three dots menu > **Settings**
3. Select **Calls** > **Call forwarding**
4. Choose **Always forward**
5. Type your Allo number manually
Some carriers require dialing special codes:
**Activate forwarding:**
```
*72 + [Your Allo number]
```
**Deactivate forwarding:**
```
*73
```
Codes vary by carrier. Contact your carrier for specific instructions.
## Verify the connection
After setting up forwarding, check these indicators:
1. You saw carrier success messages during setup
2. The built-in test completed successfully
3. Your personal number shows under **Account** in Allo
4. Test call from another phone rings through Allo
## Troubleshooting
**Common causes:**
* High volume at carrier (temporary)
* Network timeout
**Solutions:**
* Wait a few minutes and try again
* Use manual setup instead
* Contact support with your carrier name
**Common causes:**
* Carrier hasn't activated yet (takes 1-5 minutes)
* Wrong number entered
* Carrier requires special authorization
**Solutions:**
* Wait 5 minutes and test again
* Verify you typed the number correctly (manual entry only)
* Contact carrier to confirm forwarding is active
Yes. You can forward several numbers to the same Allo number. Set up each one individually through Settings.
Check with your carrier. Some carriers charge for call forwarding. Most mobile plans include it for free.
Yes. Go to **Account**, tap your personal number, and follow the disconnection instructions.
## What gets recorded
Only calls made through the Allo app get recorded. Calls made directly from your phone's native dialer are **not** recorded.
**Recorded:**
* Incoming calls to your personal number (when forwarded to Allo)
* Outbound calls made through Allo app
**Not recorded:**
* Calls made from your phone's native dialer
* WhatsApp calls
* Other VoIP apps
## Recording consent requirements
You are responsible for complying with local recording laws. In many regions, you must inform callers that the call is being recorded.
### Options to inform callers
State at the beginning of each call:
> "This call is being recorded."
Include in your voicemail message:
> "Calls to this number are recorded."
[Configure voicemail →](/en/call-features/voicemail)
Configure your AI Receptionist to announce recording (Business plan).
[Set up AI Receptionist →](/en/features/ai-receptionist)
[Learn more about recording compliance →](/en/call-features/recordings-transcripts)
## Advanced: Forward someone else's calls
You can receive calls intended for another person (with their permission).
They can configure forwarding when they don't answer:
1. Open their Allo application
2. Navigate to **Settings** > **When you are busy**
3. Select **Transfer call** > **Forward when no answer**
4. Type the forwarding number manually (no copy-paste)
Configure forwarding on their phone directly (with their permission):
* Through their carrier settings
* Using their phone's call forwarding feature
* By dialing carrier codes (like `*72`)
## Next steps
Set up custom voicemail messages
Define when you're available for calls
Sync calls to your CRM automatically
Share your Allo setup with your team
## Disabling Call Forwarding
To stop call forwarding, you can use the following methods:
### 1. Dial Code Method (works on most carriers)
Simply open your phone's dialer and enter ##002# and press Call. This cancels all call forwarding rules on your device immediately.
### 2. From Phone Settings
Go to **Settings** > **Phone** > **Call Forwarding** and toggle it off.
1. Go to **Phone** app > **Settings** (or three-dot menu) > **Call Settings** > **Call Forwarding**
2. Select each forwarding option and disable it.
### 3. Contact your Carrier
If the above steps don't work, you can also call your carrier's customer support and ask them to remove any call forwarding rules associated with your number on their end.
Once call forwarding is disabled, your number should receive incoming calls normally. If you have trouble with these steps, please contact support.
## Need help?
Having trouble with call forwarding? Our team can help troubleshoot carrier-specific issues.
# Connect to WhatsApp
Source: https://help.withallo.com/en/phone-numbers/connect-to-whatsapp
Use your Allo number for WhatsApp
WhatsApp with Allo numbers requires a Business plan and a number that supports SMS reception.
## Requirements
**You need:**
* Business plan subscription
* Allo number that can receive SMS (check your number details in the app)
* WhatsApp app installed
Not all number types can receive verification codes. Contact support if you're unsure whether your number works with WhatsApp.
***
## Setup steps
Download and open WhatsApp if not already installed.
1. Open WhatsApp
2. Enter your Allo number with the correct country code
3. Confirm it's correct
1. When asked for verification code, tap "Didn't receive a verification code"
2. Wait for "Voice call" option to appear
3. Tap "Voice call"
Don't try SMS verification. Not all Allo numbers can receive SMS verification codes for WhatsApp.
1. Answer the call from Meta/WhatsApp
2. Listen to the automated voice
3. Write down the verification code
4. Enter code in WhatsApp
1. Finish WhatsApp account creation
2. Add profile photo and name
3. You're ready to use WhatsApp
***
## Important notes
### Number compatibility
**What works:**
* Mobile numbers that support SMS reception
* In France: mobile numbers starting with 06 or 07
* Available on Business plan only
**What doesn't work:**
* Landline numbers (09, 01, etc.)
* Numbers without SMS capability
**Don't have a compatible number?**\
Contact support to add one to your account.
[Buy additional numbers](/en/phone-numbers/buy-additional-numbers)
### SMS doesn't always work
**Why you must use voice call:**
* Not all Allo numbers can receive OTP SMS
* WhatsApp verification SMS might not arrive
* Voice call is the most reliable method
**Always choose:** "Call me" instead of "Text me"
### WhatsApp calls are not recorded
**Important limitation:**
* WhatsApp calls don't go through Allo
* No recording
* No AI summary
* No transcript
* Won't appear in Allo call history
**Only regular phone calls** through Allo app are recorded.
***
## Troubleshooting
**Check:**
* You selected "Voice call" not SMS
* Your number supports voice calls
* Allo app is open and connected
**Try:**
* Wait 2-3 minutes
* Close and reopen WhatsApp
* Request new code
**Verify:**
* Country code is correct
* Number format matches your region
* No extra spaces or characters
**Example for French numbers:**\
If Allo number is 06 12 34 56 78\
Enter in WhatsApp: +33 6 12 34 56 78
**Wait a few moments:**
* Voice option appears after 1-2 minutes
* Don't keep requesting SMS
* Let timer count down
**If still not showing:**
* Close WhatsApp completely
* Restart the app
* Start verification again
**Business plan users:**
* Contact support to check available numbers for your region
* Some numbers may require additional setup
**Starter plan users:**
* Upgrade to Business plan first
* Then contact support about adding a compatible number
[Contact support](/en/support/contact)
**WhatsApp limits:**
* One WhatsApp account per number
* Cannot have multiple WhatsApp accounts
* Will deactivate previous account
**Solution:**
* Use different Allo number
* Or accept previous account will be deactivated
***
## Related topics
Get a number compatible with WhatsApp
Upgrade to access WhatsApp features
Learn about SMS capabilities
# International phone numbers
Source: https://help.withallo.com/en/phone-numbers/international-numbers
Complete list of 120+ countries where you can get a business phone number with Allo — including setup times, document requirements, and SMS availability
Allo offers business phone numbers in **120+ countries**. Some are instant. Others require local business documents. This page lists every supported country with setup details.
## Get a Number Instantly
These four countries are available directly in the Allo app — pick a number and it activates in minutes. No paperwork, no waiting.
Local, toll-free, and mobile numbers. Full SMS support. Included at signup.
Local and toll-free numbers. SMS available. No documents needed.
Landline (01-09) and mobile (06/07) numbers. SMS available. Included at signup.
Local, national, toll-free, and mobile numbers. SMS available. Proof of address required.
## Request an International Number
For all other countries, request your number at [**numbers.mobilefirst.company**](https://numbers.mobilefirst.company). You'll see setup times, document requirements, and pricing for each country.
There are three setup levels:
| Setup Level | Timeline | What's Needed |
| ---------------------- | ----------------- | -------------------------------------------- |
| **Instant** | Minutes | Nothing — number activates immediately |
| **Documents Required** | 3-7 business days | Company registration and/or proof of address |
| **Extended Setup** | 1-2 weeks | Manual review + local regulatory approval |
Availability, stock, and pricing vary with local regulation: for any country outside the instant list, [contact support](/en/support/contact) and we'll confirm what's possible and send you a quote.
**Often the better option:** you may not need a local number at all. Allo calls **200+ destinations** with [international calling credits](/en/billing/international-calling-rates). It's usually cheaper than buying and maintaining local numbers, and it works immediately, no paperwork.
Countries marked **Business only** require a registered business entity. Individual/freelancer accounts cannot get numbers in those countries.
***
## Country Availability
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| ----------- | ----- | -------- | --------- | ------ | -------- | --- | ----------------------------------- |
| Canada | ✓ | — | ✓ | — | Instant | ✓ | None |
| Mexico | ✓ | — | ✓ | — | 3-7 days | ✓ | Company registration. Business only |
| Puerto Rico | ✓ | — | ✓ | — | Instant | ✓ | None |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| -------------- | ----- | -------- | --------- | ------ | -------- | ----------- | ----------------------------------------------------------------------------------------------------------------- |
| United Kingdom | ✓ | ✓ | ✓ | ✓ | 3-7 days | ✓ | Proof of address |
| Germany | ✓ | ✓ | ✓ | ✓ | 3-7 days | Mobile only | Company registration, proof of address. Local address required |
| Italy | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Company registration, proof of ID, proof of address. Business only |
| Spain | ✓ | ✓ | ✓ | — | 3-7 days | Mobile only | Company registration, proof of address. Local address required |
| Netherlands | ✓ | ✓ | ✓ | ✓ | 3-7 days | ✓ | Company registration, proof of address |
| Belgium | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | On request, subject to stock. KYC required by Belgian law: company registration, VAT number, ID, proof of address |
| Switzerland | ✓ | ✓ | ✓ | — | 3-7 days | Voice only | Company registration, proof of address. Business only. Local address required |
| Austria | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Company registration, proof of address. Local address required |
| Portugal | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Company registration, proof of address |
| Ireland | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Company registration |
| Luxembourg | ✓ | — | — | — | 3-7 days | Voice only | Company registration, proof of address |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| ------- | ----- | -------- | --------- | ------ | --------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sweden | ✓ | ✓ | ✓ | ✓ | 3-7 days | ✓ | Proof of address |
| Norway | ✓ | ✓ | ✓ | — | 3-7 days | On request | Company registration, proof of address. Standard Norwegian numbers are voice-only: SMS requires a mobile number, available on request with a quote |
| Denmark | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Proof of address |
| Finland | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Company registration, proof of address |
| Iceland | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| --------------- | ----- | -------- | --------- | ------ | --------- | ---------- | -------------------------------------------------------------- |
| Poland | ✓ | ✓ | ✓ | ✓ | 3-7 days | ✓ | Company registration, proof of address. Local address required |
| Czech Republic | ✓ | ✓ | ✓ | — | 3-7 days | Voice only | Company registration, proof of address |
| Slovakia | ✓ | ✓ | — | — | 3-7 days | Voice only | Company registration, proof of address |
| Hungary | ✓ | ✓ | ✓ | — | 3-7 days | Voice only | Company registration, proof of address. Local address required |
| Romania | ✓ | ✓ | ✓ | — | 3-7 days | Voice only | Company registration, proof of address |
| Bulgaria | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of address |
| Croatia | ✓ | — | — | — | 3-7 days | Voice only | Company registration, proof of address |
| Slovenia | ✓ | — | — | — | 3-7 days | Voice only | Company registration, proof of address |
| Serbia | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID, proof of address |
| Bosnia | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID, proof of address |
| Montenegro | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| North Macedonia | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Albania | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID |
| Ukraine | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| --------- | ----- | -------- | --------- | ------ | -------- | ---------- | -------------------------------------- |
| Estonia | ✓ | — | ✓ | — | 3-7 days | ✓ | Company registration |
| Latvia | ✓ | — | — | — | 3-7 days | Voice only | Company registration |
| Lithuania | ✓ | — | ✓ | — | 3-7 days | Voice only | Company registration, proof of address |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| ------- | ----- | -------- | --------- | ------ | --------- | ---------- | ----------------------------------------------------------------------------------- |
| Greece | ✓ | ✓ | ✓ | — | 3-7 days | Voice only | Company registration, proof of address. Local address required |
| Cyprus | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Turkey | ✓ | ✓ | ✓ | — | 1-2 weeks | Voice only | Company registration, proof of ID, proof of address, tax certificate. Business only |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| ----------- | ----- | -------- | --------- | ------ | ---------- | ---------- | -------------------------------------------------------------------------------------------- |
| Australia | ✓ | ✓ | ✓ | ✓ | 3-7 days | ✓ | Proof of address |
| New Zealand | ✓ | — | ✓ | — | 3-7 days | Voice only | Proof of address |
| Japan | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration, proof of ID, proof of address. Business only. Local address required |
| South Korea | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Singapore | ✓ | — | ✓ | — | 3-7 days | Voice only | Company registration, proof of address. Business only |
| Hong Kong | ✓ | — | ✓ | — | 3-7 days | Voice only | Company registration |
| Taiwan | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Malaysia | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration. Business only |
| Thailand | ✓ | — | — | — | 1-2 weeks | ✓ | Company registration, proof of ID. Business only |
| Philippines | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration. Business only |
| Indonesia | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Vietnam | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| India | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration, proof of ID, tax certificate. Business only |
| Pakistan | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Bangladesh | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| China | ✓ | — | ✓ | — | Contact us | Voice only | Company registration, proof of ID, tax certificate. Business only. Carrier approval required |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| -------------------- | ----- | -------- | --------- | ------ | --------- | ---------- | ------------------------------------------------ |
| Israel | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Company registration, proof of address |
| United Arab Emirates | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Saudi Arabia | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Qatar | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Kuwait | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration. Business only |
| Jordan | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| ------------ | ----- | -------- | --------- | ------ | --------- | ---------- | ------------------------------------------------ |
| South Africa | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Company registration |
| Nigeria | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Kenya | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Ghana | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Egypt | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID. Business only |
| Morocco | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Uganda | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| --------- | ----- | -------- | --------- | ------ | --------- | ---------- | ----------------------------------------------------------------------------------------------------------- |
| Brazil | ✓ | ✓ | ✓ | ✓ | 3-7 days | ✓ | Company registration, proof of ID, proof of address, tax certificate. Business only. Local address required |
| Colombia | ✓ | ✓ | ✓ | — | 3-7 days | ✓ | Company registration. Business only |
| Argentina | ✓ | ✓ | ✓ | — | 3-7 days | Voice only | Company registration, proof of address |
| Chile | ✓ | ✓ | ✓ | — | 3-7 days | Voice only | Company registration, proof of address |
| Peru | ✓ | — | ✓ | — | 1-2 weeks | Voice only | Company registration. Business only |
| Uruguay | ✓ | — | — | — | 3-7 days | Voice only | Company registration |
| Venezuela | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Paraguay | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| ------------------ | ----- | -------- | --------- | ------ | --------- | ---------- | -------------------- |
| Panama | ✓ | — | ✓ | — | 3-7 days | Voice only | Company registration |
| Costa Rica | ✓ | — | — | — | 3-7 days | Voice only | Company registration |
| Dominican Republic | ✓ | — | ✓ | — | 3-7 days | Voice only | Company registration |
| Jamaica | ✓ | — | ✓ | — | 3-7 days | Voice only | Company registration |
| Guatemala | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Honduras | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| El Salvador | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Trinidad & Tobago | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Country | Local | National | Toll-Free | Mobile | Setup | SMS | Documents |
| ---------- | ----- | -------- | --------- | ------ | --------- | ---------- | --------------------------------- |
| Georgia | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration |
| Uzbekistan | ✓ | — | — | — | 1-2 weeks | Voice only | Company registration, proof of ID |
***
## Understanding Document Requirements
When a country requires documents, here's what each means:
Your certificate of incorporation or business registration. The exact document varies by country — for example, a Companies House Certificate in the UK, Handelsregisterauszug in Germany, or CNPJ in Brazil.
A government-issued photo ID of the company's legal representative. Passport, driver's license, or national ID card.
A utility bill or bank statement dated within the last 3 months showing your business address.
Required in some countries (Brazil, Turkey, India, China). Your company's tax registration document.
Countries with **local address required** need your business to have a registered address in that country. If you don't have one, contact support — we can help find a solution.
## Understanding SMS Availability
Not all international numbers support 2-way SMS. Here's what the status means:
* **✓** — You can send and receive text messages. Business plan required for sending.
* **Mobile only** — SMS is available on mobile numbers only (Germany, Spain).
* **Voice only** — The number supports voice calls but cannot send or receive SMS. This is a regulatory limitation in those countries.
If you need SMS in a "Voice only" country, contact support. Regulations change and we regularly expand SMS coverage.
## Common Questions
This list covers all countries we currently support. If you need a country not listed, contact support — we're constantly expanding coverage.
Yes. You can hold numbers in as many countries as you need. Each number is billed separately.
Some countries only issue phone numbers to registered business entities. Individual or freelancer accounts without a company registration cannot get numbers in those countries.
Local telecom regulations in certain countries restrict SMS on virtual numbers. This is not an Allo limitation — it applies to all providers operating in those markets.
Yes, for most countries. Porting timelines vary by country and carrier. Contact support to start a port request.
Yes. Call recording, AI summaries, CRM sync, IVR, and all other features work with every Allo number regardless of country.
We'll tell you exactly what's wrong and what to resubmit. Common issues: expired documents, low-quality scans, or missing translation (some countries require English or local-language documents).
## Need Help?
Buy additional numbers for your team
Get help with international number setup
# Port existing number
Source: https://help.withallo.com/en/phone-numbers/port-existing-number
Transfer your current phone number to Allo, for free, in a few business days
## What is number porting?
Number porting transfers your existing phone number from your current carrier to Allo. Your number stays the same, Allo just becomes your new provider.
No need to update business cards or marketing materials
Clients keep calling the number they know
AI summaries, recordings, CRM sync, on your existing number
***
## How porting works
The flow depends on the type of number you're porting. Pick the matching option below.
**French, US, and Canadian numbers** can be ported directly from the app. Numbers from **other countries** can very often be ported too, but the process is handled manually: [contact support](/en/support/contact) with the number and your current provider, and we'll take it from there.
Leaving instead of arriving? See [Port your number out of Allo](/en/phone-numbers/port-out).
## Carrier-coordinated porting
For US, Canadian, and other international numbers, Allo coordinates the port with your current carrier on your behalf.
In the Allo app on desktop or web, go to [**Settings > Numbers**](https://web.withallo.com/settings/numbers) and click **Port a number**, then submit your details. We'll need information from your current provider, see the checklist below before you start.
Our team contacts your current provider and initiates the transfer on your behalf. No calls or paperwork on your side. You'll get email updates as your port progresses, and you can check the status anytime under **Porting orders** in [Settings > Numbers](https://web.withallo.com/settings/numbers), see [Track your port](#track-your-port) below.
We coordinate the exact transfer date and let you know as soon as it's confirmed. You can request a preferred date, note it's not always guaranteed.
The day before the transfer, your number appears in your Allo account. Use that window to configure your settings so everything is ready on day one.
Your number goes live with no downtime. Log in, open and close the app once to make sure everything is working smoothly.
**Do not cancel your current service** until the porting is complete. Your number must stay active with your old provider for the transfer to succeed. Cancelling early releases the number and breaks the port.
### What you'll need
Before filling out the form, contact your current provider to gather:
| Information | Where to find it |
| -------------------------- | ------------------------------------------------------------------------ |
| **Account number** | Your carrier bill or online account |
| **Authorized person name** | Must match the name on the billing contract exactly |
| **Billing phone number** | On file with your current carrier |
| **Service address** | Zip code and state are required |
| **Port-out PIN** | Request it from your carrier, not always required, but avoids rejections |
| **Last invoice** | A copy of your most recent bill |
The most common reason for a rejected port is a **name mismatch**. Make sure the authorized person name matches your carrier contract exactly.
## In-app self-serve porting
Porting a French number (landline or 06/07 mobile) happens directly inside Allo, no external form needed.
In the Allo app on desktop or web, go to [**Settings > Numbers**](https://web.withallo.com/settings/numbers).
Start a new porting request from the Numbers screen.
Add the phone number or numbers you want to bring over. The order may be split into separate requests depending on the carrier and the type of number (landline vs mobile).
Fill in the requested information (RIO code, account holder, etc.) and pick the porting date you'd like.
You can set up business hours, IVR, AI Receptionist, and routing right away. Everything is ready to go on activation day. In the meantime, we email you updates on your port's progress, and you can check the status anytime under **Porting orders** in [Settings > Numbers](https://web.withallo.com/settings/numbers), see [Track your port](#track-your-port) below.
You'll receive an email confirmation on the date you selected, and your number is live in Allo.
### Timeline
* **Mobile (06/07):** around 1 week
* **Landline:** 10 to 15 business days
**Do not cancel your current service** before the porting completes. Your number must stay active with your old provider for the transfer to succeed. Cancelling early releases the number and breaks the port.
***
## Track your port
Once your request is submitted, you can follow it without contacting support, through two channels:
* **By email.** We send you an update at every key step, from submission to activation day.
* **In the app.** Go to [**Settings > Numbers**](https://web.withallo.com/settings/numbers). Your requests appear at the top of the page under **Porting orders**, each with its current status and its porting date once scheduled.
| Status | What it means |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Draft** | Your request is started but not submitted yet. Open it to complete the missing information and submit. |
| **Submitted** | Your request has been sent and the port is in progress. Nothing to do, we'll email you at each step. |
| **Invalid** | Something in your request needs to be corrected. Open the order to review the details, fix the information, and resubmit. A name or account number mismatch is the most common cause. |
As activation approaches, your number appears in the **Numbers** list on the same page, ready to configure before going live.
***
## Costs
**Allo charges nothing to port your number.** Your ported number is included in your existing plan with no extra monthly fee.
Your current carrier may charge an early termination or port-out fee, check your contract before initiating.
**If you already have an Allo number**, your ported number either replaces it or becomes an additional number at the standard rate.
***
## Eligible numbers
**US & Canada.** Almost all numbers are portable. We confirm portability within **24 hours** of receiving your form.
**Toll-free.** 800, 833, 844, 855, 866, 877, 888 numbers supported.
**France landlines & mobile (06/07).** Eligible for porting.
**Some VoIP numbers.** Porting restrictions vary by provider. Contact us to verify.
***
## Timeline
Mobile numbers: 2–4 business days\
Landline numbers: 7–10 business days\
Toll-free numbers: 7–14 business days
Mobile numbers: around 1 week\
Landline numbers: 10–15 business days
| Carrier | Estimated time |
| ------------------------ | ------------------------------------------------------------ |
| AT\&T | Mobile: minutes to 5 days / Landline: 5–7 days |
| T-Mobile | Mobile: 10 minutes to 3 hours / Landline: 3–10 days |
| Google Voice | Calls: up to 48h / Texts: up to 3 days |
| RingCentral | Mobile: 5–10 days / Landline: 7–15 days |
| Grasshopper | Up to 2 weeks |
| Aircall | 5–10 business days |
| Dialpad | 5–10 business days |
| Vonage | 5–21 business days |
| Ringover | Local: 5–10 days / International or toll-free: up to 15 days |
| Quo (formerly OpenPhone) | US: 5–7 days / Canada: 10–12 days |
***
## Port from your current carrier
Each carrier has its own steps for releasing your number. Open the section that matches yours.
Google Voice requires you to **unlock your number** first. It costs **\$3 USD** (one-time), paid to Google.
**What you'll need**
* Your Google account login
* A debit or credit card for the \$3 unlock fee
**Step 1: Open the unlock page**
On your computer, open [Google Voice](https://voice.google.com/). At the top right, click **Settings > Settings**, then go to the **Account** section. If you have multiple Voice numbers, pick the one you want to move.
**Step 2: Click "Unlock my number"**
Under the Google Voice number you want to port out, click **Unlock**.
**Step 3: Pay the unlock fee**
Complete the \$3 payment with your Google account. You'll see a confirmation and receive a receipt by email. **Keep a screenshot of the page showing "Number unlocked."**
**Step 4: Note your account info**
* **Account number:** your Google account email (for personal/free Voice)
* **PIN:** your Google Voice voicemail PIN. If you never set one, set or reset it in Voice settings, under Voicemail.
**Step 5: Submit the port to Allo**
* Fill out the porting form in the app (**Settings > Numbers > Port a number**)
* Upload your "Number unlocked" screenshot
* Enter your account email as the account number and your voicemail PIN as the port-out PIN
**Tips**
* Keep Google Voice service active until Allo confirms the port is complete
* If the form rejects your PIN, reset your voicemail PIN in Voice and try again
* Texts and voicemails from Google Voice don't transfer, save anything you need first
For Google Workspace admins transferring a paid Voice number:
1. In the Admin console, go to **Apps → Google Workspace → Google Voice → Number porting**
2. Open **Port out info** and generate your **Port-out PIN**
3. Copy the **account number** shown for the line and download a recent **billing statement**
4. Submit the porting form in the app (**Settings > Numbers > Port a number**) with that info. Billing name and address must match Google's records exactly.
Keep Google Voice active until Allo confirms completion.
**Step 1: Gather the required info**
* **RingCentral account number** (found in your RingCentral admin portal)
* **PIN / passcode** for that account. RingCentral doesn't always issue one, if asked, enter `0000`
* **Physical address** where the numbers are registered (no PO Boxes)
* **List of numbers** to port
**Step 2: Submit your request**
Fill out the porting form in the app (**Settings > Numbers > Port a number**). RingCentral's role is to cooperate once Allo initiates the port.
**Step 3: Monitor status**
Typical US local numbers take **5–10 business days**. Landlines or toll-free can take longer.
**Step 4: Cancel RingCentral after the port completes**
Only cancel your RingCentral service after Allo confirms your number is live. Cancelling earlier can result in losing the number.
RingCentral does not provide a port-out PIN. Enter `0000` if the form asks for one.
**Step 1: Keep your Grasshopper account active**
Make sure your account is in good standing. Do not cancel before the port is finished.
**Step 2: Prepare the required info**
* **Account number** (often the main number or Customer ID in Grasshopper)
* **Billing name and address** exactly as on file with Grasshopper
* **List of numbers** to port
* Grasshopper may require a signed **Letter of Authorization (LOA)**
**Step 3: Submit your request**
Fill out the porting form in the app (**Settings > Numbers > Port a number**) with all required documents.
**Step 4: Wait for confirmation**
Typical timelines: local numbers **2–5 business days**, toll-free **5–10 business days**.
**Step 5: Cancel Grasshopper**
Once your number is live in Allo, cancel Grasshopper. Not before.
**Step 1: Check eligibility**
Confirm your number is portable and that your Aircall account is active.
**Step 2: Collect the required details**
* **List of numbers** to port
* **Billing name, address, and account status** as they appear in Aircall
**Step 3: Submit your request**
Fill out the porting form in the app (**Settings > Numbers > Port a number**). Provide the collected info and any Letter of Authorization if required.
**Step 4: Keep Aircall active** until the port completes
**Step 5: Cancel Aircall after confirmation**
For carrier-side details, see [Aircall's port-out guide](https://support.aircall.io/en-gb/articles/10375397110301).
**Step 1: Start a port request in Dialpad**
In Dialpad admin, navigate to **Admin Settings → Office → Number Porting → Start a New Port Request**.
**Step 2: Gather the required items**
* **List of numbers** to port
* **Current account number** (usually 10–16 digits)
* **Port-out PIN** (4-digit), generated via Dialpad's port-out page
* **Billing name and address** exactly matching Dialpad's record
* Confirm the account is active with no outstanding balance
**Step 3: Submit to Allo**
Fill out the porting form in the app (**Settings > Numbers > Port a number**). Attach any LOA or documentation if required.
**Step 4: Monitor the process**
Timelines can go up to around **15 business days**.
**Step 5: Cancel Dialpad** after Allo confirms the port.
**Step 1: Get your account info from Quo**
* Account number (shown in your Quo dashboard under billing/settings)
* Port-out PIN if your Quo account has one set
* Billing name and address as on file with Quo
**Step 2: Submit your request**
Fill out the porting form in the app (**Settings > Numbers > Port a number**) with your numbers and account details.
**Step 3: Wait for confirmation**
Typical timelines: **US 5–7 business days, Canada 10–12 business days**.
**Step 4: Cancel Quo** only after Allo confirms your number is live.
The general process is the same for any US, Canadian, or international carrier:
1. **Gather from your carrier:** account number, port-out PIN (request one if the carrier uses them), billing name, billing address, most recent invoice
2. **Submit** the porting form in the app (**Settings > Numbers > Port a number**)
3. **Wait for confirmation.** Timings vary by carrier, see the by-carrier table above
4. **Cancel your old service** only after Allo confirms activation
Don't see your carrier listed? We port from most providers worldwide. Email [porting@withallo.com](mailto:porting@withallo.com) and we'll confirm eligibility and timelines.
***
## Limitations to know before porting
**Allo numbers cannot receive OTP (One-Time Password) messages.** If your number is currently used for two-factor authentication with banks, WhatsApp, Uber, Airbnb, or similar services, keep a separate number active for that purpose. This limitation applies to most virtual and VoIP services.
**Old voicemails and texts don't transfer.** Export anything you need from your previous provider before the cutover. Contacts can be imported into Allo separately.
**Outgoing SMS can be delayed up to 48 hours** during the cutover window as carriers update routing.
***
## 10DLC & Brand Registration (US numbers)
If your number already has an A2P 10DLC registration with your current provider, **it does not transfer to Allo**. You'll need to re-register.
1. Go to **Settings > Compliance** in your Allo dashboard
2. Register your Brand (one-time \$24 fee)
3. Create a Low Volume campaign once approved
Approval takes 3–7 business days. Start early to avoid any SMS interruption.
**Porting a Canadian number?** 10DLC only applies when you text US numbers. Messages to Canadian numbers require no registration.
***
## Common issues
The most common causes are a name mismatch, wrong account number, outstanding balance, or an active contract. Verify all details match your carrier records exactly, then resubmit.
Check your most recent carrier bill, log into your carrier's online account, or call their customer service directly.
First check the status of your order under **Porting orders** in [Settings > Numbers](https://web.withallo.com/settings/numbers). If it shows **Invalid**, open it to fix the flagged information. If the status hasn't moved in a while, email us at **[porting@withallo.com](mailto:porting@withallo.com)** and we'll check with your carrier.
You can. Your number stays fully active with your current carrier until cutover day. Most customers experience no service disruption.
Yes. You're always in full control of your number and can port it out to another provider at any time.
Yes. Once the port is complete, your number moves to Allo and your previous carrier's service for that line ends. This means any plan tied to that number (calls, texts, mobile data) will no longer be active with your old provider.
This is standard for any number port between carriers, not specific to Allo.
**If you'd rather keep your current carrier**, you can use [call forwarding](/en/phone-numbers/connect-personal-number) instead of porting. Call forwarding redirects your incoming calls to your Allo number so you get AI summaries, recordings, and CRM sync, while keeping your existing plan active.
Keep in mind that call forwarding only covers **incoming calls**. You won't be able to make outbound calls from that number through Allo, and forwarded calls will not appear as outgoing activity in your Allo account. It's a great option if you want to keep your carrier and still benefit from Allo's features on calls you receive.
***
## Need help?
[porting@withallo.com](mailto:porting@withallo.com)
Browse all support articles
***
## Next steps
Set up your ported number with Allo features
Integrate with your tools
Give your team access
Configure AI for your number
# SMS & Messaging
Source: https://help.withallo.com/en/phone-numbers/sms-overview
Send and receive text messages, set up automatic replies, and comply with US and French regulations.
Allo lets you send and receive SMS directly from your business number. Text prospects back after a missed call, follow up after a meeting, or send appointment reminders.
SMS sending requires the **Business plan**. Starter users can receive SMS only.
Texts not sending or not arriving? Go straight to [SMS troubleshooting](/en/phone-numbers/sms-troubleshooting).
***
## What you can do
| Feature | US | Canada | France |
| ---------------------------------- | --------------------------------------- | ------------------------------------------------------ | ------------------------------------------- |
| Send & receive SMS | ✅ (requires [10DLC](#us--canada-10dlc)) | ✅ ([10DLC](#us--canada-10dlc) only to text US numbers) | ✅ |
| Send & receive MMS (images, media) | ✅ (requires [10DLC](#us--canada-10dlc)) | ✅ ([10DLC](#us--canada-10dlc) only to text US numbers) | ❌ Not yet |
| Automatic SMS after missed call | ✅ (requires [10DLC](#us--canada-10dlc)) | ✅ ([10DLC](#us--canada-10dlc) only for US recipients) | ✅ (requires [Sender ID](#france-sender-id)) |
***
## Get started
Before you can send SMS, you need to complete a one-time registration. The process depends on your number's country.
Texting **US numbers** requires registering your brand and campaigns with the carriers (**10DLC**). Allo handles that paperwork, you just answer a few questions. Without it, your messages to US numbers are blocked.
**Only texting Canadian numbers?** No registration is needed: you can start sending right away. 10DLC applies only when you text US numbers.
Go to **Settings > Compliance** in your Allo dashboard.
One-time fee of **\$24** for your entire company. Covers all users and all numbers.
Once your brand is approved, create a campaign. You can assign up to **50 phone numbers** to a single campaign.
Approval takes **3 to 7 business days**. Start early so you don't hit any delays.
Once approved, the SMS composer appears in your Allo inbox and you can start sending immediately.
Yes. 10DLC registration is required for **any US number**, no matter where you're located.
Only if you text US numbers. Messages between Canadian numbers don't require any registration, so you can start sending right away.
Yes. 10DLC registrations don't transfer between providers. You'll need to re-register your brand with Allo.
You can send and receive manual SMS from your French number without any setup.
To enable **automatic SMS replies** after missed calls, you need to register a **Sender ID**. This is a requirement from French operators (ARCEP regulation) for any SMS sent automatically. The Sender ID displays your company name as the sender.
Go to **Settings > Compliance** in your Allo dashboard (desktop or web).
Enter your company name (3 to 11 characters, letters and digits only) and a sample message. Example name: "MOBILEFIRST". Example message: "Hi, thanks for your call. We'll get back to you shortly."
Approval typically takes **48 hours**. You will be notified when your Sender ID is active.
Once approved, automatic SMS replies for missed calls are unlocked.
No setup fee. You pay standard per-message rates included in your Business plan.
Generic terms ("Alert", "Bank", "Delivery") and names impersonating government agencies or major brands are blocked by AF2M. Your name must represent your actual business.
No, Alphanumeric Sender IDs are one-way only.
***
## Automatic SMS replies
Never lose a lead to a missed call. Allo sends a text message automatically when you don't answer, so your caller knows you'll get back to them.
You can set **two distinct messages**:
* One for missed calls **during business hours** ("Thanks for calling, I'll get back to you within the hour")
* One for calls **outside business hours** ("Our office is closed, we'll call you back tomorrow morning")
Go to **Settings > Numbers**, select the number you want to set up, then go to the **Automatic SMS reply** section.
Write your business hours message and your after-hours message.
Activate the feature. Done.
**US numbers:** Requires **10DLC registration**. See the **US & Canada (10DLC)** tab above.
**Canadian numbers:** No registration needed to text Canadian numbers. **10DLC** is required if your auto-replies go to US numbers.
**French numbers:** Requires a registered **Sender ID**. See the **France (Sender ID)** tab above.
Once approved, the SMS composer appears in your Allo inbox and you can start sending immediately. Automatic SMS replies are also unlocked right away (go to **Settings > Numbers**, select your number, then go to the **Automatic SMS reply** section).
***
## Sending limits
| Period | All countries |
| ------------ | ------------- |
| During trial | 20 SMS / day |
| After trial | 500 SMS / day |
The same limits apply to US, Canadian, and French numbers. US numbers still require [10DLC](#us--canada-10dlc) registration before any SMS can be sent (Canadian numbers only need it to text US numbers), and French numbers still require a [Sender ID](#france-sender-id) for automatic replies.
### Segment-based limits (US/CA)
Your daily limit is counted in **segments**, not characters. A 161-character message = **2 segments**, not 1.
| Message type | Characters per segment |
| ------------------------- | ---------------------- |
| Plain text (GSM-7) | 160 |
| Unicode (emojis, symbols) | 70 |
Keep messages under 160 characters (plain text) to stay efficient.
SMS sent through the [API](/en/v2/api-reference/introduction) are subject to the same limit of **500 SMS / day**.
***
## French SMS compliance
Sending business SMS in France requires following ARCEP (telecom), CNIL (data protection), and AF2M (industry charter) rules.
**B2C (consumer) SMS:** Explicit opt-in consent required before sending. Pre-checked boxes are illegal.
**B2B (professional) SMS:** No prior opt-in required, but the message must relate to the recipient's professional activity. You must identify yourself and offer opt-out.
* No marketing SMS on Sundays or French public holidays
* No marketing SMS between 20:00 and 08:00
* Transactional SMS (order confirmations, alerts) has no time restrictions
Every marketing SMS must include opt-out instructions. With an Alphanumeric Sender ID, include a short code reference in the message body (e.g., "STOP au 36179").
***
## FAQ
No. 10DLC (US/CA) is a one-time \$24 fee for your entire company. Sender ID (France) covers all your French numbers once approved.
Only to text US numbers. If you're only texting Canadian numbers, no registration is needed and you can start sending right away.
In France, MMS only works on numbers linked to a physical SIM card. French telecom regulation blocks MMS on virtual numbers, the kind used by Allo and every other business phone provider. This is an industry-wide restriction, not an Allo limitation. Standard SMS text messages work normally.
No. SMS sent via Sender ID are one-way: your client sees your company name, but cannot reply directly.
Yes. Starter users can receive SMS. Sending requires the Business plan.
Yes. Once configured, automatic SMS replies work regardless of which device you're using.
For B2B contacts, no prior opt-in is required. The message must relate to their professional activity, identify you as the sender, and include opt-out instructions.
Yes. 10DLC registrations don't transfer between providers. You'll need to re-register your brand with Allo and create a new campaign.
***
## Need help?
Get help from our team
Developer guide for sending SMS in France via API
# Your Allo number
Source: https://help.withallo.com/en/phone-numbers/understanding-allo-number
Learn about your Allo business number and how it works
## Why you get a new number
When you sign up for Allo, you receive a professional business number. This number enables all Allo features while keeping your personal number private.
Your personal number stays hidden
Enables recordings and AI summaries
Keep business separate from personal
## Benefits of having an Allo number
### Professional presence
A dedicated business number makes your company look more professional. Clients see a consistent business number for all communications.
### Complete feature access
Your Allo number unlocks all platform features:
* Automatic call recording
* AI-generated summaries and transcripts
* CRM integration and sync
* Advanced call routing (IVR)
* Business hours management
* Voicemail with transcription
* Spam blocking
### Privacy protection
Keep your personal number private. When you call clients, they see your Allo number, not your personal number.
### Team consistency
All team members can share the same Allo number, or each can have their own. Flexibility to match your business needs.
## Available number types
**Landline numbers**\
Standard local and toll-free numbers
**Mobile numbers**\
Full SMS and calling capabilities
**Pricing:**
* First number: Included in plan
* Additional numbers: \$5/month each
**Landline numbers**\
Local numbers across all provinces
**Mobile numbers**\
SMS-enabled mobile numbers
**Pricing:**
* First number: Included in plan
* Additional numbers: 7 CAD/month each
**Landline numbers (01, 02, 04, 05, 09)**\
Available on all plans
**Mobile numbers (06, 07)**\
Business plan only
**Pricing:**
* First number: Included in plan
* Additional numbers: 5€/month each
Mobile numbers (06/07) can be used for WhatsApp Business accounts.
**Available in:**
* United Kingdom (landline and mobile)
* Spain (landline)
* Switzerland (landline)
* Portugal (landline and mobile)
* Germany (landline)
* Belgium (landline and mobile)
* Australia (landline and mobile)
**Pricing varies by country**\
Contact support for specific pricing
## What you can do with your Allo number
### Make and receive calls
Use your Allo number for all business calls through the mobile or desktop app.
### Send and receive SMS
**Starter plan:** Receive SMS only\
**Business plan:** Send and receive SMS
Allo numbers cannot receive OTP (one-time password) verification codes. Use your personal number for verification codes.
### Connect to WhatsApp
French mobile numbers (06/07) can be used to create WhatsApp Business accounts.
[Learn how to set up WhatsApp →](/en/messaging/whatsapp-setup)
### Share with your team
Multiple team members can use the same Allo number with different routing rules.
## Limitations
### SMS restrictions
* **No OTP messages** - Cannot receive verification codes
* **MMS on US/CA numbers only** - Images and files work on US and Canadian numbers once [10DLC](/en/phone-numbers/sms-overview) is approved. French numbers are text-only: French regulation blocks MMS on virtual numbers
* **Business plan required** - SMS sending requires Business plan
### Recording limitations
* **Only Allo app calls recorded** - Calls from other apps not recorded
* **No WhatsApp recording** - WhatsApp calls cannot be recorded through Allo
## Changing your Allo number
### Starter plan
Number changes are not available on the Starter plan. Consider upgrading to Business for this option.
### Business plan
Only Admins can replace numbers. For more information about roles, go to [team management!](en/team/manage-members)
Business plan users can request a number change:
Choose the number you want to replace. Click on the three dots on the right, and select "Replace Number"
Choose the new number that will replace your current one.
Here, you can select the country and specify a desired prefix.
You will see a list of available numbers that match your needs.
The new number will replace your former one.
If you want to replace your Allo number with your existing number, [check out our porting reference.](/en/phone-numbers/port-existing-number)
If you are looking for a number with a specific prefix that is not on the list, contact support.
## Keep your existing number too
You don't have to choose between your Allo number and your personal number. Forward your personal number to Allo to get AI features on both.
[Learn how to connect your personal number →](/en/get-started/connect-personal-number)
## Common questions
Yes. At signup you search by area code and pick from available numbers. You're not limited to your own region: any US area code is available. The same search is available later from Settings > Numbers when you add or replace a line. Business plan users can also request a specific number (subject to availability) by contacting support.
Yes. Starter plan can receive SMS. Business plan can send and receive SMS.
No. Your Allo number is yours as long as your subscription is active.
Contact support to discuss porting your Allo number to another carrier.
No. Multiple team members can share one Allo number, or each can have their own. Both options available.
## Next steps
Add more numbers for your business
Transfer your current number to Allo
Forward your personal number to Allo
Use your Allo number for WhatsApp
# Common Issues
Source: https://help.withallo.com/en/support/common-issues
Solutions to frequently encountered problems
## Call quality issues
On the **desktop app, Mac, or browser**? See [Audio issues on desktop and web](/en/support/desktop-audio-issues) for the dedicated checklist (permissions, input devices, headsets, one-way audio).
**Common causes:**
* Weak internet connection
* Network congestion
* Low bandwidth
* Background apps using bandwidth
**Solutions:**
1. Check your internet speed (minimum **1 Mbps** stable upload/download required)
2. Switch from WiFi to cellular data (or vice versa) to test stability
3. Close other apps using heavy data (streaming, downloads)
4. Move closer to your WiFi router
5. Restart your phone to clear network cache
**Test your connection:** Visit [speedtest.net](https://www.speedtest.net) to check your stability.
**Common causes:**
* Unstable internet connection
* Network switching (e.g., leaving WiFi range)
* Low battery triggering "Power Saving" mode
* Background app restrictions
**Solutions:**
1. Try to stay on one network (WiFi or 4G/5G) during important calls
2. Ensure phone battery is above 20%
3. **Disable "Low Power Mode"** or "Battery Saver" (this often kills VoIP connections)
4. Keep the Allo app open in the foreground
5. Update Allo to the latest version
**Common causes:**
* Using speakerphone (microphone picks up speaker output)
* Volume too loud
* Two devices in the same room on the same call
**Solutions:**
1. Use headphones or earbuds (wired or Bluetooth)
2. Lower the speaker volume
3. Turn off speakerphone
4. Ensure you aren't logged in on multiple devices simultaneously in the same room
**Check these items:**
* Microphone permissions are granted to Allo
* Microphone is not physically blocked (finger, case, dust)
* You are not on "Mute" inside the app
**Solutions:**
1. **iOS:** Settings > Allo > Microphone (Toggle ON)
2. **Android:** Settings > Apps > Allo > Permissions > Microphone (Allow)
3. Remove your phone case temporarily to test
4. Force close and restart the Allo app
**Check these items:**
* Volume is turned up (Media volume, not just Ringtone volume)
* App is not on Mute
* Bluetooth is not connected to a different device (like car or earbuds in case)
**Solutions:**
1. Press volume UP button *during* the call
2. Toggle Speakerphone ON and OFF
3. Turn off Bluetooth temporarily to ensure audio routes to phone earpiece
***
## Connection problems
**Check these items:**
* Internet connection is active
* Allo subscription is active (Settings > Billing)
* App is updated to latest version
* "Airplane Mode" is OFF
**Solutions:**
1. Toggle Airplane Mode ON for 10 seconds, then OFF to reset radios
2. Log out of Allo and log back in
3. Reinstall the Allo app
4. Verify your subscription status in the web portal
**Common causes:**
* Phone is on Silent or "Do Not Disturb" (DND)
* Notification permissions are denied
* Business Hours are set to "Closed"
**Solutions:**
1. Check that **Do Not Disturb** is OFF
2. **iOS:** Settings > Notifications > Allo > Allow Notifications (Critical Alerts if available)
3. **Android:** Settings > Apps > Allo > Notifications (Enable all channels)
4. Review your **Business Hours** in Settings > Call Handling
**Common causes:**
* Carrier does not support "Call Forwarding"
* Prepaid plans (often block forwarding)
* Incorrect activation code or number format
**Solutions:**
1. Retry the "Automatic Setup" in the Allo app
2. Use the **Manual Setup** codes provided in the app
3. Contact your mobile carrier to ask if "Call Forwarding" is enabled on your line
4. Ensure you have enough credit (if on a prepaid plan)
**Troubleshooting steps:**
1. Ensure you have a strong cellular signal (forwarding is a carrier network feature)
2. If Automatic setup fails, try Manual setup
3. Contact Allo support if you receive a specific error code
***
## App issues
**Quick fixes:**
1. Force close the app (swipe up from bottom/home) and reopen
2. Restart your phone
3. **Android:** Clear App Cache (Settings > Apps > Allo > Storage > Clear Cache)
4. Delete and Reinstall the app (your data is saved in the cloud)
**Common causes:**
* Incorrect email format (e.g., space at the end)
* Magic Link expired
* Network firewall blocking login
**Solutions:**
1. Double-check email spelling
2. Request a new Magic Link (valid for 15 minutes)
3. Check "Spam/Junk" folder for login email
4. Try logging in via the **Web App** (on desktop) to verify account status
Not receiving the SMS or email code at all? See [Verification code not received](/en/support/verification-code-not-received).
**Check settings:**
1. **System Settings:** Ensure Allo has permission to show banners and play sounds
2. **Battery Optimization:** Ensure Allo is set to "Unrestricted" or "No optimization" in battery settings (Android especially)
3. **In-App:** Check Settings > Notifications to ensure they aren't paused
4. **Desktop (Mac):** System Settings > Notifications > Allo allowed, and your [Business Hours](/en/features/business-hours) status is "Open". More in [Audio issues on desktop and web](/en/support/desktop-audio-issues)
**Common causes:**
* Permissions denied
* Sync interval delay
**Solutions:**
1. **iOS/Android:** Go to Settings > Privacy > Contacts and ensure Allo is allowed
2. In Allo, pull down on the contact list to refresh
3. If using an Integration (HubSpot/Salesforce), check the Integration settings to ensure "Contact Sync" is enabled
***
## Recording and transcript issues
**Why this happens:**
* Call was made using the *native* phone app, not Allo
* Call was a WhatsApp call
* Call was extremely short (less than 3 seconds)
**Verify:** Only calls dialed *inside* the Allo app or received *via* Allo are recorded. Forwarded calls answered on your native dialer (without the app) may not record depending on configuration.
**Common causes:**
* Processing delay (wait 2-5 minutes)
* Audio quality was too poor for AI to process
* Unsupported language (Allo supports 30+ languages, but needs clear audio)
**Note:** If the audio recording exists but transcript fails, you can usually request a "Retry" or just listen to the audio.
**What affects accuracy:**
* Heavy background noise (wind, traffic)
* Overlapping speech (people interrupting each other)
* Low quality microphone
**Solution:** The summary is usually more accurate than the raw transcript. Use the AI Summary for quick insights.
***
## Integration issues
Each integration has its own **Troubleshooting** section with specific solutions for connection failures, sync issues, duplicates, and more. Go to your integration's page:
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
Troubleshooting
***
## Still have questions?
Contact Allo support if:
* Issue persists after trying solutions above
* You need account-specific help (billing, number porting)
* You are experiencing a bug
Get help from our team
View system status
# Contact Support
Source: https://help.withallo.com/en/support/contact
Reach our team through the web chat widget or by email
Seeing errors across the whole app? Check the [Allo status page](https://status.withallo.com) first. If we are tracking an incident, you will see it there with live updates, so there is no need to open a ticket.
## How to contact us
You can reach our support team in two ways:
Open [web.withallo.com](https://web.withallo.com) and click the chat widget to start a conversation. Our team typically replies within a few minutes during business hours.
Prefer email? Write to **[support@withallo.com](mailto:support@withallo.com)** and we will get back to you as soon as possible.
**Tip:** Using the web chat widget lets us automatically see your account and app version, which helps us resolve technical issues faster.
***
## Before you contact us
To resolve your issue quickly, please have the following ready:
* A clear description of the problem
* Screenshots or screen recordings (if applicable)
* Specific error messages you are seeing
***
## Self-serve resources
Check these resources for instant answers before waiting for an agent:
Quick answers to common questions
Troubleshoot problems yourself
# FAQ
Source: https://help.withallo.com/en/support/faq
Quick answers to frequently asked questions
## Getting Started
Download the app, create an account, and you'll be assigned a business number immediately. The setup takes less than 2 minutes.
[Complete getting started guide](/en/get-started/index)
The Business plan includes a 7-day free trial with full features. Credit card required, but you won't be charged until the trial ends. The Starter plan (\$16/month, billed annually) does not include a free trial.
[View plans and pricing](/en/billing/plans-and-pricing)
Yes. You can port most landline and mobile numbers to Allo. Mobile numbers take 2 to 4 business days in the US, around a week in France. Landlines take 7 to 15 business days depending on your carrier.
[Start porting process](/en/phone-numbers/port-existing-number)
Most workspaces are live in under 30 minutes. You pick your number, invite your team, configure the AI Receptionist if you want one, and set up routing. If you need a guided walkthrough, book a call with our team.
[Full setup guide](/en/get-started/index)
Yes, Allo assigns you a business number during setup. You can also connect your personal number to forward calls to Allo for recording and features.
[Learn about connecting personal number](/en/phone-numbers/connect-personal-number)
Yes, available on the Business plan. You get access to desktop apps for Mac and Windows, plus a web app accessible from any browser.
[View Business plan features](/en/billing/plans-and-pricing)
***
## Plans & Billing
Starter ($16/month, billed annually) includes the mobile app, call recording, AI summaries, and 30 mins of AI Receptionist. Business ($45/month) adds desktop apps, Unlimited AI Receptionist, SMS sending, and CRM integrations.
[Compare plans in detail](/en/billing/plans-and-pricing)
The Business plan includes a 7-day free trial. The Starter plan has no trial, but you can upgrade or cancel anytime with no penalties.
[Start free trial](/en/billing/plans-and-pricing)
Cancel anytime from Settings > Billing (web/desktop) or Settings > Profile > Manage Subscription (iOS). You keep access until the end of your billing period.
[Cancellation instructions](/en/billing/manage-subscription)
Most countries: $5/month per number. Some countries have higher pricing due to carrier costs (Germany $15, premium locations up to \$45). Belgian numbers start at 5€ and are available on request, subject to stock.
[View number pricing](/en/phone-numbers/buy-additional-numbers)
No. All features are included in your plan. The only additional costs are extra phone numbers (\$5/month) and additional team members (same price as your plan).
[View all pricing](/en/billing/billing-and-payments)
Invoices are automatically sent to your email after each payment. For web subscriptions, invoices come from Stripe. For iOS/Android, they come from Apple/Google.
[Learn about invoices](/en/billing/billing-and-payments)
Yes. If you need more time to evaluate Allo, especially when SMS verification or porting delays cut into your testing window, reply to your onboarding email or [contact support](/en/support/contact) and we'll extend it.
The Business plan includes unlimited calling and unlimited AI Receptionist minutes at the workspace level, so there's no shared pool to run out of. Adding more users doesn't change your call capacity, only your seat count. International calls are billed as you go.
[See Business plan details](/en/billing/plans-and-pricing)
***
## Call Features
Yes, every call made through Allo is automatically recorded, transcribed, and summarized by AI. You cannot disable recording in-app (contact support if needed).
[Learn about call recordings](/en/features/call-recordings)
Yes. You can write a custom greeting message and Allo's AI will read it with a natural voice. You can also choose voice type and tone.
[Set up custom voicemail](/en/features/ai-assistant)
The AI receptionist is an AI agent that answers your calls 24/7. It answers questions about your business, takes messages, transfers callers to your team, and books meetings in your calendar. It's included in every paid plan.
[Learn about AI Receptionist](/en/features/ai-receptionist)
You decide. Common setups: only after no one on your team answers, only outside business hours, or as the primary handler 24/7. You can also send specific IVR options straight to the AI. It works alongside your team, not instead of them.
[Configure when AI takes calls](/en/features/ai-receptionist)
Yes. Set up transfer rules and the agent sends the call to a teammate, another line, or an external number based on the caller's request. With warm transfer, your teammate hears who is calling and why before accepting the call.
[Learn about transfer rules](/en/features/ai-receptionist#transfer-rules)
The call goes to standard voicemail with transcription. Setting up the AI Receptionist takes a few minutes and gives callers a much better experience, so we recommend doing it early.
[Set up your AI Receptionist](/en/features/ai-receptionist)
Go to Settings > Business Hours, set your schedule for each day, and choose what happens outside hours (voicemail, AI, or forwarding).
[Configure business hours](/en/features/business-hours)
Yes. Create an interactive menu with up to 8 options that route callers to different team members, voicemail, or external numbers.
[Set up IVR menu](/en/features/ivr)
Yes. During a call, tap the transfer button and select a team member or external number. The caller stays on the line during transfer.
[Learn about call transfer](/en/team/overview)
***
## Phone Numbers
Yes. Allo provides numbers in 50+ countries. Most cost \$5/month. Some countries have higher pricing or require contacting support.
[View available countries](/en/phone-numbers/buy-additional-numbers)
Yes, US toll-free numbers (800, 833, 844, etc.) are available on the Business plan. Contact support to request one.
[Request toll-free number](/en/phone-numbers/buy-additional-numbers)
Yes, but only on the Business plan. French mobile numbers cost €5/month and can be used to create WhatsApp Business accounts.
[Get French mobile number](/en/phone-numbers/buy-additional-numbers)
Yes. French mobile numbers (06/07) are eligible for porting, directly from the Allo app: **Settings > Numbers > Port a number**. Porting typically takes around one week. Dial **3179** from the line to be ported to get your RIO code first.
[Learn about porting](/en/phone-numbers/port-existing-number)
Yes. At signup, you search by area code and pick from available numbers. You're not limited to your own region: any US area code is fair game. The same flow is available later under Settings > Numbers.
[Get a number](/en/phone-numbers/buy-additional-numbers)
Yes. You can add a toll-free number (833, 844, 855, 866, 877, 888) at any time from Settings > Numbers, alongside your local lines. True 1-800 numbers are very limited and cost significantly more, so most teams pick another toll-free prefix.
[Add a toll-free number](/en/phone-numbers/buy-additional-numbers)
Yes. Allo isn't tied to a single physical line, so two or more users sharing a number can each be on their own call simultaneously, inbound or outbound. The same applies to incoming calls: if one user is on the line, the next call rings every other available user instead of being dropped.
[How numbers and users work together](/en/get-started/numbers-and-users)
***
## Hardware & devices
No. Allo runs as a mobile app (iOS, Android) and a desktop app (Mac, Windows, web). There's no SIP or VoIP hardware integration. For most small teams, that means using the app on the smartphones and laptops they already have, with no extra equipment to buy or maintain. If your workflow relies on physical desk phones, Allo isn't the right fit today.
Any modern iPhone or Android phone runs the mobile app. The desktop app works on macOS and Windows. The web app runs in any browser. A wired or Bluetooth headset is recommended for call quality.
[Download Allo](https://withallo.com/download)
Yes. Standard Bluetooth, USB, and wired headsets work with Allo on both mobile and desktop. We recommend using one for clearer calls, especially in shared workspaces.
***
## Team & Collaboration
Yes, on the Business plan. Each team member costs \$45/month and gets their own number and full features. Add unlimited team members.
[Learn about team features](/en/team/overview)
Go to Settings > Manage my team > Invite a member. Enter their email and they'll receive an invitation to join.
[Add team members](/en/team/manage-members)
Yes. Multiple team members can be assigned to the same number. Calls can ring everyone simultaneously or in sequence (cascade).
[Configure call routing](/en/team/manage-members)
Yes, on the Business plan. The desktop app includes a team dashboard with call metrics, answer rates, and performance analytics.
[View team monitoring features](/en/team/analytics)
Not from the app. Login emails can't be edited directly — contact support and we'll update it for you.
[Contact support](/en/support/contact)
***
## Messaging & SMS
Starter plan: Receive only (limited). Business plan: Send and receive (Unlimited). Both plans include automatic SMS logging to your CRM.
[Learn about SMS features](/en/phone-numbers/sms-overview)
Limited support. Many verification services don't support VoIP numbers. Use your personal phone for account verifications.
[SMS limitations](/en/phone-numbers/sms-overview)
On US and Canadian numbers, yes: MMS (images and files) works once your 10DLC registration is approved. Keep attachments under 1 MB. French numbers support text-only SMS: French telecom regulation blocks MMS on virtual numbers, so no provider can offer it in France.
[SMS overview](/en/phone-numbers/sms-overview)
SMS is included in the Business plan, capped at 150 messages per day per number (human activity). The Starter plan is limited to 100 incoming SMS per month.
[SMS limits and pricing](/en/phone-numbers/sms-overview)
***
## Integrations
HubSpot, Salesforce, Attio, folk, Zoho CRM, Odoo, Streak, and more. Native integrations are available on the **Business plan**.
[View all integrations](/en/integrations/overview)
Yes. When you connect a CRM, every call syncs automatically with recordings, transcripts, and AI summaries. No manual work required.
[See how integrations work](/en/integrations/overview)
Yes. You can connect as many integrations as you need. For example, use HubSpot for CRM and Google Sheets for backup.
[Integration features](/en/integrations/overview)
Both require webhook URLs. Get your webhook from Zapier/Make, enter it in Allo Settings > Integrations, and select which events to send.
[Zapier setup](/en/integrations/zapier) | [Make setup](/en/integrations/make)
Yes. On the Business plan, you can push every call (with recording, transcript, AI summary, and contact data) into any tool that accepts webhooks, either directly or through Zapier and Make. We support hundreds of destinations that way. If you want a native integration, tell us which one and we'll add it to the roadmap.
[Webhooks](/en/integrations/webhooks) | [Zapier](/en/integrations/zapier) | [Make](/en/integrations/make)
***
## Technical Issues
If calls, SMS, or the app stop working for everyone (not just you), check the [Allo status page](https://status.withallo.com) for real-time service status. Any ongoing incident is posted there with live updates, so you can see what's affected and when it's resolved before contacting support.
Check your internet connection. You need minimum 1 Mbps. Try switching between WiFi and cellular data, or use headphones instead of speakerphone.
[Troubleshoot call quality](/en/support/common-issues)
Check that your phone isn't on silent or Do Not Disturb. Verify notification permissions are enabled for Allo. Review business hours and call forwarding settings.
[Fix ringing issues](/en/support/common-issues)
Try manual setup if automatic fails. Ensure your carrier supports call forwarding and that you've authorized it.
[Connection troubleshooting](/en/support/common-issues)
Force close and reopen Allo, restart your phone, update to the latest app version, or reinstall the app. Contact support if issues persist.
[App troubleshooting](/en/support/common-issues)
Recordings only work for calls made through Allo app (not native dialer or WhatsApp). Transcripts take 1-2 minutes to process.
[Recording issues](/en/support/common-issues)
Verify the integration shows as "Connected" in Settings. Check that contacts exist in your CRM with matching phone numbers. Disconnect and reconnect if needed.
[Integration troubleshooting](/en/support/common-issues)
***
## Privacy & Legal
Yes. Allo is fully GDPR compliant. All data is encrypted and stored securely. You control who has access to your call recordings.
[Learn about security](/en/support/faq)
In many jurisdictions, yes. You're responsible for complying with local call recording laws. Allo can play an automatic consent message before calls connect, or you can add announcements to your IVR.
[Call Recording Compliance guide](/en/features/call-recording-compliance)
Yes. Enable **Privacy Mode** to disable audio storage while keeping transcripts and AI summaries. Your CRM still gets the full transcript — just no audio file.
[Configure Privacy Mode](/en/features/call-recording-compliance)
Data is stored on secure Allo servers with encryption at rest and in transit. SOC 2 compliant. You can delete recordings anytime from the app.
[Trust Center](https://trust.themobilefirstcompany.com/)
Not from the app. Consider Privacy Mode (no audio, keeps transcripts) or transcription-only mode first. For full disable, contact support.
[Recording compliance options](/en/features/call-recording-compliance)
***
## Still have questions?
Troubleshoot problems
Get help from our team
# Partner Program
Source: https://help.withallo.com/en/support/partner-program
Partner with Allo. Three ways to work together: refer clients, resell Allo as a service, or embed it in your own product.
## What is the Allo Partner Program?
The Allo Partner Program is for consultants, agencies, creators, and software platforms who want to bring Allo to the businesses they serve and earn from it. Whether you simply want to refer clients, sell and support Allo end to end, or build it into your own product, there is a track for you.
Pick the track that fits how you want to work. We handle the rest with you.
## Three ways to partner
There are three ways to work with Allo, depending on how involved you want to be in selling, onboarding, support, and billing.
| | **Affiliate** | **Revenue share** | **Reseller** |
| ------------------------- | ---------------------------- | --------------------------------- | --------------------------- |
| What you do | Refer clients with your link | Refer, sell, onboard, and support | Embed Allo in your product |
| Who owns the relationship | Allo | You | You |
| Who bills the customer | Allo | Allo | You |
| Who handles support | Allo | You | You |
| Best for | Creators and consultants | Agencies and service providers | Software platforms and CRMs |
Not sure which one fits? [Talk to our team](#become-an-allo-partner) and we will point you to the right track.
## Affiliate: refer and earn
The simplest way to partner. You refer customers to Allo with your own affiliate link and promo code, and you earn a commission on every customer who converts. Your audience gets a discount when they sign up through your code, and Allo takes care of billing, onboarding, and support.
We give you a unique affiliate link and a promo code so everything is tracked automatically.
Recommend Allo to your audience or network with your link and code.
Anyone who signs up through your code gets a discount on Allo.
You earn a commission for every customer who converts. Selling, onboarding, and support stay with Allo.
Best for creators, influencers, and consultants with a business audience who want a simple way to earn from recommending Allo.
## Revenue share: sell and support Allo
For agencies and service providers who want to own the customer relationship. You refer Allo, sell it, onboard your clients, and handle their first-line support. In return, you earn an ongoing share of the revenue you generate, including on renewals.
You bring Allo to your clients and close the deal as their trusted advisor.
You set your clients up and get them running on Allo.
You are your clients' first point of contact for their day-to-day questions.
You earn a share of the revenue for as long as your clients stay on Allo, renewals included.
Best for consultancies, agencies, and service providers who want a deeper relationship with their clients and recurring revenue.
## Reseller: embed Allo in your product
Have your own product and want to offer Allo inside it? As a reseller, you build a native integration and bundle Allo with your own offer at a price you set. It works best for CRM and vertical software vendors, SaaS platforms, and any product that wants calling built in.
Interested in reselling? [Talk to our team](#become-an-allo-partner) and we will walk you through how it works.
## What you get as a partner
We share qualified leads with active partners. Teams already interested in Allo and looking for a trusted advisor.
Be the first to test new Allo features before they launch and advise your clients on what is coming.
Get visibility through Allo's channels. We feature your success stories and recommend you to Allo users.
## Who is this for?
The partner program works best for:
* **Business consultants** who advise growing businesses on their tools and processes
* **CRM consultants** (HubSpot, Salesforce, Pipedrive) who set up the tools their clients run on
* **Agencies** that help their clients grow
* **Creators and influencers** with a business audience
* **Software platforms and CRMs** that want to build calling into their product
If your clients or your audience need a modern phone system, there is a track for you.
## Requirements
To keep the program valuable for everyone, partners meet a few requirements:
* **Be an Allo customer.** Partners are active, paying Allo customers. You use Allo yourself, so you can genuinely recommend it.
* **Refer at least 3 converting customers each quarter.** Across every track, partners bring in at least 3 leads who become paying Allo customers per quarter to stay active in the program.
## About Allo
Allo is a virtual business assistant built for businesses that run on phone calls, from sales teams to service businesses and growing companies. It combines a mobile-first phone system with AI-powered features:
Every call is automatically transcribed and summarized.
Call notes, recordings, and summaries sync to HubSpot, Salesforce, Pipedrive, and 1,000+ tools.
Full-featured native app, not a watered-down mobile version.
Track the full outbound funnel from dials to deals.
Built-in SMS with self-serve compliance registration.
Get started on your own in minutes, using the phones your team already has.
Over **20,000 professionals** across **2,080+ companies** in **80+ countries** use Allo. Rated **4.7 stars** on the App Store with **125+ reviews**.
## Become an Allo partner
Tell us which track fits and we will get you set up. Reach our partnerships team and we will walk you through the program, the commercial terms, and how to get started.
* **Email:** [partnership@themobilefirst.co](mailto:partnership@themobilefirst.co)
Whether you want to refer, resell as a service, or embed Allo in your product, we are happy to find the right fit with you.
## Frequently asked questions
Choose **Affiliate** if you just want to refer clients and earn a commission. Choose **Revenue share** if you want to sell, onboard, and support Allo for your clients. Choose **Reseller** if you have a product and want to embed Allo inside it. Not sure? [Talk to our team](#become-an-allo-partner) and we will help you decide.
Terms depend on the track you choose. Get in touch with our partnerships team at [partnership@themobilefirst.co](mailto:partnership@themobilefirst.co) and we will walk you through the details.
Only the reseller track requires building an integration with our API. The affiliate and revenue-share tracks need no technical setup. Allo is designed to be set up in 5 minutes with no IT expertise required.
No limit. The more clients you bring to Allo, the more you earn.
Yes. If your business grows into selling, supporting, or embedding Allo, talk to us and we will move you to the track that fits.
# Analytics
Source: https://help.withallo.com/en/team/analytics
Track team performance and call metrics
Team analytics available on Business plan, desktop app only.
## What is team analytics
Performance dashboard showing call activity, metrics, and trends. Available on desktop app for team performance tracking.
**Access:** Desktop app > Analytics
Download: [Mac](https://withallo.com/download) | [Windows](https://withallo.com/download)
***
## Dashboard overview
### Date filters
**Choose time period:**
* Day
* Week
* Month
* Quarter
* Year
**Navigate:**
* Past
* Current
* Next
**Default view:** This Week
***
## Inbound calls
### Key metrics
**Average call duration:**
* Time per answered call
* Example: 4min 49s / answered call
**Total calls:**
* All inbound calls in period
* Example: 152 total
### Call results breakdown
**Percentage distribution:**
1. AI took the call
2. Answered
3. Caller hung up during whisper
4. Caller hung up while ringing
5. Not answered
6. Voicemail
**Visual chart:**
* Pie chart with percentages
* Color-coded results
* Easy to read at a glance
### Calls list
**Detailed table shows:**
* User account (email)
* Contact name
* Call date and time
* Call direction (INBOUND)
* Call result
* From number
* To number
**Actions:**
* Click call to view details
* Listen to recording
* Read transcript
* Review AI summary
### Calls over time
**Graph showing:**
* Call volume by date
* User breakdown
* Trends and patterns
* Peak call periods
***
## Outbound calls
### Key metrics
**Average call duration:**
* Time per answered call
* Example: 3min 18s / answered call
**Total calls:**
* All outbound calls in period
* Example: 179 total
### Call results breakdown
**Percentage distribution:**
1. Answered
2. Not answered
3. Voicemail
**Simpler than inbound:**
* Three main outcomes
* Clear success rate
* Easy tracking
### Calls list
**Detailed table shows:**
* User account
* Contact name
* Call date and time
* Call direction (OUTBOUND)
* Call result
* From number
* To number
### Calls over time
**Graph showing:**
* Outbound call volume
* Daily/weekly trends
* User activity
* Call patterns
***
## Text messages
SMS analytics available on Business plan only.
### Message metrics
**Total messages:**
* All SMS in period
* Example: 276 total
**Message results:**
1. Delivered (sent)
2. Received
**Percentage breakdown:**
* Clear view of sent vs received
* Example: 48.9% delivered, 51.1% received
### Answer rate
**Text message conversations:**
* Conversations responded to
* Response rate tracking
* Engagement metrics
***
## Admin vs. member views
### Team members see
**Default view:**
* Own calls only
* Own metrics
* Personal performance
* Cannot filter by other users
**What's shown:**
* Their inbound calls
* Their outbound calls
* Their text messages
* Their user account only
### Admin sees
**Everything members see, plus:**
**Filter by phone line:**
* Select one or multiple numbers
* View calls per line
* Compare line performance
* Team-wide overview
**Team-wide data:**
* All team members
* All phone lines
* Combined metrics
* Full call history
**How to filter:**
1. Dashboard > Select line filter
2. Choose one or multiple lines
3. View aggregated data
4. Compare performance
***
## Customize your dashboard
**Need custom metrics or reports?**
Contact our sales team to set up:
* Custom dashboards
* Specific KPIs
* Advanced reporting
* Integration with BI tools
* Automated reports
**Email:** [sales@withallo.com](mailto:sales@withallo.com)
Standard dashboard works for most teams. Custom dashboards available for specific business needs.
***
## Troubleshooting
**Requirements:**
* Business plan subscription
* Desktop app (Mac or Windows)
* Admin or team member access
**Not available on:**
* Mobile app
* Starter plan
* Web app
**Processing time:**
* Takes 5-10 minutes after call
* Refresh dashboard
* Check date filter range
**Verify:**
* Calls were through Allo app
* Internet connection during calls
**Admin feature only:**
* Team members see own data only
* Admin can filter by line
* Contact admin for team-wide reports
**Contact sales:**
* Request custom dashboard
* Explain your needs
* We'll set up custom views
**Email:** [sales@withallo.com](mailto:sales@withallo.com)
***
## Related topics
Learn about team features
Add and manage team
Review call recordings
Download desktop app
# Manage team members
Source: https://help.withallo.com/en/team/manage-members
Add, remove, and manage your team
Team management requires Business plan and admin access.
## Three management areas
Your workspace has three separate areas for managing your team:
**Settings > Workspace > Team** - Manage members\
**Settings > Workspace > Numbers** - Manage phone lines\
**Settings > Workspace > Billing** - Manage seats and subscription
***
## Team members
**Access:** Settings > Workspace > Team
### View your team
**See at a glance:**
* Total seats used (e.g., 16/18 seats used)
* All team members listed
* Member names and emails
* Admin roles labeled
### Invite new members
Settings > Workspace > Team
Top of page: "Invite new users"
Type team member's email address
Click Send
They receive invitation email immediately
### What happens after invitation
**For the invitee:**
1. Receives email invitation
2. Downloads Allo app
3. Creates account using invitation email
4. Chooses phone number
5. Sets up profile
Must use exact email address from invitation. Different email creates separate account.
**For your billing:**
* New seat added automatically
* Billing updates next cycle
* Pro-rated for partial month
### Remove team members
Settings > Workspace > Team
Click on team member name
Delete or remove option
Confirm removal
Access stops immediately and cannot be undone.
**What happens:**
* Access to Allo stops immediately
* Cannot make/receive calls
* Cannot log in
* Numbers become available for reassignment
* Call history stays with team
***
## Phone numbers
**Access:** Settings > Workspace > Numbers
### View all numbers
**Number list shows:**
* Line name (e.g., "French Landline")
* Phone number
* Country flag
* Who has access
### Manage line access
**For each number, control:**
* Which team members can use it
* Line name for organization
* Number settings and routing
Settings > Workspace > Numbers
Click on the line you want to manage
Add or remove team members from that line
Changes apply immediately
### Number assignment strategies
**Shared numbers:**
* Assign main line to multiple people
* First to answer gets call
* Good for reception or support
**Individual numbers:**
* One number per person
* Direct lines for each team member
* Clear responsibility
**Hybrid approach:**
* Main line shared by all
* Direct lines for key people
* Most flexible setup
### Rename lines
**Keep organized:**
* "Sales Line"
* "Support Hotline"
* "John's Direct"
* "French Landline"
**How to rename:**
1. Settings > Workspace > Numbers
2. Click on number
3. Edit line name
4. Save
***
## Billing and seats
**Access:** Settings > Workspace > Billing
### View subscription overview
**Billing page shows:**
**Company info:**
* Company name
* Business email
**Billing information:**
* Current plan (e.g., "Allo Business")
* Cost per year
* Next renewal date
* "Manage" button for subscription
**Usage:**
* **Seats:** XX/XX used with progress bar
* **Records:** Unlimited
* **AI Credits:** Unlimited
### Billing cycle
**When adding members:**
* Pro-rated for current month
* Full price next month
* No setup fees
**Example:**
* 15 days left in month
* Add new member
* Charged \$22.50 now (half month)
* Full \$45 next month
**When removing members:**
* Access stops immediately
* No refund for partial month
* Billing updates next cycle
***
## Team member roles
| Role | What they can do |
| ----------- | ---------------------------------------------------------- |
| **Owner** | Runs the workspace: everything, including billing |
| **Admin** | Everything except billing |
| **Manager** | Manages the configuration of the lines they have access to |
| **Member** | Uses and views the lines they have access to |
Every role occupies a standard seat at your plan price. Need someone who only **views** activity? A cheaper Viewer seat exists on request for teams with more than 5 seats: see [Supervise your team's calls](/en/team/supervise-team-calls).
### Admin
**Full access to:**
* Team management (add/remove members)
* Number management (assign lines)
* All team calls and recordings
* Analytics dashboard
**Location in app:**
* Shows "Admin" label next to name
* Settings > Team > View members
### Team members
**Can access:**
* Own calls and recordings
* Calls on assigned numbers
* Own personal settings
* Assigned phone numbers
**Cannot access:**
* Team management settings
* Billing information
* Other members' private calls
* Numbers not assigned to them
***
## Troubleshooting
**Check:**
* Email address is correct (no typos)
* Check their spam/junk folder
* Verify invitation was sent
**Solution:**
* Resend from Team settings
* Try alternative email if needed
* Contact support if persists
**Check:**
* Current seats used vs. total
* Payment method is valid
* Subscription is active
**Solution:**
* Add more seats in Billing
* Update payment method
* Contact support for help
**Verify:**
* Number is assigned to them in Numbers settings
* They're logged into correct account
* App is up to date
**Solution:**
* Settings > Numbers > Select line > Add member
**If wrong email invited:**
* Remove incorrect member immediately
* Resend to correct email
* No charge if removed within 24 hours
**If person misunderstood:**
* Explain team vs. solo accounts
* Remove and reinvite properly
* They may need different account type
**Currently not self-service:**
* Contact support
* Verify both parties agree
* We'll transfer admin access
**Alternative:**
* Make new person admin
* Original admin can stay as member
***
## Related topics
Learn about team features
Initial team configuration
Track team performance
Manage subscription and seats
# Overview
Source: https://help.withallo.com/en/team/overview
Collaborate on calls with your team
Team features require Business plan subscription.
## What are team features
Allo lets multiple people work together with shared or individual phone numbers, call routing, performance tracking, and team management tools.
**Perfect for:**
* Sales teams
* Support teams
* Small businesses
* Growing companies
***
## Manage your team workspace on Desktop
Your team workspace has three management areas on Desktop:
### Team members
**Settings > Workspace > Team**
Manage who has access to your workspace and invite new users.
* View all team members
* See seats used (e.g., 16/18 seats)
* Invite new members by email
* See member details and roles
[Learn about managing members](/en/team/manage-members#team-members)
### Phone numbers
**Settings > Workspace > Numbers**
Manage who has access to each phone line.
* View all team numbers
* Assign numbers to members
* Configure line names
* Control access per number
[Learn about managing numbers](/en/team/manage-members#phone-numbers)
### Billing and seats
**Settings > Workspace > Billing**
Manage your subscription and number of seats.
* View current plan
* Add or remove seats
* Update payment method
* View usage (seats, records, AI credits)
[Learn about billing](/en/billing/manage-subscription)
***
## Core team capabilities
### Multiple team members
**Add unlimited users:**
* Each member gets their own account
* Own or shared phone numbers
* Individual settings and preferences
* Per-seat pricing
### Shared or individual numbers
**Shared number:**
* One number rings multiple people
* First to answer gets the call
* Great for main business line
**Individual numbers:**
* Each person has direct line
* Personal settings and routing
* Better for specific roles
**Mix both:**
* Main line shared by all
* Direct lines for key people
* Flexible configuration
### Call distribution
**Route calls to your team:**
**Simultaneous ring:**
* Everyone rings at once
* Fast answer time
* Best for small teams
**Cascade:**
* Ring one person at a time
* Priority-based routing
* Backup coverage
**IVR menu:**
* Caller chooses department
* Professional routing
* Clear organization
[Setup call routing](/en/features/call-routing)
### Team collaboration
**Work together:**
* Share call history
* Access recordings
* View transcripts
* Collaborate on notes
**Admin capabilities:**
* Monitor team calls
* Review performance
* Coach team members
* Track metrics
***
## Team features includes
**For each team member:**
* Mobile app access
* Desktop app (Mac/Windows)
* Web app access
* Own business number
* AI Receptionist access
* SMS send and receive
* CRM integrations
* Call recordings and AI summaries
**Team-wide features:**
* Shared call routing
* Team performance dashboard
* Call monitoring
* Analytics and reporting
**Usage limits:**
* Unlimited call records
* Unlimited AI credits
* Seats based on subscription
***
## Admin vs. member permissions
### Admin can:
**Team management:**
* Add/remove team members
* Manage subscriptions
* View billing
* Configure team-wide settings
**Number management:**
* Assign numbers to members
* Configure line access
* Manage number routing
**Call access:**
* View all team calls
* Listen to recordings
* Read transcripts
* Monitor performance
### Team members can:
**Personal control:**
* Own business hours
* Personal voicemail
* Individual settings
* CRM connections
**Number access:**
* Use assigned numbers
* Cannot reassign numbers
* Cannot see numbers not assigned to them
**Call handling:**
* View own calls
* View calls on their assigned numbers
* Transfer to teammates
* Access own recordings
## Common questions
Yes. Start with solo account on the starter plan, then switch to the business plan and invite team members anytime. Each new member is billed as additional seat.
No. All team members must be on same plan (Business for teams). Admin chooses plan for everyone.
Admin removes them from Team settings. Access stops immediately. Their call history stays with team. No refund for partial month.
Not currently. Each account is one team. If you need separate teams, create separate accounts or contact us for enterprise setup.
No hard limit. System supports up to 999 users per team. For teams over 50, contact sales for optimal setup.
***
## Next steps
Invite and manage your team
Track performance and metrics
Configure how calls reach team
View team pricing details
# Shared contacts
Source: https://help.withallo.com/en/team/shared-contacts
How contacts are shared with your team, and how to import a directory
## How contact sharing works
**Contacts are shared at the workspace level by default.** When a contact exists in your Allo workspace, every team member sees it, whether it was:
* Created manually in the app
* Synced from a connected CRM
* Synced from your phone's contacts on mobile
* Created via the [Allo API](/en/v2/api-reference/crm/people-overview) or an automation (Zapier, Make)
On mobile, if you allow Allo to access your device contacts, the contacts won't be imported into Allo right away, but it's still useful to activate it, it allows Allo to display more information when someone calls you.
You can then choose to import your phone's contacts into Allo or not. Keep in mind, all contacts will be imported.
## Share a directory with your team
As an admin, go to **Settings > Integrations** and connect your CRM (HubSpot, Salesforce, Zoho, Attio, and more). All CRM contacts appear as shared contacts for the whole team, and stay in sync.
[See all integrations](/en/integrations/overview)
Connect the [Google Contacts integration](/en/integrations/google-contacts): your Google directory becomes available to the team.
There's no direct CSV import in the app yet. The simplest path:
1. Export your contacts as CSV
2. Import them into Google Contacts
3. Connect the Google Contacts integration in Allo
For an automated flow, use [Zapier](/en/integrations/zapier), [Make](/en/integrations/make), or the [API](/en/v2/api-reference/crm/create-person).
## Duplicates
When you create a contact in Allo, it is **not** duplicated in your connected CRM if it already exists: we match by email and phone number first.
## Current limits
* No per-user contact permissions yet: a workspace contact is visible to the whole team. If your access rules live in your CRM, connect the CRM: contacts follow the CRM's access
* No direct CSV import in-app (use the Google Contacts path above)
## Troubleshooting
They should be. If your team can't see API-created contacts, [contact support](/en/support/contact): a workspace setting adjustment on our side fixes it quickly.
Ask them to refresh (pull down on mobile, reload on web). First syncs from a CRM can take a few minutes for large directories.
# Supervise your team's calls
Source: https://help.withallo.com/en/team/supervise-team-calls
What admins can see, team roles, and viewer seats
Requires the Business plan. Team analytics are available on the desktop and web app.
## What an admin can see
As an admin, you can review your team's activity without any extra seat or add-on:
**Calls on lines you have access to**
* In your inbox, select the line you want to review and browse its calls
* Or open the **Calls** view and filter by line
**Analytics (desktop and web app)**
In the desktop or web app, go to **Analytics**.
Open the **Outbound** tab for calls made, or **Inbound** for calls received.
Filter by period, then by user or phone number.
Click a call to play the recording and read the transcript and AI summary.
Recent data can take 5 to 10 minutes to appear in Analytics. On mobile and in your personal Calls view, you only see your own calls.
## Team roles
| Role | What they can do |
| ----------- | ---------------------------------------------------------- |
| **Owner** | Runs the workspace, manages everything including billing |
| **Admin** | Everything except billing |
| **Manager** | Manages the configuration of the lines they have access to |
| **Member** | Uses and views the lines they have access to |
Every role above occupies a standard seat, billed at your plan price. [Learn about team management](/en/team/manage-members)
## Viewer seats
If someone only needs to **view** activity (an office manager checking conversation history, an accountant pulling context), you don't have to pay a full seat:
* A **Viewer seat** exists at a reduced price
* It's not available in the app yet: it's set up on request, for teams with **more than 5 seats**
* Contact our sales team at [sales@withallo.com](mailto:sales@withallo.com) and we'll add it to your account
## Listening to live calls
Reviewing recorded calls is available today (see Analytics above). Joining or listening to a **live** call is available as a conference feature in beta: [contact support](/en/support/contact) to have it enabled for your team.
## Next steps
Track performance and call volume
Invite members and assign lines
# Authentication
Source: https://help.withallo.com/en/v2/api-reference/guides/authentication
Authenticate API requests using API keys
All API requests require an API key passed in the `Authorization` header.
## Header format
```bash theme={null}
Authorization: Api-Key ak_live_your_key_here
```
## Generating API keys
1. Go to [Allo Settings > API](https://web.withallo.com/settings/api)
2. Click **Create API Key**
3. Select the scopes your integration needs
4. Copy the key — it won't be shown again
## API key scopes
Each API key has specific scopes that determine what operations it can perform.
| Scope | Description |
| -------------------------- | ------------------------------------------------------------------------------- |
| `CONVERSATIONS_READ` | Read calls, SMS, and conversation history |
| `CONTACTS_READ` | Read contact information |
| `CONTACTS_READ_WRITE` | Read and write contact information |
| `SMS_SEND` | Send SMS and MMS messages |
| `WEBHOOKS_READ_WRITE` | Create and manage webhook configurations |
| `PHONE_NUMBERS_READ` | List phone numbers and their capabilities |
| `USERS_READ` | List team members and their roles |
| `TAGS_READ` | List available tags |
| `TAGS_WRITE` | Add and remove tags on conversation items |
| `NOTES_READ` | Read conversation notes and person notes |
| `NOTES_WRITE` | Create, edit, and delete notes |
| `THREADS_READ` | Read discussion threads and their comments |
| `THREADS_WRITE` | Create threads and comments, edit comments, resolve threads |
| `BILLING` | Access billing and subscription information |
| `DIALING_QUEUE_READ_WRITE` | Manage Power Dialer queues |
| `AGENTS_READ` | Read AI receptionist configuration, connected calendars, and voices |
| `AGENTS_WRITE` | Configure the AI receptionist, its prompt, its knowledge, and turn it on or off |
## Scope-to-endpoint mapping
| Endpoint | Method | Required scope |
| ------------------------------------------------ | ------ | -------------------- |
| `/v2/api/conversations` | GET | `CONVERSATIONS_READ` |
| `/v2/api/conversations/items/search` | POST | `CONVERSATIONS_READ` |
| `/v2/api/conversations/items/{id}` | GET | `CONVERSATIONS_READ` |
| `/v2/api/conversations/items/batch` | POST | `CONVERSATIONS_READ` |
| `/v2/api/conversations/{contact_number}/action` | PUT | `CONVERSATIONS_READ` |
| `/v2/api/conversations/items/{id}/tags` | POST | `TAGS_WRITE` |
| `/v2/api/conversations/items/{id}/tags/{tag}` | DELETE | `TAGS_WRITE` |
| `/v2/api/users` | GET | `USERS_READ` |
| `/v2/api/users/{id}` | GET | `USERS_READ` |
| `/v2/api/tags` | GET | `TAGS_READ` |
| `/v2/api/numbers` | GET | `PHONE_NUMBERS_READ` |
| `/v2/api/conversations/{contact_number}/notes` | GET | `NOTES_READ` |
| `/v2/api/conversations/{contact_number}/notes` | POST | `NOTES_WRITE` |
| `/v2/api/conversations/notes/{id}` | GET | `NOTES_READ` |
| `/v2/api/conversations/notes/{id}` | PATCH | `NOTES_WRITE` |
| `/v2/api/conversations/notes/{id}` | DELETE | `NOTES_WRITE` |
| `/v2/api/crm/people/{person_id}/notes` | GET | `NOTES_READ` |
| `/v2/api/crm/people/{person_id}/notes` | POST | `NOTES_WRITE` |
| `/v2/api/crm/people/{person_id}/notes/{note_id}` | PATCH | `NOTES_WRITE` |
| `/v2/api/crm/people/{person_id}/notes/{note_id}` | DELETE | `NOTES_WRITE` |
| `/v2/api/threads` | GET | `THREADS_READ` |
| `/v2/api/threads` | POST | `THREADS_WRITE` |
| `/v2/api/threads/{id}` | GET | `THREADS_READ` |
| `/v2/api/threads/{id}/comments` | POST | `THREADS_WRITE` |
| `/v2/api/threads/comments/{comment_id}` | PATCH | `THREADS_WRITE` |
| `/v2/api/threads/{id}/resolve` | POST | `THREADS_WRITE` |
| `/v2/api/threads/{id}/unresolve` | POST | `THREADS_WRITE` |
## Example request
```bash theme={null}
curl -X GET "https://api.withallo.com/v2/api/conversations" \
-H "Authorization: Api-Key ak_live_abc123def456"
```
## Error responses
**Invalid or missing key** — `401`
```json theme={null}
{
"error": {
"type": "authentication_error",
"code": "API_KEY_INVALID",
"message": "The API key provided is invalid or has been revoked.",
"retryable": false,
"request_id": "req_a1b2c3d4e5f6",
"doc_url": "https://help.withallo.com/en/v2/api-reference/guides/error-codes#API_KEY_INVALID"
}
}
```
**Insufficient scope** — `403`
```json theme={null}
{
"error": {
"type": "permission_error",
"code": "API_KEY_INSUFFICIENT_SCOPE",
"message": "This API key lacks the 'CONVERSATIONS_READ' scope required for this endpoint.",
"retryable": false,
"request_id": "req_a1b2c3d4e5f6",
"suggestion": "Create a new API key with the required scope at https://web.withallo.com/settings/api"
}
}
```
## Security
* API keys are scoped to a single team
* Keys can be revoked at any time from settings
* Never expose keys in client-side code or public repositories
* Use environment variables to store keys in your application
# Common use cases
Source: https://help.withallo.com/en/v2/api-reference/guides/common-use-cases
Examples of how to use the Allo API to answer business questions and automate workflows
## Getting started
Always start by calling the capabilities endpoint:
```bash theme={null}
GET /v2/api/me
```
The response lists your scopes, available endpoints, team, and rate limits. Use the `endpoints` array to know which API calls you can make.
## Syncing data
Fetch only new activity since your last sync — no need to re-fetch everything.
```bash theme={null}
GET /v2/api/conversations?allo_number=%2B14155550100&last_activity_since=2026-04-20T10:00:00Z
```
Store the `last_activity` timestamp from the response and use it as `last_activity_since` on the next sync.
Paginate through all results:
```bash theme={null}
POST /v2/api/conversations/items/search
{
"date": { "from": "2026-01-01", "to": "2026-03-31" },
"direction": "OUTBOUND",
"type": "CALL",
"page": 1,
"size": 100
}
```
Increment `page` until `pagination.has_more` is `false`.
## Searching conversations
Keyword search across all call transcripts and summaries:
```bash theme={null}
POST /v2/api/conversations/items/search
{
"search": "billing issues",
"type": "CALL",
"sort": "RELEVANCE"
}
```
Search terms are AND'd and use prefix matching — `"bill"` matches "billing", "billed", etc.
```bash theme={null}
POST /v2/api/conversations/items/search
{
"contact_number": "+14155551234",
"search": "refunds",
"sort": "RELEVANCE"
}
```
```bash theme={null}
POST /v2/api/conversations/items/search
{
"contact_number": "+14155551234"
}
```
Returns the full timeline of calls and SMS with a contact, including matched contacts, company, and deals.
```bash theme={null}
GET /v2/api/conversations/items/cll-abc123?extend=transcript
```
Returns the call with summary, tags, recording URL, and full transcript. `transcript` is the only supported extend value.
Use the search endpoint with `size=1` to get just the count:
```bash theme={null}
POST /v2/api/conversations/items/search
{
"date": { "from": "2026-04-14", "to": "2026-04-21" },
"result": "VOICEMAIL",
"type": "CALL",
"size": 1
}
```
Read `pagination.total_count` from the response — no need to fetch all results.
First, check what tags exist:
```bash theme={null}
GET /v2/api/tags
```
Then filter conversations by tag:
```bash theme={null}
POST /v2/api/conversations/items/search
{
"date": { "from": "2026-04-01", "to": "2026-04-21" },
"tags": ["qualified"],
"direction": "OUTBOUND"
}
```
```bash theme={null}
GET /v2/api/conversations?allo_number=%2B14155550100&unread=true
```
The `allo_number` parameter is required. List your numbers with `GET /v2/api/numbers` to find the right one.
## Taking actions
```bash theme={null}
# 1. Tag the call
POST /v2/api/conversations/items/cll-abc123/tags
{ "tags": ["qualified"] }
# 2. Find all calls with that tag
POST /v2/api/conversations/items/search
{ "tags": ["qualified"] }
```
Adding a tag that already exists returns `409 TAG_ALREADY_EXISTS` — no duplicate is created.
```bash theme={null}
PUT /v2/api/conversations/%2B14155551234/action
{ "action": "READ" }
```
To scope to a specific Allo number:
```bash theme={null}
PUT /v2/api/conversations/%2B14155551234/action
{ "action": "READ", "allo_number": "+14155550100" }
```
All actions are idempotent — calling `READ` on an already-read conversation is a no-op.
```bash theme={null}
PUT /v2/api/conversations/%2B14155551234/action
{ "action": "ARCHIVE" }
```
This archives the contact and marks all items as read.
SMS sending uses the v1 API endpoint:
```bash theme={null}
POST /v1/api/sms
{
"to": "+14155551234",
"allo_number": "+14155550100",
"content": "Thanks for your call! Let me know if you have any other questions."
}
```
Requires the `SMS_SEND` scope. See [Send SMS](/en/v2/api-reference/sms/send-sms) for details.
## Analytics and reporting
```bash theme={null}
# 1. Get the outbound funnel with week-over-week comparison
POST /v2/api/analytics/outbound
{
"date": { "from": "2026-04-14", "to": "2026-04-21" },
"compare_date": { "from": "2026-04-07", "to": "2026-04-14" },
"tags": ["meeting_booked"],
"granularity": "DAY"
}
```
The response includes the full funnel (dials, connected, conversations, conversions) with change vs last week, daily time series, heatmap, and leaderboard.
```bash theme={null}
# 2. Drill into the calls that converted (use extend=items)
POST /v2/api/analytics/outbound
{
"date": { "from": "2026-04-14", "to": "2026-04-21" },
"tags": ["meeting_booked"],
"granularity": "DAY",
"extend": "items",
"stage": "CONVERSION"
}
# 3. Get full details (summary, transcript, tags)
POST /v2/api/conversations/items/batch
{ "ids": ["cll-abc123", "cll-def456"] }
```
```bash theme={null}
POST /v2/api/analytics/overview
{
"date": { "from": "2026-03-01", "to": "2026-03-31" },
"compare_date": { "from": "2026-02-01", "to": "2026-02-28" }
}
```
Returns total calls, talk time, answer rate, and per-user breakdown — all with change vs the comparison period.
```bash theme={null}
POST /v2/api/analytics/overview
{
"date": { "from": "2026-04-01", "to": "2026-04-21" },
"compare_date": { "from": "2026-03-01", "to": "2026-03-31" },
"user_ids": ["usr-abc123", "usr-def456"]
}
```
The breakdown in the response includes both users with their individual metrics and change vs the comparison period.
```bash theme={null}
POST /v2/api/analytics/outbound
{
"date": { "from": "2026-04-01", "to": "2026-04-21" },
"allo_numbers": ["+14155550100"],
"tags": ["meeting_booked"],
"granularity": "WEEK"
}
```
## Team and setup
```bash theme={null}
# 1. Find the user
GET /v2/api/users
# 2. Use their ID to filter
POST /v2/api/conversations/items/search
{ "user_id": "usr-abc123", "type": "CALL" }
```
```bash theme={null}
GET /v2/api/numbers
```
Filter the response by `country` and check `capabilities` to find a number that supports the channel you need (VOICE, SMS, MMS).
```bash theme={null}
GET /v2/api/tags
```
Use the tag names in conversation search filters or as conversion tags in analytics.
# Error codes
Source: https://help.withallo.com/en/v2/api-reference/guides/error-codes
Complete catalog of all API error codes with recovery instructions
Every error response includes a stable `code` field. The `doc_url` in each error links directly to the relevant entry below. Codes are stable contracts — they will not change without an API version bump.
## Authentication errors — 401
| Code | Description |
| `API_KEY_INVALID` | The API key provided is invalid or does not exist. Check your API key in [Settings > API](https://web.withallo.com/settings/api). |
| `API_KEY_REVOKED` | This API key has been revoked. Create a new API key in [Settings > API](https://web.withallo.com/settings/api). |
| `UNAUTHORIZED` | Authentication is required. Provide a valid API key in the `Authorization` header as `Api-Key `. |
## Permission errors — 403
| Code | Description |
| `API_KEY_INSUFFICIENT_SCOPE` | This API key lacks the required scope. Create a new key with the required scope. See [scope-to-endpoint mapping](/en/v2/api-reference/guides/authentication#scope-to-endpoint-mapping). |
| `API_KEY_TRIAL_NOT_ALLOWED` | API access is not available on trial plans. Upgrade to a paid plan. |
| `FORBIDDEN` | You do not have permission to perform this action. Contact your workspace admin. |
| `A2P_NOT_ENABLED` | A2P (Application-to-Person) SMS is not enabled for this number. Complete 10DLC registration in the Allo dashboard. |
| `ALLO_NUMBER_FORBIDDEN` | You do not have access to this Allo line. List the lines you can access with `GET /v2/api/numbers`. |
| `NOT_NOTE_AUTHOR` | Only the note's author can edit or delete it. |
| `NOT_COMMENT_AUTHOR` | Only the comment's author can edit it. |
| `AGENT_TRANSFER_RULE_MEMBER_NO_LINE_ACCESS` | The teammate a transfer rule points at has no access to this line. Pick one who does, from `GET /v2/api/users`. |
## Validation errors — 400
| Code | Description |
| `INVALID_REQUEST_BODY` | The request body could not be parsed. Ensure Content-Type is `application/json` and the body is well-formed JSON. |
| `MISSING_PARAMETER` | A required query parameter is missing. Add the parameter named in the `param` field. |
| `MISSING_HEADER` | A required header is missing. Add the header named in the `param` field. |
| `UNSUPPORTED_MEDIA_TYPE` | The Content-Type is not supported. Use `application/json`. Returns `415`. |
| `INVALID_PAGE_SIZE` | The `size` parameter value is invalid. Provide a numeric value between 1 and 100. |
| `INVALID_SEARCH_QUERY` | The `search` parameter must contain at least one alphanumeric character. Special characters are stripped automatically — provide plain-text keywords (e.g., `"john"` or `"missed call"`). Words are combined with AND and prefix-matched. |
| `MISSING_ALLO_NUMBER` | The `allo_number` parameter is required. Add it to your request. List your numbers with `GET /v2/api/numbers`. |
| `INVALID_DATE_RANGE` | The date range is invalid: `from` must be before `to`. Use `YYYY-MM-DD` format. |
| `DATE_RANGE_TOO_WIDE` | The date range exceeds the maximum allowed number of days. Narrow your date range. |
| `INVALID_ITEM_ID` | Item ID has an unrecognized prefix. Use IDs from the conversations API: `cll-` for calls, `msg-` for messages. |
| `BATCH_TOO_LARGE` | Batch size exceeds the maximum of 100. Split your request into batches of 100 or fewer. |
| `TAGS_REQUIRED` | At least one tag is required. Provide a non-empty `tags` array. List available tags with `GET /v2/api/tags`. |
| `INVALID_ACTION` | Unknown action value. Use one of: `READ`, `UNREAD`, `ARCHIVE`, `UNARCHIVE`. |
| `INVALID_GRANULARITY` | Unknown granularity value. Use one of: `DAY`, `WEEK`, `MONTH`. |
| `INVALID_GROUP_BY` | Unknown `group_by` value. Check the `suggestion` field for allowed values. |
| `UNSUPPORTED_EXTEND_VALUE` | Unknown `extend` value. Currently supported: `transcript`. |
| `METHOD_NOT_ALLOWED` | HTTP method not supported for this endpoint. Check the `suggestion` field for supported methods. Returns `405`. |
| `INVALID_PHONE_FORMAT` | Phone number is not valid E.164 format. Use format: `+14155551234` (+ prefix, country code, no spaces or dashes). |
| `INVALID_TO_NUMBER` | The destination number is invalid or cannot be reached. Provide a valid E.164 phone number. |
| `TO_NUMBER_COUNTRY_MISMATCH` | Cross-country SMS is not supported for this number. Use a phone number in the same country as the recipient. |
| `NUMBER_NOT_SMS_ENABLED` | This number does not have outbound SMS enabled. Enable SMS in the dashboard, or use a different number from `GET /v2/api/numbers`. |
| `SENDER_ID_INBOX_CANNOT_SEND_SMS` | Sender ID inboxes cannot send SMS messages. Use a regular phone number instead. |
| `SENDER_ID_NOT_ACTIVE` | The sender ID is not active. Activate the sender ID in the Allo dashboard before sending. |
| `MESSAGE_NOT_COMPLIANT` | Message content does not comply with messaging compliance rules. Remove disallowed content and retry. |
| `LANDLINE_NUMBER_NOT_SUPPORTED` | The destination number is a landline and cannot receive SMS. Provide a mobile phone number instead. |
| `SUMMARY_TEMPLATE_KEY_REQUIRED` | The call has more than one completed summary template. Set `template_key` to disambiguate (e.g. `MARKDOWN_CLASSIC` or `MARKDOWN_SHORT_CALL`). |
| `EMPTY_NOTE_CONTENT` | The note or comment content is empty. Provide a non-blank `content` value. |
| `NOTE_CONTENT_TOO_LONG` | The note or comment content exceeds the maximum of 4,000 characters. Shorten the content. |
| `MISSING_ALLO_NUMBER_OR_SENDER_ID` | Provide either `allo_number` (E.164 Allo line) or `sender_id` (sender-ID inbox). List your numbers with `GET /v2/api/numbers`. |
| `CONTACT_NOTES_UNAVAILABLE` | Contact notes are not available for this workspace yet — it must be on the v2 contact model. Contact support if you believe this is an error. |
| `INVALID_THREAD_ENTITY_TYPE` | Unknown `entity_type` value. Use one of: `CALL`, `TEXT_MESSAGE`, `CONVERSATION_NOTE`. |
| `UNKNOWN_FIELD` | The request body carries a field the endpoint does not accept, named in `param`. Often a typo, or a read-only field such as `custom_prompt`. |
| `MISSING_FIELD` | A required field is missing, named in `param`. Inside a collection it carries the index, for example `transfer_rules[1].description`. |
| `INVALID_PHONE_NUMBER` | The phone number named in `param` could not be read. Use E.164 format, for example `+14155551234`. |
| `INVALID_TIMEZONE` | Not an IANA timezone identifier. Use one such as `Europe/Paris` or `America/New_York`. |
| `INVALID_AGENT_LANGUAGE` | Unknown AI receptionist language. The accepted values are listed in the message. |
| `INVALID_AGENT_CAPABILITY` | Unknown capability key. Use `SCHEDULING`, `CALL_TRANSFER` or `WARM_TRANSFER`, in upper case. |
| `AGENT_TRANSFER_RULE_TARGET_REQUIRED` | A transfer rule is missing the target its type requires: `target_number`, `target_member_id` or `target_line_number`. |
| `AGENT_NO_FORWARDING_NUMBER` | Turning the AI receptionist off forwards calls to your business phone, and none is set on the workspace. |
| `AGENT_CALENDAR_TEAM_MISMATCH` | The calendar belongs to another team. List the ones you can use with `GET /v2/api/calendars`. |
| `AGENT_CALENDAR_EVENT_TYPES_NOT_SUPPORTED` | This calendar's provider has no event types. Map it to an empty list. |
| `INVALID_KNOWLEDGE_URL` | Not a URL that can be scraped. Send an absolute http(s) URL of a publicly reachable page. |
| `PROMPT_SECTIONS_REQUIRED` | `sections` was empty. It replaces the whole prompt, so it must carry every section to keep. |
| `INVALID_AGENT_PROMPT_SECTION` | Unknown prompt section key. The accepted keys are listed in the message. |
| `DUPLICATE_AGENT_PROMPT_SECTION` | A prompt section appears more than once. Send each at most once. |
| `INVALID_AGENT_PROMPT_SECTION_BODY` | A prompt section carries the wrong body. `required_fields` takes `fields`, every other section takes `content`. |
| `MISSING_AGENT_PROMPT_SECTION` | `objective`, `personality` and `behaviors` are required and one is missing or blank. |
| `AGENT_PROMPT_SECTION_TOO_LONG` | A prompt section exceeds 3,000 characters. Shorten it. |
| `AGENT_PROMPT_TOO_LONG` | The prompt rendered from all sections exceeds 25,000 characters. Shorten the sections. |
## Not found errors — 404
| Code | Description |
| `CONVERSATION_ITEM_NOT_FOUND` | No call or message found with this ID. Search for the item with `POST /v2/api/conversations/items/search`. |
| `MEMBER_NOT_FOUND` | No team member found with this ID. List team members with `GET /v2/api/users`. |
| `TEAM_NOT_FOUND` | No team found for the authenticated user. Check team setup in the Allo dashboard. |
| `USER_NOT_FOUND` | The authenticated user account was not found. Verify the API key is associated with an active account. |
| `BUSINESS_NOT_FOUND` | No business account found for the authenticated user. Ensure the account has completed onboarding. |
| `CALL_NOT_FOUND` | No call found with this ID. Search calls with `POST /v2/api/conversations/items/search`. |
| `TEXT_MESSAGE_NOT_FOUND` | No text message found with this ID. Search messages with `POST /v2/api/conversations/items/search`. |
| `PHONE_NUMBER_NOT_FOUND` | No phone number found for your account. List your numbers with `GET /v2/api/numbers`. |
| `FROM_NUMBER_NOT_FOUND` | No Allo phone number found for your account. List your available numbers with `GET /v2/api/numbers`. |
| `TAG_NOT_FOUND` | The tag does not exist on this conversation item. It may have already been removed. |
| `SENDER_ID_NOT_FOUND` | No active sender ID found. Check your sender IDs in the Allo dashboard. |
| `SUMMARY_TEMPLATE_NOT_FOUND` | No completed summary exists for the requested `template_key` on this call. Fetch the call with `GET /v2/api/conversations/items/{id}` to see which summaries exist. |
| `ENDPOINT_NOT_FOUND` | No endpoint found at this URL. Check the URL and HTTP method. See the [API reference](/en/v2/api-reference/introduction). |
| `PERSON_NOT_FOUND` | No person found with this ID (`per-*`). Search people with `POST /v2/api/crm/people/search`. |
| `NOTE_NOT_FOUND` | No note found with this ID. List a conversation's notes with `GET /v2/api/conversations/{contact_number}/notes`. |
| `THREAD_NOT_FOUND` | No thread found with this ID. Find an item's thread with `GET /v2/api/threads?entity_type=...&entity_id=...`. |
| `THREAD_COMMENT_NOT_FOUND` | No thread comment found with this ID. Fetch the thread with `GET /v2/api/threads/{id}` to see its comments. |
| `AGENT_VOICE_NOT_FOUND` | No voice with this `voice_id`. List the catalog with `GET /v2/api/voices`. |
| `AGENT_KNOWLEDGE_NOT_FOUND` | No knowledge entry with this ID on the line's AI receptionist. List them with `GET /v2/api/numbers/{number}/agent`. |
| `AGENT_CALENDAR_NOT_FOUND` | No calendar with this ID is visible to you. List them with `GET /v2/api/calendars`. |
## Conflict errors — 409
| Code | Description |
| `TAG_ALREADY_EXISTS` | This tag is already applied to the conversation item. No action needed. |
| `OTHER_TRANSACTION_IN_PROGRESS` | Another operation on this resource is in progress. Wait a moment and retry. |
| `NUMBER_ALREADY_ASSIGNED` | One or more phone numbers are already assigned to existing people. Set `allow_duplicate_number` to `true` to create anyway, or update the existing person with `PUT /v2/api/crm/people/{id}`. |
| `IDEMPOTENCY_KEY_REUSE` | This idempotency key was already used for a different endpoint or HTTP method. Use a unique key per distinct request. See [Idempotency](/en/v2/api-reference/guides/error-handling#idempotency). |
| `THREAD_ALREADY_EXISTS` | The conversation item already has a thread (one thread per item). Find it with `GET /v2/api/threads?entity_type=...&entity_id=...` and add a comment with `POST /v2/api/threads/{id}/comments`. |
| `AGENT_KNOWLEDGE_ALREADY_EXISTS` | The AI receptionist already has a knowledge entry for this URL. Reuse the existing entry. |
| `AGENT_KNOWLEDGE_LIMIT_REACHED` | The AI receptionist already holds the maximum of 5 websites. Delete one first. |
| `AGENT_LINE_NOT_ASSIGNED` | The line has no phone number assigned, so its AI receptionist can neither answer nor forward. |
## Rate limit errors — 429
| Code | Description |
| `RATE_LIMIT_EXCEEDED` | Per-second rate limit exceeded. Always `retryable: true`. Wait `retry_after_seconds` before retrying. |
| `TRIAL_SMS_LIMIT_REACHED` | Trial account daily SMS limit reached. Upgrade your plan to send more messages. |
| `SMS_LIMIT_REACHED` | Daily API SMS limit reached. Wait until tomorrow or contact support to increase your limit. |
| `DAILY_SMS_LIMIT_REACHED` | Daily SMS limit reached for this number. Wait until tomorrow to send more messages from this number. |
## Server errors — 500
| Code | Description |
| `INTERNAL_SERVER_ERROR` | An unexpected error occurred. Retry the request. If it persists, contact [support@withallo.com](mailto:support@withallo.com) with your `request_id`. |
| `AGENT_KNOWLEDGE_SCRAPE_FAILED` | The page could not be read. Always `retryable: true`. Retry in a few seconds and check the page is publicly reachable. |
| `AGENT_CALENDAR_EVENT_TYPES_FETCH_FAILED` | The calendar provider could not be reached. Always `retryable: true`. If it persists, renew the calendar connection in the Allo app. |
# Error handling
Source: https://help.withallo.com/en/v2/api-reference/guides/error-handling
Standardized error responses with actionable suggestions
All API errors follow a consistent format designed for both developers and AI agents.
## Error response format
```json theme={null}
{
"error": {
"type": "not_found_error",
"code": "CONVERSATION_ITEM_NOT_FOUND",
"message": "No call or message found with ID 'cll_abc123'.",
"retryable": false,
"request_id": "req_a1b2c3d4e5f6",
"doc_url": "https://help.withallo.com/en/v2/api-reference/guides/error-handling#CONVERSATION_ITEM_NOT_FOUND",
"param": "id",
"suggestion": "Search for the item using POST /v2/api/conversations/items/search."
}
}
```
## Error fields
| Field | Type | Description |
| --------------------- | ------- | ---------------------------------------------------------- |
| `type` | string | Error category (see table below) |
| `code` | string | Stable error code for programmatic handling |
| `message` | string | Human-readable explanation including the value that failed |
| `retryable` | boolean | Whether the request can be retried |
| `request_id` | string | Unique ID for this request — include in support tickets |
| `doc_url` | string | Link to documentation about this error |
| `param` | string | The parameter that caused the error (if applicable) |
| `suggestion` | string | What to do next (may include endpoint names) |
| `errors` | array | Field-level errors for validation failures |
| `retry_after_seconds` | integer | Seconds to wait before retrying (rate limits only) |
## Error types
| Type | HTTP Status | When |
| ---------------------- | ----------- | -------------------------------------------- |
| `authentication_error` | 401 | Invalid, missing, or expired API key |
| `permission_error` | 403 | Valid key but insufficient scope |
| `validation_error` | 400 | Bad input, missing params, wrong format |
| `not_found_error` | 404 | Resource doesn't exist |
| `conflict_error` | 409 | Duplicate or state conflict |
| `rate_limit_error` | 429 | Too many requests (always `retryable: true`) |
| `server_error` | 500 | Internal failure |
## Request ID
Every response includes a `request_id` (format: `req_` + 12 alphanumeric characters). You can also send your own via the `X-Request-Id` header — the API will use it instead of generating one.
```bash theme={null}
curl -X GET "https://api.withallo.com/v2/api/conversations" \
-H "Authorization: Api-Key ak_live_your_key" \
-H "X-Request-Id: req_my_custom_id"
```
## Validation errors
When multiple fields fail validation, the `errors` array lists each one:
```json theme={null}
{
"error": {
"type": "validation_error",
"code": "INVALID_REQUEST",
"message": "Request validation failed.",
"errors": [
{ "field": "date_from", "code": "INVALID_DATE", "message": "Must be a valid ISO 8601 date." },
{ "field": "allo_number", "code": "INVALID_PHONE_FORMAT", "message": "Must be E.164 format (e.g. +14155551234)." }
]
}
}
```
## Phone number format
All phone numbers must be in **E.164 format**: `+` followed by country code and number, no spaces or dashes.
```
+14155551234 ← correct
0612345678 ← wrong (missing country code)
+33 6 12 34 56 ← wrong (contains spaces)
```
Invalid phone numbers return:
```json theme={null}
{
"error": {
"type": "validation_error",
"code": "INVALID_PHONE_FORMAT",
"message": "'+33 6 12 34' is not a valid E.164 phone number.",
"suggestion": "Use E.164 format: +14155551234 (no spaces, with country code)."
}
}
```
## Idempotency
All write endpoints (POST, PUT, DELETE) support an optional `Idempotency-Key` header to safely retry requests.
### How it works
1. Send a unique `Idempotency-Key` header with your write request (e.g., a UUID)
2. If the request **succeeds** (2xx), the response is stored for **1 hour**
3. If you send the same key again to the **same endpoint**, the API returns the stored response with an `Idempotency-Replayed: true` header — the operation is not re-executed
4. If the request **fails** (4xx/5xx), the key is **not consumed** — you can retry with the same key until the request succeeds
### Example
```bash theme={null}
# First request — executes the operation
curl -X POST "https://api.withallo.com/v2/api/conversations/items/cll-abc123/tags" \
-H "Authorization: Api-Key ak_live_your_key" \
-H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
-d '{"tags": ["qualified"]}'
# → 200 OK, Idempotency-Key: 550e8400-...
# Retry — returns stored response without re-executing
curl -X POST "https://api.withallo.com/v2/api/conversations/items/cll-abc123/tags" \
-H "Authorization: Api-Key ak_live_your_key" \
-H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
-d '{"tags": ["qualified"]}'
# → 200 OK, Idempotency-Replayed: true
```
### Key reuse across endpoints
Using the same idempotency key for a different endpoint or HTTP method returns a `409` error with code `IDEMPOTENCY_KEY_REUSE`.
### Response headers
| Header | Description |
| ---------------------- | ------------------------------------------------------ |
| `Idempotency-Key` | Echoed back on all requests that include the header |
| `Idempotency-Replayed` | Set to `true` when the response is replayed from cache |
## Error code reference
See the [Error codes catalog](/en/v2/api-reference/guides/error-codes) for a complete list of all error codes with recovery instructions.
# Pagination
Source: https://help.withallo.com/en/v2/api-reference/guides/pagination
Page-based pagination with total counts on all list endpoints
All list and search endpoints return paginated results.
## Parameters
| Parameter | Type | Default | Max | Description |
| --------- | ------- | ------- | --- | ----------------------- |
| `page` | integer | 1 | — | Page number (1-indexed) |
| `size` | integer | 20 | 100 | Results per page |
For GET endpoints, pass as query params. For POST search endpoints, include in the request body.
## Response format
Every paginated response includes a `pagination` object:
```json theme={null}
{
"data": [
{ "id": "cll_abc123", "type": "call", "..." : "..." },
{ "id": "msg_def456", "type": "sms", "..." : "..." }
],
"pagination": {
"page": 1,
"size": 20,
"total_count": 156,
"total_pages": 8,
"has_more": true
}
}
```
| Field | Description |
| ------------- | --------------------------------------------- |
| `page` | Current page number |
| `size` | Results per page |
| `total_count` | Total matching results across all pages |
| `total_pages` | Total number of pages |
| `has_more` | `true` if there are more pages after this one |
## Iterating through pages
```javascript theme={null}
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await fetch(
`https://api.withallo.com/v2/api/conversations?page=${page}&size=100`,
{ headers: { "Authorization": "Api-Key ak_live_your_key" } }
);
const { data, pagination } = await response.json();
// Process data...
hasMore = pagination.has_more;
page++;
}
```
# Rate limits
Source: https://help.withallo.com/en/v2/api-reference/guides/rate-limits
Request limits and response headers
The API uses per-second rate limits. Limits are applied per API key.
## Default limits
| Operation | Limit |
| ----------------------------------------- | ------------------ |
| Read requests (GET) | 20 requests/second |
| Write requests (POST, PUT, PATCH, DELETE) | 5 requests/second |
## Rate limit headers
Every response includes rate limit information:
| Header | Description |
| ----------------------- | ------------------------------------- |
| `X-RateLimit-Limit` | Maximum requests allowed per second |
| `X-RateLimit-Remaining` | Requests remaining in current window |
| `X-RateLimit-Reset` | Unix timestamp when the window resets |
## Exceeding the limit
When you exceed the rate limit, the API returns `429 Too Many Requests`:
```json theme={null}
{
"error": {
"type": "rate_limit_error",
"code": "RATE_LIMIT_EXCEEDED",
"message": "You have exceeded the rate limit of 20 requests per second.",
"retryable": true,
"request_id": "req_a1b2c3d4e5f6",
"retry_after_seconds": 1
}
}
```
The response also includes a `Retry-After` header with the number of seconds to wait.
## Best practices
1. **Respect `Retry-After`** — wait the indicated time before retrying
2. **Use exponential backoff** — if retries keep failing, increase the wait time
3. **Cache responses** — store results locally to avoid redundant requests
4. **Use `last_activity_since`** — for sync workflows, only fetch conversations with new activity instead of re-fetching everything
5. **Use `total_count`** — to answer "how many?" questions without paginating through all results
# Overview
Source: https://help.withallo.com/en/v2/api-reference/introduction
Integrate Allo's communication capabilities into your applications
The Allo API enables developers to integrate Allo's communication capabilities directly into their applications. Build CRM integrations, automate post-call workflows, sync conversation data, and power AI agents with your team's call and SMS history.
## Getting started
Before using the API, make sure you have:
* An active Allo subscription
* Admin or Manager permissions on your workspace
* An API key generated from [Settings > API](https://web.withallo.com/settings/api)
## API documentation
API key setup and scopes
Request limits and headers
Page-based results with total counts
Error format and recovery
## Core capabilities
The API provides access to:
* **Conversations** — retrieve call and SMS history in a unified timeline, with keyword search across transcripts and message content
* **Notes & Threads** — add internal team notes on conversations and person profiles, and discuss items in threads with @mentions
* **Webhooks** — receive real-time notifications when calls complete, messages arrive, tags are added, notes and threads change, and contacts change
* **Phone numbers** — list your Allo numbers with capabilities, sender ID status, and member access
* **Users** — access your team roster with roles and assigned numbers
* **Tags** — discover available call tags for filtering and reporting
## Authentication
API keys are generated through your workspace settings. Include the key in the `Authorization` header of every request:
```bash theme={null}
curl -X GET "https://api.withallo.com/v2/api/conversations" \
-H "Authorization: Api-Key ak_live_your_key_here"
```
Store your API key securely. Do not expose it in client-side code or public repositories.
## Rate limiting
Rate limits vary by request type:
| Operation | Limit |
| ----------------------------------------- | ------------------ |
| Read requests (GET) | 20 requests/second |
| Write requests (POST, PUT, PATCH, DELETE) | 5 requests/second |
Every response includes `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` headers so you can monitor your usage. See [Rate limits](/en/v2/api-reference/guides/rate-limits) for details.
## Quick example
Get your recent conversations:
```bash theme={null}
curl -X GET "https://api.withallo.com/v2/api/conversations?size=5" \
-H "Authorization: Api-Key ak_live_your_key_here"
```
```json theme={null}
{
"data": [
{
"contact_number": "+14155551234",
"contacts": [{ "id": "cnt-abc", "name": "Sarah Johnson", "company": { "name": "Acme Corp" } }],
"last_activity": "2026-04-21T14:30:00Z",
"last_item": { "id": "cll-abc123", "type": "CALL", "direction": "INBOUND", "result": "ANSWERED", "summary": "Customer called about upgrading their plan.", "duration": 145 }
}
],
"pagination": { "page": 1, "size": 5, "total_count": 156, "has_more": true }
}
```
## Endpoints
Unified call + SMS timeline with date filtering, keyword search, and rich contact data
Real-time event notifications with HMAC signatures and automatic retries
Your Allo numbers with capabilities, sender ID status, and member access
Team roster with roles and assigned numbers
Available call tags for filtering conversations
Internal team notes on conversations and person profiles, with @mentions
Team discussion threads on calls, SMS, and conversation notes
# Best practices
Source: https://help.withallo.com/en/v2/api-reference/webhooks/best-practices
Recommendations for building reliable webhook consumers
## Respond quickly
Return a `200` status code as soon as you receive the webhook. Do your processing asynchronously — write the event to a queue or database, then process it in the background.
If your endpoint takes too long to respond (over 20 seconds), the delivery is marked as failed and retried.
## Implement idempotency
Allo guarantees **at-least-once** delivery, which means your endpoint may receive the same event more than once. To prevent duplicate processing:
1. Extract the `webhook-id` header from the request — it uniquely identifies each delivery.
2. Check if you have already processed this ID (e.g., lookup in your database).
3. If it is new, process the event and store the ID.
4. If it is a duplicate, return `200` and skip processing.
```javascript theme={null}
app.post("/webhooks/allo", async (req, res) => {
const webhookId = req.headers["webhook-id"];
// Check if already processed
if (await db.webhookProcessed(webhookId)) {
return res.sendStatus(200);
}
// Mark as processed before doing work
await db.markWebhookProcessed(webhookId);
// Process the event asynchronously
queue.add("process-webhook", req.body);
res.sendStatus(200);
});
```
## Use HTTPS
Your webhook URL must use HTTPS. Self-signed certificates are not accepted.
## Verify signatures
Always [verify webhook signatures](/en/v2/api-reference/webhooks/verifying-signatures) in production to ensure requests come from Allo.
## Handle out-of-order delivery
Events may arrive in a different order than they occurred. For example, `tag.added` could arrive before `call.completed` for the same call.
Do not assume events arrive in chronological order. Use the `timestamp` field in the payload to determine when the event actually occurred.
## Monitor your endpoints
Check your webhook health from [Settings > Webhooks](https://web.withallo.com/settings/webhooks). You can see delivery statistics and inspect failed deliveries.
## Keep your secrets safe
* Store the signing secret (`whsec_...`) in environment variables, not in source code.
* Never commit secrets to version control.
* Rotate secrets if they are compromised.
## Disable CSRF protection
If your web framework enables CSRF protection by default (e.g., Django, Rails), disable it for your webhook endpoint. Webhook requests do not include CSRF tokens and will be rejected.
# Create webhook
Source: https://help.withallo.com/en/v2/api-reference/webhooks/create-webhook
POST /v2/api/webhooks
Creates a webhook endpoint subscribed to one or more event topics. The `signing_secret` is returned only in this response — store it to verify delivery signatures.
**Required scope:** `WEBHOOKS_READ_WRITE`
Creates a webhook endpoint subscribed to one or more [event topics](/en/v2/api-reference/webhooks/event-catalog).
* `url` must be a publicly reachable **HTTPS** URL.
* `topics` must contain at least one valid event type. Unknown topics return a `400` with code `INVALID_EVENT_TYPE`.
* The `signing_secret` is returned **only** in this response. Store it to [verify signatures](/en/v2/api-reference/webhooks/verifying-signatures).
# Delete webhook
Source: https://help.withallo.com/en/v2/api-reference/webhooks/delete-webhook
DELETE /v2/api/webhooks/{webhook_id}
Permanently deletes a webhook endpoint and its delivery history.
**Required scope:** `WEBHOOKS_READ_WRITE`
Permanently deletes a webhook endpoint and its delivery history. Returns `204 No Content`.
# Delivery and retries
Source: https://help.withallo.com/en/v2/api-reference/webhooks/delivery-and-retries
How Allo delivers webhooks, retries failures, and handles recovery
## Delivery requirements
Your endpoint must:
* Return a **2xx** status code (200–299) within **20 seconds**.
* Be publicly accessible over HTTPS.
Any non-2xx response, timeout, or connection failure counts as a failed delivery.
## Retry schedule
When a delivery fails, Allo retries automatically with exponential backoff:
| Attempt | Delay after previous | Total elapsed |
| :-----: | -------------------- | ------------- |
| 1 | Immediate | 0 |
| 2 | 5 seconds | \~5 seconds |
| 3 | 5 minutes | \~5 minutes |
| 4 | 30 minutes | \~35 minutes |
| 5 | 2 hours | \~2.5 hours |
| 6 | 5 hours | \~7.5 hours |
| 7 | 10 hours | \~17.5 hours |
| 8 | 10 hours | \~27.5 hours |
After 8 attempts (\~27.5 hours), the message is marked as **Failed**.
## Circuit breaker
Allo automatically disables endpoints that fail persistently. The process works as follows:
1. Multiple deliveries must fail within a 24-hour window, with at least 12 hours between the first and last failure. A brief outage does not trigger the circuit breaker.
2. Once that condition is met, a 5-day timer starts.
3. If all delivery attempts continue to fail for **5 consecutive days**, the endpoint is automatically disabled.
To recover:
1. Fix the issue with your endpoint.
2. Go to [Settings > Webhooks](https://web.withallo.com/settings/webhooks) and re-enable the webhook.
3. Use the **Recover** option in the webhook settings to replay missed events.
## Inspecting deliveries
You can inspect delivery attempts, view payloads, and check response details from [Settings > Webhooks](https://web.withallo.com/settings/webhooks). Select a webhook to see its delivery history, filter by status, and drill into individual deliveries.
## Retry and recovery
From the webhook settings UI you can:
* **Retry** a specific failed delivery immediately.
* **Recover** missed events by replaying all deliveries since a given date. Use this after fixing a broken endpoint or recovering from downtime.
## Delivery guarantees
Allo uses **at-least-once** delivery. Events may be delivered more than once. Implement idempotency in your handler using the `webhook-id` header. See [Best practices](/en/v2/api-reference/webhooks/best-practices).
# Event catalog
Source: https://help.withallo.com/en/v2/api-reference/webhooks/event-catalog
Full reference for all webhook event types and their payloads
Events follow the `entity.action` naming convention. Allo delivers events at least once — your endpoint may receive the same event more than once. Use the `webhook-id` header to deduplicate. See [Best practices](/en/v2/api-reference/webhooks/best-practices) for details.
## Event summary
| Event | Description |
| --------------------------- | ----------------------------------------------------------- |
| `call.received` | Inbound call starts ringing |
| `call.triggered` | Outbound call initiated |
| `call.answered` | Call answered on the other side |
| `call.completed` | Call finished with full data |
| `tag.added` | Tag added to a call |
| `tag.removed` | Tag removed from a call |
| `sms.received` | Inbound SMS received |
| `sms.sent` | Outbound SMS sent |
| `contact.created` | Contact created |
| `contact.updated` | Contact updated |
| `conversation_note.created` | Internal note added to a conversation |
| `conversation_note.updated` | Conversation note edited |
| `conversation_note.deleted` | Conversation note deleted |
| `contact_note.created` | Note added to a person's CRM profile |
| `contact_note.updated` | Person note edited |
| `contact_note.deleted` | Person note deleted |
| `thread.created` | Discussion thread started on a conversation item |
| `thread.comment.created` | Comment added to a thread |
| `thread.comment.updated` | Thread comment edited |
| `thread.resolved` | Thread marked as resolved |
| `thread.unresolved` | Thread reopened |
| `partner.account.login` | A reseller-provisioned account signed in for the first time |
***
## call.received
Fired when an inbound call starts ringing, before the call is answered. When a matching contact is found, the event includes `person`, `company`, and `deals` objects with contact context.
```json theme={null}
{
"topic": "call.received",
"version": "2.0",
"timestamp": "2025-03-15T14:30:00.000Z",
"data": {
"from_number": "+33612345678",
"to_number": "+33112345678",
"started_at": "2025-03-15T14:30:00.000Z",
"user_email": "john@acme.com",
"person": {
"id": "con_5MiGNHp2vI1AN6sTu4Cw",
"name": "Marie",
"last_name": "Dupont",
"email": "marie.dupont@acme.com",
"emails": ["marie.dupont@acme.com"],
"numbers": ["+33612345678"],
"job_title": "Head of Sales",
"linkedin_url": "https://linkedin.com/in/mariedupont",
"lead_source": "Inbound"
},
"company": {
"id": "com-a1b2c3d4e5f6",
"name": "Acme Corp"
},
"deals": [
{
"id": "dea-x1y2z3w4v5u6",
"name": "Enterprise Plan",
"status": "qualified",
"value": 25000.00,
"currency": "EUR",
"close_date": "2025-06-15T00:00:00"
}
]
}
}
```
| Field | Type | Description |
| ------------- | -------------- | -------------------------------------------------------------------------- |
| `from_number` | string | Caller's phone number |
| `to_number` | string | Your Allo phone number |
| `started_at` | string | ISO 8601 timestamp when the call started ringing |
| `user_email` | string | Email of the Allo user assigned to the number |
| `person` | object or null | Matching contact person. Absent if no contact matches the caller's number. |
| `company` | object or null | Company linked to the contact. `null` if none. |
| `deals` | array or null | Deals linked to the contact. `null` if none. |
### Person object
| Field | Type | Description |
| ------------ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `id` | string | Unique contact identifier |
| `name` | string or null | First name |
| `last_name` | string or null | Last name |
| `email` | string or null | Primary email address |
| `emails` | array of strings | All email addresses |
| `numbers` | array of strings | All phone numbers |
| `job_title` | string or null | Job title |
| `` | any | Each contact property you have defined appears as a top-level key (e.g. `linkedin_url`, `lead_source`). Only non-null values are included. |
### Company object
| Field | Type | Description |
| ------ | -------------- | ------------------------- |
| `id` | string | Unique company identifier |
| `name` | string or null | Company name |
### Deal object
| Field | Type | Description |
| ------------ | -------------- | --------------------------------- |
| `id` | string | Unique deal identifier |
| `name` | string or null | Deal name |
| `status` | string or null | Deal stage or status |
| `value` | number or null | Deal monetary value |
| `currency` | string or null | Currency code (e.g. `EUR`, `USD`) |
| `close_date` | string or null | Expected close date (ISO 8601) |
***
## call.triggered
Fired when an outbound call is initiated. When a matching contact is found, the event includes `person`, `company`, and `deals` objects with contact context.
```json theme={null}
{
"topic": "call.triggered",
"version": "2.0",
"timestamp": "2025-03-15T14:35:00.000Z",
"data": {
"from_number": "+33112345678",
"to_number": "+33612345678",
"started_at": "2025-03-15T14:35:00.000Z",
"user_email": "john@acme.com",
"person": {
"id": "con_5MiGNHp2vI1AN6sTu4Cw",
"name": "Marie",
"last_name": "Dupont",
"email": "marie.dupont@acme.com",
"emails": ["marie.dupont@acme.com"],
"numbers": ["+33612345678"],
"job_title": "Head of Sales"
},
"company": {
"id": "com-a1b2c3d4e5f6",
"name": "Acme Corp"
},
"deals": null
}
}
```
| Field | Type | Description |
| ------------- | -------------- | ----------------------------------------------------------------------------- |
| `from_number` | string | Your Allo phone number |
| `to_number` | string | Recipient's phone number |
| `started_at` | string | ISO 8601 timestamp when the call was initiated |
| `user_email` | string | Email of the Allo user who placed the call |
| `person` | object or null | Matching contact person. Absent if no contact matches the recipient's number. |
| `company` | object or null | Company linked to the contact. `null` if none. |
| `deals` | array or null | Deals linked to the contact. `null` if none. |
The `person`, `company`, and `deals` objects use the same schema as [`call.received`](#callreceived).
***
## call.answered
Fired the moment a call is answered on the other side, for both inbound and outbound calls — after `call.received` / `call.triggered` (ring) and before `call.completed` (hang-up). Use it to react in real time when the prospect picks up. When a matching contact is found, the event includes `person`, `company`, and `deals` objects with contact context.
```json theme={null}
{
"topic": "call.answered",
"version": "2.0",
"timestamp": "2025-03-15T14:30:08.000Z",
"data": {
"from_number": "+33612345678",
"to_number": "+33112345678",
"direction": "OUTBOUND",
"started_at": "2025-03-15T14:30:00.000Z",
"answered_at": "2025-03-15T14:30:08.000Z",
"user_email": "john@acme.com",
"person": {
"id": "con_5MiGNHp2vI1AN6sTu4Cw",
"name": "Marie",
"last_name": "Dupont",
"email": "marie.dupont@acme.com",
"emails": ["marie.dupont@acme.com"],
"numbers": ["+33612345678"],
"job_title": "Head of Sales"
},
"company": {
"id": "com-a1b2c3d4e5f6",
"name": "Acme Corp"
},
"deals": null
}
}
```
| Field | Type | Description |
| ------------- | -------------- | ------------------------------------------------------------------------------- |
| `from_number` | string | Caller's phone number |
| `to_number` | string | Recipient's phone number |
| `direction` | string | `INBOUND` or `OUTBOUND` |
| `started_at` | string | ISO 8601 timestamp when the call started ringing |
| `answered_at` | string | ISO 8601 timestamp when the call was answered |
| `user_email` | string | Email of the Allo user on the call |
| `person` | object or null | Matching contact person. Absent if no contact matches the other party's number. |
| `company` | object or null | Company linked to the contact. `null` if none. |
| `deals` | array or null | Deals linked to the contact. `null` if none. |
The `person`, `company`, and `deals` objects use the same schema as [`call.received`](#callreceived).
***
## call.completed
Fired after a call ends. Includes the full call data: recording, transcript, summary, tags, and transfer details. This event is typically sent about 30 seconds after the call hangs up.
```json theme={null}
{
"topic": "call.completed",
"version": "2.0",
"timestamp": "2025-03-15T14:45:00.000Z",
"data": {
"id": "cll_2NfDKEm9sF8xK3pQr1Zt",
"start_date": "2025-03-15T14:30:00.000Z",
"recording_url": "https://storage.withallo.com/recordings/abc123.mp3",
"from_number": "+33612345678",
"from_name": "Marie Dupont",
"to": "+33112345678",
"to_name": "Support Acme",
"length_in_minutes": 5.5,
"length": "5m 30s",
"tag": "support",
"tags": ["support", "urgent"],
"summary": "The customer called about a billing issue with their last invoice. The agent confirmed the charge was correct and explained the new pricing plan.",
"transcriptions": [
{
"source": "EXTERNAL",
"time": "2025-03-15T14:30:05.000Z",
"text": "Hi, I have a question about my last invoice."
},
{
"source": "USER",
"time": "2025-03-15T14:30:12.000Z",
"text": "Of course, let me pull up your account."
}
],
"concatenated_transcript": "Hi, I have a question about my last invoice.\nOf course, let me pull up your account.",
"data_collected": {
"account_number": "12345"
},
"type": "INBOUND",
"result": "ANSWERED",
"integration_id": null,
"transfer_from": {
"number": null,
"user_email": null,
"user_name": null
},
"transfer_to": {
"number": null,
"user_email": null,
"user_name": null
},
"user_email": "john@acme.com",
"original_to_number": null,
"original_to_name": null,
"transfer_original_call_id": null,
"ivr_result": [
{
"dtmf_key": "2",
"text_key": "Support"
}
]
}
}
```
### Fields
| Field | Type | Description |
| --------------------------- | ---------------- | --------------------------------------------------------------- |
| `id` | string | Unique call identifier |
| `start_date` | string | ISO 8601 timestamp when the call started |
| `recording_url` | string or null | URL to the call recording (MP3). Null if recording is disabled. |
| `from_number` | string | Caller's phone number |
| `from_name` | string | Caller's name (from contacts) or your business name |
| `to` | string | Recipient's phone number |
| `to_name` | string | Recipient's name (from contacts) or your business name |
| `length_in_minutes` | number | Call duration in minutes (decimal) |
| `length` | string | Human-readable duration (e.g., `"5m 30s"`) |
| `tag` | string or null | Primary tag assigned to the call |
| `tags` | array of strings | All tags assigned to the call |
| `summary` | string | AI-generated call summary |
| `transcriptions` | array | Call transcript entries (see below) |
| `concatenated_transcript` | string | Full transcript as a single string |
| `data_collected` | object | Custom data collected during the call (e.g., from IVR) |
| `type` | string | `INBOUND` or `OUTBOUND` |
| `result` | string | Call outcome (see values below) |
| `integration_id` | string or null | External CRM integration ID for the contact |
| `transfer_from` | object | Transfer origin details (see below) |
| `transfer_to` | object | Transfer destination details (see below) |
| `user_email` | string | Email of the Allo user who handled the call |
| `original_to_number` | string or null | Original dialed number (if the call was routed) |
| `original_to_name` | string or null | Original recipient name |
| `transfer_original_call_id` | string or null | Call ID of the original call if this was a transfer |
| `ivr_result` | array | IVR menu selections made during the call (see below) |
### Call result values
| Value | Description |
| ---------------------- | ------------------------------------------ |
| `ANSWERED` | Call was answered |
| `VOICEMAIL` | Caller left a voicemail |
| `TRANSFERRED_AI` | Call was handled by the AI agent |
| `TRANSFERRED_EXTERNAL` | Call was transferred to an external number |
| `BLOCKED` | Call was blocked |
| `FAILED` | Call failed to connect |
### Transcription entry
| Field | Type | Description |
| -------- | ------ | --------------------------------------------------- |
| `source` | string | `USER` (your side) or `EXTERNAL` (caller/recipient) |
| `time` | string | ISO 8601 timestamp of the transcription segment |
| `text` | string | Transcribed text |
### Transfer object
| Field | Type | Description |
| ------------ | -------------- | ------------------------------------- |
| `number` | string or null | Phone number involved in the transfer |
| `user_email` | string or null | Email of the Allo user |
| `user_name` | string or null | Name of the Allo user |
### IVR result entry
| Field | Type | Description |
| ---------- | -------------- | -------------------------------- |
| `dtmf_key` | string or null | DTMF digit pressed by the caller |
| `text_key` | string or null | Menu label selected |
***
## tag.added
Fired when a tag is added to a call.
```json theme={null}
{
"topic": "tag.added",
"version": "2.0",
"timestamp": "2025-03-15T15:00:00.000Z",
"data": {
"call_id": "cll_2NfDKEm9sF8xK3pQr1Zt",
"tag_key": "urgent",
"tag_name": "Urgent",
"user_email": "john@acme.com"
}
}
```
| Field | Type | Description |
| ------------ | -------------- | ----------------------------------- |
| `call_id` | string | ID of the call the tag was added to |
| `tag_key` | string | Tag identifier |
| `tag_name` | string | Human-readable tag name |
| `user_email` | string or null | Email of the user who added the tag |
***
## tag.removed
Fired when a tag is removed from a call.
```json theme={null}
{
"topic": "tag.removed",
"version": "2.0",
"timestamp": "2025-03-15T15:05:00.000Z",
"data": {
"call_id": "cll_2NfDKEm9sF8xK3pQr1Zt",
"tag_key": "urgent",
"tag_name": "Urgent",
"user_email": "john@acme.com"
}
}
```
| Field | Type | Description |
| ------------ | -------------- | --------------------------------------- |
| `call_id` | string | ID of the call the tag was removed from |
| `tag_key` | string | Tag identifier |
| `tag_name` | string | Human-readable tag name |
| `user_email` | string or null | Email of the user who removed the tag |
***
## sms.received
Fired when an inbound SMS is received.
```json theme={null}
{
"topic": "sms.received",
"version": "2.0",
"timestamp": "2025-03-15T16:00:00.000Z",
"data": {
"id": "msg_3KgELFn0tG9yL4qRs2Au",
"direction": "INBOUND",
"type": "SMS",
"content": "Hi, I'd like to schedule an appointment.",
"sent_at": "2025-03-15T16:00:00.000Z",
"from_number": "+33612345678",
"to_number": "+33112345678",
"from_name": "Marie Dupont",
"to_name": "Support Acme",
"user_email": "john@acme.com"
}
}
```
| Field | Type | Description |
| ------------- | ------ | --------------------------------------------- |
| `id` | string | Unique message identifier |
| `direction` | string | `INBOUND` |
| `type` | string | `SMS` or `MMS` |
| `content` | string | Message text |
| `sent_at` | string | ISO 8601 timestamp |
| `from_number` | string | Sender's phone number |
| `to_number` | string | Your Allo phone number |
| `from_name` | string | Sender's name (from contacts) |
| `to_name` | string | Your business name |
| `user_email` | string | Email of the Allo user assigned to the number |
***
## sms.sent
Fired when an outbound SMS is sent.
```json theme={null}
{
"topic": "sms.sent",
"version": "2.0",
"timestamp": "2025-03-15T16:10:00.000Z",
"data": {
"id": "msg_4LhFMGo1uH0zM5rSt3Bv",
"direction": "OUTBOUND",
"type": "SMS",
"content": "Your appointment is confirmed for tomorrow at 2pm.",
"sent_at": "2025-03-15T16:10:00.000Z",
"from_number": "+33112345678",
"to_number": "+33612345678",
"from_name": "Support Acme",
"to_name": "Marie Dupont",
"user_email": "john@acme.com"
}
}
```
| Field | Type | Description |
| ------------- | ------ | ------------------------------------------- |
| `id` | string | Unique message identifier |
| `direction` | string | `OUTBOUND` |
| `type` | string | `SMS` or `MMS` |
| `content` | string | Message text |
| `sent_at` | string | ISO 8601 timestamp |
| `from_number` | string | Your Allo phone number |
| `to_number` | string | Recipient's phone number |
| `from_name` | string | Your business name |
| `to_name` | string | Recipient's name (from contacts) |
| `user_email` | string | Email of the Allo user who sent the message |
***
## contact.created
Fired when a new contact is created.
```json theme={null}
{
"topic": "contact.created",
"version": "2.0",
"timestamp": "2025-03-15T17:00:00.000Z",
"data": {
"id": "con_5MiGNHp2vI1AN6sTu4Cw",
"name": "Marie",
"last_name": "Dupont",
"company": "Acme Corp",
"emails": ["marie.dupont@acme.com"],
"numbers": ["+33612345678"]
}
}
```
| Field | Type | Description |
| ----------- | ------------------------ | ------------------------- |
| `id` | string | Unique contact identifier |
| `name` | string | First name |
| `last_name` | string | Last name |
| `company` | string or null | Company name |
| `emails` | array of strings or null | Email addresses |
| `numbers` | array of strings | Phone numbers |
***
## contact.updated
Fired when an existing contact is modified.
```json theme={null}
{
"topic": "contact.updated",
"version": "2.0",
"timestamp": "2025-03-15T17:05:00.000Z",
"data": {
"id": "con_5MiGNHp2vI1AN6sTu4Cw",
"name": "Marie",
"last_name": "Dupont",
"company": "Acme Corp",
"emails": ["marie.dupont@acme.com", "m.dupont@personal.com"],
"numbers": ["+33612345678", "+33698765432"]
}
}
```
The payload structure is identical to `contact.created`. The `data` object contains the full contact state after the update.
***
## conversation\_note.created
Fired when an internal note is added to a conversation — from the Allo apps or via the [Notes API](/en/v2/api-reference/notes/overview). `conversation_note.created` events are deduplicated by note ID: you receive at most one per note.
```json theme={null}
{
"topic": "conversation_note.created",
"version": "2.0",
"timestamp": "2026-07-13T10:00:00.000Z",
"data": {
"id": "not-2NyMabc123",
"content": "Escalate to @[Jane Doe](usr-abc123) tomorrow",
"allo_number": "+14155550100",
"contact_number": "+14155551234",
"user": {
"id": "usr-def456",
"name": "John Smith",
"email": "john@acme.com"
},
"mentions": [
{
"user_id": "usr-abc123",
"name": "Jane Doe"
}
],
"created_at": "2026-07-13T10:00:00",
"updated_at": "2026-07-13T10:00:00",
"deleted": false
}
}
```
| Field | Type | Description |
| ---------------- | -------------- | ------------------------------------------------------------------------------------------------------------- |
| `id` | string | Unique note identifier (`not-*`) |
| `content` | string | Note text, with mentions inline as `@[Name](usr-...)` |
| `allo_number` | string | The Allo line the conversation belongs to |
| `contact_number` | string | The contact's phone number |
| `user` | object or null | Note author (see below) |
| `mentions` | array | Users mentioned in the note (see below) |
| `created_at` | string | ISO 8601 timestamp when the note was created |
| `updated_at` | string | ISO 8601 timestamp of the last edit |
| `deleted` | boolean | `false` on `conversation_note.created` and `conversation_note.updated`, `true` on `conversation_note.deleted` |
### User object
| Field | Type | Description |
| ------- | -------------- | -------------------------------- |
| `id` | string | Unique user identifier (`usr-*`) |
| `name` | string or null | Display name |
| `email` | string or null | Email address |
### Mention entry
| Field | Type | Description |
| --------- | -------------- | ---------------------------------- |
| `user_id` | string | ID of the mentioned user |
| `name` | string or null | Display name of the mentioned user |
***
## conversation\_note.updated
Fired when a conversation note's content is edited. The payload structure is identical to [`conversation_note.created`](#conversation_notecreated), with the updated `content`, `mentions`, and `updated_at`. Unlike `*.created` events, `conversation_note.updated` may be re-delivered — deduplicate with the `webhook-id` header.
***
## conversation\_note.deleted
Fired when a conversation note is deleted. The payload structure is identical to [`conversation_note.created`](#conversation_notecreated), with the note's final state and `deleted: true`. May be re-delivered — deduplicate with the `webhook-id` header.
***
## contact\_note.created
Fired when a note is added to a person's CRM profile — from the Allo apps or via the [Notes API](/en/v2/api-reference/notes/overview). `contact_note.created` events are deduplicated by note ID: you receive at most one per note.
```json theme={null}
{
"topic": "contact_note.created",
"version": "2.0",
"timestamp": "2026-07-13T10:00:00.000Z",
"data": {
"id": "cno-abc123",
"contact_id": "con-abc123",
"person_id": "per-abc123",
"content": "Prefers email over calls. Intro by @[Jane Doe](usr-abc123).",
"user": {
"id": "usr-def456",
"name": "John Smith",
"email": "john@acme.com"
},
"mentions": [
{
"user_id": "usr-abc123",
"name": "Jane Doe"
}
],
"created_at": "2026-07-13T10:00:00",
"updated_at": "2026-07-13T10:00:00",
"deleted": false
}
}
```
| Field | Type | Description |
| ------------ | -------------- | --------------------------------------------------------------------------------------------------------------- |
| `id` | string | Unique note identifier (`cno-*`) |
| `contact_id` | string | ID of the underlying contact record (`con-*`), matching the ids in `contact.created` / `contact.updated` events |
| `person_id` | string or null | ID of the person the note is on (`per-*`). `null` when the note belongs to a contact without a person. |
| `content` | string | Note text, with mentions inline as `@[Name](usr-...)` |
| `user` | object or null | Note author |
| `mentions` | array | Users mentioned in the note |
| `created_at` | string | ISO 8601 timestamp when the note was created |
| `updated_at` | string | ISO 8601 timestamp of the last edit |
| `deleted` | boolean | `false` on `contact_note.created` and `contact_note.updated`, `true` on `contact_note.deleted` |
The `user` and `mentions` objects use the same schema as [`conversation_note.created`](#conversation_notecreated).
***
## contact\_note.updated
Fired when a person note's content is edited. The payload structure is identical to [`contact_note.created`](#contact_notecreated), with the updated `content`, `mentions`, and `updated_at`. May be re-delivered — deduplicate with the `webhook-id` header.
***
## contact\_note.deleted
Fired when a person note is deleted. The payload structure is identical to [`contact_note.created`](#contact_notecreated), with the note's final state and `deleted: true`. May be re-delivered — deduplicate with the `webhook-id` header.
***
## thread.created
Fired when a discussion thread is started on a conversation item (a call, an SMS, or a conversation note) — from the Allo apps or via the [Threads API](/en/v2/api-reference/threads/overview). Includes the thread's first comment. `thread.created` events are deduplicated by thread ID: you receive at most one per thread.
```json theme={null}
{
"topic": "thread.created",
"version": "2.0",
"timestamp": "2026-07-13T10:00:00.000Z",
"data": {
"id": "cth-abc123",
"entity_type": "CALL",
"entity_id": "cll-abc123",
"allo_number": "+14155550100",
"contact_number": "+14155551234",
"resolved": false,
"resolved_at": null,
"resolved_by": null,
"comment_count": 1,
"created_at": "2026-07-13T10:00:00",
"comment": {
"id": "thc-abc123",
"thread_id": "cth-abc123",
"content": "Can someone call them back today? @[Jane Doe](usr-abc123)",
"user": {
"id": "usr-def456",
"name": "John Smith",
"email": "john@acme.com"
},
"mentions": [
{
"user_id": "usr-abc123",
"name": "Jane Doe"
}
],
"created_at": "2026-07-13T10:00:00",
"updated_at": "2026-07-13T10:00:00"
}
}
}
```
| Field | Type | Description |
| ---------------- | -------------- | ------------------------------------------------------------------------------------------ |
| `id` | string | Unique thread identifier (`cth-*`) |
| `entity_type` | string | Type of the item the thread is attached to: `CALL`, `TEXT_MESSAGE`, or `CONVERSATION_NOTE` |
| `entity_id` | string or null | ID of the conversation item (`cll-*`, `msg-*`, or `not-*`) |
| `allo_number` | string | The Allo line the conversation belongs to |
| `contact_number` | string | The contact's phone number |
| `resolved` | boolean | Whether the thread is resolved |
| `resolved_at` | string or null | ISO 8601 timestamp when the thread was resolved |
| `resolved_by` | object or null | User who resolved the thread |
| `comment_count` | number | Number of comments on the thread |
| `created_at` | string | ISO 8601 timestamp when the thread was created |
| `comment` | object | The thread's first comment (see below) |
### Comment object
| Field | Type | Description |
| ------------ | -------------- | -------------------------------------------------------- |
| `id` | string | Unique comment identifier (`thc-*`) |
| `thread_id` | string | ID of the thread the comment belongs to |
| `content` | string | Comment text, with mentions inline as `@[Name](usr-...)` |
| `user` | object or null | Comment author |
| `mentions` | array | Users mentioned in the comment |
| `created_at` | string | ISO 8601 timestamp when the comment was created |
| `updated_at` | string | ISO 8601 timestamp of the last edit |
The `user`, `resolved_by`, and `mentions` objects use the same schema as [`conversation_note.created`](#conversation_notecreated).
***
## thread.comment.created
Fired when a comment is added to an existing thread. `data` is the comment object from [`thread.created`](#threadcreated). `thread.comment.created` events are deduplicated by comment ID: you receive at most one per comment.
```json theme={null}
{
"topic": "thread.comment.created",
"version": "2.0",
"timestamp": "2026-07-13T10:05:00.000Z",
"data": {
"id": "thc-def456",
"thread_id": "cth-abc123",
"content": "On it.",
"user": {
"id": "usr-abc123",
"name": "Jane Doe",
"email": "jane@acme.com"
},
"mentions": [],
"created_at": "2026-07-13T10:05:00",
"updated_at": "2026-07-13T10:05:00"
}
}
```
***
## thread.comment.updated
Fired when a thread comment's content is edited. `data` is the comment object from [`thread.created`](#threadcreated), with the updated `content`, `mentions`, and `updated_at`. May be re-delivered — deduplicate with the `webhook-id` header.
***
## thread.resolved
Fired when a thread is marked as resolved. `data` is the thread object from [`thread.created`](#threadcreated) without the `comment` field. May be re-delivered — deduplicate with the `webhook-id` header.
```json theme={null}
{
"topic": "thread.resolved",
"version": "2.0",
"timestamp": "2026-07-13T11:00:00.000Z",
"data": {
"id": "cth-abc123",
"entity_type": "CALL",
"entity_id": "cll-abc123",
"allo_number": "+14155550100",
"contact_number": "+14155551234",
"resolved": true,
"resolved_at": "2026-07-13T11:00:00",
"resolved_by": {
"id": "usr-def456",
"name": "John Smith",
"email": "john@acme.com"
},
"comment_count": 2,
"created_at": "2026-07-13T10:00:00"
}
}
```
***
## thread.unresolved
Fired when a resolved thread is reopened. The payload structure is identical to [`thread.resolved`](#threadresolved), with `resolved: false` and `resolved_at` / `resolved_by` set to `null`. May be re-delivered — deduplicate with the `webhook-id` header.
***
## partner.account.login
Fired when a [reseller-provisioned account](/en/v2/api-reference/partner/overview) signs in on a device for the first time — the moment its number goes live. Delivered to the **partner's** webhook endpoint (not the account's), so resellers can track activation.
```json theme={null}
{
"topic": "partner.account.login",
"version": "2.0",
"timestamp": "2025-03-15T18:00:00.000Z",
"data": {
"account_id": "usr-160F3A46629692CF6E022E09A6217A4F0AD21B45",
"partner_client_ref": "client-4271",
"email": "owner@vibrantevents.com",
"name": "Vibrant Occasions Event Rentals"
}
}
```
| Field | Type | Description |
| -------------------- | -------------- | ---------------------------------------------------- |
| `account_id` | string | The provisioned account's user ID (`usr-*`) |
| `partner_client_ref` | string or null | Your own reference, set when the account was created |
| `email` | string | The account's email |
| `name` | string | The account's name |
# Get webhook
Source: https://help.withallo.com/en/v2/api-reference/webhooks/get-webhook
GET /v2/api/webhooks/{webhook_id}
Returns a single webhook endpoint by ID, including its `signing_secret`.
**Required scope:** `WEBHOOKS_READ_WRITE`
Returns a single webhook endpoint, including its `signing_secret`.
# List webhooks
Source: https://help.withallo.com/en/v2/api-reference/webhooks/get-webhooks
GET /v2/api/webhooks
Returns all webhook endpoints configured for your account.
**Required scope:** `WEBHOOKS_READ_WRITE`
Returns every webhook endpoint configured for your account. The `signing_secret` is omitted from list results — fetch a single webhook by ID to retrieve it.
# List event types
Source: https://help.withallo.com/en/v2/api-reference/webhooks/list-event-types
GET /v2/api/webhooks/event_types
Returns the catalog of event topics you can subscribe a webhook to.
**Required scope:** `WEBHOOKS_READ_WRITE`
Returns the catalog of event topics you can subscribe a webhook to. See the [Event Catalog](/en/v2/api-reference/webhooks/event-catalog) for payload schemas.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/webhooks/overview
Receive real-time notifications when events occur in your Allo account
Webhooks let Allo push events to your server in real time. When something happens — a call finishes, an SMS arrives, a contact is created — Allo sends an HTTPS POST request to your endpoint with the event data.
## How it works
1. An event occurs in your Allo account (e.g., a call is completed).
2. Allo sends an HTTPS POST request to the URL you configured.
3. Your server receives the request, verifies the signature, and processes the event.
## Available events
| Event | Description |
| ----------------- | ------------------------------------------------------------- |
| `call.received` | Inbound call starts ringing |
| `call.triggered` | Outbound call initiated |
| `call.answered` | Call answered on the other side |
| `call.completed` | Call finished with full data (recording, transcript, summary) |
| `tag.added` | Tag added to a call |
| `tag.removed` | Tag removed from a call |
| `sms.received` | Inbound SMS received |
| `sms.sent` | Outbound SMS sent |
| `contact.created` | Contact created |
| `contact.updated` | Contact updated |
See the [Event catalog](/en/v2/api-reference/webhooks/event-catalog) for full payload schemas.
## Payload format
Every webhook uses the same envelope format:
```json theme={null}
{
"topic": "call.completed",
"version": "2.0",
"timestamp": "2025-03-15T14:30:45.123456Z",
"data": {
// Event-specific fields
}
}
```
| Field | Type | Description |
| ----------- | ------ | --------------------------------------------------- |
| `topic` | string | Event type (e.g., `call.completed`, `sms.received`) |
| `version` | string | Payload version, always `"2.0"` |
| `timestamp` | string | ISO 8601 timestamp when the event was sent |
| `data` | object | Event-specific payload |
## Quickstart
Go to [Settings > Webhooks](https://web.withallo.com/settings/webhooks) in your Allo dashboard. Add your HTTPS endpoint URL and select the events you want to receive. The webhook applies to all Allo numbers in your workspace.
Your endpoint receives POST requests with the event payload in the body. Return a `2xx` status code within 20 seconds to acknowledge receipt.
Every webhook includes a cryptographic signature. Verify it to ensure the request came from Allo. See [Verifying signatures](/en/v2/api-reference/webhooks/verifying-signatures).
## Next steps
Full reference for all events and their payloads
Authenticate incoming webhooks with HMAC-SHA256
# Testing webhooks
Source: https://help.withallo.com/en/v2/api-reference/webhooks/testing
Test your webhook endpoints before going live
## Send a test event
You can test your webhook directly from the Allo dashboard:
Go to [Settings > Webhooks](https://web.withallo.com/settings/webhooks) in your Allo dashboard.
Pick any event type from the catalog (e.g., `call.completed`, `sms.received`) and click **Test**.
Allo sends a synthetic event to your endpoint and shows whether it succeeded, the HTTP status code returned, and the response time.
## Local development
During development, your webhook endpoint is typically not publicly accessible. Use a tunnel service to expose your local server:
Run your webhook handler locally (e.g., `http://localhost:3000/webhooks/allo`).
Use a tool like [ngrok](https://ngrok.com) to expose your local server:
```bash theme={null}
ngrok http 3000
```
This gives you a public HTTPS URL (e.g., `https://abc123.ngrok.io`).
Go to [Settings > Webhooks](https://web.withallo.com/settings/webhooks) and set your tunnel URL as the endpoint.
Use the test feature above to trigger a delivery and verify your handler processes it correctly.
## Monitoring
Check your webhook health from [Settings > Webhooks](https://web.withallo.com/settings/webhooks). You can see delivery statistics including successful, pending, and failed deliveries.
A healthy webhook should have a low failure count relative to successes. If failures are increasing, check [Troubleshooting](/en/v2/api-reference/webhooks/troubleshooting).
# Troubleshoot
Source: https://help.withallo.com/en/v2/api-reference/webhooks/troubleshooting
Diagnose and fix common webhook delivery issues
Allo disables endpoints that fail continuously for 5 days. To fix:
1. Check the delivery history in [Settings > Webhooks](https://web.withallo.com/settings/webhooks) to understand why deliveries failed.
2. Fix the underlying issue (URL changed, server down, authentication error, etc.).
3. Re-enable the webhook from [Settings > Webhooks](https://web.withallo.com/settings/webhooks).
4. Use the **Recover** option to replay missed events.
Check these common causes:
* **401/403**: Your endpoint requires authentication. Webhook requests do not include your API key — they use [signature verification](/en/v2/api-reference/webhooks/verifying-signatures) instead.
* **404**: The webhook URL is incorrect or your server's routing does not match.
* **500**: Your handler is throwing an error. Check your server logs.
* **Firewall/WAF**: Your firewall or web application firewall may be blocking the requests. Allow incoming POST requests to your webhook path.
Common causes:
* **Parsed body**: You must use the **raw request body** for verification. If your framework automatically parses JSON and you re-serialize it, whitespace differences will break the signature. Use `express.raw()` in Node.js or `request.get_data()` in Flask.
* **Wrong secret**: Ensure you are using the correct `whsec_...` signing secret for this specific endpoint.
* **Clock skew**: Your server's clock must be within 5 minutes of the actual time. Verify NTP is running on your server.
* **Middleware modification**: Proxies or middleware that modify request headers or body will invalidate the signature.
Check the following:
1. **Webhook is enabled**: Go to [Settings > Webhooks](https://web.withallo.com/settings/webhooks) and verify the webhook is enabled.
2. **Topics match**: Verify the event types you expect are selected in the webhook configuration.
3. **Delivery history**: Check the delivery history in your webhook settings — events may be failing silently.
4. **URL is reachable**: Ensure your endpoint is publicly accessible over HTTPS. Use the [test feature](/en/v2/api-reference/webhooks/testing) to verify.
This is expected behavior. Allo uses at-least-once delivery, so events may be delivered more than once.
Implement idempotency using the `webhook-id` header as a deduplication key. See [Best practices](/en/v2/api-reference/webhooks/best-practices#implement-idempotency).
Your endpoint must respond within 20 seconds. If your processing takes longer:
1. Return `200` immediately upon receiving the request.
2. Queue the event for background processing.
3. Process the event asynchronously (e.g., using a message queue or background job).
See [Best practices — Respond quickly](/en/v2/api-reference/webhooks/best-practices#respond-quickly).
## Need help?
Reach out to our support team
Browse the full webhook documentation
# Update webhook
Source: https://help.withallo.com/en/v2/api-reference/webhooks/update-webhook
PUT /v2/api/webhooks/{webhook_id}
Updates a webhook endpoint. Only the fields you provide are changed. Omitted fields are left untouched.
**Required scope:** `WEBHOOKS_READ_WRITE`
Updates a webhook endpoint. Only the fields you send are changed; omitted fields are left untouched. Send `enabled: false` to pause deliveries without deleting the endpoint.
# Verifying webhook signatures
Source: https://help.withallo.com/en/v2/api-reference/webhooks/verifying-signatures
Authenticate incoming webhooks using HMAC-SHA256 signatures
Every webhook request includes a cryptographic signature so you can verify it came from Allo. Without verification, an attacker could send fake events to your endpoint.
## Signature headers
Each webhook POST includes three headers:
| Header | Description | Example |
| ------------------- | -------------------------------------------------- | ---------------------------------------- |
| `webhook-id` | Unique message identifier | `msg_2NfDKEm9sF8xK3pQr1Zt` |
| `webhook-timestamp` | Unix timestamp (seconds) when the message was sent | `1710510600` |
| `webhook-signature` | One or more HMAC-SHA256 signatures | `v1,K5oZfzN95Z3M+nrYOgGHfLGC7t8VjLtV...` |
## Signing secret
When you create a webhook endpoint, the response includes a `signing_secret` field. This secret has the format `whsec_` and is used to verify signatures.
Store it securely — treat it like a password. If compromised, rotate it via the API.
## Verification algorithm
Get `webhook-id`, `webhook-timestamp`, and `webhook-signature` from the request headers.
Reject requests where the timestamp is more than 5 minutes from your server's current time. This prevents replay attacks.
Concatenate the webhook ID, timestamp, and raw request body with periods:
```
{webhook-id}.{webhook-timestamp}.{raw_body}
```
1. Strip the `whsec_` prefix from your signing secret.
2. Base64-decode the remaining string to get the key bytes.
3. Compute HMAC-SHA256 of the signed content using the key bytes.
4. Base64-encode the result.
The `webhook-signature` header may contain multiple signatures separated by spaces (for secret rotation). Each has a `v1,` prefix. Compare your computed signature against each one. If any match, the signature is valid.
Always use the **raw request body** for verification. If your framework parses JSON and re-serializes it, the signature will not match.
## Code examples
```javascript theme={null}
const crypto = require("crypto");
function verifyWebhook(payload, headers, secret) {
const webhookId = headers["webhook-id"];
const webhookTimestamp = headers["webhook-timestamp"];
const webhookSignature = headers["webhook-signature"];
// Validate timestamp (5-minute tolerance)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(webhookTimestamp)) > 300) {
throw new Error("Timestamp too old");
}
// Build signed content
const signedContent = `${webhookId}.${webhookTimestamp}.${payload}`;
// Decode secret (strip "whsec_" prefix, base64-decode)
const secretBytes = Buffer.from(secret.split("_")[1], "base64");
// Compute HMAC-SHA256
const computed = crypto
.createHmac("sha256", secretBytes)
.update(signedContent)
.digest("base64");
// Compare against each signature in the header
const signatures = webhookSignature
.split(" ")
.map((sig) => sig.split(",")[1]);
if (!signatures.some((sig) => sig === computed)) {
throw new Error("Invalid signature");
}
return JSON.parse(payload);
}
// Express.js example
const express = require("express");
const app = express();
app.post(
"/webhooks/allo",
express.raw({ type: "application/json" }),
(req, res) => {
try {
const event = verifyWebhook(
req.body.toString(),
req.headers,
process.env.WEBHOOK_SECRET
);
console.log("Verified event:", event.topic);
res.sendStatus(200);
} catch (err) {
console.error("Verification failed:", err.message);
res.sendStatus(400);
}
}
);
```
```python theme={null}
import hmac
import hashlib
import base64
import time
import json
def verify_webhook(payload: bytes, headers: dict, secret: str) -> dict:
webhook_id = headers.get("webhook-id")
webhook_timestamp = headers.get("webhook-timestamp")
webhook_signature = headers.get("webhook-signature")
# Validate timestamp (5-minute tolerance)
now = int(time.time())
if abs(now - int(webhook_timestamp)) > 300:
raise ValueError("Timestamp too old")
# Build signed content
signed_content = f"{webhook_id}.{webhook_timestamp}.{payload.decode()}"
# Decode secret (strip "whsec_" prefix, base64-decode)
secret_bytes = base64.b64decode(secret.split("_")[1])
# Compute HMAC-SHA256
computed = base64.b64encode(
hmac.new(
secret_bytes,
signed_content.encode(),
hashlib.sha256,
).digest()
).decode()
# Compare against each signature in the header
signatures = [
sig.split(",")[1]
for sig in webhook_signature.split(" ")
]
if computed not in signatures:
raise ValueError("Invalid signature")
return json.loads(payload)
# Flask example
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhooks/allo", methods=["POST"])
def handle_webhook():
try:
event = verify_webhook(
request.get_data(),
request.headers,
os.environ["WEBHOOK_SECRET"],
)
print(f"Verified event: {event['topic']}")
return "", 200
except ValueError as e:
print(f"Verification failed: {e}")
return "", 400
```
```go theme={null}
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"fmt"
"math"
"net/http"
"strconv"
"strings"
"time"
)
func verifyWebhook(payload []byte, headers http.Header, secret string) error {
webhookID := headers.Get("webhook-id")
webhookTimestamp := headers.Get("webhook-timestamp")
webhookSignature := headers.Get("webhook-signature")
// Validate timestamp (5-minute tolerance)
ts, _ := strconv.ParseInt(webhookTimestamp, 10, 64)
if math.Abs(float64(time.Now().Unix()-ts)) > 300 {
return fmt.Errorf("timestamp too old")
}
// Build signed content
signedContent := fmt.Sprintf("%s.%s.%s", webhookID, webhookTimestamp, string(payload))
// Decode secret (strip "whsec_" prefix, base64-decode)
parts := strings.SplitN(secret, "_", 2)
secretBytes, _ := base64.StdEncoding.DecodeString(parts[1])
// Compute HMAC-SHA256
mac := hmac.New(sha256.New, secretBytes)
mac.Write([]byte(signedContent))
computed := base64.StdEncoding.EncodeToString(mac.Sum(nil))
// Compare against each signature in the header
for _, sig := range strings.Split(webhookSignature, " ") {
parts := strings.SplitN(sig, ",", 2)
if len(parts) == 2 && parts[1] == computed {
return nil
}
}
return fmt.Errorf("invalid signature")
}
```
Always verify signatures in production. Skipping verification exposes your application to spoofed webhook events.
# Add website knowledge
Source: https://help.withallo.com/en/v2/api-reference/agent/add-website-knowledge
POST /v2/api/numbers/{number}/agent/knowledge/websites
Adds a page to the receptionist's knowledge. Allo scrapes and summarizes it during the request, so the call takes a few seconds. Up to 5 websites per receptionist.
**Required scope:** `AGENTS_WRITE`
## Behavior
Adds a page to the receptionist's knowledge. Allo scrapes it and summarizes it during the request, so this call takes a few seconds and returns `201` with the entry once the page has been read.
Send an absolute `http(s)` URL of a publicly reachable page. A receptionist holds up to 5 websites, and the same URL cannot be added twice.
The response never carries the scraped text. That text is what the receptionist reads, not something you configure.
Point it at the page that carries the answers, not at the site root. Only the page you send is read.
## Errors
* `400 INVALID_KNOWLEDGE_URL`: the URL is malformed or cannot be scraped.
* `409 AGENT_KNOWLEDGE_ALREADY_EXISTS`: this receptionist already has an entry for that URL.
* `409 AGENT_KNOWLEDGE_LIMIT_REACHED`: the receptionist already holds 5 websites. Delete one first.
* `500 AGENT_KNOWLEDGE_SCRAPE_FAILED`: the page could not be read. This one is retryable, so try again in a few seconds and check the page is publicly reachable.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.
# Delete file knowledge
Source: https://help.withallo.com/en/v2/api-reference/agent/delete-file-knowledge
DELETE /v2/api/numbers/{number}/agent/knowledge/files/{id}
Removes an uploaded document from the receptionist's knowledge. Documents are uploaded in the Allo app; this API lists and deletes them.
**Required scope:** `AGENTS_WRITE`
## Behavior
Removes an uploaded document from the receptionist's knowledge. Returns `204` with no body.
Documents are uploaded in the Allo app, on the receptionist's knowledge screen. This API lists them under `knowledge.files` on [Get configuration](/en/v2/api-reference/agent/get-agent) and deletes them.
## Errors
* `404 AGENT_KNOWLEDGE_NOT_FOUND`: no entry with that id on this line's receptionist. An entry belonging to another line answers the same way.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.
# Delete website knowledge
Source: https://help.withallo.com/en/v2/api-reference/agent/delete-website-knowledge
DELETE /v2/api/numbers/{number}/agent/knowledge/websites/{id}
Removes a website entry from the receptionist's knowledge.
**Required scope:** `AGENTS_WRITE`
## Behavior
Removes a website entry from the receptionist's knowledge, along with the text scraped from it. Returns `204` with no body.
To stop the receptionist using a page without losing the scraped text, [disable the entry](/en/v2/api-reference/agent/update-website-knowledge) instead.
## Errors
* `404 AGENT_KNOWLEDGE_NOT_FOUND`: no entry with that id on this line's receptionist. An entry belonging to another line answers the same way.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.
# Get configuration
Source: https://help.withallo.com/en/v2/api-reference/agent/get-agent
GET /v2/api/numbers/{number}/agent
Returns the whole configuration of a line's AI receptionist in one call: business details, voice and language, prompt, capabilities, business hours, transfer rules, connected calendars and knowledge sources. Call this before a write, because `PATCH` replaces whole collections.
**Required scope:** `AGENTS_READ`
## Behavior
Returns the whole configuration of one line's AI receptionist. The `{number}` path parameter is the Allo phone number in E.164 format.
Read this before any write. [Update configuration](/en/v2/api-reference/agent/update-agent) replaces whole collections, so you need the current state to avoid dropping configuration you did not mean to touch.
## What comes back
* `agent` holds the receptionist's own settings, plus `status` and `is_default`, which are read-only here.
* `prompt` carries either `sections` or `custom_prompt`, never both. `custom_prompt` is what an older line has when its prompt was written as freeform text.
* `capabilities` always reports all three toggles, so `false` means off, not unavailable.
* `scheduling.calendars` lists only the calendars this receptionist books on. To see every calendar connected to the workspace, call [List calendars](/en/v2/api-reference/agent/list-calendars).
* `knowledge.websites` reports each entry without its scraped text. That text is what the receptionist reads, not something you configure.
## Errors
* `403 API_KEY_INSUFFICIENT_SCOPE`: the key does not hold `AGENTS_READ`.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.
# Get a calendar
Source: https://help.withallo.com/en/v2/api-reference/agent/get-calendar
GET /v2/api/calendars/{id}
Returns one connected calendar with the event types its provider currently offers, read live from the provider. This is the catalog you pick from when filling `scheduling.calendars`.
**Required scope:** `AGENTS_READ`
## Behavior
Returns one connected calendar with `available_event_types`, the event types its provider currently offers. This is the catalog you pick from when filling `scheduling.calendars` on [Update configuration](/en/v2/api-reference/agent/update-agent).
The catalog is read live from the provider on every call, so it is always what the provider offers today.
## Reading available\_event\_types
`available_event_types` is absent for a provider that has no event-type concept. That is a different answer from an empty list, which means the provider offers none.
Two fields are worth knowing apart:
* `provider_description` is the blurb written in the calendar provider. It is context, not routing.
* `description`, which you send back in `scheduling.calendars`, is your own note on when the receptionist should book this event type rather than another. That is the text it matches a caller's reason against.
`required_questions` are answers the provider rejects a booking without, so the receptionist collects them during the call. They are read-only, and snapshotted when you select the event type.
## Errors
* `404 AGENT_CALENDAR_NOT_FOUND`: no calendar with that id is visible to you.
* `500 AGENT_CALENDAR_EVENT_TYPES_FETCH_FAILED`: the provider could not be reached. This one is retryable. If it keeps failing, the calendar connection has to be renewed in the Allo app.
# List calendars
Source: https://help.withallo.com/en/v2/api-reference/agent/list-calendars
GET /v2/api/calendars
Lists the calendars connected to your workspace that you can see, whether or not a receptionist books on them. An admin sees every calendar in the workspace, a team member only the ones they connected. Connecting a calendar is an OAuth flow done in the Allo app.
**Required scope:** `AGENTS_READ`
## Behavior
Lists the calendars connected to your workspace, whether or not a receptionist books on them. Each `id` is what the `scheduling.calendars` map on [Update configuration](/en/v2/api-reference/agent/update-agent) is keyed by.
The list is not paginated: it is bounded by your team, not by usage.
## What you can see
Visibility follows the same rule as the Allo app. An admin sees every calendar in the workspace, a team member only the ones they connected themselves. `owner.is_current_user` tells you which is which.
Connecting a calendar is an OAuth flow, done in the Allo app. This endpoint lists what is already connected.
## Event types
Event types are not in this response, because reading them costs one round trip to the provider per calendar. Fetch them one calendar at a time with [Get a calendar](/en/v2/api-reference/agent/get-calendar).
## Errors
* `403 API_KEY_INSUFFICIENT_SCOPE`: the key does not hold `AGENTS_READ`.
# List voices
Source: https://help.withallo.com/en/v2/api-reference/agent/list-voices
GET /v2/api/voices
Lists the voices an AI receptionist can speak with, the same catalog the Allo app offers. Each `id` is what `voice_id` takes, and a voice speaks the language it is listed under.
**Required scope:** `AGENTS_READ`
## Behavior
Lists the voices an AI receptionist can speak with, the same catalog the Allo app offers. Each `id` is what `voice_id` takes on [Update configuration](/en/v2/api-reference/agent/update-agent).
A voice speaks the language it is listed under, so pick one that matches the receptionist's `language`. `demo_url` is an audio sample you can play before choosing.
The list is not paginated: it is a fixed catalog.
## Errors
* `403 API_KEY_INSUFFICIENT_SCOPE`: the key does not hold `AGENTS_READ`.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/agent/overview
Read and write the AI receptionist of an Allo line: prompt, voice, business hours, transfer rules, calendars and knowledge
Every Allo line has an AI receptionist. These endpoints read its whole configuration in one call and write any part of it: business details, voice and language, the prompt it answers with, what it is allowed to do on a call, business hours, transfer rules, the calendars it books on, and what it knows about the business.
**Required scopes:** `AGENTS_READ` to read, `AGENTS_WRITE` to write. Create a key with them in [Settings > API](https://web.withallo.com/settings/api).
Connect the Allo MCP to your AI assistant and configuring a receptionist becomes a conversation about your business instead of a set of requests to write. Same endpoints as this page, a better way to drive them.
## How the configuration is laid out
`GET /v2/api/numbers/{number}/agent` answers "how is this receptionist set up?" in one response, split into seven blocks.
| Block | What it holds |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `agent` | Who the receptionist is: name, business details, language, voice, greeting and closing message, tone, answer length. Also its `status`, which is read-only here. |
| `prompt` | What it is trying to achieve and how it behaves, in six sections. Written with its own endpoint. |
| `capabilities` | What it is allowed to do on a call: `SCHEDULING`, `CALL_TRANSFER`, `WARM_TRANSFER`. |
| `business_hours` | When the business is open, per day, in the timezone you set. |
| `transfer_rules` | The reasons it hands a call over, and where each one goes. |
| `scheduling` | The calendars it books on, with the event types selected for each. |
| `knowledge` | The facts it answers from: free text, scraped websites, uploaded documents. |
## Two merge rules
`PATCH /v2/api/numbers/{number}/agent` applies two different rules, and mixing them up is the one mistake that costs configuration:
* **Single values are merged.** `name`, the business details, `language`, `voice_id`, `greeting_message`, `closing_message`, `tone_of_voice`, `answer_type` and `knowledge.text` keep their current value when you omit them.
* **Collections are replaced.** `capabilities`, `business_hours`, `transfer_rules` and `scheduling.calendars` are complete sets. Send one and it replaces what was configured, omit it and it is left alone.
So adding a single transfer rule means reading the existing ones first and sending them back together with the new one. The same goes for capabilities: a capability left out of the map is turned off, not kept.
A field the API does not know is rejected with `400 UNKNOWN_FIELD` rather than dropped in silence, so a typo never answers `200 OK`.
## Writing the prompt
The prompt has its own endpoint because it is only valid whole. `objective`, `personality` and `behaviors` are required, and every write re-renders the prompt the receptionist answers with, so [Set prompt](/en/v2/api-reference/agent/set-agent-prompt) replaces the full section list.
Facts about the business go in `knowledge`, not in the prompt. Prices, hours, policies and FAQs change often and belong where the receptionist looks them up.
## What this API does not do
* **Uploading documents.** Files are uploaded in the Allo app. Here you list and delete them.
* **Connecting a calendar.** That is an OAuth flow, done in the Allo app. Here you list what is connected and choose what the receptionist books on.
* **Creating a receptionist.** A line has one from the moment it exists.
## Endpoints
The whole receptionist configuration of a line, in one call
Business details, voice, capabilities, hours, transfer rules, calendars, knowledge text
Replace the prompt sections the receptionist answers with
Put the receptionist on the line, or send calls to your business phone
Scrape a page for the receptionist to answer from
Turn an entry off without losing its scraped content
Remove a scraped page from the receptionist's knowledge
Remove an uploaded document from the receptionist's knowledge
The calendars connected to your workspace
One calendar with the event types its provider offers
The voices a receptionist can speak with
# Set prompt
Source: https://help.withallo.com/en/v2/api-reference/agent/set-agent-prompt
PUT /v2/api/numbers/{number}/agent/prompt
Replaces the receptionist's prompt: what it is trying to achieve, who it is, how it handles the call. A prompt is only valid whole, so read the current sections with `GET /v2/api/numbers/{number}/agent` and send them all back, including the ones you are not changing. Facts about the business belong in `knowledge`, not here.
**Required scope:** `AGENTS_WRITE`
## Behavior
Replaces the receptionist's prompt: what it is trying to achieve, who it is, and how it handles the call. A prompt is only valid whole, and every write re-renders what the receptionist answers with, so read the current sections with [Get configuration](/en/v2/api-reference/agent/get-agent) and send them all back, including the ones you are not changing.
The response echoes the prompt with a `title` derived server-side from each `section` key.
## Sections
| Section | Required | Body |
| ---------------------- | -------- | --------- |
| `objective` | Yes | `content` |
| `personality` | Yes | `content` |
| `behaviors` | Yes | `content` |
| `prohibited` | No | `content` |
| `required_fields` | No | `fields` |
| `objective_completion` | No | `content` |
`required_fields` is the one section that carries `fields` instead of `content`, one entry per piece of information the receptionist has to collect. Every other section carries non-blank `content` and no `fields`. Each section may appear at most once, and `content` holds up to 3000 characters.
The three required sections are the minimum the API enforces, not the prompt a business needs. A receptionist with no `prohibited` section was never told what it must not say.
## What belongs elsewhere
Facts about the business go in `knowledge` on [Update configuration](/en/v2/api-reference/agent/update-agent), not here. Prices, opening hours, policies and FAQs change often, and the receptionist looks them up rather than reciting them from the prompt.
The greeting and the closing message are their own fields too. Allo already handles greeting, closing, language switching, contact confirmation, transfer and booking mechanics, so restating them in the prompt makes the call worse, not better.
## Errors
* `400 PROMPT_SECTIONS_REQUIRED`: `sections` was missing or empty. It replaces the whole prompt, so it has to carry every section you want to keep.
* `400 INVALID_AGENT_PROMPT_SECTION`: an unknown section key. The allowed ones are listed in the message.
* `400 DUPLICATE_AGENT_PROMPT_SECTION`: a section appears more than once.
* `400 INVALID_AGENT_PROMPT_SECTION_BODY`: a section carries the wrong body, for example `fields` on `objective`.
* `400 MISSING_AGENT_PROMPT_SECTION`: one of `objective`, `personality` or `behaviors` is missing or blank.
* `400 AGENT_PROMPT_SECTION_TOO_LONG`: a section's `content` is over 3000 characters.
* `400 AGENT_PROMPT_TOO_LONG`: the prompt rendered from all sections is over 25000 characters.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.
# Turn on or off
Source: https://help.withallo.com/en/v2/api-reference/agent/set-agent-status
PUT /v2/api/numbers/{number}/agent/status
Puts the receptionist on the line (`ACTIVE`) or takes it off (`FORWARDING`, which sends calls to your business phone instead). This reprograms how a live line routes real calls, so confirm with a person before calling it.
**Required scope:** `AGENTS_WRITE`
## Behavior
Puts the AI receptionist on the line or takes it off, and returns the whole configuration with the new status.
* `ACTIVE`: the receptionist answers incoming calls.
* `FORWARDING`: it does not, and calls go to your business phone instead.
This reprograms how a live line routes real calls. It is deliberately its own endpoint, so a configuration write can never flip it by accident. Configure the receptionist fully before switching it on, and confirm with a person before calling it.
Turning the receptionist off forwards calls to your workspace's business phone number, so one has to be set. That number is not the receptionist's `business_phone` and is not writable through this API.
## Errors
* `400 AGENT_NO_FORWARDING_NUMBER`: `FORWARDING` was requested and no business phone is set on the workspace. Until one is, the receptionist can only stay `ACTIVE`.
* `409 AGENT_LINE_NOT_ASSIGNED`: the line has no phone number assigned, so it can neither answer nor forward.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.
# Update configuration
Source: https://help.withallo.com/en/v2/api-reference/agent/update-agent
PATCH /v2/api/numbers/{number}/agent
Updates any part of the configuration except the prompt and the on/off status. Single values are merged, collections are replaced. This does not put the receptionist on the line: that is `PUT /v2/api/numbers/{number}/agent/status`.
**Required scope:** `AGENTS_WRITE`
## Behavior
Updates any part of the receptionist's configuration except the prompt and the on/off status. Returns the whole configuration after the write, in the same shape as [Get configuration](/en/v2/api-reference/agent/get-agent).
Two merge rules apply:
* **Single values are merged.** `name`, the business details, `language`, `voice_id`, `greeting_message`, `closing_message`, `tone_of_voice`, `answer_type` and `knowledge.text` keep their current value when you omit them.
* **Collections are replaced.** `capabilities`, `business_hours`, `transfer_rules` and `scheduling.calendars` are complete sets. Send one and it replaces what was configured, omit it and it is left alone.
To add one transfer rule, read the existing rules first and send them back with the new one. To keep a capability on, include it in every `capabilities` map you send.
A field this endpoint does not declare is rejected with `400 UNKNOWN_FIELD`, including read-only ones such as `custom_prompt`, `prompt_metadata` and `status`. Nothing is dropped in silence.
## Transfer rules
`description` is the field that decides whether a transfer works. The receptionist matches what the caller says they want against this text, so write it as the caller's reason ("billing or invoice questions", "wants to book a repair"), not as an instruction to the receptionist.
Each rule needs the target its `type` implies:
| Type | Required field | Goes to |
| ----------------- | -------------------- | ------------------------------------------------ |
| `EXTERNAL_NUMBER` | `target_number` | Any phone number, in E.164 format |
| `MEMBER` | `target_member_id` | A teammate, by their id from `GET /v2/api/users` |
| `INBOX` | `target_line_number` | Another of your Allo numbers |
Point the target at somewhere other than the line you are configuring. A rule that sends the caller back to the same line hands them to the receptionist that just transferred them, and the call loops. The API accepts such a rule, so this one is on you to avoid.
Rules are recreated on every write, so an error names the entry that failed by its index, for example `transfer_rules[1].description`.
## Business hours
`schedule` is required whenever you send `business_hours`. Times are seconds since midnight, so 9am to 5pm is `32400` to `61200`, and a day left out of the list is closed.
## Scheduling calendars
`scheduling.calendars` is a map keyed by a calendar `id` from [List calendars](/en/v2/api-reference/agent/list-calendars). A calendar the receptionist does not have yet is linked to it, one mapped to `[]` stays linked with no event type selected, and one left out of the map loses access.
Event types come from [Get a calendar](/en/v2/api-reference/agent/get-calendar). Send `id`, `slug`, `title` and `length_in_minutes` back as they were read, and add your own `description` to say when the receptionist should book that one rather than another.
Connecting a calendar to the workspace is an OAuth flow, done in the Allo app. This endpoint chooses among the connections that already exist.
## Field limits
| Field | Limit |
| ---------------------------------------------------------------------------------- | ---------------- |
| `name`, `business_name`, `business_email`, `business_website`, `business_industry` | 64 characters |
| `business_address` | 255 characters |
| `greeting_message`, `closing_message` | 1000 characters |
| `transfer_rules[].description` | 255 characters |
| `transfer_rules[].transfer_message` | 1000 characters |
| `knowledge.text` | 25000 characters |
## Errors
* `400 UNKNOWN_FIELD`: a field this endpoint does not accept, named in `param`.
* `400 INVALID_REQUEST_BODY`: a declared field failed validation. The failing field is in `errors[]`.
* `400 MISSING_FIELD`: a required part of a collection is missing, named in `param`.
* `400 INVALID_AGENT_LANGUAGE` / `400 INVALID_AGENT_CAPABILITY`: an unknown value. The allowed ones are listed in the message.
* `400 INVALID_TIMEZONE`: `business_hours.timezone` is not an IANA identifier.
* `400 INVALID_PHONE_NUMBER`: `business_phone` is not a usable number.
* `400 AGENT_TRANSFER_RULE_TARGET_REQUIRED`: a rule is missing the target its type requires.
* `403 AGENT_TRANSFER_RULE_MEMBER_NO_LINE_ACCESS`: the target teammate has no access to this line.
* `404 AGENT_VOICE_NOT_FOUND`: no voice with that `voice_id`. List them with [List voices](/en/v2/api-reference/agent/list-voices).
* `404 AGENT_CALENDAR_NOT_FOUND`: a calendar id in the map is not one you can see.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.
# Enable or disable a website
Source: https://help.withallo.com/en/v2/api-reference/agent/update-website-knowledge
PATCH /v2/api/numbers/{number}/agent/knowledge/websites/{id}
Turns a website entry on or off without losing its scraped content.
**Required scope:** `AGENTS_WRITE`
## Behavior
Turns a website knowledge entry on or off. `DISABLED` keeps the entry and its scraped text and stops the receptionist answering from it, so you can put it back with `ACTIVE` without scraping the page again.
The `{id}` path parameter is an entry id from [Get configuration](/en/v2/api-reference/agent/get-agent), under `knowledge.websites`.
## Errors
* `404 AGENT_KNOWLEDGE_NOT_FOUND`: no entry with that id on this line's receptionist. An entry belonging to another line answers the same way.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.
# Outbound metrics
Source: https://help.withallo.com/en/v2/api-reference/analytics/outbound
POST /v2/api/analytics/outbound
Returns outbound call metrics: dial funnel (dials → connected → conversations → conversions), time series, heatmap, leaderboard, and time spent metrics.
**Required scope:** `CONVERSATIONS_READ`
## Extend parameter
Use `extend=items` with a `stage` to include the actual list of outbound calls behind the funnel numbers in the response.
| Value | Requires | Effect |
| ------- | -------- | -------------------------------------------------------------------------------- |
| `items` | `stage` | Includes a paginated `items` field with the calls for the specified funnel stage |
### Stages
| Stage | Calls included |
| -------------- | --------------------------------------------- |
| `DIAL` | All outbound dials |
| `CONNECTED` | Calls where the recipient picked up |
| `CONVERSATION` | Connected calls longer than 1 minute |
| `CONVERSION` | Calls tagged with one of the specified `tags` |
### Example with drilldown
```json theme={null}
{
"date": { "from": "2026-04-14", "to": "2026-04-21" },
"tags": ["meeting_booked"],
"granularity": "DAY",
"extend": "items",
"stage": "CONVERSION",
"page": 1,
"size": 20
}
```
The response includes the full funnel metrics **plus** an `items` field with the paginated call list for the requested stage.
Passing `extend=items` without `stage` returns a `400` error with code `MISSING_PARAMETER`.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/analytics/overview
Pre-computed call metrics and team performance analytics
The Analytics API provides pre-computed metrics that mirror the Allo analytics dashboard. All metrics include period-over-period comparison.
## Endpoints
Team-wide KPIs (total calls, talk time, answer rate) with per-user breakdown
Outbound dial funnel, time series, heatmap, and leaderboard. Use `extend=items` to drill into calls.
# Team metrics
Source: https://help.withallo.com/en/v2/api-reference/analytics/team-summary
POST /v2/api/analytics/overview
Returns team-wide KPIs with period-over-period comparison and a per-user breakdown. Covers all calls (inbound + outbound).
**Required scope:** `CONVERSATIONS_READ`
# Get many conversation items
Source: https://help.withallo.com/en/v2/api-reference/conversations/batch-get
POST /v2/api/conversations/items/batch
Returns multiple conversation items by their IDs in a single request. Use this to fetch full details (summary, tags, recording, etc.) for items returned by the analytics drilldown or any other list.
**Required scope:** `CONVERSATIONS_READ`
## Limits
* Maximum **100 items** per batch request
* Exceeding this returns a `400` error with code `BATCH_TOO_LARGE`
## Item ID format
* Call IDs start with `cll-` (e.g., `cll-abc123`)
* Message IDs start with `msg-` (e.g., `msg-def456`)
Items that don't exist are silently omitted from the response.
## Field notes
| Field | Null when |
| --------------- | --------------------------------------------------------- |
| `summary` | SMS items, or calls where AI summary is not yet available |
| `duration` | SMS items (only applies to calls) |
| `result` | SMS items (only applies to calls) |
| `recording_url` | Recording disabled, call not answered, or SMS items |
| `transcript` | Not requested via `extend=transcript`, or SMS items |
| `content` | Call items (only applies to SMS) |
| `status` | Call items (only applies to SMS) |
### Extend parameter
| Value | Effect |
| ------------ | ------------------------------------------------------------- |
| `transcript` | Include full call transcripts for all call items in the batch |
Passing an unsupported value returns a `400` error with code `UNSUPPORTED_EXTEND_VALUE`.
# Execute conversation action
Source: https://help.withallo.com/en/v2/api-reference/conversations/execute-action
PUT /v2/api/conversations/{contact_number}/action
Execute an action on a conversation.
**Required scope:** `CONVERSATIONS_WRITE`
## Available actions
| Action | Effect |
| ----------- | --------------------------------------------------- |
| `READ` | Mark the conversation as read |
| `UNREAD` | Mark the conversation as unread |
| `ARCHIVE` | Archive the conversation and mark all items as read |
| `UNARCHIVE` | Unarchive the conversation |
Passing an unsupported action returns a `400` error with code `INVALID_ACTION`.
## Idempotency
All actions are **idempotent** — calling `READ` on an already-read conversation is a no-op and returns `200`.
This endpoint also supports the `Idempotency-Key` header. See [Idempotency](/en/v2/api-reference/guides/error-handling#idempotency).
## Scoping to a line
Omit `allo_number` to apply the action across all Allo numbers. Provide it to scope the action to a specific line.
# Get conversation item
Source: https://help.withallo.com/en/v2/api-reference/conversations/get-item
GET /v2/api/conversations/items/{id}
Returns a single call or SMS message by its ID.
**Required scope:** `CONVERSATIONS_READ`
## Item ID format
* Call IDs start with `cll-` (e.g., `cll-abc123`)
* Message IDs start with `msg-` (e.g., `msg-def456`)
Passing an ID with an unrecognized prefix returns a `400` error with code `INVALID_ITEM_ID`.
## Field notes
| Field | Null when |
| --------------- | --------------------------------------------------------- |
| `summary` | SMS items, or calls where AI summary is not yet available |
| `duration` | SMS items (only applies to calls) |
| `result` | SMS items (only applies to calls) |
| `recording_url` | Recording disabled, call not answered, or SMS items |
| `transcript` | Not requested via `extend=transcript`, or SMS items |
| `content` | Call items (only applies to SMS) |
| `status` | Call items (only applies to SMS) |
### Extend parameter
| Value | Effect |
| ------------ | ----------------------------- |
| `transcript` | Include full call transcripts |
Passing an unsupported value returns a `400` error with code `UNSUPPORTED_EXTEND_VALUE`.
# List conversations
Source: https://help.withallo.com/en/v2/api-reference/conversations/list-conversations
GET /v2/api/conversations
Returns a paginated list of conversations grouped by contact phone number, sorted by most recent activity.
**Required scope:** `CONVERSATIONS_READ`
This endpoint is paginated. Use `page` and `size` query parameters to control results. See [Pagination](/en/v2/api-reference/guides/pagination).
## Field notes
| Field | Null when |
| ------------------------- | --------------------------------------------------------------- |
| `last_item.summary` | SMS items, or calls where AI summary is not yet available |
| `last_item.duration` | SMS items (only applies to calls) |
| `last_item.result` | SMS items (only applies to calls) |
| `last_item.recording_url` | Recording disabled, call not answered, or SMS items |
| `last_item.transcript` | Not requested via `extend=transcript`, or SMS items |
| `last_item.content` | Call items (only applies to SMS) |
| `last_item.status` | Call items (only applies to SMS) |
| `last_item.contacts` | Empty array when no matching contact exists in the address book |
### Extend parameter
The `extend` query parameter accepts a comma-separated list of optional fields to include. Currently supported:
| Value | Effect |
| ------------ | --------------------------------------------------- |
| `transcript` | Include full call transcripts on conversation items |
Passing an unsupported value returns a `400` error with code `UNSUPPORTED_EXTEND_VALUE`.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/conversations/overview
Unified call and SMS history with keyword search and rich filtering
The Conversations API provides a unified view of all calls and SMS messages, grouped by contact phone number. A "conversation" is the full history of interactions between your Allo number(s) and an external phone number.
## Key concepts
**Conversation** — a summary of interactions with a `contact_number`, including the matched contacts and the last interaction (last call, last SMS). Use the `/items` endpoints to access the full history.
**Conversation item** — a single call or SMS message. Use the search or get endpoints to retrieve full item details including transcripts, summaries, and recordings.
**Contact matching** — each conversation includes matched contacts with their company and deal information. A phone number can match zero, one, or multiple contacts.
**Keyword search** — search endpoints support keyword search across call transcripts, summaries, and SMS content. Use `sort=RELEVANCE` to order results by relevance.
**Extend** — use `?extend=transcript` to include full call transcripts on items. Transcripts are excluded by default to keep responses lightweight.
## Endpoints
Conversation summaries with the last interaction per contact number
Full detail for a single call or SMS
Search calls and SMS across all conversations
Fetch multiple items by ID in a single request
Mark as read, unread, archive, or unarchive a conversation
# Search conversation items
Source: https://help.withallo.com/en/v2/api-reference/conversations/search-conversation-items
POST /v2/api/conversations/items/search
Search and filter items across all conversations. Supports keyword search across transcripts, summaries, and message content.
**Required scope:** `CONVERSATIONS_READ`
This endpoint is paginated. Use `page` and `size` in the request body to control results. See [Pagination](/en/v2/api-reference/guides/pagination).
## Search behavior
The `search` field is a **keyword search**, not a natural language query. Extract keywords from the user's question before passing them.
| User asks | `search` value |
| ----------------------------------------------------- | ---------------------- |
| "Find calls where customers complained about billing" | `"billing complaint"` |
| "What did we discuss about the refund policy?" | `"refund policy"` |
| "Show me conversations mentioning enterprise pricing" | `"enterprise pricing"` |
**How matching works:**
* Terms are **AND'd** — `"billing refund"` matches items containing **both** words
* **Prefix matching** is used — `"bill"` matches "billing", "billed", etc.
* Searches across: call transcripts, call summaries, and SMS message content
* Use `sort=RELEVANCE` to rank results by match quality instead of date
## Field notes
| Field | Null when |
| --------------- | --------------------------------------------------------- |
| `summary` | SMS items, or calls where AI summary is not yet available |
| `duration` | SMS items (only applies to calls) |
| `result` | SMS items (only applies to calls) |
| `recording_url` | Recording disabled, call not answered, or SMS items |
| `transcript` | Not requested via `extend=transcript`, or SMS items |
| `content` | Call items (only applies to SMS) |
| `status` | Call items (only applies to SMS) |
| `tags` | SMS items (tags only apply to calls) |
### Extend parameter
| Value | Effect |
| ------------ | ------------------------------------------ |
| `transcript` | Include full call transcripts on each item |
Passing an unsupported value returns a `400` error with code `UNSUPPORTED_EXTEND_VALUE`.
# Update call summary
Source: https://help.withallo.com/en/v2/api-reference/conversations/update-summary
PATCH /v2/api/conversations/items/{id}/summary
Replace the markdown content of a call's AI-generated summary.
Only call items have summaries — passing an SMS ID (`msg-*`) returns `400 INVALID_ITEM_ID`. If multiple completed summary templates exist on the same call, set `template_key` to disambiguate.
**Required scope:** `CONVERSATIONS_WRITE`
Use this endpoint to replace the markdown body of a call's AI-generated summary — for example, after an agent reviews the auto-generated text and corrects it.
Only call items have summaries. Passing an SMS ID (`msg-*`) returns `400 INVALID_ITEM_ID`.
## Choosing a template
Most calls have a single completed summary, so `template_key` can be omitted. When a call has more than one completed summary (e.g., both `MARKDOWN_CLASSIC` and `MARKDOWN_SHORT_CALL`), `template_key` is **required** — otherwise the request fails with `400 SUMMARY_TEMPLATE_KEY_REQUIRED`.
| Template | Use case |
| --------------------- | ------------------------------------- |
| `MARKDOWN_CLASSIC` | Full structured summary with sections |
| `MARKDOWN_SHORT_CALL` | One-paragraph summary for short calls |
If the call has no completed summary matching the supplied `template_key`, the request returns `404 SUMMARY_TEMPLATE_NOT_FOUND`.
## Error codes
| Code | Status | When |
| ------------------------------- | ------ | ------------------------------------------------------------------------ |
| `INVALID_ITEM_ID` | 400 | The ID prefix isn't `cll-` |
| `INVALID_REQUEST_BODY` | 400 | `content` is missing or exceeds 100,000 characters |
| `SUMMARY_TEMPLATE_KEY_REQUIRED` | 400 | The call has multiple completed templates and `template_key` was omitted |
| `CONVERSATION_ITEM_NOT_FOUND` | 404 | The call doesn't exist or the API key's owner has no access to it |
| `SUMMARY_TEMPLATE_NOT_FOUND` | 404 | No completed summary exists for the requested `template_key` |
# Overview
Source: https://help.withallo.com/en/v2/api-reference/crm/companies-overview
Manage companies in your Allo CRM
The Companies API lets you create, read, update, and search your team's companies.
## Scopes
| Scope | Access |
| ----------- | --------------------------- |
| `CRM_READ` | Get and search companies |
| `CRM_WRITE` | Create and update companies |
## Associations
* **Company → People**: A company can have multiple people associated with it
* **Company → Deals**: A company can have deals linked to it
## Search
Companies support search via `POST /v2/api/crm/companies/search` with named filters.
Available filters: `name`, `website`, `industry`.
## Endpoints
Get a company by ID
Create a new company
Update a company
Search companies with filters
# Create company
Source: https://help.withallo.com/en/v2/api-reference/crm/create-company
POST /v2/api/crm/companies
Creates a new company in your CRM.
**Required scope:** `CRM_WRITE`
## Body fields
| Field | Type | Required | Description |
| ---------- | ------ | -------- | ------------------- |
| `name` | string | **yes** | Company name |
| `website` | string | no | Company website URL |
| `industry` | string | no | Industry or sector |
# Create person
Source: https://help.withallo.com/en/v2/api-reference/crm/create-person
POST /v2/api/crm/people
Creates a new person in your CRM.
**Required scope:** `CRM_WRITE`
## Body fields
| Field | Type | Required | Default | Description |
| ------------------------ | ------- | -------- | ------- | -------------------------------------------------------------------------------------------------- |
| `name` | string | no | | First name |
| `last_name` | string | no | | Last name |
| `job_title` | string | no | | Job title |
| `website` | string | no | | Website URL |
| `address` | string | no | | Address |
| `numbers` | array | no | | Phone numbers in E.164 format |
| `emails` | array | no | | Email addresses |
| `company_id` | string | no | | Associated company ID |
| `allow_duplicate_number` | boolean | no | `false` | Allow creating the person even if one or more phone numbers are already assigned to another person |
At least one of `name` or `last_name` is required.
## Associations
Pass a `company_id` to link the person to an existing company. The company must exist or the request returns an error.
## Duplicate phone numbers
By default, creating a person with phone numbers that already belong to another person in your team returns a **409 Conflict** error. The error response includes the IDs of the existing people so you can update them instead.
To create the person anyway, set `allow_duplicate_number` to `true`.
```json theme={null}
{
"name": "John",
"numbers": ["+33612345678"],
"allow_duplicate_number": true
}
```
To find the existing person by phone number, use [Search people](/en/v2/api-reference/crm/search-people) with the `phone_number` filter.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/crm/deals-overview
Access deals synced from your CRM integrations
The Deals API gives you read-only access to deals synced from your CRM integrations.
Deals are synced from integrations and cannot be created, updated, or deleted via the API.
## Scopes
| Scope | Access |
| ---------- | -------------------- |
| `CRM_READ` | Get and search deals |
## Associations
* **Deal → Company**: A deal can be associated with one company (`company_id`)
* **Deal → Person**: A deal can be linked to a person via integration sync
## Search
Deals support search via `POST /v2/api/crm/deals/search` with full-text search and a `stage` filter.
## Endpoints
Get a deal by ID
Search deals by keyword
# Get company
Source: https://help.withallo.com/en/v2/api-reference/crm/get-company
GET /v2/api/crm/companies/{id}
Returns a single company by ID.
**Required scope:** `CRM_READ`
# Get deal
Source: https://help.withallo.com/en/v2/api-reference/crm/get-deal
GET /v2/api/crm/deals/{id}
Returns a single deal by ID.
**Required scope:** `CRM_READ`
## Response fields
| Field | Description |
| ------------ | --------------------------------------------------------------------------------------------- |
| `value` | Monetary value of the deal |
| `currency` | ISO 4217 currency code |
| `close_date` | Close date (null if not set) |
| `company` | Associated company (`id` + `name`), null if not linked |
| `person` | Linked person (`id` + `name` + `last_name`), null if no person is linked via integration data |
# Get person
Source: https://help.withallo.com/en/v2/api-reference/crm/get-person
GET /v2/api/crm/people/{id}
Returns a single person by ID.
**Required scope:** `CRM_READ`
# Overview
Source: https://help.withallo.com/en/v2/api-reference/crm/people-overview
Manage people in your Allo CRM
The People API lets you create, read, update, and search your team's contacts.
## Scopes
| Scope | Access |
| ----------- | ------------------------ |
| `CRM_READ` | Get and search people |
| `CRM_WRITE` | Create and update people |
## Associations
* **Person → Company**: A person can belong to one company (`company_id`)
## Search
People support search via `POST /v2/api/crm/people/search` with named filters and full-text search.
Available filters: `name`, `last_name`, `job_title`, `website`, `company`, `phone_number`, `email`, `deal_status`.
## Endpoints
Get a person by ID
Create a new person
Update a person
Search people with filters
# Search companies
Source: https://help.withallo.com/en/v2/api-reference/crm/search-companies
POST /v2/api/crm/companies/search
Search and filter companies in your CRM.
**Required scope:** `CRM_READ`
This endpoint is paginated. Use `page` and `size` in the request body to control results. See [Pagination](/en/v2/api-reference/guides/pagination).
## Request body
| Field | Type | Description |
| --------- | ------- | ------------------------------------------------------------------------------------------- |
| `filters` | object | Named filters (see below) |
| `sort` | string | Sort order: `DATE_DESC`, `DATE_ASC`, `NAME_ASC`, `NAME_DESC`, `CREATED_DESC`, `CREATED_ASC` |
| `page` | integer | Page number (1-indexed) |
| `size` | integer | Results per page (max 100) |
## Filters
Pass an object with named fields. All provided filters are combined with AND.
```json theme={null}
{
"filters": {
"name": "Acme",
"industry": "Technology"
},
"sort": "NAME_ASC",
"page": 1,
"size": 20
}
```
### Available filter fields
| Field | Match type | Description |
| ---------- | ---------- | --------------- |
| `name` | contains | Company name |
| `website` | contains | Website URL |
| `industry` | contains | Industry sector |
# Search deals
Source: https://help.withallo.com/en/v2/api-reference/crm/search-deals
POST /v2/api/crm/deals/search
Search and filter deals in your CRM.
**Required scope:** `CRM_READ`
This endpoint is paginated. Use `page` and `size` in the request body to control results. See [Pagination](/en/v2/api-reference/guides/pagination).
## Request body
| Field | Type | Description |
| --------- | ------- | ------------------------------------------------------------------------------------------- |
| `filters` | object | Named filters (see below) |
| `search` | string | Full-text keyword search across deal name and company |
| `sort` | string | Sort order: `DATE_DESC`, `DATE_ASC`, `NAME_ASC`, `NAME_DESC`, `CREATED_DESC`, `CREATED_ASC` |
| `page` | integer | Page number (1-indexed) |
| `size` | integer | Results per page (max 100) |
## Filters
| Field | Match type | Description |
| ------- | ---------- | ----------------- |
| `stage` | exact | Deal stage/status |
# Search people
Source: https://help.withallo.com/en/v2/api-reference/crm/search-people
POST /v2/api/crm/people/search
Search and filter people in your CRM with advanced filtering, sorting, and pagination.
**Required scope:** `CRM_READ`
This endpoint is paginated. Use `page` and `size` in the request body to control results. See [Pagination](/en/v2/api-reference/guides/pagination).
## Request body
| Field | Type | Description |
| --------- | ------- | ------------------------------------------------------------------------------------------- |
| `filters` | object | Named filters (see below) |
| `search` | string | Full-text keyword search across person fields |
| `sort` | string | Sort order: `DATE_DESC`, `DATE_ASC`, `NAME_ASC`, `NAME_DESC`, `CREATED_DESC`, `CREATED_ASC` |
| `page` | integer | Page number (1-indexed) |
| `size` | integer | Results per page (max 100) |
## Filters
Pass an object with named fields. All provided filters are combined with AND.
```json theme={null}
{
"filters": {
"job_title": "engineer",
"company": "Acme"
},
"sort": "NAME_ASC",
"page": 1,
"size": 20
}
```
### Available filter fields
| Field | Match type | Description |
| -------------- | ---------- | ------------- |
| `name` | contains | First name |
| `last_name` | contains | Last name |
| `job_title` | contains | Job title |
| `website` | contains | Website URL |
| `company` | contains | Company name |
| `phone_number` | exact | Phone number |
| `email` | contains | Email address |
| `deal_status` | exact | Deal status |
# Update company
Source: https://help.withallo.com/en/v2/api-reference/crm/update-company
PUT /v2/api/crm/companies/{id}
Updates an existing company. Only provided fields will be updated.
**Required scope:** `CRM_WRITE`
## Partial update
This endpoint performs a partial update -- only the fields you include in the request body are modified. Omitted fields are left unchanged.
All fields from the create endpoint are accepted and optional.
# Update person
Source: https://help.withallo.com/en/v2/api-reference/crm/update-person
PUT /v2/api/crm/people/{id}
Updates an existing person. Only provided fields will be updated.
**Required scope:** `CRM_WRITE`
## Partial update
This endpoint performs a partial update -- only the fields you include in the request body are modified. Omitted fields are left unchanged.
All fields from the create endpoint are accepted and optional.
## Unlinking a company
Send `company_id` as an empty string (`""`) to remove the person's association with their current company.
# Append numbers
Source: https://help.withallo.com/en/v2/api-reference/dialing-queues/append-numbers
POST /v2/api/dialing-queues/current/numbers
Appends phone numbers to the Power Dialer queue assigned to the authenticated user. Creates the queue implicitly if none exists. Send `user_id` or `email` to append to a teammate's queue — if that teammate has no current queue, one is created with the API key owner as `creator_id` and the teammate as `assignee_id`. `user_id` wins when both are provided.
## Targeting a teammate's queue
By default, numbers are appended to the queue assigned to the API key owner. To append to a teammate's queue, send `user_id` or `email` in the **JSON body**. The teammate must belong to the same team as the API key owner.
* `user_id` — wins when both are provided. Resolve teammate ids via [`GET /v2/api/users`](/en/v2/api-reference/users/list-users).
* `email` — used only when `user_id` is absent.
If the teammate has no current queue, one is created with the API key owner recorded as `creator_id` and the teammate as `assignee_id`. If the resolved user isn't on your team, the response is `404 ASSIGNEE_NOT_FOUND`.
# Clear queue numbers
Source: https://help.withallo.com/en/v2/api-reference/dialing-queues/clear-numbers
DELETE /v2/api/dialing-queues/current/numbers
Removes numbers from the queue assigned to the authenticated user. Exactly one filter must be supplied via query string: `number` (E.164), `position` (0-based index), `number` + `position` together (delete a specific occurrence of a duplicate), or `unassigned=true` (remove every entry that has not been called yet). Combining `unassigned` with `number` or `position` is rejected. Pass `user_id` or `email` to clear a teammate's queue instead — `user_id` wins when both are provided.
## Targeting a teammate's queue
By default, this clears numbers from the queue assigned to the API key owner. To clear a teammate's queue, pass `user_id` or `email` as a **query parameter**. The teammate must belong to the same team as the API key owner.
* `user_id` — wins when both are provided. Resolve teammate ids via [`GET /v2/api/users`](/en/v2/api-reference/users/list-users).
* `email` — used only when `user_id` is absent.
If the resolved user isn't on your team, the response is `404 ASSIGNEE_NOT_FOUND`.
# List current queue numbers
Source: https://help.withallo.com/en/v2/api-reference/dialing-queues/get-current
GET /v2/api/dialing-queues/current
Returns the numbers in the Power Dialer queue currently assigned to the authenticated user, paginated and ordered by `position` ascending. `data` is the list of numbers (use `page`/`size` and read `pagination` to page through them); the `queue` key carries the queue's metadata (id, name, settings) without its numbers. To target a teammate's queue, pass either `user_id` or `email` as a query parameter (`user_id` wins when both are sent); the target must belong to the same team as the API key owner. When the user has no queue, the response is `200` with an empty `data` array, a zeroed `pagination`, and no `queue` (not a `404`).
## Pagination
This endpoint follows the standard list contract: `data` is the array of the current queue's numbers (ordered by `position` ascending), alongside a top-level `pagination` block.
* `page` — 1-indexed page number (default `1`).
* `size` — numbers per page (default `20`, max `100`).
* Read `pagination` (`total_count`, `total_pages`, `has_more`) to page through the full list.
The queue's own metadata (id, name, `voicemail_handling`, `do_not_disturb`, creator/assignee) is returned under the top-level `queue` key — without the numbers, since those are paginated in `data`. The `queue` field stays the same across pages.
When the user has no queue, the response is `200` with an empty `data` array, a zeroed `pagination`, and no `queue` key — not a `404`.
## Targeting a teammate's queue
By default, this returns the queue assigned to the API key owner. To inspect a teammate's queue, pass either `user_id` or `email` as a **query parameter**. The teammate must belong to the same team as the API key owner.
* `user_id` — wins when both are provided. Resolve teammate ids via [`GET /v2/api/users`](/en/v2/api-reference/users/list-users).
* `email` — used only when `user_id` is absent.
If the resolved user isn't on your team, the response is `404 ASSIGNEE_NOT_FOUND` — the same error is returned whether the user doesn't exist or isn't a teammate, so API consumers cannot enumerate users.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/dialing-queues/overview
Manage Power Dialer queues programmatically
The Power Dialer API lets you manage a user's queue — append numbers, configure it, clear or reset it, and read its state.
Each user has at most one active Power Dialer queue at a time. The queue is created implicitly the first time you append numbers or call reset.
## Required scope
All endpoints require the `DIALING_QUEUE_READ_WRITE` scope on your API key.
## Assigning a queue to a teammate
Every endpoint accepts `user_id` or `email` to act on a teammate's queue instead of the API key owner's. The wire location depends on the endpoint (query string vs JSON body) — see each endpoint's "Targeting a teammate's queue" section for specifics.
Rules that apply to every endpoint:
* `user_id` wins when both `user_id` and `email` are provided.
* The teammate must belong to the same team as the API key owner.
* If the resolved user doesn't exist or isn't a teammate, the API returns `404 ASSIGNEE_NOT_FOUND`. The same error covers both cases on purpose, so API consumers cannot enumerate users.
* When you append to a teammate who has no current queue, one is created with the API key owner as `creator_id` and the teammate as `assignee_id`.
## Endpoints
Retrieve the queue assigned to a user (yourself or a teammate)
Update the queue name, voicemail handling, or do-not-disturb
Add phone numbers (and optional contact metadata) to a queue
Remove specific numbers, a position, or every unassigned entry
Discard the current queue and start a fresh one
# Reset current queue
Source: https://help.withallo.com/en/v2/api-reference/dialing-queues/reset-current
POST /v2/api/dialing-queues/current
Creates a fresh, empty queue assigned to the authenticated user. Any older queue with the same assignee stops being returned by `GET /current` (the newest queue wins). Send `user_id` or `email` to create the queue for a teammate instead — the API key owner is recorded as `creator_id`, the teammate as `assignee_id`. `user_id` wins when both are provided.
## Targeting a teammate's queue
By default, this creates an empty queue for the API key owner. To create the queue for a teammate instead, send `user_id` or `email` in the **JSON body**. The teammate must belong to the same team as the API key owner.
* `user_id` — wins when both are provided. Resolve teammate ids via [`GET /v2/api/users`](/en/v2/api-reference/users/list-users).
* `email` — used only when `user_id` is absent.
The API key owner is recorded as `creator_id` and the teammate as `assignee_id`. If the resolved user isn't on your team, the response is `404 ASSIGNEE_NOT_FOUND`.
# Upsert current queue
Source: https://help.withallo.com/en/v2/api-reference/dialing-queues/update-current
PATCH /v2/api/dialing-queues/current
Creates or updates the config of the queue assigned to the authenticated user. Send `user_id` or `email` to act on a teammate's queue instead — `user_id` wins when both are provided.
## Targeting a teammate's queue
By default, this updates the config of the queue assigned to the API key owner. To update a teammate's queue, send `user_id` or `email` in the **JSON body**. The teammate must belong to the same team as the API key owner.
* `user_id` — wins when both are provided. Resolve teammate ids via [`GET /v2/api/users`](/en/v2/api-reference/users/list-users).
* `email` — used only when `user_id` is absent.
If the resolved user isn't on your team, the response is `404 ASSIGNEE_NOT_FOUND`.
# Create conversation note
Source: https://help.withallo.com/en/v2/api-reference/notes/create-conversation-note
POST /v2/api/conversations/{contact_number}/notes
Adds an internal team note to a conversation. Notes are never visible to the contact.
**Required scope:** `NOTES_WRITE`
## Behavior
Adds an internal team note to the conversation with `contact_number`. Notes are never visible to the contact.
Identify the line the conversation belongs to with either `allo_number` (E.164, list your lines with `GET /v2/api/numbers`) or `sender_id` (for sender-ID inbox conversations). Omitting both returns `400` with code `MISSING_ALLO_NUMBER_OR_SENDER_ID`.
## Mentions
Mention teammates inline in `content` with `@[Display Name](usr-xxxx)` — they receive the same push, email, and in-app notifications as mentions made from the Allo apps. See the [mentions guide](/en/v2/api-reference/notes/overview#mentions).
## Errors
| Status | Code | When |
| ------ | ---------------------------------- | -------------------------------------------------- |
| `400` | `EMPTY_NOTE_CONTENT` | `content` is missing or blank |
| `400` | `NOTE_CONTENT_TOO_LONG` | `content` exceeds 4,000 characters |
| `400` | `MISSING_ALLO_NUMBER_OR_SENDER_ID` | Neither `allo_number` nor `sender_id` was provided |
| `403` | `ALLO_NUMBER_FORBIDDEN` | You do not have access to this Allo line |
| `404` | `SENDER_ID_NOT_FOUND` | No sender ID with this identifier on your account |
# Create person note
Source: https://help.withallo.com/en/v2/api-reference/notes/create-person-note
POST /v2/api/crm/people/{person_id}/notes
Adds a note to a person's CRM profile.
**Required scope:** `NOTES_WRITE`
## Behavior
Adds a note to the CRM profile of the person identified by `person_id` — the `per-*` `id` from the [People API](/en/v2/api-reference/crm/people-overview).
## Mentions
Mention teammates inline in `content` with `@[Display Name](usr-xxxx)` — they receive the same push, email, and in-app notifications as mentions made from the Allo apps. See the [mentions guide](/en/v2/api-reference/notes/overview#mentions).
## Errors
| Status | Code | When |
| ------ | --------------------------- | ------------------------------------------------------------------------ |
| `400` | `EMPTY_NOTE_CONTENT` | `content` is missing or blank |
| `400` | `NOTE_CONTENT_TOO_LONG` | `content` exceeds 4,000 characters |
| `400` | `CONTACT_NOTES_UNAVAILABLE` | The workspace is not on the v2 contact model yet |
| `404` | `PERSON_NOT_FOUND` | No person with this ID (also returned for IDs without the `per-` prefix) |
# Delete conversation note
Source: https://help.withallo.com/en/v2/api-reference/notes/delete-conversation-note
DELETE /v2/api/conversations/notes/{id}
Deletes a note. Only the note's author can delete it.
**Required scope:** `NOTES_WRITE`
Deletes a conversation note and returns `204 No Content`. Only the note's **author** can delete it.
## Errors
| Status | Code | When |
| ------ | ----------------- | ------------------------------------------- |
| `403` | `NOT_NOTE_AUTHOR` | The API key's user is not the note's author |
| `404` | `NOTE_NOT_FOUND` | No note with this ID |
# Delete person note
Source: https://help.withallo.com/en/v2/api-reference/notes/delete-person-note
DELETE /v2/api/crm/people/{person_id}/notes/{note_id}
Deletes a person note. Only the note's author can delete it.
**Required scope:** `NOTES_WRITE`
Deletes a person note and returns `204 No Content`. Only the note's **author** can delete it.
## Errors
| Status | Code | When |
| ------ | --------------------------- | ------------------------------------------------ |
| `400` | `CONTACT_NOTES_UNAVAILABLE` | The workspace is not on the v2 contact model yet |
| `403` | `NOT_NOTE_AUTHOR` | The API key's user is not the note's author |
| `404` | `PERSON_NOT_FOUND` | No person with this ID |
| `404` | `NOTE_NOT_FOUND` | No note with this ID on this person |
# Get conversation note
Source: https://help.withallo.com/en/v2/api-reference/notes/get-conversation-note
GET /v2/api/conversations/notes/{id}
Returns a single conversation note by ID.
**Required scope:** `NOTES_READ`
Returns a single conversation note by its ID (`not-*`).
## Errors
| Status | Code | When |
| ------ | ---------------- | -------------------- |
| `404` | `NOTE_NOT_FOUND` | No note with this ID |
# List conversation notes
Source: https://help.withallo.com/en/v2/api-reference/notes/list-conversation-notes
GET /v2/api/conversations/{contact_number}/notes
Returns the internal team notes on a conversation, paginated.
**Required scope:** `NOTES_READ`
Returns the internal team notes on a conversation, paginated. `allo_number` is required — a conversation is scoped to one of your Allo lines.
## Errors
| Status | Code | When |
| ------ | ----------------------- | ---------------------------------------- |
| `400` | `MISSING_ALLO_NUMBER` | The `allo_number` parameter is missing |
| `403` | `ALLO_NUMBER_FORBIDDEN` | You do not have access to this Allo line |
# List person notes
Source: https://help.withallo.com/en/v2/api-reference/notes/list-person-notes
GET /v2/api/crm/people/{person_id}/notes
Returns the notes on a person's CRM profile, paginated.
**Required scope:** `NOTES_READ`
Returns the notes on a person's CRM profile, paginated. `person_id` is the `per-*` `id` from the [People API](/en/v2/api-reference/crm/people-overview).
## Errors
| Status | Code | When |
| ------ | --------------------------- | ------------------------------------------------------------------------ |
| `400` | `CONTACT_NOTES_UNAVAILABLE` | The workspace is not on the v2 contact model yet |
| `400` | `INVALID_PAGE_SIZE` | `size` is not between 1 and 100 |
| `404` | `PERSON_NOT_FOUND` | No person with this ID (also returned for IDs without the `per-` prefix) |
# Overview
Source: https://help.withallo.com/en/v2/api-reference/notes/overview
Internal team notes on conversations and person profiles, with @mentions
The Notes API lets you create and manage **internal team notes**. Notes are only visible to your team — never to the contact. There are two kinds:
* **Conversation notes** — notes pinned to a conversation (a contact phone number on one of your Allo lines). They appear in the conversation timeline in the Allo apps.
* **Person notes** — notes on a person's CRM profile, addressed by the `per-*` `id` from the [People API](/en/v2/api-reference/crm/people-overview). Under the hood, notes attach to the person's underlying contact record, which is what will allow company notes on a future `/v2/api/crm/companies/{id}/notes`.
## Note constraints
| Field | Constraint |
| --------- | --------------------------------------------------- |
| `content` | Required. Non-blank, max 4,000 characters. |
| Mentions | Optional, inline in `content`. Max 15 per note. |
| Editing | Only the note's author can update or delete a note. |
## Mentions
Mention teammates inline in `content` using the syntax `@[Display Name](usr-xxxx)`:
```json theme={null}
{
"content": "Escalate to @[Jane Doe](usr-abc123) tomorrow"
}
```
* Get user IDs from [`GET /v2/api/users`](/en/v2/api-reference/users/list-users) (requires the `USERS_READ` scope).
* Use `@[all](all)` to notify the whole team.
* A note or comment can contain at most **15 mentions**.
* Mentions with unknown user IDs are silently dropped — they render as plain text and notify no one.
Mentions trigger the **same notifications as the Allo apps**: the mentioned teammates receive a push notification, an email, and an entry in their in-app notification center.
`@[all](all)` notifies every member of the team. Sent from an automation, this can get noisy fast — use it deliberately.
Responses expose the parsed mentions as a structured array:
```json theme={null}
{
"mentions": [
{ "user_id": "usr-abc123", "name": "Jane Doe", "deleted": false }
]
}
```
`deleted` is `true` when the mentioned user has since been removed from the team.
Mentions work the same way in [thread comments](/en/v2/api-reference/threads/overview).
## Webhooks
Subscribe to the `conversation_note.created`, `conversation_note.updated`, and `conversation_note.deleted` events for conversation notes, and `contact_note.created`, `contact_note.updated`, and `contact_note.deleted` for person notes. See the [Event catalog](/en/v2/api-reference/webhooks/event-catalog#conversation_notecreated).
## Endpoints
### Conversation notes
All notes on a conversation, paginated
Add an internal note to a conversation
A single note by ID
Edit a note's content (author only)
Delete a note (author only)
### Person notes
All notes on a person's CRM profile, paginated
Add a note to a person's CRM profile
Edit a person note's content (author only)
Delete a person note (author only)
# Update conversation note
Source: https://help.withallo.com/en/v2/api-reference/notes/update-conversation-note
PATCH /v2/api/conversations/notes/{id}
Updates a note's content. Only the note's author can edit it.
**Required scope:** `NOTES_WRITE`
## Behavior
Replaces the note's `content`. Only the note's **author** can edit it — updating someone else's note returns `403` with code `NOT_NOTE_AUTHOR`.
Mentions are re-parsed from the new content — see the [mentions guide](/en/v2/api-reference/notes/overview#mentions).
## Errors
| Status | Code | When |
| ------ | ----------------------- | ------------------------------------------- |
| `400` | `EMPTY_NOTE_CONTENT` | `content` is missing or blank |
| `400` | `NOTE_CONTENT_TOO_LONG` | `content` exceeds 4,000 characters |
| `403` | `NOT_NOTE_AUTHOR` | The API key's user is not the note's author |
| `404` | `NOTE_NOT_FOUND` | No note with this ID |
# Update person note
Source: https://help.withallo.com/en/v2/api-reference/notes/update-person-note
PATCH /v2/api/crm/people/{person_id}/notes/{note_id}
Updates a person note's content. Only the note's author can edit it.
**Required scope:** `NOTES_WRITE`
## Behavior
Replaces the note's `content`. Only the note's **author** can edit it — updating someone else's note returns `403` with code `NOT_NOTE_AUTHOR`.
Mentions are re-parsed from the new content — see the [mentions guide](/en/v2/api-reference/notes/overview#mentions).
## Errors
| Status | Code | When |
| ------ | --------------------------- | ------------------------------------------------ |
| `400` | `EMPTY_NOTE_CONTENT` | `content` is missing or blank |
| `400` | `NOTE_CONTENT_TOO_LONG` | `content` exceeds 4,000 characters |
| `400` | `CONTACT_NOTES_UNAVAILABLE` | The workspace is not on the v2 contact model yet |
| `403` | `NOT_NOTE_AUTHOR` | The API key's user is not the note's author |
| `404` | `PERSON_NOT_FOUND` | No person with this ID |
| `404` | `NOTE_NOT_FOUND` | No note with this ID on this person |
# Create account
Source: https://help.withallo.com/en/v2/api-reference/partner/create-account
POST /v2/api/partner/accounts
Creates an Allo account for one of your customers, provisions a phone number, and returns a scoped API key for the account. Requires the `PARTNER` scope. The account is billed as one seat on your subscription.
**Required scope:** `PARTNER`
Creates an Allo account for one of your customers and provisions a phone number for it. The response returns a **scoped API key** for the new account (shown only once) alongside the provisioned number(s) and status.
* `number_preference.country` is required (ISO country code, e.g. `FR`); `number_preference.prefix` is optional (e.g. `+337`).
* A phone number is secured **before** the account is created — if none can be assigned or purchased, the request fails with `NO_NUMBER_AVAILABLE` and nothing is created.
* The account is billed as one seat on your subscription; no charge is made to your customer.
* If the email or personal mobile already belongs to an Allo account, the request fails with `PARTNER_ACCOUNT_ALREADY_EXISTS`.
# Deactivate account
Source: https://help.withallo.com/en/v2/api-reference/partner/delete-account
DELETE /v2/api/partner/accounts/{id}
Deactivates an account you provisioned and releases its seat. The account stays active until the end of the current paid period, then expires. Requires the `PARTNER` scope.
**Required scope:** `PARTNER`
Deactivates an account you provisioned and releases its seat from your subscription. The already-paid period is honored: the account keeps working until the end of the current billing period, then expires. You can only deactivate accounts your own API key created.
# Get account
Source: https://help.withallo.com/en/v2/api-reference/partner/get-account
GET /v2/api/partner/accounts/{id}
Returns the status and activation state of an account you provisioned. Requires the `PARTNER` scope.
**Required scope:** `PARTNER`
Returns the status of an account you provisioned, including whether the customer has activated it (signed in on a device). You can only read accounts your own API key created — any other id returns `404`.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/partner/overview
Provision and manage Allo accounts for your customers as a reseller.
A **partner** is an account authorized by Allo to resell Allo as part of its own product — a white-label reseller.
## Getting partner access
The `PARTNER` scope is granted manually to approved resellers — it cannot be self-issued. To become a reseller and receive a `PARTNER`-scoped key, see the [Partner Program](/en/support/partner-program) or reach out to [partnership@themobilefirst.co](mailto:partnership@themobilefirst.co).
## Billing
Every account you provision adds one seat to your subscription (your reseller rate applies). Nothing is charged to your customer by Allo — you bill them yourself, and Allo invoices you once per month for all of your accounts together.
## Endpoints
| Method | Path | Description |
| -------- | ------------------------------- | ---------------------------------------------------------- |
| `POST` | `/v2/api/partner/accounts` | Create an account, provision a number, return a scoped key |
| `GET` | `/v2/api/partner/accounts/{id}` | Get an account's status and activation state |
| `DELETE` | `/v2/api/partner/accounts/{id}` | Deactivate an account (releases the seat at period end) |
# Get call flow
Source: https://help.withallo.com/en/v2/api-reference/phone-numbers/get-call-flow
GET /v2/api/numbers/{number}/call_flow
Returns the call flow for a phone number. By default returns the published flow (or an in-memory synthesis of the legacy IVR if none is published); pass `?status=draft` to return the working draft instead.
**Required scope:** `PHONE_NUMBERS_READ`
## Behavior
Returns the call flow for a phone number. The `{number}` path parameter is the Allo phone number in E.164 format (e.g. `+14155551234`).
By default this returns the **published** flow. If the number has no published flow, Allo returns an in-memory synthesis of the legacy IVR configuration with `status: "SYNTHESIZED"` (nothing is persisted). Pass `?status=draft` to fetch the working **draft** instead.
`?status=draft` falls back to the published flow (or the synthesis) when no draft exists. To read a draft **without** that fallback — getting a `404` instead — use [Get call flow draft](/en/v2/api-reference/phone-numbers/get-call-flow-draft).
## Fields
* `status` — `DRAFT`, `PUBLISHED`, or `SYNTHESIZED`.
* `lock_version` — optimistic-concurrency token. Pass it back when saving a draft.
* `number` — E.164 of the line this flow routes (null for a `SYNTHESIZED` flow).
* `confirmation_url` — present only on a `DRAFT`: the link where a signed-in user reviews and publishes it. See [Save call flow draft](/en/v2/api-reference/phone-numbers/save-call-flow-draft).
* `definition` — the opaque call flow tree document (camelCase keys), rooted at `entry_node_id`.
## Errors
* `404 PHONE_NUMBER_NOT_FOUND` — the number is not one of your account's numbers. List them with `GET /v2/api/numbers`.
# Get call flow draft
Source: https://help.withallo.com/en/v2/api-reference/phone-numbers/get-call-flow-draft
GET /v2/api/numbers/{number}/call_flow/draft
Returns the working draft of a phone number's call flow. Unlike `GET /v2/api/numbers/{number}/call_flow?status=draft`, this endpoint does NOT fall back to the published flow when no draft exists — it returns `404 CALL_FLOW_DRAFT_NOT_FOUND`. Use it to read a draft's `lock_version` without risk of accidentally holding the published version's lock.
**Required scope:** `PHONE_NUMBERS_READ`
## Behavior
Returns the working **draft** of a phone number's call flow. The `{number}` path parameter is the Allo phone number in E.164 format (e.g. `+14155551234`).
Unlike [Get call flow](/en/v2/api-reference/phone-numbers/get-call-flow) with `?status=draft`, this endpoint **does not fall back** to the published flow (or the legacy-IVR synthesis) when no draft exists — it returns `404 CALL_FLOW_DRAFT_NOT_FOUND`.
The response includes a **`confirmation_url`** — the link where a signed-in user reviews and publishes this draft. To publish it directly instead, call [Publish call flow](/en/v2/api-reference/phone-numbers/publish-call-flow) with the `lock_version` from this response.
Prefer this endpoint at the start of an edit cycle. `GET …/call_flow?status=draft` returns `200` with the *published* version when there is no draft, so a caller can end up holding the published `lock_version` — which then fails `POST …/call_flow/publish` with `CALL_FLOW_STALE_LOCK`. This endpoint makes "no draft" an explicit `404` instead.
## Errors
* `404 CALL_FLOW_DRAFT_NOT_FOUND` — the number has no working draft. Create one with `PUT /v2/api/numbers/{number}/call_flow/draft`.
* `404 PHONE_NUMBER_NOT_FOUND` — the number is not one of your account's numbers. List them with `GET /v2/api/numbers`.
# List phone numbers
Source: https://help.withallo.com/en/v2/api-reference/phone-numbers/list-numbers
GET /v2/api/numbers
Returns all phone numbers and sender IDs on your team.
**Required scope:** `PHONE_NUMBERS_READ`
Returns all phone numbers and sender IDs in a single response. This endpoint is not paginated.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/phone-numbers/overview
Access your Allo phone numbers, sender IDs, and their capabilities
The Phone Numbers API lets you list all phone numbers and sender IDs on your team, including their capabilities (voice, SMS, MMS), verification status, and which team members have access.
## Endpoints
All Allo numbers and sender IDs with capabilities, status, and assigned members
# Publish call flow
Source: https://help.withallo.com/en/v2/api-reference/phone-numbers/publish-call-flow
POST /v2/api/numbers/{number}/call_flow/publish
Publishes the working draft, making it the live call flow for the phone number. This changes live inbound routing immediately. Runs full validation, which is stricter than the lenient validation a draft save runs, so a draft that saved successfully can still fail to publish; the whole publish rolls back if validation fails. Publishing consumes the draft, so the line is left with no draft afterwards.
**Required scope:** `PHONE_NUMBERS_WRITE`
## Behavior
Publishes the working draft, making it the **live** call flow for the phone number. The `{number}` path parameter is the Allo phone number in E.164 format.
Pass the `lock_version` of the draft you are publishing — fetch it with [Get call flow draft](/en/v2/api-reference/phone-numbers/get-call-flow-draft).
This changes live inbound routing immediately. If you would rather have a person confirm the change, don't call this endpoint: [Save call flow draft](/en/v2/api-reference/phone-numbers/save-call-flow-draft) returns a `confirmation_url` where a signed-in user reviews the draft and publishes it themselves.
Publishing runs **full** validation, which is stricter than the lenient validation a draft save runs — a draft that saved successfully can still fail to publish. If any rule fails, the whole publish is rolled back and the previously live flow keeps routing calls.
Publishing **consumes** the draft: the draft version becomes the published version, so the line is left with no draft and the response carries no `confirmation_url`. Start the next edit cycle with a fresh `PUT …/call_flow/draft`.
## Errors
* `400 CALL_FLOW_INVALID` — the draft failed full validation.
* `400 CALL_FLOW_ROOT_MENU_TOO_SMALL` — the line runs an IVR and this flow would leave its menu with fewer than 2 options.
* `400 CALL_FLOW_CONTACT_PROPERTY_KEY_REQUIRED` — a `CONTACT_PROPERTY` node has no `propertyKey`.
* `400 CALL_FLOW_CONTACT_PROPERTY_VALUE_REQUIRED` — a `CONTACT_PROPERTY` node has no `expectedValue`.
* `400 CALL_FLOW_CONTACT_PROPERTY_UNKNOWN` — a `CONTACT_PROPERTY` node's `propertyKey` does not name a custom person property of your team. Renaming or deleting a property in the CRM invalidates a flow that branches on it.
* `404 CALL_FLOW_DRAFT_NOT_FOUND` — there is no draft to publish. Save one first with `PUT /v2/api/numbers/{number}/call_flow/draft`.
* `404 PHONE_NUMBER_NOT_FOUND` — the number is not one of your account's numbers.
* `409 CALL_FLOW_STALE_LOCK` — the `lock_version` is stale; refetch the draft and retry.
# Save call flow draft
Source: https://help.withallo.com/en/v2/api-reference/phone-numbers/save-call-flow-draft
PUT /v2/api/numbers/{number}/call_flow/draft
Creates or updates the working draft of a phone number's call flow. The draft is validated leniently and is not live until published. Optimistic concurrency: pass the `lock_version` returned by a previous read to detect a concurrent edit, and `base_published_version` to detect a publish that happened mid-edit.
**Required scope:** `PHONE_NUMBERS_WRITE`
## Behavior
Creates or updates the working **draft** of a phone number's call flow. The draft is validated leniently and does not affect live routing until you publish it. The `{number}` path parameter is the Allo phone number in E.164 format.
Send the full `definition` document and the `schema_version` it conforms to.
## Going live
Saving a draft never changes live routing. There are two ways to put it on the air:
* **Publish it yourself** with [Publish call flow](/en/v2/api-reference/phone-numbers/publish-call-flow), passing the `lock_version` from this response. This changes live inbound routing immediately.
* **Hand it to a person** using the **`confirmation_url`** in this response: a link where a signed-in user opens this draft, reviews it, and publishes it. Prefer this when a human should approve the change.
Treat `confirmation_url` as opaque — pass it through verbatim; never build it from a hardcoded app host or parse it. (It is present only while the response `status` is `DRAFT`.)
## Concurrency
* `lock_version` — pass the value from the draft you read. Omit it (or send `null`) to upsert the draft without a concurrency check. A stale value returns `409 CALL_FLOW_STALE_LOCK`.
* `base_published_version` — the published version your edit is based on. If someone published a new version while you were editing, this returns `409 CALL_FLOW_CONCURRENT_EDIT`.
## Errors
* `400 CALL_FLOW_SCHEMA_VERSION_MISMATCH` — `schema_version` does not match the server's current version.
* `400 CALL_FLOW_INVALID` — the `definition` is malformed or failed validation.
* `404 PHONE_NUMBER_NOT_FOUND` — the number is not one of your account's numbers.
* `409 CALL_FLOW_STALE_LOCK` / `409 CALL_FLOW_CONCURRENT_EDIT` — see Concurrency above.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/sms/overview
Send SMS and MMS messages programmatically
The SMS API lets you send text messages from your Allo phone numbers or sender IDs.
Send an SMS from a US Allo number
Send an SMS from a French sender ID
# Send SMS
Source: https://help.withallo.com/en/v2/api-reference/sms/send-sms
POST /v1/api/sms
Send an SMS message to a US phone number using one of your Allo phone numbers. The recipient must be in the same country as your Allo number.
This endpoint is for sending SMS from US Allo phone numbers. For sending SMS in France, see [Send SMS (France)](/en/v2/api-reference/sms/send-sms-france).
# Send SMS (France)
Source: https://help.withallo.com/en/v2/api-reference/sms/send-sms-france
POST /v1/api/sms#france
Send an SMS message to a French phone number using a verified Sender ID. The Sender ID must be verified by the Allo team before use. Contact support to register your Sender ID.
To send SMS in France, you need a verified Sender ID. Configure your Sender ID from [Settings > Compliance](https://web.withallo.com/settings/compliance).
**French operators block SMS sent from standard mobile numbers** (`+33 6xx` / `+33 7xx`) via API. You must use an Alphanumeric Sender ID or a Short Code to send business SMS in France.
## Why standard mobile numbers don't work
French operators (Orange, SFR, Bouygues Telecom, Free Mobile) prohibit using mobile numbers for business SMS. ARCEP — France's telecom regulator — formalized this ban in January 2023.
If you try to send SMS from a `+33 6` or `+33 7` number via API, operators block the message at the network level. Numbers that exceed volume thresholds are automatically suspended.
Allo offers two compliant alternatives: **Alphanumeric Sender ID** and **Short Code**.
***
## Your options
### Alphanumeric Sender ID
Your SMS displays a custom text name (up to 11 characters) instead of a phone number. For example, your recipients see "MOBILEFIRST" instead of `+33 6 12 34 56 78`.
**Best for:**
Appointment reminders, order confirmations, payment notifications, and one-way marketing campaigns.
**Formatting rules:**
* 3 to 11 characters
* Letters (A-Z, a-z) and digits (0-9) only
* Must contain at least one letter
* No spaces or special characters
**Key limitation:**
Recipients cannot reply.
**Setup time:** 1 to 5 business days.
### Short Code (5-digit number)
A dedicated or shared 5-digit number (e.g., `36xxx` for marketing, `38xxx` for transactional messages).
**Best for:**
Two-way conversations, customer service, keyword campaigns, and high-volume marketing with native STOP handling.
**Key advantage:**
Recipients can reply.
**Setup time:** 2 to 4 months for a dedicated code. Days to weeks for a shared code.
Most small businesses start with Alphanumeric Sender ID. Add a Short Code later if you need two-way messaging.
***
## French SMS compliance rules
**Consent:**
* **B2C:** Explicit opt-in required.
* **B2B:** No prior opt-in required, but the message must relate to the recipient's professional activity.
**Time restrictions (marketing SMS only):**
* No marketing SMS on Sundays or French public holidays
* No marketing SMS between 20:00 and 08:00
**STOP mechanism:**
Every marketing SMS must include opt-out instructions.
# Create summary template
Source: https://help.withallo.com/en/v2/api-reference/summary-templates/create-summary-template
POST /v2/api/summary_templates
Creates a call summary template for the team.
**Required scope:** `SUMMARY_TEMPLATES_WRITE`
## Behavior
Creates a summary template for the team. Only `name` is required. `sections` may contain up to 10 entries; each section needs a `title` and an `order`.
## Idempotency
This endpoint supports the `Idempotency-Key` header. If a request succeeds and you retry with the same key, the stored response is returned without re-executing the operation. See [Idempotency](/en/v2/api-reference/guides/error-handling#idempotency).
# Delete summary template
Source: https://help.withallo.com/en/v2/api-reference/summary-templates/delete-summary-template
DELETE /v2/api/summary_templates/{id}
Soft-deletes (deactivates) a summary template.
**Required scope:** `SUMMARY_TEMPLATES_WRITE`
## Behavior
Soft-deletes the template: it is deactivated and no longer used for new call summaries. Existing summaries already generated with the template are not affected. Returns `204 No Content` on success, or `404` with code `SUMMARY_TEMPLATE_NOT_FOUND` if no active template with that ID exists for your team.
# Get summary template
Source: https://help.withallo.com/en/v2/api-reference/summary-templates/get-summary-template
GET /v2/api/summary_templates/{id}
Returns a single call summary template by ID.
**Required scope:** `SUMMARY_TEMPLATES_READ`
Returns a single summary template by its ID (`tst-*`). Returns `404` with code `SUMMARY_TEMPLATE_NOT_FOUND` if no active template with that ID exists for your team.
# List summary templates
Source: https://help.withallo.com/en/v2/api-reference/summary-templates/list-summary-templates
GET /v2/api/summary_templates
Returns the team's call summary templates.
**Required scope:** `SUMMARY_TEMPLATES_READ`
Returns all of the team's active summary templates in a single response. This endpoint is not paginated.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/summary-templates/overview
Manage the call summary templates that shape AI-generated call summaries
The Summary Templates API lets you manage your team's **call summary templates**. A summary template defines how Allo's AI structures the summary of a call: its name, an optional call context that guides the AI, an optional icon, and an ordered list of sections.
Templates are shared across the whole team and are used to produce the AI summary of a call.
## Template fields
| Field | Constraint |
| -------------- | -------------------------------------------------------------------------------------- |
| `name` | Required. The display name of the template. |
| `call_context` | Optional. Background context that helps the AI summarize calls. Max 4,000 characters. |
| `icon` | Optional. A short icon (e.g. an emoji) shown next to the template. |
| `sections` | Optional. Up to 10 ordered sections, each with a `title`, `instructions`, and `order`. |
## Endpoints
All of the team's summary templates
A single template by ID
Create a new template for the team
Replace a template's content
Deactivate a template
# Set a number's default template
Source: https://help.withallo.com/en/v2/api-reference/summary-templates/set-number-default-summary-template
PUT /v2/api/numbers/{number}/default_summary_template
Sets or clears the default summary template used for a phone number's call summaries. Pass `summary_template_id` to set it, or null/omit to clear it.
**Required scope:** `SUMMARY_TEMPLATES_WRITE`
## Behavior
Sets the default summary template for a phone number. New calls on that number are summarized using this template. The `{number}` path parameter is the Allo phone number in E.164 format (e.g. `+14155551234`).
Pass `summary_template_id` (a `tst-*` ID) to set the default, or omit it / pass `null` to clear the default and fall back to Allo's standard summary.
## Errors
* `404 PHONE_NUMBER_NOT_FOUND` — the number is not one of your account's numbers. List them with `GET /v2/api/numbers`.
* `404 SUMMARY_TEMPLATE_NOT_FOUND` — no active template with that ID exists for the number's team.
# Update summary template
Source: https://help.withallo.com/en/v2/api-reference/summary-templates/update-summary-template
PUT /v2/api/summary_templates/{id}
Replaces a summary template's name, call context, icon, and sections.
**Required scope:** `SUMMARY_TEMPLATES_WRITE`
## Behavior
Replaces the template's `name`, `call_context`, `icon`, and `sections` with the values you send, so pass the **full desired state** — omitted `call_context`, `icon`, and `sections` are cleared. Fetch the current template first with [Get summary template](/en/v2/api-reference/summary-templates/get-summary-template) if you only want to change one field.
Returns `404` with code `SUMMARY_TEMPLATE_NOT_FOUND` if no active template with that ID exists for your team.
# Add tags
Source: https://help.withallo.com/en/v2/api-reference/tags/add-tags
POST /v2/api/conversations/items/{id}/tags
Add one or more tags to a conversation item.
**Required scope:** `TAGS_WRITE`
## Behavior
Pass tag **keys** (lowercase, slugified identifiers) — not display names. List available tags with `GET /v2/api/tags` to get the keys.
Adding a tag that's already on the item is a no-op: the request still returns `200` and the tag stays applied (no error, no duplicate).
## Idempotency
This endpoint supports the `Idempotency-Key` header. If a request succeeds and you retry with the same key, the stored response is returned without re-executing the operation. See [Idempotency](/en/v2/api-reference/guides/error-handling#idempotency).
# Create tag
Source: https://help.withallo.com/en/v2/api-reference/tags/create-tag
POST /v2/api/tags
Creates a new tag on the team. The tag key is auto-generated by slugifying the name.
**Required scope:** `TAGS_WRITE`
## Behavior
Pass a display **name** — the tag **key** (its identifier in the rest of the API) is generated automatically by slugifying the name (lowercase, alphanumeric). For example `"Interested"` becomes the key `interested`.
* Names are case-insensitive. Creating `Support` when `support` already exists returns a `409` with code `TAG_ALREADY_EXISTS`.
* Names that describe a call outcome (e.g. `voicemail`, `missed call`, `busy`) are reserved and rejected with a `400` and code `TAG_NAME_IS_CALL_OUTCOME`.
* `color` is an optional hex string (max 7 characters, e.g. `#FF0000`).
The created tag's `id` is the generated key — use it to add the tag to calls or to delete it.
## Idempotency
This endpoint supports the `Idempotency-Key` header. If a request succeeds and you retry with the same key, the stored response is returned without re-executing the operation. See [Idempotency](/en/v2/api-reference/guides/error-handling#idempotency).
# Delete tag
Source: https://help.withallo.com/en/v2/api-reference/tags/delete-tag
DELETE /v2/api/tags/{id}
Soft-deletes a tag by its key. Tags synced from a CRM integration cannot be deleted via the API.
**Required scope:** `TAGS_WRITE`
## Behavior
Deletes a tag by its **key** (the `id` returned by `GET /v2/api/tags`). The tag is soft-deleted: it stops appearing in the list and can no longer be applied to calls, while historical call tagging is preserved.
* Deleting a tag that doesn't exist returns a `404` with code `TAG_NOT_FOUND`.
* Tags synced from a CRM integration cannot be deleted via the API and return a `409` with code `CRM_SYNCED_TAG_READONLY`. Manage those from the connected CRM instead.
## Idempotency
This endpoint supports the `Idempotency-Key` header. If a request succeeds and you retry with the same key, the stored response is returned without re-executing the operation. See [Idempotency](/en/v2/api-reference/guides/error-handling#idempotency).
# List tags
Source: https://help.withallo.com/en/v2/api-reference/tags/list-tags
GET /v2/api/tags
Returns all tags configured on the team.
**Required scope:** `TAGS_READ`
Returns all tags in a single response. This endpoint is not paginated.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/tags/overview
Discover available call tags for filtering conversations
The Tags API lets you list all tags configured on your team. Use tag names when filtering conversations by tags in the search endpoints.
## Tag constraints
| Field | Constraint |
| ---------- | ----------------------------------------------------------------------------------------------------------- |
| Name | Required. Max 255 characters. |
| Key | Auto-generated from the name (lowercase, alphanumeric). Used as the identifier in the API. |
| Color | Optional. Hex format, max 7 characters (e.g., `#FF0000`). |
| Uniqueness | Tag keys are unique per team. Names are case-insensitive — `Support` and `support` resolve to the same tag. |
The API lets you manage the tag lifecycle — list, create, and delete tags — and add or remove them from calls.
## Endpoints
All available call tags with name and color
Create a new tag from a display name
Delete a tag by its key
Add one or more tags to a call
Remove a tag from a call
# Remove tag
Source: https://help.withallo.com/en/v2/api-reference/tags/remove-tag
DELETE /v2/api/conversations/items/{id}/tags/{tag}
Remove a tag from a conversation item.
**Required scope:** `TAGS_WRITE`
## Behavior
Removing a tag that isn't on the item is a no-op: the request still succeeds and the item's tags are left unchanged (no error).
## Idempotency
This endpoint supports the `Idempotency-Key` header. If a request succeeds and you retry with the same key, the stored response is returned without re-executing the operation. See [Idempotency](/en/v2/api-reference/guides/error-handling#idempotency).
# Create thread comment
Source: https://help.withallo.com/en/v2/api-reference/threads/create-comment
POST /v2/api/threads/{id}/comments
Adds a comment to an existing thread.
**Required scope:** `THREADS_WRITE`
## Behavior
Adds a comment to an existing thread. Comments can be added to resolved threads too.
## Mentions
Mention teammates inline in `content` with `@[Display Name](usr-xxxx)` — see the [mentions guide](/en/v2/api-reference/notes/overview#mentions).
## Errors
| Status | Code | When |
| ------ | ----------------------- | ---------------------------------- |
| `400` | `EMPTY_NOTE_CONTENT` | `content` is missing or blank |
| `400` | `NOTE_CONTENT_TOO_LONG` | `content` exceeds 4,000 characters |
| `404` | `THREAD_NOT_FOUND` | No thread with this ID |
# Create thread
Source: https://help.withallo.com/en/v2/api-reference/threads/create-thread
POST /v2/api/threads
Starts a discussion thread on a conversation item with a first comment. Each item can have only one thread.
**Required scope:** `THREADS_WRITE`
## Behavior
Starts a discussion thread on a conversation item. `content` becomes the thread's first comment, and the response is the full thread including that comment.
Each item can have **only one thread**. If one already exists, the request returns `409` with code `THREAD_ALREADY_EXISTS` — find it with [`GET /v2/api/threads`](/en/v2/api-reference/threads/find-thread) and add a comment instead.
## Mentions
Mention teammates inline in `content` with `@[Display Name](usr-xxxx)` — see the [mentions guide](/en/v2/api-reference/notes/overview#mentions).
## Errors
| Status | Code | When |
| ------ | ----------------------------- | ----------------------------------------------------------------------- |
| `400` | `INVALID_THREAD_ENTITY_TYPE` | `entity_type` is not one of `CALL`, `TEXT_MESSAGE`, `CONVERSATION_NOTE` |
| `400` | `EMPTY_NOTE_CONTENT` | `content` is missing or blank |
| `400` | `NOTE_CONTENT_TOO_LONG` | `content` exceeds 4,000 characters |
| `404` | `CONVERSATION_ITEM_NOT_FOUND` | No conversation item with this `entity_id` |
| `409` | `THREAD_ALREADY_EXISTS` | The item already has a thread |
# Find thread
Source: https://help.withallo.com/en/v2/api-reference/threads/find-thread
GET /v2/api/threads
Finds the discussion thread attached to a conversation item. Returns zero or one thread — each item has at most one thread.
**Required scope:** `THREADS_READ`
## Behavior
Looks up the thread attached to a conversation item. Pass the item's type as `entity_type` (`CALL`, `TEXT_MESSAGE`, or `CONVERSATION_NOTE`) and its ID as `entity_id` (`cll-*`, `msg-*`, or `not-*`).
Since each item has at most one thread, `data` contains either zero or one thread. An empty `data` array means the item exists but has no thread yet — create one with [`POST /v2/api/threads`](/en/v2/api-reference/threads/create-thread).
## Errors
| Status | Code | When |
| ------ | ----------------------------- | ----------------------------------------------------------------------- |
| `400` | `INVALID_THREAD_ENTITY_TYPE` | `entity_type` is not one of `CALL`, `TEXT_MESSAGE`, `CONVERSATION_NOTE` |
| `404` | `CONVERSATION_ITEM_NOT_FOUND` | No conversation item with this `entity_id` |
# Get thread
Source: https://help.withallo.com/en/v2/api-reference/threads/get-thread
GET /v2/api/threads/{id}
Returns a thread with all its comments.
**Required scope:** `THREADS_READ`
Returns a thread with all its comments, oldest first.
## Errors
| Status | Code | When |
| ------ | ------------------ | ---------------------- |
| `404` | `THREAD_NOT_FOUND` | No thread with this ID |
# Overview
Source: https://help.withallo.com/en/v2/api-reference/threads/overview
Team discussion threads attached to calls, SMS, and conversation notes
The Threads API lets you manage **team discussion threads**. A thread is a comment chain attached to a single conversation item — a call, an SMS message, or a conversation note — where teammates discuss that item without the contact seeing anything.
## Key concepts
**One thread per item** — each conversation item can have at most one thread. Creating a second one returns `409` with code `THREAD_ALREADY_EXISTS`; find the existing thread and add a comment instead.
**Entity reference** — a thread points at its item through `entity_type` (`CALL`, `TEXT_MESSAGE`, or `CONVERSATION_NOTE`) and `entity_id` (the item's ID: `cll-*`, `msg-*`, or `not-*`).
**Comments** — a thread is created with a first comment and grows from there. Only a comment's author can edit it.
**Resolution** — threads can be marked resolved and reopened. Resolving does not lock the thread — comments can still be added.
**Mentions** — comments support the same `@[Display Name](usr-xxxx)` mentions as notes, with the same push, email, and in-app notifications. See the [mentions guide](/en/v2/api-reference/notes/overview#mentions).
## Webhooks
Subscribe to the `thread.created`, `thread.comment.created`, `thread.comment.updated`, `thread.resolved`, and `thread.unresolved` events. See the [Event catalog](/en/v2/api-reference/webhooks/event-catalog#threadcreated).
## Endpoints
A thread with all its comments
Look up a conversation item's thread by entity type and ID
Start a thread on an item with a first comment
Add a comment to a thread
Edit a comment's content (author only)
Mark a thread as resolved
Reopen a resolved thread
# Resolve thread
Source: https://help.withallo.com/en/v2/api-reference/threads/resolve-thread
POST /v2/api/threads/{id}/resolve
Marks a thread as resolved.
**Required scope:** `THREADS_WRITE`
Marks a thread as resolved and returns a thread summary (without comments). `resolved_at` and `resolved_by` are set to the current time and the API key's user — resolving an already-resolved thread re-stamps them.
Resolution does not lock the thread — comments can still be added, and the thread can be reopened with [`POST /v2/api/threads/{id}/unresolve`](/en/v2/api-reference/threads/unresolve-thread).
## Errors
| Status | Code | When |
| ------ | ------------------ | ---------------------- |
| `404` | `THREAD_NOT_FOUND` | No thread with this ID |
# Unresolve thread
Source: https://help.withallo.com/en/v2/api-reference/threads/unresolve-thread
POST /v2/api/threads/{id}/unresolve
Reopens a resolved thread.
**Required scope:** `THREADS_WRITE`
Reopens a resolved thread and returns a thread summary (without comments). `resolved_at` and `resolved_by` are cleared. Unresolving an open thread is idempotent.
## Errors
| Status | Code | When |
| ------ | ------------------ | ---------------------- |
| `404` | `THREAD_NOT_FOUND` | No thread with this ID |
# Update thread comment
Source: https://help.withallo.com/en/v2/api-reference/threads/update-comment
PATCH /v2/api/threads/comments/{comment_id}
Updates a comment's content. Only the comment's author can edit it.
**Required scope:** `THREADS_WRITE`
## Behavior
Replaces the comment's `content`. Only the comment's **author** can edit it — updating someone else's comment returns `403` with code `NOT_COMMENT_AUTHOR`.
Mentions are re-parsed from the new content — see the [mentions guide](/en/v2/api-reference/notes/overview#mentions).
## Errors
| Status | Code | When |
| ------ | -------------------------- | ---------------------------------------------- |
| `400` | `EMPTY_NOTE_CONTENT` | `content` is missing or blank |
| `400` | `NOTE_CONTENT_TOO_LONG` | `content` exceeds 4,000 characters |
| `403` | `NOT_COMMENT_AUTHOR` | The API key's user is not the comment's author |
| `404` | `THREAD_COMMENT_NOT_FOUND` | No comment with this ID |
# Get user
Source: https://help.withallo.com/en/v2/api-reference/users/get-user
GET /v2/api/users/{id}
Returns a single team member by their ID.
**Required scope:** `USERS_READ`
# List users
Source: https://help.withallo.com/en/v2/api-reference/users/list-users
GET /v2/api/users
Returns all team members.
**Required scope:** `USERS_READ`
Returns all team members in a single response. This endpoint is not paginated.
# Me
Source: https://help.withallo.com/en/v2/api-reference/users/me
GET /v2/api/me
Returns information about the authenticated API key: its scopes, available endpoints, team, and rate limits. No specific scope is required — any valid API key can call this endpoint.
Agents should call this endpoint first to discover their capabilities before making other API calls.
# Overview
Source: https://help.withallo.com/en/v2/api-reference/users/overview
Access your team roster with roles and status
The Users API lets you list team members, their roles, and status. Use this to resolve team member names to user IDs when filtering conversations. To see which phone numbers are assigned to each user, use the [Phone Numbers API](/en/v2/api-reference/phone-numbers/overview).
## Endpoints
Your API key's identity, scopes, available endpoints, team, and rate limits
All team members with roles and status
Details for a single team member by ID