{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["img"]},"type":"markdown"},"seo":{"title":"Contact Lens Prescription Verification","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"contact-lens-prescription-verification","__idx":0},"children":["Contact Lens Prescription Verification"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Visibly Verification API automates the federally mandated prescription verification process. Under the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Contact Lens Rule (CLR)"]},", retailers must either review a physical prescription or contact a patient’s doctor, allowing a strictly defined eight business-hour window for a response."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This integration handles the complexities of compliance, doctor communications, and manual reviews, allowing you to focus on your core commerce experience."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"-quick-start-checklist","__idx":1},"children":["⚡ Quick Start Checklist"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Follow these steps to complete your integration:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/developer-guides/contacts-verification/01-authentication"},"children":["Authenticate"]},": Exchange your credentials for an OAuth 2.0 access token."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/developer-guides/contacts-verification/02-verification-methods"},"children":["Select a Flow"]},": Determine if you will verify via ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["File Upload"]}," or ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Doctor Contact"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/developer-guides/contacts-verification/03-creating-a-request"},"children":["Submit Request"]},": Call the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verifyContactsPrescription"]}," mutation to initiate the job."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/developer-guides/contacts-verification/04-webhooks"},"children":["Listen for Updates"]},": Set up an HTTPS webhook using ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createNotificationSubscription"]}," to receive real-time status changes."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/developer-guides/contacts-verification/05-querying-for-updates"},"children":["Querying"]},": Manually poll for updates using the jobId."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"-environment-details","__idx":2},"children":["🌐 Environment Details"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Visibly provides two distinct environments. All API requests require a Bearer token obtained from the corresponding Auth endpoint."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Detail"},"children":["Detail"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Sandbox (Testing)"},"children":["Sandbox (Testing)"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Production (Live)"},"children":["Production (Live)"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Auth Endpoint"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://sandbox-visibly.auth.us-east-1.amazoncognito.com/oauth2/token"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://prod-visibly.auth.us-east-1.amazoncognito.com/oauth2/token"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GraphQL API"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.sandbox.govisibly.xyz/"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.govisibly.com/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Purpose"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Development and end-to-end testing with mock data."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Live verification requests and real doctor contact."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"️-integration-roadmap","__idx":3},"children":["🗺️ Integration Roadmap"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following diagram illustrates the standard integration lifecycle, from the user's selection in your frontend to receiving the final verification status via webhook."]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/verification-flow-overview.e7f97cfc8508b88b058aa6ecd9be46e77edb7a46e16c4f798142076db76071c1.6c1cfb74.png","alt":"Verification Flow Overview.png","withLightbox":true,"width":"","height":""},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Integration Flow at a Glance:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Step 1: User Intent"]},": The user selects their products and chooses a verification method."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Step 2: Data Collection"]},":",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["File Flow"]},": Use uploadFile to get a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fileId"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Doctor Flow"]},": Use the doctors query to find a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["doctorId"]},", or collect manual details."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Step 3: Initiation"]},": Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verifyContactsPrescription"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Step 4: Resolution"]},": Visibly processes the request and sends updates to your registered webhook."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Step 5: Querying"]},": Your system can query for updates on given requests using the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jobId"]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"-status-summary","__idx":4},"children":["🚦 Status Summary"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Below are the primary statuses your system will receive during the verification lifecycle. For a full breakdown of reasons and required developer actions, see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/developer-guides/contacts-verification/06-verification-statuses"},"children":["Verification Statuses Reference"]},"."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Summary Description"},"children":["Summary Description"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Recommended Action"},"children":["Recommended Action"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["PENDING"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The request is being processed (awaiting doctor or CS review)."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Display \"In Progress\" to user."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["APPROVED"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The prescription is verified (actively or passively)."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Proceed with order shipment."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["CHANGES_REQUIRED"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ordered products do not match the prescription."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Prompt user to update their order."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["DENIED"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["There was an issue with the prescription file or patient details."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Prompt user for new info or renewal."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["REJECTED"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The submitted data (file or doctor) was invalid or unreadable."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Prompt user to re-submit data."]}]}]}]}]}]},"headings":[{"value":"Contact Lens Prescription Verification","id":"contact-lens-prescription-verification","depth":1},{"value":"⚡ Quick Start Checklist","id":"-quick-start-checklist","depth":2},{"value":"🌐 Environment Details","id":"-environment-details","depth":2},{"value":"🗺️ Integration Roadmap","id":"️-integration-roadmap","depth":2},{"value":"🚦 Status Summary","id":"-status-summary","depth":2}],"frontmatter":{"seo":{"title":"Contact Lens Prescription Verification"}},"lastModified":"2026-04-01T02:41:42.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/developer-guides/contacts-verification/00-index","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}