# Verification Methods

To comply with the **Contact Lens Rule (CLR)**, you must verify a patient's prescription through one of two primary methods: reviewing a digital copy of the prescription or contacting the patient's doctor directly.

The Visibly API facilitates both methods. Before you can initiate a verification request in Step 3, you must use this step to gather the necessary data (either a `fileId` or a `doctorId`).

### Flow A: Prescription Upload

Use this flow when a patient wants to provide a copy of their prescription. You will first request a secure upload location from Visibly, upload the file, and then reference that file in your final verification request.

#### 1. Generate Upload URL

The `uploadFile` mutation generates a unique `fileId` and a temporary S3 presigned URL.

[Click here to see the uploadFile GraphQL reference](/reference/visibly-api/mutations/uploadFile)

#### 2. Upload the File

Perform a standard **HTTP PUT** request to the `uploadUrl` provided in the response.

- Method: `PUT`
- Body: The binary file data.
- Success Criteria: A `200 OK` response from the storage server.


### Flow B: Doctor Database Search

Use this flow when a patient does not have their prescription and needs you to contact their doctor for verification.

#### Search for a Doctor

The doctors query allows you to search Visibly’s comprehensive database using a flexible `searchString` (which checks name, practice, and address) or specific matching criteria.

[Click here to see the doctors GraphQL reference](/reference/visibly-api/queries/doctors)

#### Handling Search Results

- If a Match is Found: Capture the id from the results to use as the `doctorId` in the next step.
- If No Match is Found: Proceed to Flow C (Manual Entry) in the next section, where you will provide the doctor's name, practice, and phone number manually.


### Implementation Checklist

- Successfully retrieved a `fileId` after an Rx upload.
- Successfully performed a doctor search and captured a `doctorId`.
- Handled pagination using `pageInfo` if the search results exceed one page.