Stitchflow
Hootsuite logo

Hootsuite User Management API Guide

API workflow

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

UpdatedMar 11, 2026

Summary and recommendation

Hootsuite's REST API is available at https://platform.hootsuite.com/v1 and uses OAuth 2.0 Authorization Code flow. For persistent integrations, the `offline` scope is required to obtain a refresh token; access tokens are short-lived and refresh logic must be implemented explicitly.

The `organizationId` is a required path parameter for nearly all member and team operations - retrieve it from `GET /v1/me` or `GET /v1/organizations` before building any identity graph that maps users to teams and social account access.

Pagination is cursor-based with a fixed page size of 50; cursor values are opaque strings and must not be constructed manually.

API quick reference

Has user APIYes
Auth methodOAuth 2.0 (Authorization Code flow)
Base URLOfficial docs
SCIM availableYes
SCIM plan requiredEnterprise

Authentication

Auth method: OAuth 2.0 (Authorization Code flow)

Setup steps

  1. Register a developer application at developer.hootsuite.com to obtain a client_id and client_secret.
  2. Redirect the user to https://platform.hootsuite.com/oauth2/auth with response_type=code, client_id, redirect_uri, and desired scopes.
  3. Exchange the returned authorization code for an access token via POST to https://platform.hootsuite.com/oauth2/token.
  4. Include the access token as a Bearer token in the Authorization header for all API requests.
  5. Refresh tokens using the refresh_token grant type before expiry.

Required scopes

Scope Description Required for
offline Allows obtaining a refresh token for long-lived access. Persistent integrations that need to act without user re-authentication.
read:organizations Read organization details and membership. Listing organization members and teams.
write:organizations Manage organization membership (invite, remove members). Creating or removing organization members.
read:teams Read team membership and details. Listing teams and their members.
write:teams Manage team membership. Adding or removing members from teams.

User object / data model

Field Type Description On create On update Notes
id string Unique Hootsuite member identifier. system-generated immutable Used as path parameter in member endpoints.
email string Member's email address. required not updatable via REST API Primary identifier for invitations.
fullName string Member's full display name. optional read-only via REST API Set by the user in their profile.
organizationRole string (enum) Role within the organization: SUPER_ADMIN, ADMIN, or MEMBER. optional (defaults to MEMBER) updatable Controls organization-level permissions.
teamIds array of strings List of team IDs the member belongs to. optional managed via team membership endpoints Not directly set on the member object; use team endpoints.
avatarUrl string (URL) URL of the member's avatar image. not settable not settable via API Read-only; set by user.
bio string Member's biography text. not settable not settable via API Read-only; set by user.
timezone string Member's timezone (IANA format). not settable not settable via API Read-only; set by user.
language string Member's preferred language code. not settable not settable via API Read-only; set by user.

Core endpoints

Get current authenticated member

  • Method: GET
  • URL: https://platform.hootsuite.com/v1/me
  • Watch out for: Returns the member associated with the OAuth token, not an arbitrary user. Requires no additional scopes beyond basic authentication.

Request example

GET /v1/me
Authorization: Bearer {access_token}

Response example

{
  "data": {
    "id": "1234567",
    "email": "user@example.com",
    "fullName": "Jane Doe",
    "organizationIds": ["org_abc"]
  }
}

List organization members

  • Method: GET
  • URL: https://platform.hootsuite.com/v1/organizations/{organizationId}/members
  • Watch out for: Requires read:organizations scope. Paginate using the returned cursor value.

Request example

GET /v1/organizations/org_abc/members?limit=50
Authorization: Bearer {access_token}

Response example

{
  "data": [
    {"id": "111", "email": "a@example.com", "organizationRole": "ADMIN"},
    {"id": "222", "email": "b@example.com", "organizationRole": "MEMBER"}
  ],
  "cursor": "next_cursor_token"
}

Get a specific organization member

  • Method: GET
  • URL: https://platform.hootsuite.com/v1/organizations/{organizationId}/members/{memberId}
  • Watch out for: Member ID must be the Hootsuite internal ID, not email.

Request example

GET /v1/organizations/org_abc/members/111
Authorization: Bearer {access_token}

Response example

{
  "data": {
    "id": "111",
    "email": "a@example.com",
    "organizationRole": "ADMIN"
  }
}

Invite a member to an organization

  • Method: POST
  • URL: https://platform.hootsuite.com/v1/organizations/{organizationId}/members
  • Watch out for: Requires write:organizations scope. Sends an invitation email; the user must accept before they are fully active.

Request example

POST /v1/organizations/org_abc/members
Authorization: Bearer {access_token}
Content-Type: application/json

{"email": "newuser@example.com", "organizationRole": "MEMBER"}

Response example

{
  "data": {
    "id": "333",
    "email": "newuser@example.com",
    "organizationRole": "MEMBER"
  }
}

Remove a member from an organization

  • Method: DELETE
  • URL: https://platform.hootsuite.com/v1/organizations/{organizationId}/members/{memberId}
  • Watch out for: Requires write:organizations scope. This action is irreversible via API; the user loses access immediately.

Request example

DELETE /v1/organizations/org_abc/members/333
Authorization: Bearer {access_token}

Response example

HTTP 204 No Content

List teams in an organization

  • Method: GET
  • URL: https://platform.hootsuite.com/v1/organizations/{organizationId}/teams
  • Watch out for: Requires read:teams scope.

Request example

GET /v1/organizations/org_abc/teams
Authorization: Bearer {access_token}

Response example

{
  "data": [
    {"id": "team_1", "name": "Marketing"},
    {"id": "team_2", "name": "Support"}
  ]
}

Add a member to a team

  • Method: POST
  • URL: https://platform.hootsuite.com/v1/teams/{teamId}/members
  • Watch out for: Requires write:teams scope. The member must already belong to the organization before being added to a team.

Request example

POST /v1/teams/team_1/members
Authorization: Bearer {access_token}
Content-Type: application/json

{"memberId": "111"}

Response example

{
  "data": {
    "teamId": "team_1",
    "memberId": "111"
  }
}

Remove a member from a team

  • Method: DELETE
  • URL: https://platform.hootsuite.com/v1/teams/{teamId}/members/{memberId}
  • Watch out for: Requires write:teams scope. Does not remove the member from the organization.

Request example

DELETE /v1/teams/team_1/members/111
Authorization: Bearer {access_token}

Response example

HTTP 204 No Content

Rate limits, pagination, and events

  • Rate limits: Hootsuite enforces per-application rate limits on API calls. Exact numeric limits are not publicly documented in detail; limits vary by endpoint category.
  • Rate-limit headers: Yes
  • Retry-After header: No
  • Rate-limit notes: HTTP 429 is returned when rate limits are exceeded. The API returns X-RateLimit-Limit and X-RateLimit-Remaining headers. Exact limits per tier are not published in official docs.
  • Pagination method: cursor
  • Default page size: 50
  • Max page size: 50
  • Pagination pointer: cursor
Plan Limit Concurrent
All plans (API access) Not publicly specified; contact Hootsuite for enterprise limits. 0
  • Webhooks available: No
  • Webhook notes: Hootsuite's public API does not document user-management or provisioning webhooks. Webhook support in Hootsuite is limited to social content events (e.g., incoming messages) and is not available for member lifecycle events.
  • Alternative event strategy: Poll the /organizations/{organizationId}/members endpoint periodically to detect membership changes, or use SCIM provisioning with an IdP for automated lifecycle management.

SCIM API status

  • SCIM available: Yes

  • SCIM version: 2.0

  • Plan required: Enterprise

  • Endpoint: https://platform.hootsuite.com/scim/v2

  • Supported operations: GET /Users – list users, GET /Users/{id} – get user, POST /Users – provision user, PUT /Users/{id} – replace user, PATCH /Users/{id} – update user attributes, DELETE /Users/{id} – deprovision user, GET /Groups – list groups/teams, POST /Groups – create group, PATCH /Groups/{id} – update group membership, DELETE /Groups/{id} – delete group

Limitations:

  • Requires Enterprise plan; not available on Professional or Team plans.
  • SSO must be configured and active before SCIM can be enabled.
  • SCIM setup must be coordinated with a Hootsuite Customer Success Manager.
  • Supported IdPs include Okta, Microsoft Entra ID (Azure AD), and OneLogin; Google Workspace is not officially supported.
  • Implementation fees of $2,000–$5,000 may apply for Enterprise onboarding.
  • SCIM token is generated within Hootsuite admin settings and must be provided to the IdP as a Bearer token.

Common scenarios

Three automation scenarios cover the core identity lifecycle. For onboarding, POST /v1/organizations/{organizationId}/members sends an invitation email - the member is not active and cannot be added to a team until they accept.

team assignment via POST /v1/teams/{teamId}/members must be deferred until acceptance is confirmed.

For auditing, GET /v1/organizations/{organizationId}/members must be paginated with cursor iteration, and team membership requires a separate GET /v1/teams/{teamId}/members call per team - there is no single endpoint that returns members with team assignments in one response. For Enterprise deprovisioning, SCIM 2.

0 at https://platform.hootsuite.com/scim/v2 supports the full user lifecycle including PATCH /Users/{id} with active=false and DELETE /Users/{id}; however, SCIM only governs users whose login method is SSO - users authenticating with username/password are outside SCIM's scope.

Onboard a new employee to Hootsuite organization and team

  1. Obtain an OAuth 2.0 access token with write:organizations and write:teams scopes.
  2. POST to /v1/organizations/{organizationId}/members with the new user's email and desired organizationRole.
  3. Wait for the user to accept the invitation email (monitor via periodic GET /members or IdP-side SCIM if on Enterprise).
  4. Once the member is active, POST to /v1/teams/{teamId}/members with the new member's ID to assign them to the appropriate team.

Watch out for: The member cannot be added to a team until they have accepted the invitation and their account is active in Hootsuite.

Deprovision a departing employee via SCIM (Enterprise)

  1. Ensure SCIM 2.0 is configured between the IdP (Okta, Entra ID, or OneLogin) and Hootsuite Enterprise.
  2. Deactivate or remove the user in the IdP.
  3. The IdP sends a SCIM PATCH /Users/{id} with active=false or DELETE /Users/{id} to https://platform.hootsuite.com/scim/v2.
  4. Hootsuite revokes the user's access and removes them from the organization automatically.

Watch out for: SCIM must be active and SSO must be the user's login method for automated deprovisioning to work. Users who log in with username/password are not managed by SCIM.

Audit all organization members and their roles

  1. Obtain an OAuth 2.0 access token with read:organizations scope.
  2. GET /v1/organizations/{organizationId}/members with limit=50.
  3. Iterate through pages using the returned cursor value until no cursor is returned.
  4. For each member, record id, email, and organizationRole fields.
  5. Cross-reference with team membership by calling GET /v1/teams/{teamId}/members for each team.

Watch out for: There is no single endpoint that returns all members with their team assignments in one call; team membership must be fetched separately per team.

Why building this yourself is a trap

The most significant integration trap is the invitation-acceptance gap: POST /members does not create an active user, it creates a pending invite. Any workflow that assumes immediate provisionability - including identity graph population - will produce incomplete state until acceptance is confirmed via polling.

SCIM and the REST API are separate systems; changes made through one may not be immediately reflected in the other, which can cause consistency issues in an identity graph that reads from both.

Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining) are present but exact numeric thresholds per plan are not publicly documented, making capacity planning for bulk operations speculative.

Finally, SCIM is hard-gated behind both an Enterprise plan and active SSO configuration - SSO must be live before SCIM can be enabled, and setup requires coordination with a Hootsuite Customer Success Manager, not a self-serve toggle.

Automate Hootsuite 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 11, 2026

* Details sourced from official product documentation and admin references.

Keep exploring

Related apps

15Five logo

15Five

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

15Five uses a fixed role-based permission model with six predefined roles: Account Admin, HR Admin, Billing Admin, Group Admin, Manager, and Employee. No custom roles can be constructed. User management lives at Settings gear → People → Manage people p

1Password logo

1Password

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

1Password's admin console at my.1password.com covers the full user lifecycle — invitations, group assignments, vault access, suspension, and deletion — without any third-party tooling. Like every app that mixes role-based and resource-level permissions

8x8 logo

8x8

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

8x8 Admin Console supports full lifecycle user management — create, deactivate, and delete — across its X Series unified communications platform. Every app a user can access (8x8 Work desktop, mobile, web, Agent Workspace) is gated by license assignmen