Stitchflow
Follow Up Boss logo

Follow Up Boss User Management API Guide

API workflow

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

UpdatedMar 18, 2026

Summary and recommendation

The Follow Up Boss REST API (base URL: https://api.followupboss.com/v1) authenticates via HTTP Basic Auth using the API key as the username and an empty string as the password not a Bearer token.

The key is account-scoped and admin-level;

there is no per-user OAuth or granular scope system.

Core user lifecycle operations are available: GET, POST, PUT, and DELETE on /v1/users, with offset/limit pagination (default 20, max 100 per page) and a rate limit of 1,000 requests per 10-minute window per API key (HTTP 429 on breach).

No SCIM 2.0 endpoint exists, meaning any IdP-driven provisioning against Okta, Entra ID, Google Workspace, or OneLogin requires a custom integration built on top of this REST API

a consideration for teams building an identity graph that expects standardized provisioning contracts.

API quick reference

Has user APIYes
Auth methodHTTP Basic Auth (API key as username, empty password)
Base URLOfficial docs
SCIM availableNo
SCIM plan requiredN/A

Authentication

Auth method: HTTP Basic Auth (API key as username, empty password)

Setup steps

  1. Log in to Follow Up Boss as an admin.
  2. Navigate to Admin > API in account settings.
  3. Generate or copy the API key.
  4. Use the API key as the HTTP Basic Auth username with an empty password in all requests.
  5. Include the header: Authorization: Basic base64(apiKey:)

User object / data model

Field Type Description On create On update Notes
id integer Unique user identifier auto-assigned read-only
name string Full name of the user required optional
email string Primary email address required optional Must be unique within the account
phone string Primary phone number optional optional
role string User role within the account (e.g., Admin, Agent) optional optional
isAdmin boolean Whether the user has admin privileges optional optional
teamId integer ID of the team the user belongs to optional optional
created datetime ISO 8601 timestamp of user creation auto-assigned read-only
updated datetime ISO 8601 timestamp of last update auto-assigned auto-assigned
avatar string (URL) URL of the user's profile avatar optional optional
timezone string User's timezone (e.g., America/New_York) optional optional
activeFlag boolean Whether the user account is active optional optional Deactivated users cannot log in

Core endpoints

List Users

  • Method: GET
  • URL: https://api.followupboss.com/v1/users
  • Watch out for: Returns only users belonging to the authenticated API key's account. Deleted/deactivated users may not appear.

Request example

GET /v1/users?limit=20&offset=0
Authorization: Basic <base64(apiKey:)>

Response example

{
  "users": [
    {"id": 1, "name": "Jane Smith", "email": "jane@example.com", "role": "Admin"}
  ],
  "_metadata": {"total": 45, "limit": 20, "offset": 0}
}

Get User by ID

  • Method: GET
  • URL: https://api.followupboss.com/v1/users/{id}
  • Watch out for: Returns 404 if the user ID does not exist in the account.

Request example

GET /v1/users/42
Authorization: Basic <base64(apiKey:)>

Response example

{
  "id": 42,
  "name": "John Doe",
  "email": "john@example.com",
  "role": "Agent",
  "isAdmin": false
}

Create User

  • Method: POST
  • URL: https://api.followupboss.com/v1/users
  • Watch out for: Creating a user counts against the account's seat limit. Duplicate email addresses return a 422 error.

Request example

POST /v1/users
Content-Type: application/json

{"name": "Alice Brown", "email": "alice@example.com", "role": "Agent"}

Response example

{
  "id": 99,
  "name": "Alice Brown",
  "email": "alice@example.com",
  "role": "Agent",
  "created": "2024-01-15T10:00:00Z"
}

Update User

  • Method: PUT
  • URL: https://api.followupboss.com/v1/users/{id}
  • Watch out for: Uses PUT (full or partial update accepted in practice). Omitting fields may not clear them; verify behavior against current docs.

Request example

PUT /v1/users/99
Content-Type: application/json

{"name": "Alice B. Brown", "phone": "+15551234567"}

Response example

{
  "id": 99,
  "name": "Alice B. Brown",
  "phone": "+15551234567",
  "updated": "2024-01-16T08:30:00Z"
}

Delete User

  • Method: DELETE
  • URL: https://api.followupboss.com/v1/users/{id}
  • Watch out for: Deleting a user is irreversible via API. Leads assigned to the deleted user may need reassignment beforehand.

Request example

DELETE /v1/users/99
Authorization: Basic <base64(apiKey:)>

Response example

HTTP 204 No Content

List Teams

  • Method: GET
  • URL: https://api.followupboss.com/v1/teams
  • Watch out for: Team membership is managed at the user level via teamId; there is no separate team-member assignment endpoint documented.

Request example

GET /v1/teams
Authorization: Basic <base64(apiKey:)>

Response example

{
  "teams": [
    {"id": 5, "name": "East Coast Team", "memberCount": 8}
  ]
}

Rate limits, pagination, and events

  • Rate limits: Follow Up Boss enforces rate limits per API key. The official docs state a limit of 1,000 requests per 10 minutes per API key.
  • Rate-limit headers: Yes
  • Retry-After header: No
  • Rate-limit notes: When the limit is exceeded the API returns HTTP 429. The docs mention rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) but do not explicitly document a Retry-After header.
  • Pagination method: offset
  • Default page size: 20
  • Max page size: 100
  • Pagination pointer: offset / limit
Plan Limit Concurrent
All plans 1,000 requests per 10 minutes 0
  • Webhooks available: Yes
  • Webhook notes: Follow Up Boss supports outbound webhooks that fire on CRM events. Webhooks are configured in the admin UI or via the API under /webhooks. They deliver JSON payloads via HTTP POST to a configured URL.
  • Alternative event strategy: No dedicated user-lifecycle webhook events (e.g., user.created, user.deactivated) are documented. Polling the /users endpoint is the recommended approach for user-change detection.
  • Webhook events: lead.created, lead.updated, lead.deleted, appointment.created, appointment.updated, note.created, task.created, task.updated

SCIM API status

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

Limitations:

  • Follow Up Boss does not offer a native SCIM 2.0 endpoint.
  • No IdP connectors (Okta, Entra ID, Google Workspace, OneLogin) are officially supported for SCIM provisioning.
  • User provisioning must be performed via the REST API or manually through the admin UI.

Common scenarios

Three integration scenarios are well-supported by the documented endpoints.

First, provisioning a new agent to a team: GET /v1/teams to retrieve the target teamId, then POST /v1/users with role='Agent' and the resolved teamId;

a 201 response confirms the record.

Second, deprovisioning a departing user: list their assigned leads via GET /v1/people?userId={id}, issue individual PUT /v1/people/{leadId} calls to reassign each lead's ownerId, then DELETE /v1/users/{id}

there is no bulk-reassign endpoint, so large lead counts require batching within the rate limit.

Third, syncing from an external HR system: paginate GET /v1/users exhausting _metadata.total, diff against the HR roster by email, then POST/PUT/DELETE accordingly;

because no user-lifecycle webhooks exist, this sync must be scheduled (e.g., nightly polling).

Provision a new agent and assign to a team

  1. GET /v1/teams to retrieve the target team ID.
  2. POST /v1/users with name, email, role='Agent', and teamId set to the retrieved team ID.
  3. Verify the response returns HTTP 201 with the new user's id.
  4. Optionally GET /v1/users/{id} to confirm the user record is correct.

Watch out for: If the account has reached its seat limit, the POST will fail. Verify seat availability in the admin UI or by checking the current user count against the plan limit before provisioning.

Deprovision a departing user and reassign their leads

  1. GET /v1/users to identify the departing user's id.
  2. GET /v1/people?userId={id} to list leads assigned to that user.
  3. PUT /v1/people/{leadId} for each lead to reassign ownerId to a replacement agent.
  4. DELETE /v1/users/{id} to remove the user from the account.

Watch out for: Lead reassignment must be done before deletion; there is no bulk-reassign endpoint, so this may require multiple PUT calls. Deletion is permanent and cannot be undone via API.

Sync user roster from an external HR system

  1. GET /v1/users?limit=100&offset=0 (paginate until _metadata.total is exhausted) to build a current user list.
  2. Compare against the HR system's active employee list by email.
  3. POST /v1/users for net-new employees not present in Follow Up Boss.
  4. PUT /v1/users/{id} to update changed fields (name, phone, role) for existing users.
  5. DELETE /v1/users/{id} for users present in Follow Up Boss but terminated in the HR system.

Watch out for: No webhook fires on user changes, so this sync must be scheduled (e.g., nightly). Rate limit of 1,000 req/10 min may require batching for large rosters.

Why building this yourself is a trap

The absence of SCIM and user-lifecycle webhooks is the primary integration trap. Without SCIM, every IdP connector that expects a /scim/v2/Users endpoint will fail silently or require a middleware translation layer, adding surface area to the identity graph that must be maintained independently.

Without user.created or user.deactivated webhook events, any downstream system relying on real-time deprovisioning signals must fall back to polling - introducing a latency window where a terminated user's access may persist until the next scheduled sync cycle. Additionally, the PUT /v1/users/{id} endpoint uses full-or-partial update semantics that are not precisely documented;

field-clearing behavior should be validated against live responses before relying on it in automated workflows. Creating users via API consumes paid seats, so provisioning logic must gate on seat availability or handle 4xx errors gracefully to avoid silent provisioning failures.

Automate Follow Up Boss 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 18, 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