Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/instapage-pages-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- 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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- 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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- 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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- 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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- 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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- 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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- 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:
- in: query
name: page
required: false
description: Specifies which page to fetch. Used for pagination purposes.
schema:
type: number
default: 1
- 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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
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:
- in: path
name: workspaceId
required: true
description: The ID of the workspace.
schema:
type: number
- 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:
schemas:
Error:
type: object
description: Error envelope returned by the Instapage API.
properties:
title:
type: string
description: The type of error that occurred.
details:
type: string
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/instapage/refs/heads/main/openapi/instapage-pages-api-openapi.yml