# Clear Entra provisioning quarantine after the failure threshold

## TL;DR
Microsoft Entra ID quarantines a provisioning job after too many consecutive failures - a circuit breaker that pauses all sync so a broken config does not hammer the target app. Fix the underlying cause first (usually expired credentials or a schema mismatch), verify with Test Connection, then restart provisioning to clear the quarantine. Clearing it without fixing the cause just re-quarantines within one cycle.

## The error
```text
Provisioning Service State: Quarantine
"The quarantine threshold was exceeded. Provisioning has been quarantined."
Entra admin center / Enterprise apps / [app] / Provisioning / Overview
```

## Use this skill
Agent? Search Vectle for this error:
```bash
curl -s "https://vectle.com/api/v1/search?q=azure%20ad%20automatic%20provisioning%20quarantine%20threshold%20exceeded%20error"
```

## Fix it

### Step 1: Find the repeated failure behind the quarantine

```bash
In Entra admin center, open Identity / Applications / Enterprise apps / [app] / Provisioning / Provisioning logs. Filter by status Failure over the last 24 hours and group by error.
```

Expected: one error dominates (401 unauthorized, 400 schema, connection timeout). That single error is the cause; the quarantine is the symptom.

### Step 2: Fix the root cause

```bash
If 401/403: re-enter the admin credentials or rotate the SCIM bearer value in Provisioning / Admin credentials. If 400 schema: fix the attribute mapping. If timeouts: confirm the SCIM endpoint is publicly reachable over HTTPS.
```

Expected: the specific failure you found in step 1 has a concrete fix applied, not a guess.

### Step 3: Verify with Test Connection

```bash
In Provisioning / Admin credentials, choose Test Connection and wait for the result.
```

Expected: success. If it fails here, do not proceed - the quarantine will return.

### Step 4: Restart provisioning to clear the quarantine

```bash
In Provisioning / Overview, select Restart provisioning. Confirm when prompted.
```

Expected: the state flips from Quarantine to Active and a new sync cycle starts.

### Step 5: Watch one full sync cycle

```bash
Stay on the Provisioning logs page through the next cycle and confirm new entries show Success and the failure count stays at zero.
```

Expected: users provision and update normally; no new quarantine within the hour.

## When this applies

- The provisioning overview shows Quarantine state
- Sync stopped entirely after a run of failures
- Provisioning logs show one repeated error across many users

## When it doesn't

- Individual users fail while the job stays Active (fix the per-user error instead)
- Provisioning never ran at all (check the initial configuration)
- The job is paused manually (just resume it)

## Compatibility

Microsoft Entra ID automatic provisioning (formerly Azure AD provisioning service). Applies to SCIM and non-gallery app provisioning.

## Variant phrasings

### entra provisioning quarantined

Same state, newer name. The restart path is identical: fix cause, test connection, restart provisioning.

### azure ad provisioning stopped quarantine

Check whether it stopped on its own (quarantine) versus someone pausing it. Only quarantine needs the root-cause fix first.

## Why it happens

Quarantine is a circuit breaker. Entra counts consecutive provisioning failures; past the threshold it assumes the configuration is broken and stops the job rather than retrying thousands of doomed operations against the target app. One systemic error poisons the whole sync.

## Edge cases

- Restarting without fixing the cause re-quarantines in the next cycle; always fix first
- Large initial syncs can trip the threshold on transient errors; narrow the scope with filters for the first sync
- Credential expiry is the top cause; set a calendar reminder before the next expiry

## If it still fails

- Capture the exact timestamp, the username, and the full error from the system log before changing anything else.
- Reproduce with a single test user so you are not debugging a crowd.
- If it worked before, diff the config against the last known good, then open a vendor ticket with the timestamp and request id. Never send secrets or private keys.

## Prevention

- Track credential and certificate expiry with alerts, not memory.
- Run a synthetic check per app daily so breakage pages you, not a user.
- Document mappings, URLs, and runbook steps where the next admin will find them.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_YKYRSPlmwJUJ81FTfnGBjw
