SharePoint Connector - FAQ — Unique AI Documentation

SharePoint Connector - FAQ

10 min read

General

What type of connector is this?

Answer: The SharePoint Connector is a pull-based synchronization service that periodically scans SharePoint sites and syncs flagged documents to the Unique knowledge base.

Key characteristics:

How does this differ from the Power Automate connector (v1)?

Answer:

Aspect v1 (Power Automate) v2 (SharePoint Connector)
Architecture Push-based Pull-based
Trigger Power Automate flow Scheduled scan
Dependencies Power Automate license None (standalone)
Deployment Power Automate cloud Kubernetes container
Control Limited Full control

Permissions

Why Sites.Selected / Lists.SelectedOperations.Selected instead of Sites.Read.All?

Answer: Sites.Selected and Lists.SelectedOperations.Selected follow the principle of least privilege:

Benefits:

Why do I need GroupMember.Read.All for permission sync?

Answer: SharePoint permissions often reference Entra ID (Azure AD) groups. To sync these permissions to Unique, the connector must:

  1. Read the permission entry (group ID)
  2. Expand the group to get member list
  3. Map members to Unique users

Without GroupMember.Read.All, group-based permissions cannot be synchronized.

Why can't I read SharePoint site group members?

Answer: SharePoint site groups have a visibility setting: "Who can view the membership of the group?"

If this is not set to "Everyone", the connector cannot read group members.

Solutions:

  1. Set group visibility to "Everyone"
  2. Add the app principal as a group member/owner
  3. Grant Full Control to the app principal

How do public and private SharePoint sites affect Everyone permissions?

Answer: Private and public sites can behave differently for tenant-wide visibility:

The connector intentionally does not expand tenant-wide principals (Everyone, Everyone except external users) during permission sync. This avoids broad permission replication into Unique and can create a visible difference between SharePoint and Unique access behavior.

Configuration

What are the two ways to configure sites?

Answer: The connector supports two configuration sources:

Source Description Use Case
config_file Static YAML configuration Simple deployments, fixed site list
sharepoint_list Dynamic configuration from SharePoint list Self-service, frequent changes

Static (YAML file):

sharepoint:
  sitesSource: config_file
  sites:
    - siteId: "xxx-xxx-xxx"
      syncColumnName: UniqueAI
      ingestionMode: recursive
      scopeId: scope_xxx
      syncMode: content_only

Dynamic (SharePoint list):

sharepoint:
  sitesSource: sharepoint_list
  sharepointList:
    siteId: "config-site-id"
    listId: "00000000-0000-0000-0000-000000000000"

What columns are needed for the SharePoint configuration list?

Answer: When using sharepoint_list as the sites source, create a list with these columns. Only siteId must be present as a column on the list — every other column marked Yes* can instead be supplied via sharepoint.siteDefaults in the tenant config, in which case the column can be omitted from the list entirely. See Site Defaults.

Column Display Name Type Required Description
siteId Single line text Yes SharePoint site ID (UUID)
syncColumnName Single line text Yes* Column marking files for sync
ingestionMode Choice Yes* flat or recursive
uniqueScopeId Single line text Yes* Unique scope ID
syncStatus Choice Yes* active, inactive, or deleted
syncMode Choice Yes* content_only or content_and_permissions
maxFilesToIngest Number No Optional limit
storeInternally Choice No enabled or disabled
permissionsInheritanceMode Choice No Inheritance settings
subsitesScan Choice No enabled or disabled (default: disabled)

Are subsites automatically included?

Answer: Only if subsitesScan is set to enabled for a site. When enabled, the connector recursively discovers all subsites under the configured site and syncs their content using the parent site's syncColumnName. See Subsites Scanning for details.

How do I find SharePoint Site IDs?

Answer: Several methods are available:

Method 1: Graph Explorer

GET https://graph.microsoft.com/v1.0/sites/{hostname}:/{site-path}

Example:

GET https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/marketing

Method 2: PowerShell

Connect-PnPOnline -Url "https://contoso.sharepoint.com/sites/marketing" -Interactive
Get-PnPSite | Select-Object Id

Method 3: SharePoint URL Pattern

The site ID follows the format: {hostname},{site-collection-id},{web-id}

I renamed my sync column in SharePoint but the connector stopped picking up files. Why?

Answer: SharePoint columns have an internal name (set at creation, immutable) and a display name (changeable). Renaming a column in the SharePoint UI only changes the display name — the Microsoft Graph API still uses the original internal name. The syncColumnName in the connector configuration must match the internal name, not the display name.

Sync Behavior

What safety guards does the connector have?

Answer: The connector includes safeguards to prevent accidental data loss:

What happens when a file is deleted from SharePoint?

Answer: The file is automatically removed from the Unique knowledge base on the next sync cycle. The file diff mechanism detects:

Both are treated as deletions in Unique.

What happens if I change a site's scopeId?

Answer: The connector detects that the root scope has changed and automatically migrates all child scopes from the old root to the new root. After migration the old root scope is deleted. If migration fails for any child scope, the error is logged and the sync continues.

When should I use in_parent: instead of a fixed scope ID?

Answer: Use in_parent:scope_<parentId> when you want the connector to find-or-create a per-site root scope under a shared parent automatically, instead of pre-creating one scope per site. It's useful when many sites need to be onboarded quickly and you don't want operators to materialise a scope before each ingestion request. The auto-created scope is named after the SharePoint site's URL slug. Removing the site (via syncStatus: deleted) removes the auto-created scope.

What happens if I unflag a document?

Answer: Setting the sync column to "No" is treated as a deletion request. On the next sync cycle:

  1. Connector detects the flag change via the server-side file diff
  2. File is removed from the Unique knowledge base

Are subfolders synced?

Answer: It depends on the ingestionMode setting for each site:

Mode Behavior
recursive Scans all subfolders, maintains folder hierarchy in Unique
flat All flagged files go to a single root scope

The sync column must be set on individual files (not folders).

What file types are supported?

Answer: The Helm chart ships the following default MIME types:

SharePoint pages (.aspx) bypass the MIME type filter and are always eligible regardless of configuration. Additional or fewer types can be configured via allowedMimeTypes in the processing configuration. Note: there is no schema-level default — allowedMimeTypes must be explicitly configured.

What is the maximum file size?

Answer: Default is 200 MB, configurable via maxFileSizeToIngestBytes in the processing configuration. Larger files are skipped with a warning in the logs.

Troubleshooting

Why aren't my documents syncing?

Checklist:

  1. Is the sync column set to "Yes" for the document?
  2. Is the site configured (in YAML or SharePoint list)?
  3. Is the site's syncStatus set to active?
  4. Is the file type in allowedMimeTypes?
  5. Is the file under maxFileSizeToIngestBytes?
  6. Check connector logs for errors

How does the connector behave when errors occur?

Answer: The connector uses scenario-based handling to keep sync cycles running:

Why do I see "Site not found" errors?

Causes:

Why do I see "Access denied" errors?

Causes:

Why is sync taking too long?

Possible causes:

Multi-Tenant

Can one connector serve multiple SharePoint tenants?

Answer: Not currently. Each SharePoint tenant requires a separate connector deployment. Multi-tenant support is planned for a future release.

Can I sync from multiple SharePoint sites?

Answer: Yes, configure multiple sites in the tenant configuration:

Static configuration:

sharepoint:
  sitesSource: config_file
  sites:
    - siteId: "site-id-1"
      # ... other settings
    - siteId: "site-id-2"
      # ... other settings

Dynamic configuration: Add multiple rows to the SharePoint configuration list.

Performance

What are the resource requirements?

Answer:

What are the API rate limits?

Answer: Microsoft Graph limits:

Certificates

What certificate formats are supported, and do I need the thumbprint?

Answer: Generate certificates with OpenSSL or PowerShell and keep the deployment on connector-compatible asymmetric key/certificate material.

After uploading the certificate to Entra App Registration, capture the Thumbprint (SHA) and add it to connector configuration where thumbprint is required by your deployment setup.