> ## Documentation Index
> Fetch the complete documentation index at: https://docs.symmetry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Resolve an E-Verify TNC

> Build the TNC workflow end to end. Covers the pending_referral webhook, retrieving FAN and RDC documents from the case detail API, employee and administrator embedded sessions, and status transitions.

When E-Verify issues a Tentative Nonconfirmation (TNC), the E-Verify case `status` in Symmetry I-9 becomes `pending_referral`. The employer must present a Further Action Notice (FAN) to the employee and record the employee’s election.

This page covers the integration work. For what a TNC and FAN are and the obligations each triggers, see [TNCs and FANs](/i9/e-verify/tncs-and-fans).

<Warning>
  **Symmetry does not notify employees directly**

  Your platform is responsible for alerting employees and administrators when webhooks indicate action is required.
</Warning>

## Prerequisites

* [Webhooks](/i9/core-concepts/webhooks) configured
* [E-Verify configured](/i9/e-verify/configure) for the employer
* Familiarity with [E-Verify case statuses](/i9/e-verify/case-statuses) and [Manage E-Verify](/i9/e-verify/manage-cases-api)

## Trigger: `pending_referral` webhook

When a case receives a TNC result from E-Verify, Symmetry sends `employee.everifyCaseUpdate` with `status` set to `pending_referral`:

```json theme={null}
{
  "eventKey": "employee.everifyCaseUpdate",
  "timestamp": "2026-05-19T15:20:20.000Z",
  "data": {
    "employerId": "01971d41-b29d-75cf-a308-12345",
    "employeeId": "01971d45-777a-7002-b025-6789",
    "everifyCase": {
      "submissionId": 111,
      "caseId": "202573907331234",
      "closed": false,
      "status": "pending_referral"
    }
  }
}
```

The webhook payload is intentionally lightweight. It does not include FAN PDF URLs or referral deadlines. Use the case detail API, described in [Phase 1](#phase-1-tnc-issued-pending_referral) below, to enrich your UI.

## Phase 1: TNC issued (`pending_referral`)

### 1. Handle the webhook

Store at minimum:

* `employerId`, `employeeId`
* `everifyCase.submissionId`, `everifyCase.caseId`
* `everifyCase.status` (`pending_referral`)

### 2. Enrich case data (optional but recommended)

Fetch the full case details for the employer:

```bash theme={null}
curl --location 'https://api.symmetry.com/i9/v1/employers/{employerId}/everifyCases' \
--header 'Authorization: Bearer ••••••'
```

Match the list entry where `submissionId` equals the webhook value. Then get the specific E-Verify case details:

```bash theme={null}
curl --location 'https://api.symmetry.com/i9/v1/employers/{employerId}/everifyCases/{id}' \
--header 'Authorization: Bearer ••••••'
```

<Check>
  **The `{id}` path parameter is Symmetry’s internal case record ID from the list response—not the DHS `caseId`.**
</Check>

Sample response:

```json theme={null}
{
  "id": 67,
  "submission": {
    "submissionId": 315,
    "employeeId": "019e6aea-c187-78f0-bfb9-1234"
  },
  "everifyCase": {
    "caseId": "20265447951234",
    "caseCreatedAt": "2026-05-27T14:07:16.000-06:00",
    "caseResultAt": "2026-05-27T15:03:51.000-06:00",
    "receipt": false,
    "deadlineOn": "2026-06-10",
    "caseStatus": "pending_referral",
    "everifyAccountId": 1,
    "rawResponse": {
      "caseStatus": "PENDING_REFERRAL",
      "caseStatusDisplay": "Tentative Nonconfirmation (DHS)",
      "dhsReferralStatus": "PENDING_REFERRAL"
    },
    "auditLogs": [
      {
        "name": "case_status_change",
        "details": {
          "status": "submitted"
        },
        "serverTimestamp": "2026-05-27T14:07:16-06:00"
      },
      {
        "name": "case_status_change",
        "details": {
          "status": "draft"
        },
        "serverTimestamp": "2026-05-27T14:07:16-06:00"
      },
      {
        "name": "case_status_change",
        "details": {
          "status": "photo_match"
        },
        "serverTimestamp": "2026-05-27T14:07:17-06:00"
      },
      {
        "name": "case_photo_matching_confirmation",
        "details": {
          "status": "Photo Matching Confirmation: not-matching",
          "subdomain": "symmetry",
          "actorName": "Admin Test",
          "subsidiary": "null",
          "photoConfirmation": "not-matching"
        },
        "actorId": "3698123",
        "actorType": "User",
        "serverTimestamp": "2026-05-27T14:14:13-06:00"
      },
      {
        "name": "case_status_change",
        "details": {
          "status": "pending_referral"
        },
        "serverTimestamp": "2026-05-27T15:03:51-06:00"
      }
    ],
    "fanUrl": "https://wb-everify-tnc-documents.s3.us-west-1.amazonaws.com/symmetry-sandbox/fan/67/further_action_notice.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJHQUB3XUO6DDQXWQ%2F20260528%2Fus-west-1%2Fs3%2Faws4_request&X-Amz-Date=20260528T022329Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=d53e2f78e282dd88be4f43cee44428121050a0b208dabc15ccfcef230c6baa34",
    "fanUrlSpanish": "https://wb-everify-tnc-documents.s3.us-west-1.amazonaws.com/symmetry-sandbox/fan/67/further_action_notice_spanish.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJHQUB3XUO6DDQXWQ%2F20260528%2Fus-west-1%2Fs3%2Faws4_request&X-Amz-Date=20260528T022329Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=85ba8991311ce7b42d2eb6d4520097c7afb5166207ae7b906f3c6747a406c4d4",
    "tncI9Correct": false,
    "closureReasons": [
      {
        "name": "The case is being closed because the data entered is incorrect.",
        "code": "INCORRECT_DATA"
      },
      {
        "name": "The case is being closed because another case with the same data already exists.",
        "code": "DUPLICATE_CASE_DATA_EXISTS"
      },
      {
        "name": "The case is being closed with a reason of \"Other\".",
        "code": "OTHER_FREE_TEXT"
      }
    ],
    "visitEverify": true,
    "deleteable": false,
    "unconfirmedDataFields": []
  }
}
```

Useful fields for TNC ([full E-Verify object](/i9/e-verify/manage-cases-api#everifycase-object)):

| Field                     | Use                                                                                                                                                        |
| :------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `deadlineOn`              | Federal referral/contest window—show prominently to the employee                                                                                           |
| `fanUrl`, `fanUrlSpanish` | Links to the English and Spanish Further Action Notice PDFs that E-Verify issued for this case                                                             |
| `rdcUrl`, `rdcUrlSpanish` | Links to the English and Spanish Referral Date Confirmation PDFs from E-Verify. Present once the case is `referred`.                                       |
| `visitEverify`            | Often true for `pending_referral` and `referred`—indicates DHS/SSA involvement may be required                                                             |
| `tncI9Correct`            | Indicates whether the employee confirmed the I-9 information is correct after TNC. Returns `true` if confirmed correct and `false` if confirmed incorrect. |

The notice URLs are pre-signed and expire, so request the case detail when you need to present a document rather than storing the link.

### 3. Notify and launch the employee session

Alert the employee in your app, then request an access token:

```bash theme={null}
curl --location 'https://api.symmetry.com/i9/v1/employers/{employerId}/employees/{employeeId}/generateToken' \
--header 'Authorization: Bearer ••••••'
```

Sample response:

```json theme={null}
{
  "token": {
    "embeddedUri": "https://symmetry-sandbox.workbright.com/embedded/new_sign_in?token=412345"
  }
}
```

Embed or redirect to `embeddedUri`, not the raw API URL. Tokens are valid for 30 minutes. See [Authentication](/i9/core-concepts/authentication).

### 4. Employee actions in embedded UI

When the employee is authenticated into the embedded experience, they will see an action-required banner to review their E-Verify case.

<Frame caption="Employee embedded experience: E-Verify case action required">
  <img src="https://mintcdn.com/symmetry-prod/ntGo9oNxMEkTNaTS/i9/assets/images/i9-everify-employee-embedded-tnc.png?fit=max&auto=format&n=ntGo9oNxMEkTNaTS&q=85&s=c0aec5db71da0de2cf9cf163b6a142b9" alt="Action-required banner prompting the employee to review their E-Verify case" width="1438" height="478" data-path="i9/assets/images/i9-everify-employee-embedded-tnc.png" />
</Frame>

The employee will be presented with the following election options:

| Election                                                         | Typical outcome                                                                                                |
| :--------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |
| **Information is incorrect**                                     | Signals an I-9 data problem; administrator will need to close the case and trigger a new I-9 for the employee. |
| **Information is correct → Employee will take action** (contest) | Case moves toward `referred`; employee must contact SSA and/or DHS within the window shown by `deadlineOn`.    |
| **Information is correct → Will not take action**                | Case progresses toward closure as unauthorized / no contest.                                                   |
| **FAN acknowledgment** (all paths)                               | Employee confirms they received and reviewed the FAN.                                                          |

<Frame caption="Employee embedded experience: FAN acknowledgement and election">
  <img src="https://mintcdn.com/symmetry-prod/ntGo9oNxMEkTNaTS/i9/assets/images/i9-everify-employee-fan-notice.png?fit=max&auto=format&n=ntGo9oNxMEkTNaTS&q=85&s=c997b49c678c3221360d1b7211128687" alt="Further Action Notice acknowledgement screen with the employee's election options" width="1446" height="796" data-path="i9/assets/images/i9-everify-employee-fan-notice.png" />
</Frame>

## Phase 2: While `status` remains `pending_referral`

* Case status may stay `pending_referral` until employee elections and administrator attestation are recorded.
* Listen for a new `employee.everifyCaseUpdate` webhook that indicates a change in `status`.
* Display `deadlineOn` from case detail in employee-facing copy when available.

## Phase 3: Administrator completion

### 1. Notify the administrator

`pending_referral` requires administrator action.

### 2. Launch administrator E-Verify UI

Use the E-Verify case index endpoint:

```bash theme={null}
curl --location 'https://api.symmetry.com/i9/v1/employers/{employerId}/admins/{adminId}/everifyCases/generateUri' \
--header 'Authorization: Bearer ••••••'
```

Sample response:

```json theme={null}
{
  "token": {
    "authenticateUri": "https://symmetry-sandbox.workbright.com/sign_in_with_token?token=1234",
    "embeddedUri": "https://symmetry-sandbox.workbright.com/everify/cases"
  }
}
```

Open `authenticateUri` first, then `embeddedUri`.

### 3. Administrator actions in embedded UI

In the E-Verify case UI, the administrator typically:

* Sees the case as **Pending Referral (TNC)**.
* Checks **“I presented the FAN to the employee and informed them of their options.”**
* If the employee reported **incorrect I-9 information**: closes the case (for example, incorrect data) and initiates a new I-9 for the employee.
* If the employee **will contest**: monitors the case after it becomes `referred`; the employee contacts SSA/DHS and may need [E-Verify.gov](https://www.e-verify.gov/) when `visitEverify` is `true`.

## Phase 4: Status transitions after employee election

| Status                                             | Meaning                      | Service provider action                                                                                                                                         |
| :------------------------------------------------- | :--------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `referred`                                         | Employee chose to contest    | Present the Referral Date Confirmation (`rdcUrl` / `rdcUrlSpanish`) from case detail; remind employee of `deadlineOn`; keep admin tasks open; monitor webhooks. |
| `close_case_and_resubmit`                          | I-9 data requires correction | Guide admin to new I-9 via embedded administrator experience.                                                                                                   |
| `employment_authorized` / `closed_authorized`      | Favorable resolution         | Clear employee and admin alerts.                                                                                                                                |
| `final_nonconfirmation` / `closed_nonconfirmation` | Unfavorable outcome          | Trigger your HR/compliance workflow.                                                                                                                            |

Status transitions produce a new `employee.everifyCaseUpdate` webhook.
