Overview
When using capabilities or components, Lens Studio automatically declares the necessary permissions in the project.
There are 2 important types of permissions:
- Sensitive User Data
- External Connectivity
The Spectacles camera captures information about surroundings, enabling interaction with AR content in the environment. The microphone uses information about voice, facilitating features like recorded videos and voice commands. Both camera and microphone access are essential for the device to function properly. Additionally, Spectacles can use location data to support location-based Lenses and features. These APIs are tagged as “Exposes User Data” on the API page.
When camera is not used directly, and APIs returns processed data, such as face landmarks, hand joints, surfaces, the camera is not considered to be used.
While some Lenses are designed for solo use, others require communication with external devices, such as Connected Lenses or RemoteServiceModule, which interact with the internet. During such interactions, Spectacles prevent simultaneous use of these capabilities with sensitive user data to ensure privacy in published Lenses.
Access to some internal Snap Cloud services, as Remote Service Gateway, doesn't count as external connectivity. This means that you can use Remote Service Gateway with sensitive user data in published Lenses.
To discover what permissions have been declared in your project, go to the Spectacles section inside your Project Settings.

Using Non-Declared Permissions Features
In some cases, you might use capabilities that require permission declarations dynamically through scripts.
For example, when you dynamically instantiate a HeadComponent through script:
let headComponent = script.getSceneObject().createComponent('Component.Head');
let headLandMarks = headComponent.getLandmarks();
require('LensStudio:FaceTrackingModule');
let headComponent = script.getSceneObject().createComponent('Component.Head');
let headLandMarks = headComponent.getLandmarks();
In this case, Lens Studio does not automatically declare the permission compared to attaching a HeadComponent to a SceneObject in the Scene Hierarchy Panel. Lenses that attempt to use features without declaring the permissions in their Lens Project will automatically get a permission denied by the SnapOS system.

To learn more about the types of permissions Lenses can use, review the List of Permissions Types section.
List of Permissions Types
| Permission Type | Assets & APIs Requesting Permission |
|---|---|
| Colocated Connected Lenses | ConnectedLensModule |
| Remote Connected Lenses | ConnectedLensModule |
| Speech to Text | VoiceMLModule DialogModule |
| Text to Speech | TextToSpeechModule |
| Remote APIs | RemoteServiceModule RemoteMediaModule |
| Bitmoji | BitmojiModule |
| Camera - SnapML | CameraTextureProvider CameraModule |
| Microphone - SnapML | MicrophoneAudioProvider VoiceMLModule DialogModule |
| GPS - Precise | RawLocationModule |
| Location - Coarse | ProcessedLocationModule |
| Face | FaceRenderObjectProvider (Mesh) HeadComponent (Landmarks) FaceTrackingModule |
| Foundational Trackers | DeviceTracking DeviceTrackingModule |
| Supplementary Trackers | SegmentationTextureProvider ObjectTrackingAsset MarkerTrackingAsset DepthTextureProvider TrackedPoint Point Cloud World Mesh |
| Body Trackers | Object3DAsset |
| Internet | RemoteServiceModule |
| Input Framework (Text) | TextInputModule |