Duo: who is protected by multi-factor, and who is not
Duo is the multi-factor layer in front of your partners' logins. This connector reads three things out of it: who is actually protected, who is not, and what is happening at the sign-in prompt. The number an owner cares about is not how many licences they bought; it is how many of their people can still sign in with a password alone, and what in the account's own settings lets them. Everything hangs off the matching Current company, so it feeds your business reviews and the company alert band. The reporting key reads Duo and can never change anything in it.

What Current syncs
| Data set | What Current stores | Where it lands |
|---|---|---|
| Accounts | Each Duo account the key reaches (your subaccounts and your own parent account if you manage subaccounts, or the single account if you do not) by identifier and name, with Duo's own user, administrator and application counts, the account's edition, how many users are pending deletion, and the billable user count Current works out | The mapping panel on the Duo card, and the People section of a company record |
| People | Per person: Duo username, display name, email, Duo status, whether they are enrolled, whether a Duo group puts them in bypass, when they last signed in, and how many phones, hardware tokens and security keys they carry | The People section, the at-risk list on the company card, and the MFA dashboard metrics |
| Authenticator devices | Per enrolled phone or tablet: platform, model, operating system and app version, which methods it can receive (push, SMS and so on), when Duo last saw it, and the screen lock, encryption, tamper and quarantine state Duo reports | The device hygiene numbers on the company card, each shown with its own denominator |
| Endpoints | On Duo Advantage and Premier: each computer or phone that reached Duo, with its operating system, browser, model, whether Duo trusts it, the health flags Duo reports (disk encryption, firewall, password, operating system status), and when it was last seen. No user name or email is stored with it | Stored per account. Duo itself purges an endpoint after 30 days without activity |
| Sign-in totals | Per account per day: how many authentications were granted, denied, reported as fraud, and ended in an error. A finished day is final; today and yesterday are re-read each run | The denied sign-ins trend on the company card and in a business review |
| Protected applications | Each application Duo protects: its name, its type, who may use it (all users, no users, or chosen groups), and whether it uses Duo's Universal Prompt. Current stores a fingerprint of the application's integration key and never the key itself or its secret | The People section of the company card |
| Administrators | Counts only: how many administrators hold the Owner role, and how many active administrators have not signed in for 90 days or never have | The People section of the company card, and the AI brief |
| Policies | Yes or no for each setting that lets a person in without a second factor (see Policy gaps below), and the longest window a remembered device can skip the second factor | The People section, the company alert band, the AI brief and business reviews |
| Bypass codes | Counts only: how many bypass codes exist, and how many are standing codes that never expire or can be reused without limit. Duo's API never returns the codes themselves | The People section of the company card, and the AI brief |
Covered means a person whose account is active, who has a second factor enrolled, and who is not in bypass. Coverage is the covered people out of the covered people plus the people at risk; people who cannot sign in at all, and people Duo gave no clear answer for, are left out of both. The company page shows it as MFA covered. The People section, the dashboards and business reviews all use that one definition, so the coverage figure on a company card and the one in a review always agree. The authenticator mix calls a person SMS only when none of their devices can receive a push and at least one can receive SMS codes; a person with Duo Mobile on their phone is never counted as SMS only, even if the phone can also take a text.
Policy gaps
A Duo account can be fully enrolled and still let people in without a second factor, because its policies say so. Current reads the account's policies and flags each setting that does it:
- +The global policy bypasses the second factor for everyone it covers.
- +Some other policy bypasses it, for the applications or groups that policy covers.
- +A new user policy lets people Duo has never seen sign in without MFA.
- +A list of network addresses where the second factor is not required.
- +A list of countries, or a default, that lets people in without the second factor.
- +How long a remembered device can skip the second factor, shown as the longest window any policy allows.
When a mapped Duo account has any of the first five, the company alert band raises an entry saying people can sign in without MFA because of a policy, and names the setting. It is critical when the global policy bypasses the second factor or lets unknown new users in without MFA, because those reach everyone, and a warning otherwise. It clears itself once a complete read finds none of them. On the company page, Policy gaps reads as a count of Duo accounts, such as 1/3: the accounts with a policy that lets people skip MFA, out of the accounts whose policies Current read. The policy figures stay blank, never a clean result, when Current could not read the policies, and the stat then says policies not read.
Billable users
Duo's licensing rule is that every user in the Admin Panel consumes a seat except users in the Trash, which Duo calls pending deletion. Active, bypass, disabled and locked-out users all count, and so does a user who never finished enrolling or has no phone at all. Administrators never consume a seat. Current applies that rule to the users it read and shows the result as billable users beside the account's edition. It writes the number only after reading every user in that account on that run; a run that stopped part way leaves the previous figure in place rather than a smaller one.
Create the Admin API application in Duo
Duo retired its separate Accounts API on June 11, 2026, and converted every existing Accounts API integration to an Admin API one with no action needed from you. Subaccounts are now read through the Admin API, so one Admin API application in your main account is all Current needs, however many partners you manage. There is no application to create inside each subaccount.
- 11 · Sign in to the Duo Admin Panel as an ownerOnly an administrator with the Owner role can create an Admin API application. If you manage partners as subaccounts, sign in to your main (parent) account. The Admin API itself is available on the Essentials, Advantage and Premier plans and on Advantage and Premier trials; a free Duo account has no Admin API at all.
- 22 · Add the Admin API applicationGo to Applications, then Application Catalog, find Admin API, and add it. Duo creates the application and shows its page.
- 33 · Tick the three read permissions, and leave every write permission offTick Grant read information (the account summary and the daily sign-in totals), Grant resource - Read (people, devices, groups, endpoints, applications, policies and bypass codes), and Grant administrators - Read (the administrator counts, which Duo also requires Grant resource - Read for). Current reads no Duo log, so there is no log permission to tick. If you manage partners as subaccounts, the application page has a Subaccount permissions section: tick Grant accounts - Read there (it reads the list of subaccounts and their editions) plus the same three read permissions. Leave every write box unticked, including Grant resource - Write, Grant applications, Grant settings, Grant accounts - Write and Grant set Admin API permissions. That way this key has no way to change anything in Duo, which is a stronger guarantee than any promise Current can make about its own code.
- 44 · Copy the three valuesThe application page shows an integration key, a secret key, and an API hostname. The hostname looks like api-XXXXXXXX.duosecurity.com. Copy it exactly as Duo shows it, including for a data-residency account where it may look different. Current takes it as given and never rewrites it.
- 55 · Paste all three into Current and testIntegrations → Duo → Connect. Paste the API hostname, the integration key and the secret key, then press Test connection. Current signs a read to confirm the key works, lists how many subaccounts it can see if you manage any, and reports each area it reads as working, not included in the account's Duo edition, or refused for a missing permission. An area your edition does not include does not fail the test. The values are stored server-side only; they are never shown again and never reach your browser. The secret key never travels to Duo at all. Current uses it to sign each request rather than sending it.
Map Duo accounts to your companies
If you manage partners as Duo subaccounts, each subaccount is one end-customer and Current lists all of them, plus your own parent account, which holds your own staff and which you can map to your own company or ignore. If your key covers a single Duo account, or Duo reports no subaccounts, Current writes exactly one entry so the mapping panel works the same way. Either way, Current links each account to a Current company by normalized name (lowercased, with punctuation and Inc/LLC/Ltd-style suffixes stripped) when exactly one company matches. When two or more of your companies share that name and the names differ only by a suffix like Inc or LLC, Current links the one that is an active customer, or, if none of them is, the one linked to your PSA. Anything still tied stays unmapped for you to decide.
- 1Let the auto-matcher run firstEvery sync links each Duo account to the one Current company whose normalized name matches or, when several share the name and differ only by a suffix like Inc or LLC, to the active customer among them (else the one linked to your PSA). Most map themselves; only the ambiguous ones need a hand.
- 2Open the mapping panelIntegrations → Duo → Manage → Customer mapping. It opens on the Unmapped tab, which lists every Duo account the matcher could not place.
- 3Map an account to its companyOn an unmapped row press Map, type a few letters of the Current company, and pick it. That account's people and devices attach to the company right away, rather than waiting for the next six-hour sync.
- 4Ignore internal or test accountsFor an account that should never map to a partner (your own staff, a lab, a demo) press Ignore. It moves to the Ignored tab and stops counting against the card's unmapped badge.
- 5Fix a wrong match laterThe Mapped tab lists every linked account; Unmap corrects a bad auto-match, and the Ignored tab's Un-ignore brings a dismissed one back. A mapping you set by hand is never overwritten by a later auto-match, and neither is a manual unlink.
Duo syncs every six hours. With a large number of subaccounts, Current reads a share of them on each run and works through the rest over the following runs, and it only removes a person or a device that has gone from Duo after reading that account in full.
Where the data shows up
- +The People section of a company record: how many people are covered out of the people Duo gave a clear answer for, how many are at risk broken out as in bypass (by status or through a group) and not enrolled, how many people cannot sign in at all (disabled, locked out, pending deletion, or in a Duo group whose status is Disabled), and the authenticator mix across push, SMS, hardware tokens and security keys.
- +The at-risk list itself, naming the people when there are few enough to do something about today.
- +Device hygiene: how many enrolled phones have no screen lock or no encryption, each shown as n of m reported, so a device Duo did not report on never counts as a pass.
- +Denied sign-ins, this week against the week before, which is the proof that the control is catching things rather than sitting there. A week Current could read only part of says how many of its 7 days were read, so a short week is never compared as a full one.
- +Protected applications: the applications Duo protects for that company's account.
- +Administrators: how many hold the Owner role, and how many have not signed in for 90 days.
- +Policy gaps in words, and the standing bypass codes that never expire or can be reused without limit.
- +The account's edition and its billable users.
- +Stale accounts: people who are still enabled and have not signed in for ninety days, which is both a licence being paid for and a way in nobody is watching.
- +The Security posture chapter of a Strategic Business Review, beside your other security feeds, including the policy gaps as counts.
- +The company AI brief, which names policy gaps, standing bypass codes and administrators who have not signed in for 90 days when there are any.
- +The company alert band, which raises an entry when somebody at that company can sign in without a second factor, and a second one when a Duo policy lets people in without it.
When something looks wrong
| What you see | What it means |
|---|---|
| "Duo rejected these credentials" | All three values are signed into every request, so any one of them being wrong reads the same way. Check the integration key, the secret key and the API hostname against the Admin API application page. The most common cause is the hostname: it is the api- address on that page, not the address you sign in at. |
| "Duo accepted these credentials but refused the user list" | A permissions gap, not a wrong key, and regenerating the key will not help. Go back to the Admin API application and confirm Grant resource - Read is ticked. If it is, check the integration key came from an Admin API application rather than an Auth API one. The two look alike, Duo answers the same way for both, and telling them apart by the key alone is not possible. |
| Test connection says an area was refused for a permission | The key is missing the permission that area needs. Tick it on the Admin API application (and in Subaccount permissions if you manage subaccounts) and test again. The rest keeps syncing meanwhile. |
| Test connection says an area is not in the account's edition | Duo does not offer it on that edition, which is expected. Endpoints, for example, need Duo Advantage or Premier. The area stays blank on the card and nothing is wrong with the key. |
| "Couldn't reach Duo" | A network or firewall problem between Current and your Duo API hostname, not a credential problem. Current retries on its own at the next scheduled sync. |
| "Duo is rate-limiting the request" | Duo publishes no read limit for this API, so Current paces itself well under any plausible one and backs off the moment Duo says to. Nothing is wrong with the credentials; wait and press Test again. |
| Connected, but no partners listed | If you manage subaccounts, the key is missing Grant accounts - Read under Subaccount permissions, so Current sees the parent account only. If you do not manage subaccounts, one entry is correct. That entry is the whole account. |
| A company shows no Duo data | Its Duo account is not mapped yet. Check the Unmapped tab on the card. |
| Somebody shows as at risk who looks fine in Duo | Look at their status and their groups. Bypass is the usual answer, either on the person or on a Duo group they belong to, and it is easy to miss in Duo because the account otherwise looks healthy. Anyone whose account is active but who never finished enrolling counts too. People who are disabled, locked out, pending deletion, or in a Duo group whose status is Disabled are not at risk, because they cannot sign in at all, unless a Bypass group lets them in (it never does for somebody pending deletion). |
| The administrator figures are missing | The key lacks Grant administrators - Read, or the account was provisioned through Cisco Security Cloud Control after May 11, 2026, where Duo does not offer the administrator list. |
| Billable users is blank or did not change | Current writes it only after reading every user in that account on one run. On a large estate the account may not have been read in full yet; the next runs fill it. |
| The denied sign-ins trend has a gap | A day Current has not read stays blank rather than showing zero. On the first sync Current reads back the last 14 days, and after that it re-reads today and yesterday on every run. |
