FAQ & troubleshooting
Who this is for: anyone on your team using the day-to-day app — answers to the questions that come up most, with the fix.
Your provider may have renamed this product on their own logo and domain — this guide calls it "CallOps" throughout, but the screens and workflow are the same either way.
Getting started
Why can't I create another agent? Your plan caps how many agents you can have at once:
| Plan | Agents | Phone numbers | Concurrent campaigns |
|---|---|---|---|
| Starter | 1 | 1 | 2 |
| Growth | 3 | 3 | 5 |
| Scale | 10 | 10 | 10 |
If you're at your limit, the New agent button will tell you which plan you're on and that you need to upgrade to add more. Go to Settings → Billing & wallet to change your plan.
I started a test call from an agent's page and there's no audio — is something broken? No — this is expected in a sandbox/demo environment. Test calls there run on a simulated call engine that produces realistic transcripts, summaries, and outcomes, but no actual audio. On the call's detail page, the "Play recording" button is disabled with a tooltip explaining that this call type doesn't produce audio recordings. Once your account is connected to live calling, real calls will have playable recordings.
How do I know if I'm on the demo/sandbox version or the live version? Ask your account owner. Functionally the app behaves identically either way — the only difference is that live calls actually ring a phone and produce real audio; sandbox calls simulate the whole lifecycle (ringing, talking, wrap-up) with fake but realistic content so you can test everything risk-free.
Where do I see what my agent will actually say? Open the agent, go to its prompt/script section, and use the Test call button — it runs the full call lifecycle (ring → talk → analysis) against your own number or in simulation, and the result appears in the recent calls list within seconds.
Why does my new agent show as "AI disclosure is OFF" with a red warning? Every agent should identify itself as an AI assistant at the start of the call — it's required in most U.S. jurisdictions and it's on by default. If you turned it off, you'll see a warning explaining this could violate state AI-calling laws and TCPA rules, and that the change is logged with your user ID and timestamp. Turn the AI disclosure enabled toggle back on unless you have a specific, reviewed reason not to.
Calling & campaigns
Why was a contact excluded or skipped from my campaign? Every contact is checked, in order, before being dialed. The campaign's contact list shows the reason next to each row:
| Reason shown | What it means | What to do |
|---|---|---|
consent:none / consent:dnc / consent:opted_out |
The contact's consent level doesn't meet what this campaign requires | Update the contact's consent status, or don't include them in this list |
dnc |
The number is on your internal do-not-call list | Remove it from your DNC list in Settings → Compliance if that's a mistake, or leave it — this is working as intended |
federal_dnc |
Flagged by the federal do-not-call scrub | Same as above — this contact shouldn't be called |
tz_unknown |
We couldn't determine the contact's timezone (no timezone on file and their area code isn't in our lookup table) | Add a timezone to the contact or fix their phone number; the row automatically retries every few hours in case you fix it, so it's not permanently stuck |
provider_error |
A transient error dialing that contact | It automatically retries in about 15 minutes — no action needed unless it keeps failing |
| (blank, shows a retry time) | Outside the calling window right now, or the campaign is momentarily at its concurrency limit | It will be tried again automatically at the shown time |
Consent levels, from strongest to weakest: Prior express written consent, Express consent, No consent on record, Do not call, Opted out. A campaign set to require express consent will call contacts with express or prior written consent, but never contacts with none, DNC, or opted-out status. A campaign requiring prior written consent will only call contacts who have exactly that.
Why did my campaign pause itself? Campaigns pause automatically (never mid-call — only between dialing attempts) for one of these reasons, logged to your compliance audit trail:
- Wallet balance too low — your balance dropped under the 10-minute dialing buffer for your rate plan. Top up your wallet in Settings → Billing & wallet and resume.
- Numbers exhausted — none of your phone numbers had capacity left to place another call. Add a number in Settings → Phone numbers, or wait for daily limits to reset.
- Workspace suspended — the platform suspended your account. Contact support.
- Agent missing — the agent assigned to this campaign was deleted or deactivated. Assign an active agent and resume.
Resume from the campaign's page once you've fixed the underlying issue — nothing resumes itself, on purpose.
Why do so many calls show "no answer" or "voicemail" instead of "completed"? That's normal outbound-calling behavior, not a bug. Roughly 1 in 5 attempts goes unanswered and roughly another 1 in 10 hits voicemail (in the sandbox environment these are simulated at the same rates so testing feels realistic). Calls under 15 seconds — most no-answers and hang-ups — aren't billed.
Can I call contacts outside 8am–9pm? No. Every campaign's calling window is clamped to 8:00 AM–9:00 PM in the contact's own local time zone, no matter what you set in the campaign or where your business is based. You can set a narrower window (the default is 9:00 AM–8:00 PM on weekdays), but you cannot widen it past that legal floor and ceiling. This is enforced by the system, not just a setting you can override.
A campaign contact keeps saying "max attempts" — what happened? It was dialed the maximum number of times your campaign allows (set when you created the campaign) without a completed conversation, so the system stopped trying it. This is a terminal status — it won't be retried unless you re-add the contact to a new campaign.
Can I widen or override the calling window for a specific contact or campaign? No — the 8:00 AM–9:00 PM contact-local clamp applies to every campaign with no exceptions or overrides in the product.
Chat
The chat widget isn't loading on my site / the embedded chat page. Check these in order:
- The agent must have its channel set to chat or both (a voice-only agent's chat link intentionally shows "This chat isn't available").
- The agent must be active — paused or draft agents don't respond.
- If your whole workspace is suspended, chat returns "Unavailable" instead of a response — check Settings → Billing & wallet.
- Make sure you're using the correct agent-specific link — each agent has its own chat URL.
How does a website visitor opt out of follow-up in chat? They just say so — the assistant recognizes phrases like "stop contacting me," "unsubscribe," "take me off your list," or "don't call me," replies confirming they won't be contacted again, and closes the conversation. Behind the scenes this does the same thing as a phone opt-out: their consent status flips to opted-out, they're added to your do-not-call list, and they're pulled out of any campaigns they were queued in — automatically, no manual step needed.
Does the chat widget say it's automated? Yes — every chat window shows "Powered by AI · responses may be automated" beneath the message box at all times.
Billing
Why was I charged $X for a call that lasted Y seconds? The formula is: billed amount = round up (seconds × your per-minute rate ÷ 60), and any call of 15 seconds or less is completely free.
Worked example at the default rate of 35¢/minute:
- A 47-second call: 47 × 35 ÷ 60 = 27.4¢, rounded up → 28¢
- A 15-second call: $0.00 (at or under the free threshold)
- A 16-second call: 16 × 35 ÷ 60 = 9.3¢, rounded up → 10¢
- A 130-second (2:10) call: 130 × 35 ÷ 60 = 75.8¢, rounded up → 76¢
Your actual per-minute rate is shown on Settings → Billing & wallet under "Wallet" — it may differ from 35¢ depending on your plan or negotiated rate.
Are failed calls charged? What about calls that ring but nobody answers? No. No-answer, and any call that connects but runs 15 seconds or less, bills exactly $0. You only pay for calls where someone was actually on the line for more than 15 seconds.
What happens when my wallet hits $0? Two independent things happen at different thresholds:
- Low-balance alert: fires once when your balance crosses below your alert threshold (visible on Settings → Billing & wallet, $20 by default). Your wallet balance in the left sidebar turns red as a visual warning.
- Dialing stops entirely: before every call, the system checks that you hold at least 10 minutes' worth of talk time at your rate. If your balance falls under that buffer, any running campaign automatically pauses (reason: wallet balance too low) and no new outbound calls go out — inbound chat and existing conversations are unaffected. Nothing resumes until you top up and manually resume the campaign, unless you've turned on auto-recharge.
What is auto-recharge and should I turn it on? It's an optional setting (Settings → Billing & wallet) that automatically tops up your wallet by a fixed amount once your balance drops below a trigger amount you choose, so campaigns never pause for a low balance. It has a short cooldown between recharges so it can't fire repeatedly in a loop. Turn it on if you'd rather never think about the wallet; leave it off if you want to control top-ups manually.
Where do I see my full billing history? Settings → Billing & wallet has three views: the Wallet balance and top-up button, Monthly usage & statements (calls, connected calls, minutes, top-ups, and spend by month, with a CSV download), and the Ledger — the permanent, append-only record of every top-up, debit, adjustment, and refund, which is the definitive source of truth for your balance.
Compliance
Do I need consent before calling someone? Yes, always. Every contact has a consent level, and every campaign has a required consent level — the system enforces the match automatically and will exclude any contact who doesn't qualify (see the table under "Calling & campaigns" above). The levels are:
| Level | Meaning |
|---|---|
| Prior express written consent | The strongest grant — satisfies any campaign's requirement |
| Express consent | Satisfies a campaign that requires express consent, but not one requiring prior written consent |
| No consent on record | Never dialable |
| Do not call | Never dialable |
| Opted out | Never dialable |
What happens when a contact tells my agent to stop calling? One action handles everything, on both voice and chat: their consent status is set to opted-out, their number is added to your internal do-not-call list, and they're immediately pulled out of every campaign they're currently queued in at your organization — all logged to your compliance audit trail. You don't need to do anything manually, and it can't be partially undone by accident.
Is AI disclosure required? Yes — CallOps requires every voice agent to identify itself as an AI assistant at the start of the call, and it's turned on by default when you create an agent. You can turn it off, but you'll get an explicit red warning that doing so may violate state AI-calling laws and TCPA rules, and the change is recorded against your user account with a timestamp. Chat agents always show "Powered by AI · responses may be automated" under the message box — this cannot be turned off.
What do I need to do before launching a campaign? Every campaign must pass a one-time compliance checklist before it can leave draft status. You'll confirm, in writing, that: you have the required consent for these contacts, the list has been scrubbed against your internal do-not-call list, AI disclosure is enabled on the calling agent, and you accept responsibility for the campaign's compliance under the Terms of Service. Your acknowledgment is recorded with your user ID and a timestamp — you only need to do this once per campaign, before its first launch.
Where can I see my compliance history? Settings → Compliance shows your calling-window rule, your internal do-not-call list (with add/remove controls), and an audit trail of every launch, consent change, opt-out, and disclosure toggle, most recent first.
Data
Can I export all my data? Yes, from a few different places depending on what you need:
- All contacts: Contacts page → Export button — downloads a CSV with name, phone, email, consent status and source, timezone, source, tags, and created date.
- Call history: Analytics page → export button, or Settings → Billing & wallet → "Download detail (CSV)" for a full year of call-level billing detail.
- A specific campaign's contacts: on that campaign's page, the export button next to the contact list.
- Agent performance: Analytics page → agent leaderboard export.
There's no single "export everything" button — each export is scoped to the data type you're looking at.
How do I delete a contact? On the Contacts page, select one or more contacts with the checkboxes and click Delete — you'll get a confirmation prompt ("Delete N contact(s)? This can't be undone.") because it's a hard, permanent delete, not a soft one. There's no way to recover a deleted contact afterward, so export first if you might need the record later.
If I delete a contact, does that also remove them from campaigns and call history? Deleting a contact removes the contact record itself. Historical calls and campaign records that reference them remain for your reporting and audit trail — deleting a contact doesn't rewrite history, it just removes them from your active contact list (and if they're still queued in a running campaign, that link goes with the deleted record).
API
I'm getting a 401 Unauthorized calling the API — why?
The public API (/api/v1/...) requires an API key sent as Authorization: Bearer ck_live_.... A 401 means one of:
- No
Authorizationheader was sent at all. - The key doesn't match the
ck_live_format (it's case-sensitive and must include the full prefix). - The key has been revoked.
- The key simply doesn't exist (typo, or copied incorrectly — most often missing the last few characters).
Generate or check your keys in Settings → Developer.
How do I create or rotate an API key? Go to Settings → Developer, give the new key a name (e.g., "Production server"), and click Create key. The full key is shown exactly once, right after creation, with a copy button — write it down or paste it into your system immediately, because it is never shown again (only a short prefix is stored afterward for identification). To rotate: create the new key first, update whatever calls the API to use it, confirm it works, then revoke the old one from the same page. Revoking is immediate and cannot be undone.
What can go wrong if I lose my API key? Nothing recoverable — the full key is never stored or shown again after creation. If you've lost it, revoke it (so nobody else can use it) and create a new one.
Related
- Billing & wallet — plans, wallet, pricing, and auto-recharge in depth.
- Web chat & conversations — turning on chat and following up on chat leads.
- Understanding your results — reading analytics, call detail, scorecards, and the wallboard.
- Connecting your tools — Slack/Teams alerts, CRM sync, webhooks, and API keys.
- Client portal — the read-only viewer role.