E-Verify Tentative Nonconfirmations (TNCs)
Handle E-Verify TNCs, present the Further Action Notice (FAN), and manage pending_referral case workflows
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.
Symmetry does not notify employees directly
Your platform is responsible for alerting employees and administrators when webhooks indicate action is required.
Prerequisites
- Webhooks configured
- E-Verify configured for the employer
- Familiarity with E-Verify case statuses and Manage E-Verify
Trigger: pending_referral webhook
pending_referral webhookWhen a case receives a TNC result from E-Verify, Symmetry sends employee.everifyCaseUpdate with status set to pending_referral:
{
"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 (below) to enrich your UI.
Phase 1: TNC issued (pending_referral)
pending_referral)1. Handle the webhook
Store at minimum:
employerId,employeeIdeverifyCase.submissionId,everifyCase.caseIdeverifyCase.status(pending_referral)
2. Enrich case data (optional but recommended)
Fetch the full case details for the employer:
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:
curl --location 'https://api.symmetry.com/i9/v1/employers/{employerId}/everifyCases/{id}' \
--header 'Authorization: Bearer ••••••'
The
{id}path parameter is Symmetry’s internal case record ID from the list response—not the DHScaseId.
Sample response:
{
"id": 67,
"submission": {
"submissionId": 315,
"employeeId": "019e6aea-c187-78f0-bfb9-1234"
},
"everifyCase": {
"caseId": "20265447951123",
"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):
| Field | Use |
|---|---|
deadlineOn | Federal referral/contest window—show prominently to the employee |
fanUrl, fanUrlSpanish | PDF links |
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. |
3. Notify and launch the employee session
Alert the employee in your app, then request an access token:
curl --location 'https://api.symmetry.com/i9/v1/employers/{employerId}/employees/{employeeId}/generateToken' \
--header 'Authorization: Bearer ••••••'
Sample response:
{
"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.
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.

Employee embedded experience: E-Verify case action required
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. |

Employee embedded experience: FAN acknowledgement and election
Phase 2: While status remains pending_referral
status remains pending_referral- Case status may stay
pending_referraluntil employee elections and administrator attestation are recorded. - Listen for a new
employee.everifyCaseUpdatewebhook that indicates a change instatus. - Display
deadlineOnfrom 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:
curl --location 'https://api.symmetry.com/i9/v1/employers/{employerId}/admins/{adminId}/everifyCases/generateUri' \
--header 'Authorization: Bearer ••••••'
Sample response:
{
"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 whenvisitEverifyistrue.
Phase 4: Status transitions after employee election
| Status | Meaning | Service provider action |
|---|---|---|
referred | Employee chose to contest | 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.
Updated 26 minutes ago