Instapage Public API

The Instapage Public API is a REST API over the Instapage landing page and post-click optimization platform, exposing workspaces, team members, landing pages, page groups, personalized experiences, collections and collection pages, experiments, analytics, form submissions (leads), custom domains and image assets across 39 documented operations. Authentication is a Personal API Token sent as an HTTP Bearer token; rate limiting is 200 requests per minute per token and per IP on top of a plan-tiered daily quota (5,000 calls/day on Create, 10,000 on Optimize) that resets at 00:00 UTC.

OpenAPI Specification

instapage-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Instapage Public API
  description: 'The Instapage Public API is a REST API over the Instapage landing page and post-click
    optimization platform. It exposes workspaces, team members, landing pages, page groups, personalized
    experiences, collections and collection pages, experiments, analytics, form submissions (leads), custom
    domains and image assets.


    Authentication is a personal API token sent as an HTTP Bearer token in the Authorization header. A
    personal token inherits all permissions from its creator and cannot exceed them; expired or revoked
    tokens return 401. Rate limiting is 200 requests per minute enforced per token and per IP address,
    on top of a daily plan quota that resets at 00:00 UTC; exceeding either returns 429 with a Retry-After
    header.


    List endpoints are page-number paginated via the `page` query parameter and return a `meta.pagination`
    block; form submissions instead use an opaque `meta.nextPageToken` cursor. Errors are returned as
    a `{title, details, meta}` envelope.


    Instapage does not publish an OpenAPI description. This document was transcribed by API Evangelist
    from the published API reference at https://devdocs.instapage.com/ and is not an official Instapage
    artifact.'
  version: '1'
  contact:
    name: Instapage Developer Docs
    url: https://devdocs.instapage.com/
  termsOfService: https://instapage.com/terms-of-service
  x-provenance:
    method: derived
    source: https://devdocs.instapage.com/
    generated: '2026-08-13'
    note: Instapage publishes no OpenAPI. Transcribed from the published API reference; not an official
      Instapage artifact.
servers:
- url: https://api.instapage.com/v1
  description: Instapage Public API v1
security:
- BearerAuth: []
tags:
- name: Workspaces
  description: Workspaces are the top-level container for landing pages, integrations, domains and other
    assets in Instapage.
- name: Team Members
  description: Manage the people who have access to a workspace and their access levels.
- name: Pages
  description: Create, retrieve, update, publish, export and delete Instapage landing pages.
- name: Groups
  description: Groups (folders) organise landing pages inside a workspace.
- name: Personalizations
  description: Personalized experiences attached to a landing page.
- name: Collections
  description: Collections are groups of pages sharing one template with placeholder-driven content, plus
    the individual collection pages inside them.
- name: Experiments
  description: A/B and AI experiments running against landing pages.
- name: Analytics
  description: Bulk visit, conversion and lead statistics for pages and experiences.
- name: Form Submissions
  description: Retrieve and delete the lead data captured by landing page forms.
- name: Domains
  description: Custom domains connected to a workspace.
- name: Assets
  description: Image asset folders and images inside a workspace.
paths:
  /workspaces:
    get:
      summary: Get all workspaces
      description: Retrieve all workspaces the authenticated token has access to.
      operationId: listWorkspaces
      tags:
      - Workspaces
      parameters:
      - &id002
        in: query
        name: page
        required: false
        description: Specifies which page to fetch. Used for pagination purposes.
        schema:
          type: number
          default: 1
      - in: query
        name: name
        required: false
        description: Optional name of the workspace to limit the result (case insensitive).
        schema:
          type: string
      responses:
        '200':
          description: The request was processed successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Workspace'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
        '400':
          description: Bad request. Validation error — review input parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      summary: Add new workspace
      description: Create a new workspace for the authenticated user. Each workspace must have a unique
        name under the same owner.
      operationId: createWorkspace
      tags:
      - Workspaces
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              properties:
                name:
                  type: string
                  description: The unique name of the workspace.
      responses:
        '201':
          description: The workspace was created successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Workspace'
        '400':
          description: Bad request. Validation error — review input parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict. A workspace with the same name already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Unprocessable Entity. Limit of workspaces has been reached.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /workspaces/{workspaceId}:
    get:
      summary: Get single workspace
      description: Retrieves details of a single workspace by its ID.
      operationId: getWorkspace
      tags:
      - Workspaces
      parameters:
      - &id001
        in: path
        name: workspaceId
        required: true
        description: The ID of the workspace.
        schema:
          type: number
      responses:
        '200':
          description: Request was processed successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Workspace'
        '400':
          description: Bad request. Validation error — review input parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Workspace not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    patch:
      summary: Rename workspace
      description: Updates the name of an existing workspace.
      operationId: renameWorkspace
      tags:
      - Workspaces
      parameters:
      - *id001
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: The new name for the workspace.
      responses:
        '200':
          description: Request was processed successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Workspace'
        '400':
          description: Bad request. Validation error — review input parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Workspace not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Conflict. The workspace name is already taken.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      summary: Delete workspace
      description: Deletes a workspace by its ID.
      operationId: deleteWorkspace
      tags:
      - Workspaces
      parameters:
      - *id001
      responses:
        '200':
          description: Workspace successfully deleted.
        '400':
          description: Bad request. Validation error — review input parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Workspace not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /workspaces/{workspaceId}/team-members:
    get:
      summary: Get all team members
      description: Retrieve all team members for a specific workspace. This endpoint does not paginate.
      operationId: listTeamMembers
      tags:
      - Team Members
      parameters:
      - *id001
      responses:
        '200':
          description: The request was processed successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/TeamMember'
        '400':
          description: Bad request. Validation error — review input parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden. The user does not have the necessary permissions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found. The requested resource could not be located.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      summary: Invite team members
      description: Invites multiple team members to join a workspace with specified accessLevels and an
        optional developer flag. Only workspace owners and managers can invite new team members.
      operationId: inviteTeamMembers
      tags:
      - Team Members
      parameters:
      - *id001
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                required:
                - email
                - accessLevel
                properties:
                  email:
                    type: string
                    description: Email address of the user to invite.
                  accessLevel:
                    type: string
                    enum:
                    - viewer
                    - editor
                    - manager
                    description: Access level to assign to the user.
                  inheritOwnerContextInPublicApi:
                    type:
                    - boolean
                    - 'null'
                    description: 'If true, the user''s public API requests will count against the workspace
                      owner''s quota (default: false).'
      responses:
        '201':
          description: Created. The team members were successfully invited.
        '400':
          description: Bad Request. Invalid input parameters or email format.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden. User doesn't have permission to invite members or team member limit
            exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found. The workspace could not be found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      summary: Edit team member
      description: Updates the roles alongside the developer flag of existing team members in a workspace.
        Supports bulk role updates.
      operationId: updateTeamMembers
      tags:
      - Team Members
      parameters:
      - *id001
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                required:
                - email
                - targetAccessLevel
                properties:
                  email:
                    type: string
                    description: Email address of the team member to update.
                  targetAccessLevel:
                    type: string
                    enum:
                    - viewer
                    - editor
                    - manager
                    description: New role to assign.
                  inheritOwnerContextInPublicApi:
                    type:
                    - boolean
                    - 'null'
                    description: 'Set to true to allow the user''s public API requests to count against
                      the workspace owner''s quota (default: false).'
      responses:
        '201':
          description: Created. The team member roles were successfully updated.
        '400':
          description: Bad Request. Invalid input parameters or duplicate emails in request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden. The user doesn't have permission to modify roles or is attempting to
            modify the owner's role.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found. The workspace was not found or one or more team members don't exist
            in the workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      summary: Remove team members
      description: Remove one or more team members from a workspace. Supports bulk removal operations.
      operationId: removeTeamMembers
      tags:
      - Team Members
      parameters:
      - *id001
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                required:
                - email
                properties:
                  email:
                    type: string
                    description: Email address of the team member.
      responses:
        '201':
          description: Created. Team members were successfully removed.
        '400':
          description: Bad Request. Invalid input parameters or attempting to remove the workspace owner.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden. User doesn't have necessary permissions (must be owner or manager).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found. Workspace not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /workspaces/{workspaceId}/pages:
    get:
      summary: Get all pages
      description: Retrieve pages for a specific workspace. Results are paginated.
      operationId: listPages
      tags:
      - Pages
      parameters:
      - *id001
      - *id002
      - in: query
        name: isDeleted
        required: false
        description: When true, returns only deleted pages. When false, returns only non-deleted pages.
        schema:
          type: boolean
          default: false
      - in: query
        name: publishStatus
        required: false
        description: Filter pages by publish status.
        schema:
          type: string
          enum:
          - published
          - unpublished
          - publishedHasChanges
      - in: query
        name: publishMethod
        required: false
        description: Filter pages by publish method.
        schema:
          type: string
          enum:
          - cmsPlugin
          - customDomain
          - pageDemo
      - in: query
        name: publishedAfter
        required: false
        description: Filter pages published after the specified UNIX timestamp.
        schema:
          type: number
      - in: query
        name: publishedBefore
        required: false
        description: Filter pages published before the specified UNIX timestamp.
        schema:
          type: number
      - in: query
        name: createdAfter
        required: false
        description: Filter pages created after the specified UNIX timestamp.
        schema:
          type: number
      - in: query
        name: createdBefore
        required: false
        description: Filter pages created before the specified UNIX timestamp.
        schema:
          type: number
      - in: query
        name: updatedAfter
        required: false
        description: Filter pages updated after the specified UNIX timestamp.
        schema:
          type: number
      - in: query
        name: updatedBefore
        required: false
        description: Filter pages updated before the specified UNIX timestamp.
        schema:
          type: number
      - in: query
        name: withGroupId
        required: false
        description: Filter pages by group. Unset returns all pages; a number returns only pages with
          the matching groupId; the literal 'null' returns only pages with a null groupId.
        schema:
          type: string
      responses:
        '200':
          description: The request was processed successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Page'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
        '400':
          description: Bad request. Validation error — review input parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found. The specified workspace could not be found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /workspaces/{workspaceId}/pages/{pageId}:
    get:
      summary: Get page
      description: Retrieve detailed information about a specific page within a workspace.
      operationId: getPage
      tags:
      - Pages
      parameters:
      - *id001
      - in: path
        name: pageId
        required: true
        description: The ID of the page to retrieve.
        schema:
          type: number
      responses:
        '200':
          description: The request was processed successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Page'
        '400':
          description: Bad request. Validation error — review input parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized. Authentication failed or missing credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found. The requested resource could not be located.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. Request was blocked due to rate limit or plan restrictions.
            See the Retry-After header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Number of seconds to wait before retrying, returned when the daily plan quota
                or the 200 requests/minute limit is exceeded.
              schema:
                type: integer
        '500':
          description: Internal Server Error. An unexpected condition prevented the request from being
            fulfilled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    patch:
      summary: Update page
      description: Update a page's properties, such as moving it between groups. Set groupId to null to
        remove the page from all groups.
      operationId: updatePage
      tags:
      - Pages
      parameters:
      - *id001
      - in: path
        name: pageId
        required: true
        description: The ID of the page to update.
        schema:
          type: number
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                groupId:
                  type:
                  - number
                  - 'null'
                  description: The ID of the group to move the page to, or null to remove it from all
                    groups.
      responses:
        '201':
          description: Created. The page was successfully updated.
        '400':
          description: Bad Request. Invalid input parameters or the page is already in the specified group.
          con

# --- truncated at 32 KB (122 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/instapage/refs/heads/main/openapi/_original/instapage-openapi.yml