Graften Docsgraften.io
Docs / Integration Guides / PSA, RMM & Business Tool Integrations

PSA, RMM & Business Tool Integrations

Integration guide

These are separate from Custom Connectors: each of the 42 below is purpose-built for one specific vendor's real API, rather than a generic template you configure yourself. All 42 share the same interaction model:

  1. Integrations → [category] → Connect, and fill in that vendor's credential fields (below) — entered once, encrypted at rest, never shown again in plaintext.
  2. Test Connection calls the vendor's API right then and reports a real pass/fail — it does not just check that fields are non-empty.
  3. Sync Now pulls that vendor's data (tickets, devices, agents, incidents — whatever the category implies) into Graften, viewable under that integration's Data tab.

None of these use a browser redirect/consent screen — you're entering credentials you generate on the vendor's own side (an API key, a service account, an app registration), not signing in interactively. Two vendors need more than a simple key and are called out below.

PSA & Ticketing

VendorCredential fields
Autotaskintegration_code, api_username, api_secret, zone
ConnectWisecompany_id, public_key, private_key, base_url
HaloPSAsubdomain, client_id, client_secret, scope
Freshservicedomain, api_key
ServiceNowinstance, username, password
Jiradomain, email, api_token
Zendesksubdomain, email, api_token

RMM

VendorCredential fields
NinjaRMMclient_id, client_secret
Datto RMMapi_url, api_key, secret_key
Ateraapi_key
N-centralserver_url, api_key
Kaseya VSAserver_url, username, password

NinjaRMM devices are attributed to clients through Client Mappings: map each Ninja organisation to a Graften client. A client with several Ninja organisations (for example one per site) can have them all mapped, and every one is synced. If one organisation fails to sync, the others still import, the sync is reported as partial, and the patch history snapshot is skipped rather than recorded from an incomplete device list.

Documentation & Asset Management

VendorCredential fields
IT Glueregion, api_key
Hudubase_url, api_key
SharePointtenant_id, client_id, client_secret (Azure AD app registration, not delegated user consent)
Confluencebase_url, email, api_token
Passportalbase_url, api_key
Liongardbase_url, access_key, access_secret

Security & EDR

VendorCredential fields
Huntressapi_key, api_secret
SentinelOneconsole_url, api_token
Sophos Centralclient_id, client_secret
CrowdStrikeclient_id, client_secret, region

Network & Firewall

VendorCredential fields
Fortinetbase_url, api_token
SonicWallbase_url, username, password
Merakiorganization_id, api_key
WatchGuardapi_key, access_id, access_secret

Remote Access

VendorCredential fields
AnyDesklicense_id, api_key
Splashtopapi_key

Incident & Monitoring

VendorCredential fields
PagerDutyapi_key
Datadogsite, api_key, app_key

Automation & Infrastructure-as-Code

VendorCredential fields
Azure Automationtenant_id, client_id, client_secret, subscription_id, resource_group, automation_account
Terraform (Cloud/Enterprise)base_url, organization, api_token
AWS Automation (SSM)access_key_id, secret_access_key, region, session_token (optional)

HR

VendorCredential fields
BambooHRsubdomain, api_key
Ripplingapi_key
HiBobservice_user_id, token
Workdaybase_url, token_url, client_id, client_secret
Oracle Fusion Cloud HCMbase_url, token_url, client_id, client_secret, scope
Cegid HRbase_url, client_id, client_secret
ServiceNow HRinstance, username, password

Two HR connectors need more than the generic form above:

What's not here

Xero and Microsoft 365 have their own guides above — both use real OAuth2 authorization-code flows with a consent screen, not this credential-form model. QuickBooks, Employment Hero and MYOB connect the same authorization-code way (not yet documented here). HubSpot, Salesforce and Microsoft Teams have their own dedicated route families (proposal push, posture sync, inbound webhooks) beyond a simple connect/test/sync — Teams is covered in its own guide above.

API

POST /api/v1/integrations/connect (body: {type, client_id, credentials}), POST /api/v1/integrations/{id}/test, POST /api/v1/integrations/{id}/sync, GET /api/v1/integrations/{id}/data, GET /api/v1/integrations, DELETE /api/v1/integrations/{id}.

Open in the interactive docs