API Reference
The IdentityOps REST API uses session-based authentication for browser access and API key authentication for programmatic access. All endpoints return JSON.
API keys: EnterpriseSession access: All plans
Read-only enforced by Microsoft Graph. No write scopes. No background agents.
Authentication
Session: Browser requests use HTTP-only session cookies (automatic).
API Key: Include your key in the Authorization header: Bearer idops_xxx
Rate limits: FREE 20/min · Starter 100/min · Pro 500/min · Enterprise 2,000/min
Scans
Used by: App Governance · License Optimization · Risk Scoring Engine
POST/api/scanStart a new tenant scanSession
GET/api/scansList scan historySession
GET/api/scans/[id]Get scan detail with findingsSession
Apps & Credentials
Used by: App Governance · Risk Scoring Engine
GET/api/appsList all apps from the latest scanSession
GET/api/apps/[id]Get app detail with credentialsSession
POST/api/apps/[id]/acknowledgeAcknowledge a risk findingRISK_ACKNOWLEDGEMENTSession
Groups & Enterprise Apps
Used by: Group Governance
GET/api/groupsList Entra groupsGROUPS_ENTERPRISE_APPSSession
GET/api/enterprise-appsList enterprise applicationsGROUPS_ENTERPRISE_APPSSession
Licenses
Used by: License Governance · Cost Optimization
GET/api/licensesList license assignmentsSession
GET/api/licenses/wasteGet license waste analysisSession
Devices
Used by: Device Management · Compliance Monitoring
GET/api/devicesList managed devicesDEVICE_POSTURESession
Alerts
Used by: Activity & Alerts
GET/api/alert-subscriptionsList alert subscriptionsSession
POST/api/alert-subscriptionsCreate an alert subscriptionSession
DELETE/api/alert-subscriptions/[id]Delete an alert subscriptionSession
Team & Invites
Used by: Settings
GET/api/teamList team membersSession
GET/api/team/invitesList pending invitesSession
POST/api/team/invitesCreate a single inviteSession
POST/api/team/invites/bulkBulk invite up to 50 usersSession
Billing
Used by: Subscription Management
GET/api/billingGet current plan and billing infoSession
POST/api/billing/subscribeStart a checkout sessionSession
POST/api/billing/downgradeSchedule a plan downgradeSession
GET/api/usageGet usage metrics and limitsSession
Integrations
Used by: Webhooks · External Automation
GET/api/api-keysList API keysAPI_KEYSSession
POST/api/api-keysCreate an API keyAPI_KEYSSession
DELETE/api/api-keys/[id]Revoke an API keyAPI_KEYSSession
GET/api/webhooksList webhook endpointsWEBHOOKSSession
POST/api/webhooksCreate a webhook endpointWEBHOOKSSession
GET/api/chat-integrationsList Slack/Teams integrationsWEBHOOKSSession
POST/api/chat-integrationsAdd a Slack/Teams integrationWEBHOOKSSession
Data Export
Used by: Compliance Reporting · GDPR
POST/api/export/fullRequest a full GDPR data exportSession
GET/api/export/fullCheck export status or downloadSession
GET/api/export/schedulesList scheduled exportsTENANT_INTELLIGENCESession
POST/api/export/schedulesCreate a scheduled exportTENANT_INTELLIGENCESession
Notifications
Used by: Alert Preferences
GET/api/notification-preferencesGet notification preferencesSession
PUT/api/notification-preferencesUpdate a notification preferenceSession
Public
Used by: Status Page · Changelog
GET/api/statusSystem health and active incidentsPublic
GET/api/changelogPublished changelog entriesPublic
Error Responses
All errors return a consistent JSON envelope:
{
"error": {
"code": "FEATURE_NOT_AVAILABLE",
"message": "This feature is available on the Pro plan.",
"requestId": "req_abc123",
"details": { "feature": "WEBHOOKS", "currentPlan": "STARTER" }
}
}Common codes: UNAUTHENTICATED (401), UNAUTHORIZED (403), VALIDATION_ERROR (400), FEATURE_NOT_AVAILABLE (403), RATE_LIMITED (429), NOT_FOUND (404), INTERNAL_ERROR (500)