Projects
A Project groups all migration jobs for a single client engagement. It defines the destination storage, access credentials, bandwidth policy, and tracks cumulative costs and progress across all jobs within it.
Project Types
| Type | Use Case |
|---|---|
| File Migration | Move files from local drives, OneDrive, SharePoint, Google Drive, or Dropbox to Azure Blob or M365 |
| Mailbox Migration | Migrate Exchange/M365 mailboxes between Microsoft tenants |
| Archive | Offload files to Azure Blob Cool, Cold, or Archive tier to free on-prem storage |
| Full Migration | Combined file and mailbox migration for a complete tenant move |
| RockRMS Import | Migrate organizational data from RockRMS SQL Server to The One Mission |
Project Statuses
| Status | Meaning |
|---|---|
| Planning | Project created, no jobs started yet |
| In Progress | At least one job is running or ready |
| Completed | All jobs finished successfully |
| Cancelled | Project was stopped before completion |
| Auth Required | Azure credentials have expired and need re-authentication |
Creating a Project
- Click Projects → New Project.
- Select the Client this project belongs to.
- Choose a Project Type.
- Enter a descriptive Name — include client name and scope (e.g., "Acme Corp — File Archive Q1 2026").
- Optionally enter a Description, PSA Ticket ID, and PSA Project ID for cross-product tracking.
- Configure Azure Storage (required for file, mailbox, archive, and full migration types).
- Set a Default Destination for jobs under this project.
- Optionally configure Bandwidth Scheduling.
- Click Create Project.
Azure Storage Connection
The project needs write access to an Azure Storage container to store migrated data.
Connecting Azure Storage
- On the project create/edit page, click Connect Azure Storage.
- Sign in with a Microsoft account that has Storage Blob Data Contributor role on the target storage account. This initiates an OAuth authorization flow.
- Select:
- Storage Account — the Azure storage account name
- Container — the blob container to write to
- Storage Tier —
Hot,Cool,Cold, orArchive - Blob Prefix (optional) — a path prefix for all blobs in this project (e.g.,
acme-corp/migration-2026/)
- Click Save Connection.
The OAuth refresh token is stored encrypted (AES-256-GCM) in Key Vault. Agents never see it. Instead, they request a short-lived SAS token per job from the Migrate API.
Token Expiry and Re-authentication
Microsoft OAuth refresh tokens expire after ~90 days of inactivity. When a token expires:
- The project status changes to
auth_required. - Running jobs fail with error:
Azure credentials expired — re-authenticate via dashboard. - To fix: click Reconnect Azure Storage on the project page and sign in again.
A background timer checks for expiring tokens hourly and sends email notifications before expiry.
Bandwidth Scheduling
Bandwidth scheduling lets you limit transfer speed during business hours to avoid impacting client network performance.
| Field | Description |
|---|---|
| Full Speed Start | Time when unlimited speed begins (e.g., 18:00 for 6 PM) |
| Full Speed End | Time when throttle resumes (e.g., 06:00 for 6 AM) |
| Throttled Speed (Mbps) | Maximum upload speed outside the full-speed window |
The schedule is delivered to the agent as part of the job configuration. The agent enforces it locally.
Individual jobs can override the project schedule with their own bandwidth_limit_mbps setting.
Project Stats
The project detail page shows rolled-up stats across all jobs:
- Total Jobs — number of jobs created
- Total Bytes / Completed Bytes — aggregate data volume and progress
- Total Mailboxes / Completed Mailboxes — for mailbox migration projects
- Estimated Cost — calculated at $12/mailbox + $0.40/GB transferred
Editing a Project
You can update a project's name, description, PSA IDs, bandwidth schedule, and Azure connection at any time. Changing the Azure connection mid-project takes effect on the next job; running jobs continue with their existing credentials until the current SAS token expires.
Deleting a Project
Projects cannot be deleted if they have active jobs. Stop or cancel all jobs first. Deleting a project removes the project record and its Azure credential; it does not delete any data in Azure Storage.