User guide
PSA Migration and GLPI Integration
Looking for what it does rather than how to use it? Read the Switching from another PSA overview .
Audience: MSP and organization administrators moving onto Solidlio from an existing PSA or ITSM tool, and anyone running a live GLPI alongside Solidlio. Scope: the GLPI integration, and the CSV import paths for assets and products.
What it is
Solidlio connects to a GLPI instance over its REST API and keeps the two systems in step: tickets sync in both directions, and assets, software, contacts and suppliers sync from GLPI into Solidlio. You choose which entity types sync, which GLPI entity maps to which Solidlio organization, which GLPI ITIL category routes to which Solidlio queue, and which system wins when both have changed a record.
This is a live integration, not a one-shot migration. It is designed to run continuously. If your goal is to leave GLPI entirely, run the integration until Solidlio holds everything you need, then disconnect.
Read section 8 before you plan a migration. Tickets, companies, contacts, contracts and time entries from PSAs other than GLPI have no import path.
Concepts
| Concept | What it is |
|---|---|
Integration | The connection row. One per GLPI instance, owned by one organization, holding encrypted credentials. |
GlpiConfig | Per-connection settings: base URL, entity/location/queue/field mappings, per-entity sync config, detected GLPI version. |
| Entity mapping | GLPI Entity → Solidlio Organization. Decides which tenant an imported record lands in. |
| Location mapping | GLPI Location → Solidlio Location. |
| Queue mapping | GLPI ITIL category → Solidlio TicketQueue. Drives ticket routing on import. |
| Field mapping | Per-entity field pairings, for fields whose names differ between the two systems. |
| Source of truth | Per entity type: glpi or solidlio. Decides which side wins on a conflicting change. |
IntegrationSyncLog | One row per sync run: counts, duration, status, and the per-record error list. |
Entity types and direction
This table is the whole scope of the integration. Nothing outside it syncs.
| Entity | GLPI source | Solidlio target | Direction |
|---|---|---|---|
| Assets | Computer, Monitor, NetworkEquipment, Printer, Phone, Peripheral | Asset | Inbound only |
| Tickets | Ticket, plus ITILFollowup | Ticket, TicketComment | Two-way — see the limits below |
| Software | Software, plus SoftwareLicense sub-items | SoftwareProduct, SoftwareLicense | Inbound only |
| Contacts | User | Person + OrganizationMembership (CUSTOMER) | Inbound only |
| Suppliers | Supplier | Vendor | Inbound only |
Ticket write-back has two limits you must plan around:
- It runs only during a full sync, and only when the tickets source of truth is set to
solidlio. The scheduled 15-minute ticket job pulls from GLPI; it never pushes. Outbound changes therefore move at full-sync cadence, not in near-real time. - It pushes four fields: subject, description, status and priority. Comments, assignees and time entries never leave Solidlio.
No network, IP or port data is synced in either direction.
Roles and permissions
There is no plan gate — the integration is available on every tier, including Free.
| Role | Can configure and sync GLPI |
|---|---|
| platform administrator | ● |
| MSP administrator | ● |
| MSP technician | ● |
| organization administrator | ● |
| power user | — |
| CUSTOMER | — |
Walkthrough — connecting GLPI
Before you start, in GLPI: enable the REST API (Setup → General → API), create an App token, and create a User token for a GLPI account with read access to the entities you intend to sync — plus write access to Tickets if you want write-back.
Your GLPI URL must be HTTPS. Solidlio refuses plaintext connections because the app token and user token are sent on every request. (Outside production, a private-network URL is allowed when CONNECTOR_ALLOW_PRIVATE_URLS is set; it logs a warning.)
- Open the integration — MSP portal:
Integrations → GLPI. Org portal:Integrations → GLPI. - Enter connection details — base URL, app token, user token. Solidlio runs a live connection test and reads back your GLPI version.
- Preview the data — the setup wizard’s Preview GLPI Data step calls GLPI for a sample of each entity type you enabled, so you can confirm you are pointed at the right instance before anything is written.
- Map entities — each GLPI entity to a Solidlio organization. You may only map organizations your account owns or manages; the API rejects anything else.
- Map locations and queues — GLPI locations to Solidlio locations, and GLPI ITIL categories to Solidlio ticket queues.
- Choose sync settings — per entity type: enabled, interval, and source of truth. Set field mappings where names differ.
- Run a full sync — the button returns immediately with a run id; the sync proceeds in the background. Watch it in Sync History.
Watching a sync
Sync History shows every run with record counts, duration, status and an expandable per-record error list. A run that fails partway still records what it processed. Re-running is safe — see below.
Re-running is safe
Every record is matched on (integrationId, entityType, externalId), and unchanged records are skipped by a content hash. Re-running a sync updates; it never duplicates.
Configuration reference
| Setting | What it does | If unset |
|---|---|---|
| Base URL | GLPI root, e.g. https://glpi.example.com | Required — connection fails |
| App token / User token | GLPI REST credentials, encrypted at rest | Required — connection fails |
| Entity mappings | GLPI entity → Solidlio organization | Records land in the integration’s own org |
| Location mappings | GLPI location → Solidlio location | Location left unset on imported assets |
| Queue mappings | GLPI ITIL category → Solidlio queue | Tickets import unqueued |
| Field mappings | Per-entity field pairs | Default field names are used |
Per-entity enabled | Whether that entity type syncs | That entity type does not sync |
Per-entity syncInterval | Scheduled cadence for that entity | Provider default |
Per-entity sourceOfTruth | glpi or solidlio — who wins a conflict | glpi |
One exception worth knowing: source-of-truth is honoured for assets, tickets, contacts and suppliers. Software always takes GLPI as authoritative and overwrites the Solidlio record regardless of the setting.
Troubleshooting
| What you see | Cause |
|---|---|
| Connection rejected before any request is made | The URL is http://. GLPI credentials travel on every call; use HTTPS. |
Invalid organization IDs — not found or not in this account | An entity mapping references an organization your account does not own or manage. |
| Queue mapping rejected | The queue does not exist, or belongs to an organization outside your mapped entity set. |
| Connection test fails with no detail | App token or user token wrong, or the API is disabled in GLPI’s settings. |
| Full sync returns immediately | Expected. It is queued; poll Sync History for progress. |
| Records import into the wrong tenant | Check entity mappings. Unmapped GLPI entities fall back to the integration’s own org. |
| Tickets import with no queue | No ITIL category mapping matched. Map the category, then re-run. |
| Software changes in Solidlio keep reverting | Expected. Software always takes GLPI as authoritative regardless of source-of-truth. |
| Ticket edits in Solidlio never reach GLPI | Write-back needs tickets’ source of truth set to solidlio, and runs only on a full sync. |
Migrating from a PSA that is not GLPI
Be clear-eyed about what exists today.
ConnectWise Manage, Autotask and Halo PSA do not have integrations. They appear in the catalogue marked Coming Soon, and any attempt to set one up is refused by the server before any credential is stored. Do not plan a migration around them.
What you can actually import today:
| Data | Path | Notes |
|---|---|---|
| Tickets | GLPI integration only | No import path from any other system |
| Assets | GLPI integration, or CSV import | CSV: up to 1,000 rows per batch, with a dry-run mode and per-row errors |
| Software | GLPI integration | — |
| Contacts | GLPI integration | Creates a Person and a CUSTOMER portal membership |
| Suppliers | GLPI integration | Imports as Vendor |
| Products | CSV import | — |
| Customers | QuickBooks Online import | Provisions managed-client tenants |
| Companies, contracts, time entries | none | No import path exists |
Two CSV caveats worth knowing before you rely on them:
- The asset importer has no upsert key. A re-run after a partial failure creates duplicates rather than updating. Import once, and verify before re-running.
- The product importer aborts the whole batch on a duplicate SKU. Deduplicate your file first.
For anything else, the REST API is the supported route.
Limits and known behaviour
- Ticket write-back is four fields, full-sync cadence, and requires
sourceOfTruth: solidlio. - Assets, software, contacts and suppliers are inbound only.
- Software ignores source-of-truth and always takes GLPI as authoritative.
- No network, IP or port data syncs.
- GLPI ticket tasks are not synced (follow-ups are, as comments).
- Attachments, projects, contracts and KB articles are not synced.
- The integration is not plan-gated; every tier has it in full.
- If the background queue is unavailable, a full sync still runs but detached — it is not retried and does not survive a service restart.