API REFERENCE

Integrations API

The integrations surface connects AlgaPSA to outside systems. API-driven integrations live under /api/v1/integrations/{provider} and follow a common shape: authorize the provider, confirm the connection is healthy, map AlgaPSA records to the provider's, then sync. QuickBooks follows this pattern in full. RMM providers and Hudu (Enterprise Edition) are connected through the AlgaPSA settings UI rather than over REST — for those, the API is there to read connection state and drive syncing, not to establish the connection.

Connect a provider

A connection starts with OAuth. Call POST /api/v1/integrations/quickbooks/oauth/initiate to get an authorization URL, then hand the provider's response back through POST /api/v1/integrations/quickbooks/oauth/callback. Once tokens are stored, GET /api/v1/integrations/quickbooks/connection/status tells you whether the link is live, and POST /api/v1/integrations/quickbooks/connection/refresh renews tokens before they expire. To drop the connection, use DELETE /api/v1/integrations/quickbooks/oauth/disconnect.

Map before you sync

Syncing fails on records the provider can't place, so configure mappings first. The generic GET /api/v1/integrations/quickbooks/mappings and POST /api/v1/integrations/quickbooks/mappings handle data mappings by ID; dedicated endpoints cover the common cases — accounts via PUT /api/v1/integrations/quickbooks/accounts/mappings, tax codes via PUT /api/v1/integrations/quickbooks/tax-codes/mappings, and customers via GET /api/v1/integrations/quickbooks/customers/mappings.

Run and watch syncs

Kick off a sync with POST /api/v1/integrations/quickbooks/sync/full or POST /api/v1/integrations/quickbooks/sync/bulk, then poll GET /api/v1/integrations/quickbooks/sync/status/{sync_id}. Cancel a running job at POST /api/v1/integrations/quickbooks/sync/{sync_id}/cancel or replay a failed one at POST /api/v1/integrations/quickbooks/sync/{sync_id}/retry. Connection health and the diagnostics check at POST /api/v1/integrations/quickbooks/diagnostics are worth wiring into your own monitoring. For everything QuickBooks-specific — the chart of accounts, items, terms, invoice and payment sync — see the QuickBooks API.

RMM device sync

RMM integrations share one model: provider organizations map to AlgaPSA clients, monitored devices become assets, and alerts open tickets through routing rules. Connecting a provider happens in Settings → Integrations; what the REST API adds is the ability to read that state and to control how often devices are pulled in. NinjaOne, Level, and Tactical RMM support device sync. Huntress does not — it exposes no device listing, so it turns SOC-reviewed incidents into tickets and nothing here applies to it.

GET /api/v1/integrations/rmm returns the status of every configured integration, and GET /api/v1/integrations/rmm/{provider} returns one. Each record carries isActive, deviceCount, the last outcome in syncStatus and syncError, and the schedule in deviceSyncEnabled and deviceSyncIntervalMinutes.

Two of the timestamps look interchangeable and are not. lastSyncAt moves on any sync, a manual one included; lastIncrementalSyncAt is written only by the recurring job. To answer whether the schedule is actually running, read the second — an integration can show a recent lastSyncAt from one manual run while nothing recurring has ever fired.

Turn the recurring sync on or off with PUT /api/v1/integrations/rmm/{provider}/device-sync. Cadence is intervalMinutes, from 15 to 1440, defaulting to 60; a value outside that range is rejected rather than clamped, so the stored cadence is always the one you asked for. The write records desired state only — a reconciler converges the actual schedule on its next pass, a few minutes later — so treat the response as confirmation of intent, not of a running schedule. Pick the interval deliberately: every run spends provider API quota, and on some providers an incremental run still reads the whole device list.

curl
curl -X PUT https://algapsa.com/api/v1/integrations/rmm/ninjaone/device-sync \
  -H "X-API-Key: $ALGA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true, "intervalMinutes": 60}'

To pull devices immediately, post to POST /api/v1/integrations/rmm/{provider}/sync. It runs through the same code path as the scheduled job, so an on-demand sync and a scheduled one cannot ingest differently. syncType defaults to incremental, which resumes from the cursor the schedule uses; full re-reads every device regardless of when it was last seen. The call is synchronous — it returns when the sync finishes, which on a large estate can take minutes, so set your client timeout accordingly. If the provider fails mid-run the response is an error and the cursor is left untouched, so the unread window is retried on the next run rather than skipped.

Reading requires the system_settings read permission; configuring the schedule and triggering a sync both require system_settings update. A provider with no device sync, or an integration that is connected but inactive, returns 400 rather than silently doing nothing.

Hudu connection status (Enterprise Edition)

Hudu — the IT documentation and password management platform — integrates with AlgaPSA as an Enterprise Edition feature. Connection setup, company mapping, and asset layout mapping are all configured through Settings → Integrations → Hudu in the AlgaPSA UI, not via REST. Once connected, you can check the integration's health programmatically:

curl
curl https://algapsa.com/api/integrations/hudu \
  -H "X-API-Key: $ALGA_API_KEY"

The response returns status, baseUrl, connectedAt, lastSyncedAt, and passwordAccess (whether the Hudu API key has access to password endpoints). This endpoint requires the system_settings read permission.

Endpoints

Every endpoint links through to its full parameters, request and response schemas, and code samples.

GET/api/integrations/qbo/callbackAlgaPSAHandle QuickBooks Online OAuth callbackGET/api/integrations/qbo/connectAlgaPSAStart QuickBooks Online OAuth flowGET/api/integrations/qbo/statusAlgaPSAQuickBooks Online status route unavailableGET/api/v1/integrations/quickbooks/accountsAlgaPSAGet QuickBooks chart of accountsGET/api/v1/integrations/quickbooks/accounts/mappingsAlgaPSAList account mappingsPUT/api/v1/integrations/quickbooks/accounts/mappingsAlgaPSAConfigure account mappingsPOST/api/v1/integrations/quickbooks/connection/refreshAlgaPSARefresh QuickBooks connection tokensGET/api/v1/integrations/quickbooks/connection/statusAlgaPSAGet QuickBooks connection statusPOST/api/v1/integrations/quickbooks/connection/testAlgaPSARun QuickBooks connection testGET/api/v1/integrations/quickbooks/customers/mappingsAlgaPSAList customer mappingsDELETE/api/v1/integrations/quickbooks/customers/mappings/{mapping_id}AlgaPSADelete customer mappingPOST/api/v1/integrations/quickbooks/customers/syncAlgaPSASync customersPOST/api/v1/integrations/quickbooks/diagnosticsAlgaPSARun QuickBooks diagnosticsGET/api/v1/integrations/quickbooks/healthAlgaPSAGet integration healthGET/api/v1/integrations/quickbooks/health/configAlgaPSAGet health monitoring configPUT/api/v1/integrations/quickbooks/health/configAlgaPSAUpdate health monitoring configPOST/api/v1/integrations/quickbooks/invoices/exportAlgaPSAExport invoices to QuickBooksPOST/api/v1/integrations/quickbooks/invoices/importAlgaPSAImport invoices from QuickBooksGET/api/v1/integrations/quickbooks/itemsAlgaPSAList QuickBooks itemsGET/api/v1/integrations/quickbooks/mappingsAlgaPSAList data mappingsPOST/api/v1/integrations/quickbooks/mappingsAlgaPSACreate data mappingGET/api/v1/integrations/quickbooks/mappings/{mapping_id}AlgaPSAGet data mapping by idPUT/api/v1/integrations/quickbooks/mappings/{mapping_id}AlgaPSAUpdate data mappingDELETE/api/v1/integrations/quickbooks/mappings/{mapping_id}AlgaPSADelete data mappingPOST/api/v1/integrations/quickbooks/oauth/callbackAlgaPSAHandle QuickBooks OAuth callback payloadDELETE/api/v1/integrations/quickbooks/oauth/disconnectAlgaPSADisconnect QuickBooks OAuthPOST/api/v1/integrations/quickbooks/oauth/initiateAlgaPSAInitiate QuickBooks OAuth flowGET/api/v1/integrations/quickbooks/payment-methodsAlgaPSAList QuickBooks payment methodsPOST/api/v1/integrations/quickbooks/payments/syncAlgaPSASync paymentsPOST/api/v1/integrations/quickbooks/sync/{sync_id}/cancelAlgaPSACancel sync operationPOST/api/v1/integrations/quickbooks/sync/{sync_id}/retryAlgaPSARetry sync operationPOST/api/v1/integrations/quickbooks/sync/bulkAlgaPSARun bulk QuickBooks syncPOST/api/v1/integrations/quickbooks/sync/fullAlgaPSARun full QuickBooks syncGET/api/v1/integrations/quickbooks/sync/historyAlgaPSAList sync historyGET/api/v1/integrations/quickbooks/sync/statusAlgaPSAGet current sync statusGET/api/v1/integrations/quickbooks/sync/status/{sync_id}AlgaPSAGet sync status by idGET/api/v1/integrations/quickbooks/tax-codesAlgaPSAList QuickBooks tax codesGET/api/v1/integrations/quickbooks/tax-codes/mappingsAlgaPSAList tax mappingsPUT/api/v1/integrations/quickbooks/tax-codes/mappingsAlgaPSAConfigure tax mappingsGET/api/v1/integrations/quickbooks/termsAlgaPSAList QuickBooks termsGET/api/v1/integrations/rmmAlgaPSAList RMM integrationsGET/api/v1/integrations/rmm/{provider}AlgaPSAGet an RMM integrationPUT/api/v1/integrations/rmm/{provider}/device-syncAlgaPSAConfigure the scheduled device syncPOST/api/v1/integrations/rmm/{provider}/syncAlgaPSARun a device sync now