Instapage Pages API
List, search, update, delete, publish, unpublish, import and export Instapage landing pages, including Instapage-JSON round-tripping and published-URL changes.
List, search, update, delete, publish, unpublish, import and export Instapage landing pages, including Instapage-JSON round-tripping and published-URL changes.
openapi: 3.1.0
info:
title: Instapage Pages API
description: 'Create, retrieve, update, publish, export and delete Instapage landing pages.
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: Pages
description: Create, retrieve, update, publish, export and delete Instapage landing pages.
paths:
/workspaces/{workspaceId}/pages:
get:
summary: Get all pages
description: Retrieve pages for a specific workspace. Results are paginated.
operationId: listPages
tags:
- Pages
parameters:
- &id001
in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- &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: 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.
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 necessary permissions to update the page.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found. The specified page, workspace, or group 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'
delete:
summary: Delete page
description: Delete a specific page from a workspace. Pages with running experiments cannot be deleted.
All personalizations and the default experience are cascade deleted.
operationId: deletePage
tags:
- Pages
parameters:
- *id001
- in: path
name: pageId
required: true
description: The ID of the page to delete.
schema:
type: number
responses:
'200':
description: Success. The page was deleted successfully.
'401':
description: Unauthorized. Missing/invalid authorization header, user not found, invalid token,
or access denied.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden. Cannot delete page due to restrictions (page owner frozen, visitor overlimit
exceeded, or running experiments).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found. The specified page or workspace could not be found, or the page doesn't
belong to 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'
/workspaces/{workspaceId}/pages/{pageId}/publication:
post:
summary: Publish a page
description: Publish a page. Publishing and unpublishing a page via the API clears scheduling for
that page.
operationId: publishPage
tags:
- Pages
parameters:
- *id001
- in: path
name: pageId
required: true
description: The ID of the page to publish.
schema:
type: number
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- publicationMethod
properties:
targetUrl:
type:
- string
- 'null'
description: The URL where the page will be published. Must be null for wordpress or
drupal.
publicationMethod:
type: string
description: The method of publication.
enum:
- wordpress
- drupal
- customDomain
- freeDomain
responses:
'202':
description: Accepted. The request has been accepted for processing.
'400':
description: Bad Request. Invalid input parameters or publication method not permitted.
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. Published pages limit exceeded or the user doesn't have necessary permissions.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found. The specified page was 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 error occurred or publish setup not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service Unavailable. Entity-related exception occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
put:
summary: Update published page URL
description: Updates the URL of an already published page without having to unpublish it first.
With the freeDomain method the URL follows the pattern name.pagedemo.co.
operationId: updatePublishedPageUrl
tags:
- Pages
parameters:
- *id001
- in: path
name: pageId
required: true
description: The ID of the published page to update.
schema:
type: number
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- targetUrl
- publicationMethod
properties:
targetUrl:
type: string
description: The new URL for the published page.
publicationMethod:
type: string
description: The publication method.
enum:
- customDomain
- freeDomain
- wordpress
- drupal
responses:
'202':
description: Accepted. The request has been accepted for processing.
'400':
description: Bad Request. Invalid input parameters or publication method not permitted.
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. Page is not published, page has running experiments, or the user doesn't
have necessary permissions.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found. The specified page was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Too Many Requests. The server is rejecting requests due to an excessive rate of
requests. Slow down and retry after some time.
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 error occurred or publish setup not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
summary: Unpublish a page
description: Unpublishes a previously published page. Publishing and unpublishing a page via the
API clears scheduling for that page.
operationId: unpublishPage
tags:
- Pages
parameters:
- *id001
- in: path
name: pageId
required: true
description: The ID of the page to unpublish.
schema:
type: number
responses:
'201':
description: Created. The page was successfully unpublished.
'400':
description: Bad Request. The page is not published.
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 specified page was 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'
/pages/search:
get:
summary: Search pages globally
description: Search for pages across all workspaces the authenticated user has access to, by ID,
title, or URL.
operationId: searchPages
tags:
- Pages
parameters:
- *id002
- in: query
name: id
required: false
description: Filter results by page ID.
schema:
type: number
- in: query
name: title
required: false
description: Filter results by page title (case-insensitive).
schema:
type: string
- in: query
name: url
required: false
description: Filter results by published URL.
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. Invalid parameters provided.
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'
/workspaces/{workspaceId}/pages/json:
post:
summary: Create page from JSON
description: Create a new page by importing an Instapage JSON file. Only standard pages are supported;
AMP pages cannot be created via this method.
operationId: createPageFromJson
tags:
- Pages
parameters:
- *id001
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- title
- content
properties:
title:
type: string
maxLength: 255
description: The title of the page to create (maximum 255 characters).
content:
type: array
description: Array of page variations containing the page structure.
items:
type: object
properties:
id:
type: number
description: Unique identifier for the page variation.
page_blocks:
type: array
description: Array of page block objects.
items:
type: object
elements:
type: array
description: Array of page element objects.
items:
type: object
type:
type: number
description: Type identifier for the page variation.
variation_name:
type: string
description: Name of the variation (e.g. "Control").
is_amp:
type:
- boolean
- 'null'
description: Must not be set to true; AMP pages are not supported.
responses:
'200':
description: The request was processed successfully and the page was created.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
pageId:
type: number
description: The ID of the created page.
workspaceId:
type: number
description: The ID of the workspace containing the page.
title:
type: string
description: The title of the created page.
'400':
description: Bad request. Invalid input parameters, title too long, or invalid content structure.
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 create pages in this workspace.
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}/json:
get:
summary: Export page as JSON
description: Export a page as an Instapage JSON file for backup, migration, or template purposes.
AMP pages cannot be exported.
operationId: exportPageAsJson
tags:
- Pages
parameters:
- *id001
- in: path
name: pageId
required: true
description: The ID of the page to export.
schema:
type: number
responses:
'200':
description: The request was processed successfully and the page was exported.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
content:
type: array
description: Complete page structure with all variations.
items:
type: object
meta:
type: object
properties:
pageId:
type: number
description: The ID of the exported page.
'400':
description: Bad request. Attempting to export an AMP page.
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 page or workspace could not be found, or the page doesn't
belong to 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'
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: Personal API Token
description: 'Personal API token generated from Instapage account settings, sent as `Authorization:
Bearer <token>`.'
schemas:
Pagination:
type: object
properties:
currentPage:
type: number
description: Number of the current page of results.
perPage:
type: number
description: Number of items per page.
totalItemsCount:
type: number
description: Total number of items.
totalPagesCount:
type: number
description: Total number of pages.
nextPage:
type:
- number
- 'null'
description: Number of the next page, null if there is no next page.
previousPage:
type:
- number
-
# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/instapage/refs/heads/main/openapi/instapage-pages-openapi.yml