Stitchflow
Unbounce logo

Unbounce User Management API Guide

API workflow

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

UpdatedMar 16, 2026

Summary and recommendation

The Unbounce REST API (base URL: https://api.unbounce.com) supports OAuth 2.0 Authorization Code flow and API key authentication, but its scope is limited to pages, leads, and sub-account structures not platform user management.

There are no documented endpoints to invite, update roles for, or remove individual user seats;

those operations are UI-only.

Developers building identity graph integrations should treat Unbounce as a content/lead data source, not a user provisioning target.

API quick reference

Has user APIYes
Auth methodOAuth 2.0 (Authorization Code flow) or API Key (passed as query param or HTTP Basic password)
Base URLOfficial docs
SCIM availableNo
SCIM plan requiredEnterprise

Authentication

Auth method: OAuth 2.0 (Authorization Code flow) or API Key (passed as query param or HTTP Basic password)

Setup steps

  1. Register an OAuth application at https://developer.unbounce.com to obtain a client_id and client_secret.
  2. Redirect users to https://api.unbounce.com/oauth/authorize with response_type=code, client_id, redirect_uri, and scope.
  3. Exchange the returned authorization code for an access_token via POST to https://api.unbounce.com/oauth/token.
  4. Include the access_token as a Bearer token in the Authorization header for all API requests.
  5. Alternatively, use an API key (found in Unbounce account settings) as the HTTP Basic Auth password with an empty username.

Required scopes

Scope Description Required for
read Read-only access to account, pages, and sub-account data. GET operations on accounts, pages, leads
write Read and write access to account resources. POST/PATCH/DELETE operations

User object / data model

Field Type Description On create On update Notes
id string Unique identifier for the account/user. system-generated immutable Used in API path parameters.
email string Email address of the account owner. required not documented as updatable via API Primary identifier for login.
name string Display name of the account. required supported
timeZone string Timezone setting for the account. optional supported IANA timezone string.
created_at ISO 8601 datetime Timestamp when the account was created. system-generated immutable

Core endpoints

Get authenticated account

  • Method: GET
  • URL: https://api.unbounce.com/accounts/self
  • Watch out for: Returns the account associated with the OAuth token, not a list of sub-users.

Request example

GET /accounts/self
Authorization: Bearer {access_token}

Response example

{
  "id": "acc_abc123",
  "name": "Acme Corp",
  "email": "owner@acme.com",
  "timeZone": "America/New_York",
  "created_at": "2022-01-15T10:00:00Z"
}

List sub-accounts

  • Method: GET
  • URL: https://api.unbounce.com/accounts/{account_id}/sub_accounts
  • Watch out for: Sub-accounts are organizational units, not individual user records. User seat management is done in the Unbounce UI.

Request example

GET /accounts/acc_abc123/sub_accounts?count=50&offset=0
Authorization: Bearer {access_token}

Response example

{
  "metadata": {"total": 3},
  "sub_accounts": [
    {"id": "sub_001", "name": "Client A"}
  ]
}

Get sub-account

  • Method: GET
  • URL: https://api.unbounce.com/sub_accounts/{sub_account_id}

Request example

GET /sub_accounts/sub_001
Authorization: Bearer {access_token}

Response example

{
  "id": "sub_001",
  "name": "Client A",
  "created_at": "2023-03-01T08:00:00Z"
}

List pages in sub-account

  • Method: GET
  • URL: https://api.unbounce.com/sub_accounts/{sub_account_id}/pages
  • Watch out for: Pagination uses 'count' (not 'limit') and 'offset' parameters.

Request example

GET /sub_accounts/sub_001/pages?count=50&offset=0
Authorization: Bearer {access_token}

Response example

{
  "metadata": {"total": 12},
  "pages": [
    {"id": "pg_001", "name": "Summer Campaign"}
  ]
}

Get leads for a page

  • Method: GET
  • URL: https://api.unbounce.com/pages/{page_id}/leads
  • Watch out for: Leads are form submission records, not Unbounce platform users.

Request example

GET /pages/pg_001/leads?count=100&offset=0
Authorization: Bearer {access_token}

Response example

{
  "metadata": {"total": 200},
  "leads": [
    {"id": "lead_001", "email": "user@example.com"}
  ]
}

Rate limits, pagination, and events

  • Rate limits: Unbounce does not publicly document specific rate limit thresholds or tiers in their developer docs as of the last known update.

  • Rate-limit headers: No

  • Retry-After header: No

  • Rate-limit notes: No explicit rate limit values, headers, or Retry-After behavior documented in official sources. Implement exponential backoff on 429 responses as a precaution.

  • Pagination method: offset

  • Default page size: 50

  • Max page size: 1000

  • Pagination pointer: offset and count

  • Webhooks available: Yes

  • Webhook notes: Unbounce supports webhooks triggered on form submissions (lead events). Configured per-page in the Unbounce UI or via the API.

  • Alternative event strategy: Poll GET /pages/{page_id}/leads for new lead data if webhooks are not suitable.

  • Webhook events: form_submission (lead created)

SCIM API status

  • SCIM available: No
  • SCIM version: Not documented
  • Plan required: Enterprise
  • Endpoint: Not documented

Limitations:

  • No native SCIM endpoint documented by Unbounce.
  • SSO (SAML) is available on Enterprise/Concierge plans via Okta, Entra ID, and OneLogin, but SCIM provisioning is not natively supported.
  • User provisioning must be done manually through the Unbounce UI or via IdP-side workarounds.

Common scenarios

Three practical API scenarios are supported by the documented endpoints.

First, auditing the sub-account hierarchy: authenticate, call GET /accounts/self for the master account_id, then paginate GET /accounts/{account_id}/sub_accounts using count and offset (max page size 1000) until metadata.total is exhausted

note this returns organizational units, not user seat records.

Second, exporting leads: retrieve page IDs via GET /sub_accounts/{sub_account_id}/pages, then paginate GET /pages/{page_id}/leads per page;

no bulk export endpoint exists, so high lead volumes require many sequential requests.

Third, real-time lead ingestion via webhook: webhooks fire on form_submission events and are configured per-page in the UI or API

there is no global webhook registration endpoint, so programmatic coverage of all pages requires per-page configuration.

Audit all sub-accounts under a master account

  1. Authenticate via OAuth 2.0 or API key.
  2. GET /accounts/self to retrieve the master account_id.
  3. GET /accounts/{account_id}/sub_accounts?count=1000&offset=0 to list all sub-accounts.
  4. Paginate using offset until metadata.total is reached.

Watch out for: This lists organizational sub-accounts, not individual user seats. Individual user management is not available via API.

Export leads from all pages in a sub-account

  1. GET /sub_accounts/{sub_account_id}/pages to retrieve all page IDs.
  2. For each page_id, GET /pages/{page_id}/leads?count=1000&offset=0.
  3. Paginate each page's leads using offset until metadata.total is exhausted.
  4. Aggregate results for export.

Watch out for: High lead volumes require many paginated requests; no bulk export endpoint exists.

Receive real-time form submissions via webhook

  1. In the Unbounce UI, navigate to the target page and configure a webhook URL under Integrations.
  2. Unbounce will POST lead data to the configured URL on each form submission.
  3. Validate the incoming payload and store or forward the lead data.

Watch out for: Webhooks are configured per-page, not globally. There is no API endpoint to programmatically register webhooks for all pages at once.

Why building this yourself is a trap

The most significant API trap is conflating sub-accounts with users. GET /accounts/{account_id}/sub_accounts returns client or organizational groupings, not individual seat records - building an identity graph from this endpoint alone will produce an incomplete and misleading picture of who has access to what.

OAuth tokens are scoped to the authorizing account owner with no per-user token or impersonation model, which limits the granularity of any access audit. Rate limits are undocumented; implement exponential backoff on 429 responses defensively.

Pagination uses the non-standard 'count' parameter (not 'limit') alongside 'offset' - cursor-based pagination is not available.

Automate Unbounce 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 16, 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