Stitchflow
Huntress logo

Huntress User Management API Guide

API workflow

How to automate user lifecycle operations through APIs with caveats that matter in production.

UpdatedMar 17, 2026

Summary and recommendation

The Huntress REST API (base URL: https://api.huntress.io/v1) authenticates via HTTP Basic Auth using an account-generated API key as the username and its secret as the password there is no OAuth 2.0 flow.

API keys are scoped to the generating account;

a partner-level key can traverse child organizations, but a child org key cannot access sibling orgs.

This scoping model is central to how the API maps onto the Huntress identity graph: the top-level account owns organizations, organizations own agents, and reports are scoped to organizations.

Pagination uses 1-based page indexing with `?page` and `?limit` query parameters;

the maximum `limit` per request is 500, and total page counts are returned in the `pagination.total_pages` response field.

API quick reference

Has user APIYes
Auth methodHTTP Basic Auth using Account API key as username and password (or Bearer token in some contexts); API keys generated per account in the Huntress portal
Base URLOfficial docs
SCIM availableNo
SCIM plan requiredN/A

Authentication

Auth method: HTTP Basic Auth using Account API key as username and password (or Bearer token in some contexts); API keys generated per account in the Huntress portal

Setup steps

  1. Log in to the Huntress portal at app.huntress.io
  2. Navigate to Account Settings > API Keys
  3. Click 'Generate API Key' and copy the key and secret
  4. Use the key as the username and secret as the password in HTTP Basic Auth headers, e.g., Authorization: Basic base64(key:secret)

User object / data model

Field Type Description On create On update Notes
id integer Unique identifier for the user/account system-assigned immutable Used as path parameter in user-specific requests
email string Email address of the user required updatable Used as login identifier
first_name string User's first name optional updatable
last_name string User's last name optional updatable
role string User role within the account (e.g., admin, analyst) optional updatable Role names are account-type dependent
created_at string (ISO 8601) Timestamp when the user was created system-assigned immutable
updated_at string (ISO 8601) Timestamp of last update system-assigned system-assigned

Core endpoints

List Organizations (Accounts)

  • Method: GET
  • URL: https://api.huntress.io/v1/organizations
  • Watch out for: Huntress uses 'organizations' to refer to managed accounts/tenants, not end-users. User management is scoped under accounts.

Request example

GET /v1/organizations?limit=25&page=1
Authorization: Basic <base64(key:secret)>

Response example

{
  "organizations": [
    {"id": 123, "name": "Acme Corp", "created_at": "2023-01-01T00:00:00Z"}
  ],
  "pagination": {"current_page": 1, "total_pages": 4}
}

Get Organization

  • Method: GET
  • URL: https://api.huntress.io/v1/organizations/{id}
  • Watch out for: Requires the numeric organization ID, not name.

Request example

GET /v1/organizations/123
Authorization: Basic <base64(key:secret)>

Response example

{
  "organization": {
    "id": 123,
    "name": "Acme Corp",
    "created_at": "2023-01-01T00:00:00Z"
  }
}

List Agents (Endpoints)

  • Method: GET
  • URL: https://api.huntress.io/v1/agents
  • Watch out for: Agents represent monitored endpoints/devices, not portal users. Filter by organization_id to scope results.

Request example

GET /v1/agents?organization_id=123&limit=25
Authorization: Basic <base64(key:secret)>

Response example

{
  "agents": [
    {"id": 456, "hostname": "DESKTOP-ABC", "platform": "windows"}
  ]
}

List Reports (Incident Reports)

  • Method: GET
  • URL: https://api.huntress.io/v1/reports
  • Watch out for: Reports are security incident reports, not user activity logs.

Request example

GET /v1/reports?organization_id=123
Authorization: Basic <base64(key:secret)>

Response example

{
  "reports": [
    {"id": 789, "status": "open", "created_at": "2024-01-15T10:00:00Z"}
  ]
}

Get Account Info

  • Method: GET
  • URL: https://api.huntress.io/v1/account
  • Watch out for: Returns the top-level account associated with the API key, not individual portal users.

Request example

GET /v1/account
Authorization: Basic <base64(key:secret)>

Response example

{
  "account": {
    "id": 1,
    "name": "My MSP Account",
    "created_at": "2022-06-01T00:00:00Z"
  }
}

Rate limits, pagination, and events

  • Rate limits: Huntress enforces rate limiting on API requests; specific numeric limits are not publicly documented in official sources as of the research date

  • Rate-limit headers: Unknown

  • Retry-After header: Unknown

  • Rate-limit notes: Official docs do not explicitly publish per-plan rate limit numbers or rate-limit response headers. Contact Huntress support for current limits.

  • Pagination method: offset

  • Default page size: 25

  • Max page size: 500

  • Pagination pointer: page and limit query parameters (e.g., ?page=1&limit=25)

  • Webhooks available: No

  • Webhook notes: Huntress does not publicly document a webhook system for user-management events as of the research date. Incident and detection notifications are delivered via email or integrations (e.g., PSA tools).

  • Alternative event strategy: Poll the /v1/reports and /v1/agents endpoints for changes, or use PSA/ticketing integrations (ConnectWise, Autotask) for event-driven workflows.

SCIM API status

  • SCIM available: No
  • SCIM version: Not documented
  • Plan required: N/A
  • Endpoint: Not documented

Limitations:

  • Huntress does not offer a native SCIM 2.0 endpoint for automated user provisioning/deprovisioning as of the research date.
  • No IdP (Okta, Entra ID, Google Workspace, OneLogin) SCIM connectors are officially documented.

Common scenarios

Three primary automation scenarios are well-supported by the current API surface.

First, enumerating all managed organizations and their endpoints: GET /v1/organizations?limit=500 returns child orgs, then GET /v1/agents?organization_id={id}&limit=500 scopes endpoints per org - iterate pages when total_pages exceeds 1.

Second, pulling open incident reports for a specific org: GET /v1/reports?organization_id={id}&status=open returns open incidents;

paginate with ?page=2 as needed, and confirm status filter values against the live API docs as they may change across versions.

Third, syncing the Huntress organization list into an external CMDB or ticketing system: poll GET /v1/organizations?limit=500 on a schedule, diff against stored IDs to detect additions or removals, and use org IDs as the correlation key for subsequent agent and report calls.

Note that there are no webhooks for any of these events polling is the only supported pattern, and numeric rate limits are not publicly documented, so polling frequency should be tuned conservatively.

Enumerate all managed organizations and their agents

  1. Authenticate with HTTP Basic Auth using your account API key and secret.
  2. GET /v1/organizations?limit=500 to retrieve all child organizations.
  3. For each organization ID, GET /v1/agents?organization_id={id}&limit=500 to list monitored endpoints.
  4. Handle pagination via the 'pagination.total_pages' field in the response.

Watch out for: If you have more than 500 organizations, you must iterate through pages. The max limit per request is 500.

Pull open incident reports for a specific organization

  1. Authenticate with HTTP Basic Auth.
  2. GET /v1/reports?organization_id={id}&status=open to retrieve open incident reports.
  3. Parse the response array for report IDs, severity, and timestamps.
  4. Paginate using ?page=2 if total_pages > 1.

Watch out for: Report status filter values should be confirmed against the official API docs as they may change between API versions.

Sync Huntress organization list into an external CMDB or ticketing system

  1. Authenticate with HTTP Basic Auth.
  2. GET /v1/organizations?limit=500 and store organization IDs and names.
  3. Periodically re-run the request and diff against stored data to detect new or removed organizations.
  4. Use organization IDs to correlate with agents and reports in subsequent API calls.

Watch out for: There are no webhooks to notify of new organization creation; polling is required. Polling frequency should be tuned to avoid undocumented rate limits.

Why building this yourself is a trap

The most significant caveat for automation engineers: there is no publicly documented REST endpoint to create, update, or delete portal user accounts (human users) via the API. User lifecycle management is UI-only.

Additionally, SCIM 2.0 is not available, meaning no IdP connector (Okta, Entra ID, Google Workspace, OneLogin) can automate provisioning or deprovisioning against the Huntress identity graph. The API is purpose-built for MSP management of organizations and endpoints - not for managing the human operators who log into the portal.

Any integration that assumes user provisioning parity with the portal will need a manual fallback layer.

Automate Huntress workflows without one-off scripts

Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.

Every app coverage, including apps without APIs
60+ app integrations plus browser automation for apps without APIs
IT graph reconciliation across apps and your IdP
Less than a week to launch, maintained as APIs and admin consoles change
SOC 2 Type II. ~2 hours of your team's time

UpdatedMar 17, 2026

* Details sourced from official product documentation and admin references.

Keep exploring

Related apps

Abnormal Security logo

Abnormal Security

API Only
AutomationAPI only
Last updatedMar 2026

Abnormal Security is an enterprise email security platform focused on detecting and investigating threats such as phishing, account takeover (ATO), and vendor email compromise. It does not support SCIM provisioning, which means every app in your stack

ActiveCampaign logo

ActiveCampaign

API Only
AutomationAPI only
Last updatedFeb 2026

ActiveCampaign uses a group-based permission model: every user belongs to exactly one group, and all feature-area access (Contacts, Campaigns, Automations, Deals, Reports, Templates) is configured at the group level, not per individual. The default Adm

ADP logo

ADP

API Only
AutomationAPI only
Last updatedFeb 2026

ADP Workforce Now is a mid-market to enterprise HCM platform that serves as the HR source of record for employee data — payroll, benefits, time, and talent. User access is governed by a hybrid permission model: predefined security roles (Security Maste