Atera → Breeze
Atera is the simplest migration in this section. Its API is a plain REST API with a single header for authentication, its scripts are ordinary PowerShell and batch, and its data model is shallow. A small Atera estate can be through Phase 3 in an afternoon.
The one thing that needs thought is the ticketing split: Atera bundles a PSA. Breeze has its own ticketing and also integrates with external PSAs, so you need to decide which you are moving to before you migrate anything else.
Read Migrating to Breeze first.
Hierarchy Mapping
Section titled “Hierarchy Mapping”Atera is flat — Customers contain Agents, with an optional Site/Folder layer that many estates never use.
| Atera | Breeze | Notes |
|---|---|---|
| Account | Partner | |
| Customer | Organization | Direct match. |
| Site / folder | Site | If unused, create one Main site per organization. |
| Agent | Device | |
| Contact | — | Breeze cannot create contacts programmatically today; enter them by hand or via your PSA. |
Phase 0 — Export from Atera
Section titled “Phase 0 — Export from Atera”Generate an API key under Admin → API. Everything below uses X-API-KEY against https://app.atera.com/api/v3. Atera paginates at 50 items per page by default — mind itemsInPage and totalPages on every collection call.
-
Export customers — your Breeze organization list:
Terminal window H="X-API-KEY: $ATERA_KEY"echo 'organization,site' > tree.csvpage=1while :; dor=$(curl -sf -H "$H" "https://app.atera.com/api/v3/customers?page=$page&itemsInPage=50")echo "$r" | jq -r '.items[] | [.CustomerName, "Main"] | @csv' >> tree.csv[ "$page" -ge "$(echo "$r" | jq -r .totalPages)" ] && breakpage=$((page+1))doneFeed
tree.csvto Recipe 1. -
Export agents — your reconciliation checklist and licence audit:
Terminal window page=1while :; dor=$(curl -sf -H "$H" "https://app.atera.com/api/v3/agents?page=$page&itemsInPage=50")echo "$r" | jq -r '.items[] | [.CustomerName, .MachineName, .OS,.LastSeen, .Online] | @tsv'[ "$page" -ge "$(echo "$r" | jq -r .totalPages)" ] && breakpage=$((page+1))done > atera-agents.tsv -
Export custom fields. Atera custom values are read one field at a time per object:
Terminal window curl -sf -H "$H" \"https://app.atera.com/api/v3/customvalues/agent/$AGENT_ID/$FIELD_NAME" | jq .List your configured fields in Admin → Custom Fields first, then loop that call across agents.
-
Export contacts and tickets if you are leaving Atera’s PSA.
GET /contactsandGET /tickets. Ticket history does not migrate into Breeze — export it to storage for reference before you cancel.
Phase 3 — Deploy the Breeze Agent with an Atera Script
Section titled “Phase 3 — Deploy the Breeze Agent with an Atera Script”-
Create the script. Admin → Scripts → New Script, type PowerShell, and paste the Windows payload from Recipe 3. Atera scripts run as SYSTEM.
-
Parameterise the key. Atera supports script parameters — declare
Server,Key, andSecretand supply the per-customer enrollment key from Recipe 2 when you schedule. -
Add AV/EDR exclusions in both directions first — see Antivirus Exceptions.
-
Schedule it as an automation profile, daily. Admin → Automation Profiles, targeting one customer, daily for the length of your rollout window. The
agent.yamlcheck makes repeat runs a no-op and the schedule sweeps up offline laptops.
Migrating Scripts
Section titled “Migrating Scripts”Atera’s script library is plain PowerShell, batch, shell, and Python — bodies port directly.
| Atera | Breeze |
|---|---|
| Script parameters | Script parameters |
| PowerShell / Batch / Bash / Python | language: powershell | cmd | bash | python |
| Automation profiles | Automations |
| Script exit code | exitCodeSeverityMapping for severity by exit code |
Bulk-load with Recipe 6, availability: "partner".
Thresholds, Alerting, and the PSA Decision
Section titled “Thresholds, Alerting, and the PSA Decision”Atera’s monitoring is configured through Threshold Profiles applied per customer or agent. Rebuild them as Breeze monitors plus alert rules, defined partner-wide so one profile covers your whole estate rather than one per customer.
Then make the ticketing decision explicitly:
- Moving to Breeze ticketing. Use Breeze tickets and point alert rules at them. Atera ticket history does not migrate — export it and keep it as an archive.
- Moving to an external PSA. Connect it via PSA integrations and point alert rules there.
Either way, disable Atera’s alerting for a customer only after Breeze alerting is proven for that customer.
Phase 6 — Decommission the Atera Agent
Section titled “Phase 6 — Decommission the Atera Agent”Only after Recipe 4 is clean for that customer.
-
Disable the customer’s threshold profiles. Leave the agent installed.
-
Wait one full patch cycle.
-
Uninstall via Atera:
Terminal window $p = Get-CimInstance Win32_Product | Where-Object { $_.Name -like 'AteraAgent*' }if ($p) { msiexec /x $p.IdentifyingNumber /qn /norestart }Get-Service AteraAgent -ErrorAction SilentlyContinue | Stop-Service -ForceOn macOS and Linux, run Atera’s supplied uninstall script from
/opt/AteraAgent/. -
Verify from Breeze. Recipe 5 — Breeze Management Posture fingerprints Atera. Drive the count to zero.
-
Delete the customer in Atera and reduce your device count, after exporting tickets and anything else you must retain.