API Reference

The RocketPages REST API lets you manage websites, pages, sections, content, domains, images, and more via standard HTTP requests. Use this reference for integrations with curl, Postman, or custom code.


Base URL


https://api.rocketpages.io


Authentication


All requests require an API key in the Authorization header.

Authorization: Bearer YOUR_API_KEY


Creating an API Key


API keys can only be created and revoked from the RocketPages dashboard. Navigate to Site Settings → API & MCP Access to generate a new key. You will need to provide a label and choose site access (all sites or specific sites). The API key is shown only once at creation time — copy and store it securely.


Response Format


All responses are JSON. Request bodies use camelCase keys, and responses are returned with snake_case keys.


Common Query Parameters


Most endpoints require siteId as a query parameter to identify the target site. Page-level endpoints also require pageId.


Rate Limiting


API requests are rate-limited. Default limits vary by endpoint. When limits are exceeded, a 429 Too Many Requests response is returned.


Error Response Format


{
  "error": "Error message description",
  "statusCode": 400
}

HTTP Status Codes

Data table

Status Code

Description

200

Success

201

Created

400

Bad Request (invalid parameters)

401

Unauthorized (missing or invalid API key)

403

Forbidden (insufficient permissions)

404

Not Found

409

Conflict (duplicate resource)

429

Rate Limit Exceeded

500

Internal Server Error

Website Management

List all websites


GET /api/configs/users-site-configs

Retrieve all websites owned by or shared with the authenticated user.

Authentication: API key required

Parameters: None

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/users-site-configs" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": [
    {
      "site_id": "2e2b85c5-1b76-4e74-8e39-c82749386c53",
      "site_name": "My Site",
      "sub_domain": "mysite",
      "is_published": true,
      "created_at": "2024-01-15T10:30:00Z"
    }
  ]
}

Generate Website

POST /api/configs/generate-website

Create a new website with content. If you provide values for fields like headline, subheading, services, testimonials, faq, etc., your content is used exactly as provided. AI-generated content is only used for fields you leave empty or do not include. The only required field is websiteName — all other fields are optional.

Authentication: API key required

Request Body: A JSON object with a responses key containing website details.

Parameters (inside responses object):

  • websiteName (string, required) — Name of the website
  • category (string, optional) — Website category (e.g., "Portfolio", "Restaurant", "Photographer", "Events"). Helps AI generate relevant content for empty fields.
  • headline (string, optional) — Main hero section headline. If not provided, AI generates one based on the category.
  • subheading (string, optional) — Hero section subheading. If not provided, AI generates one.
  • address (string, optional) — Address displayed in the footer. If not provided, the footer address is left empty.
  • offerings (string, optional) — What the website offers. Helps AI tailor content when other fields are empty.
  • about_title (string, optional) — About section title. If not provided, AI generates one.
  • about_description (string, optional) — About section description. If not provided, AI generates one.
  • services (array, optional) — Services list, each with title and description. If not provided, AI generates services based on category.
  • services_description (string, optional) — Services section description. If not provided, AI generates one.
  • testimonials (array, optional) — Testimonials, each with quote, name, subtitle, description. If not provided, AI generates sample testimonials.
  • faq (array, optional) — FAQ items, each with question and answer. If not provided, AI generates relevant FAQs.
  • palette (string, optional) — Color palette: "Bright", "Pastel", or "Dark". If not provided, a palette is selected automatically.
  • meta_title (string, optional) — SEO meta title. If not provided, AI generates one from the website name.
  • meta_description (string, optional) — SEO meta description. If not provided, AI generates one.

Sample Request (minimal — AI generates all content):

curl -X POST "https://api.rocketpages.io/api/configs/generate-website" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "responses": {
      "websiteName": "My Portfolio"
    }
  }'

Sample Request (with user content — no AI content used for provided fields):

curl -X POST "https://api.rocketpages.io/api/configs/generate-website" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "responses": {
      "websiteName": "My Portfolio",
      "category": "Portfolio",
      "headline": "Welcome to My Portfolio",
      "subheading": "Showcasing my best work",
      "address": "123 Main St, City, State",
      "offerings": "Web Design, Photography, Branding",
      "about_title": "About Me",
      "about_description": "I am a creative professional with 10 years of experience.",
      "services": [
        { "title": "Web Design", "description": "Custom responsive websites" },
        { "title": "Photography", "description": "Professional photo shoots" }
      ],
      "services_description": "Here is what I offer",
      "testimonials": [
        { "quote": "Amazing work!", "name": "John", "subtitle": "Client", "description": "Delivered on time" }
      ],
      "faq": [
        { "question": "What is your turnaround time?", "answer": "Typically 2 weeks." }
      ],
      "palette": "Pastel",
      "meta_title": "My Portfolio — Creative Professional",
      "meta_description": "Portfolio showcasing web design, photography, and branding work."
    }
  }'

Sample Response:

{
  "site_id": "r25d6cda2-822e-43ba-9833-81b4e56f4331",
  "page_id": "jaf4a9117-c270-4878-833b-be280ffcce6b",
  "site_name": "My Portfolio",
  "sub_domain": "s5wl1j3z8m",
  "site_url": "s5wl1j3z8m.rocketpages.io",
  "editor_url": "https://editor.rocketpages.io/r25d6cda2?aipreview=true"
}

Note: This is a long-running operation. The response may take 60-120 seconds as content and images are generated.

Create Website from Template

POST /api/configs/create-from-template


Create a new website using an existing template as the starting point.


Authentication: API key required

Parameters:

  • templateId (string, required) — The template to create from. Call GET /api/configs/templates (List Templates) and use the site_id value from the template you want.
  • siteName (string, optional) — Custom name for the new website
  • themeId (string, optional) — Color theme ID to override the template's default palette. Call GET /api/configs/color-palettes (List Color Palettes) and use the id value from the palette you want. Available categories: Bright, Pastel, Dark.


Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/create-from-template" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "siteName": "My New Site",
    "themeId": "bbb3"
  }'

Sample Response:

{
  "message": "Site created from template",
  "data": {
    "site_id": "f9e8d7c6-b5a4-3210-fedc-ba9876543210",
    "site_name": "My New Site",
    "sub_domain": "my-new-site",
    "site_url": "my-new-site.rocketpages.io",
    "pages_count": 3,
    "editor_url": "https://editor.rocketpages.io/f9e8d7c6",
    "template_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}

Notes:

  • The template_id in the response matches the templateId you sent.
  • The site_id in the response is your newly created website's ID. Use it with all other endpoints that require siteId.

Get Website Configuration

GET /api/configs/site-config

Retrieve full website configuration including theme, domain, header, footer, and publish status.

Authentication: API key required

Parameters:

  • siteId (query string, required) — ID of the website

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/site-config?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "site_id": "SITE_ID",
  "site_name": "My Site",
  "sub_domain": "mysite",
  "site_url": "mysite.rocketpages.io",
  "is_published": true,
  "palette": { ... },
  "current_site_font": "font-001",
  "current_site_buttons": "button-style-001",
  "header": { ... },
  "footer": { ... },
  "add_on_users": [
    {
      "user_id": "user-uuid",
      "email": "contributor@example.com",
      "role": "editor"
    }
  ]
}

Update Website Settings

POST /api/configs/append-site-config

Update website settings including name, subdomain, branding, and site-level configuration.

Authentication: API key required

Parameters:

  • siteId (string, required) — ID of the website to update
  • siteName (string, optional) — New site display name (must be unique per user)
  • subDomain (string, optional) — New subdomain (must be globally unique)
  • faviconImage (string, optional) — URL of site favicon image
  • colorPaletteId (string, optional) — ID of color palette to apply
  • fontPairingId (string, optional) — ID of font pairing to apply
  • buttonStyleId (string, optional) — ID of button style preset

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/append-site-config" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "siteName": "Updated Name",
    "subDomain": "my-new-subdomain",
    "faviconImage": "https://cdn.rocketpages.io/sites/SITE_ID/favicon.ico",
    "colorPaletteId": "palette-001",
    "fontPairingId": "font-001",
    "buttonStyleId": "btn-001"
  }'

Sample Response:

{
  "message": "Site modified Successfully..!",
  "data": {
    "site_id": "SITE_ID",
    "site_name": "Updated Name",
    "sub_domain": "my-new-subdomain",
    "site_url": "my-new-subdomain.rocketpages.io",
    "palette": { ... },
    "font": "font-001",
    "buttons": "btn-001",
    "favicon_image": "https://cdn.rocketpages.io/sites/SITE_ID/favicon.ico",
    "is_published": true,
    "updated_at": 1700000000000
  }
}

Error Responses:

  • 406 — Subdomain already taken by another site
  • 406 — Site name already exists for this user

Update Site Header

PUT /api/configs/site-header

Update the site header configuration (logo, navigation links, layout).

Authentication: API key required

Parameters (JSON body):

  • siteId (string, required) — The site ID
  • header (object, required) — The header configuration object

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/site-header" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "header": {
      "logo": "https://cdn.rocketpages.io/sites/SITE_ID/logo.png",
      "links": [
        { "text": "Home", "href": "/" },
        { "text": "About", "href": "/about" }
      ]
    }
  }'

Sample Response:

{
  "message": "Header updated",
  "site_id": "SITE_ID"
}

Error Responses:

  • 400 — siteId and header are required
  • 401 — Unauthorized

Update Site Footer

PUT /api/configs/site-footer

Update the site footer configuration (links, social media, copyright text).

Authentication: API key required

Parameters (JSON body):

  • siteId (string, required) — The site ID
  • footer (object, required) — The footer configuration object

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/site-footer" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "footer": {
      "copyright": "© 2024 My Company",
      "socialLinks": [
        { "platform": "twitter", "url": "https://twitter.com/mycompany" }
      ]
    }
  }'

Sample Response:

{
  "message": "Footer updated",
  "site_id": "SITE_ID"
}

Error Responses:

  • 400 — siteId and footer are required
  • 401 — Unauthorized

Delete Website

POST /api/configs/delete-site

Permanently delete a website and all its pages, images, and custom domains.

Authentication: API key required

Parameters:

  • siteId (string, required) — ID of the website to delete

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/delete-site" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID"
  }'

Sample Response:

{
  "message": "Data deleted successfully..."
}

Error Responses:

  • 404 — Could not delete data with the provided siteId

Publish Website

POST /api/configs/publish

Publish the entire website or a specific page. Uses a distributed lock to prevent concurrent publishes.

Authentication: API key required

Parameters:

  • siteId (string, required) — ID of the website to publish
  • publishAllPages (boolean, optional) — Set to true to publish all pages
  • pageId (string, optional) — Publish only a specific page — retrieve from GET /api/configs/all-pages

Sample Request (publish all pages):

curl -X POST "https://api.rocketpages.io/api/configs/publish" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "publishAllPages": true
  }'

Sample Request (publish single page):

curl -X POST "https://api.rocketpages.io/api/configs/publish" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID"
  }'

Sample Response:

{
  "message": "Publish queued",
  "queued": true,
  "publish_lock_id": "lock-uuid"
}

Note: If a publish is already in progress, the response will return { "running": true } instead.

Check Publish Status

GET /api/configs/check-publish-status

Poll the publish status for a site or specific page. Use this after calling Publish Website or Publish Page to check progress.

Authentication: API key required

Parameters:

  • siteId (query string, required*) — The site ID
  • pageId (query string, optional) — If provided without siteId, the site is auto-resolved from the page

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/check-publish-status?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "status": "Completed",
  "stuck": false,
  "publish_batch_start": 0,
  "publish_batch_size": 5,
  "publish_last_heartbeat_at": 1718888400000,
  "publish_error": null,
  "page_id": null,
  "page_status": null
}

Status Values:

  • Running — Publish is in progress
  • Completed — Publish finished successfully
  • Failed — Publish failed (check publish_error)

Error Responses:

  • 400 — siteId is required

Resume Publishing

POST /api/configs/publish/resume

Resume a stuck full-site publish from its last checkpoint. Use this when check-publish-status reports stuck: true.

Authentication: API key required

Parameters (JSON body):

  • siteId (string, required) — The site ID

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/publish/resume" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID"
  }'

Sample Response:

{
  "resumed": true,
  "message": "Publish resumed from checkpoint"
}

Error Responses:

  • 400 — siteId is required

Duplicate Website

POST /api/configs/duplicate-site

Create a full copy of an existing website including all pages, images, and configuration. The duplicated site is created as unpublished.

Authentication: API key required

Parameters:

  • siteId (string, required) — ID of the website to duplicate

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/duplicate-site" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID"
  }'

Sample Response:

{
  "message": "Site Duplicated Successfully..!",
  "data": {
    "site_id": "new-site-uuid",
    "site_name": "My Site Copy",
    "sub_domain": "auto-generated",
    "site_url": "auto-generated.rocketpages.io",
    "pages_count": 3,
    "images_count": 12,
    "editor_url": "https://editor.rocketpages.io/new-site-uuid"
  }
}

List Templates

GET /api/configs/templates

Retrieve all available website templates. Supports filtering and pagination.

Authentication: API key required

Parameters:

  • category (query string, optional) — Filter by template category (case-insensitive partial match)
  • name (query string, optional) — Filter by exact template name
  • minPages (query string, optional) — Filter by minimum page count
  • offset (query string, optional, default: 0) — Pagination offset
  • limit (query string, optional, default: 10) — Number of templates to return


Available Categories:

Artfolio, Artists, Church, Education, Events and Celebrations, Games, Health and Wellness, Influencer, Legal, Massage Therapist, Musicians, NGO, Non profit, Photographer, Portfolio, Rental, Restaurant, Retail, Services, Travel Agency


Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/templates?category=portfolio&limit=5" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "total": 12,
  "offset": 0,
  "limit": 5,
  "templates": [
    {
      "site_id": "tpl-001",
      "template_name": "Starter Portfolio",
      "categories": ["Portfolio", "Creative"],
      "color_palette_ids": ["palette-001", "palette-002"],
      "page_count": 3,
      "preview_url": "https://preview.rocketpages.io/tpl-001"
    }
  ]
}

Remove Redirect

DELETE /api/configs/redirect

Remove a redirect rule from the website.

Authentication: API key required

Parameters:

  • siteId (query string, required) — ID of the website
  • from (query string, required) — The source path of the redirect to remove

Sample Request:

curl -X DELETE "https://api.rocketpages.io/api/configs/redirect?siteId=SITE_ID&from=/old-page" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "message": "Redirect removed",
  "remaining_redirects": 2
}

Error Responses:

  • 400 — siteId and from are required
  • 404 — Site not found

Page Management

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

List All Pages

GET /api/configs/all-pages

Retrieve all pages for a website. Returns lightweight page metadata without full section configs.

Authentication: API key required

Parameters:

  • siteId (query string, required) — ID of the website
  • includePostConfigs (query string, optional) — Set to "true" to include blog post configurations

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/all-pages?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": [
    {
      "page_id": "PAGE_ID",
      "page_name": "Home",
      "site_id": "SITE_ID",
      "page_url": "/",
      "is_home_page": true,
      "is_published": true,
      "page_type": "page",
      "show_toc": false,
      "created_at": "2024-01-15T10:30:00.000Z"
    }
  ]
}

Create Page

POST /api/configs/page

Create a new page for a website. The server auto-generates a unique pageId and, optionally, a URL slug derived from the page name. This is the recommended endpoint for creating pages via the API — it guarantees globally unique page IDs and validates slug uniqueness within the site.

Authentication: API key required

Parameters (JSON body):

  • siteId (string, required) — The site to add the page to
  • page_name (string, required) — Display name for the page (e.g., "About Us")
  • page_url (string, optional) — URL slug (e.g., "/about"). Auto-generated from page_name if not provided. Must be unique within the site. The reserved slug /blog is not allowed
  • is_home_page (boolean, optional, default false) — Set as homepage. When true, page_url is set to empty string
  • meta_title (string, optional) — SEO meta title
  • meta_description (string, optional) — SEO meta description
  • show_toc (boolean, optional, default false) — Enable table of contents sidebar

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/page" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "page_name": "About Us",
    "meta_title": "About Us - My Website",
    "meta_description": "Learn more about our company"
  }'

Sample Response (201 Created):

{
  "message": "Page created",
  "page_id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p",
  "site_id": "SITE_ID",
  "page_name": "About Us",
  "page_url": "/about-us"
}

Error Responses:

  • 400 — Missing required parameters (siteId, page_name) or reserved slug /blog
  • 401 — Unauthorized (invalid API key or no access to site)
  • 409 — Duplicate slug (URL already used by another page in the site)
  • 500 — Internal server error

Check Slug Availability

GET /api/configs/check-slug

Check whether a page URL slug is available within a site. Use this before creating or renaming a page to avoid conflicts.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • pageUrl (query string, required) — The slug to check (e.g., /about)
  • excludePageId (query string, optional) — Page ID to exclude from the check (use when updating an existing page's URL)

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/check-slug?siteId=SITE_ID&pageUrl=/about" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response (available):

{
  "duplicate": false
}

Sample Response (taken):

{
  "duplicate": true,
  "existing_page": {
    "page_id": "existing-page-uuid",
    "page_name": "About Us"
  }
}

Error Responses:

  • 400 — siteId and pageUrl are required

Add or Update Page

PUT /api/configs/page-config


Create a new page for a site. Returns 409 if a page with the same pageId already exists.


Authentication: API key required

Parameters (JSON body):

  • siteId (string, required) — The site to add the page to
  • pageId (string, required) — Client-generated unique identifier (any valid UUID string)
  • pageName (string, required) — Display name (e.g., "About Us", "Contact")
  • pageUrl (string, required) — URL slug (e.g., "/about"). Must be unique within the site. Use "/" for homepage.
  • metaTitle (string, optional) — Page meta title for SEO
  • metaDescription (string, optional) — Page meta description for SEO
  • isHomePage (boolean, optional) — Set as the site's homepage
  • showToc (boolean, optional) — Show table of contents on the page


Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/page-config" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "b4ddafaa-21d0-44e1-96bc-36e4fceb77ab",
    "pageId": "contact-page",
    "pageName": "Contact",
    "pageUrl": "/contact",
    "metaTitle": "Contact Us",
    "metaDescription": "Get in touch with us",
    "isHomePage": false,
    "showToc": false
  }'

Sample Response:

{
  "message": "Page Created Successfully..!",
  "data": {
    "site_id": "b4ddafaa-21d0-44e1-96bc-36e4fceb77ab",
    "page_id": "contact-page",
    "page_name": "Contact",
    "page_url": "/contact",
    "meta_title": "Contact Us",
    "meta_description": "Get in touch with us",
    "is_home_page": false,
    "show_toc": false
  }
}

Delete Page

DELETE /api/configs/page-config


Permanently delete a page and all its sections from a website.


Authentication: API key required

Parameters (query string):

  • siteId (string, required) — The site containing the page
  • pageId (string, required) — ID of the page to delete — retrieve from GET /api/configs/all-pages


Sample Request:

curl -X DELETE "https://api.rocketpages.io/api/configs/page-config?siteId=SITE_ID&pageId=PAGE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "message": "Page deleted successfully"
}

Duplicate Page

POST /api/configs/duplicate-page-config

Create a full copy of a page including all its sections and content.

Authentication: API key required

Parameters:

  • pageId (string, required, JSON body) — ID of the page to duplicate — retrieve from GET /api/configs/all-pages

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/duplicate-page-config" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "pageId": "PAGE_ID"
  }'

Sample Response:

{
  "message": "Page duplicated successfully",
  "data": {
    "page_id": "new-page-uuid",
    "page_name": "Contact Copy",
    "page_url": "/contact-copy"
  }
}

Publish Page

POST /api/configs/publish-page

Publish a specific page. You can also publish the entire site — see Publish Website.

Authentication: API key required

Parameters:

  • siteId (string, required, JSON body) — The site containing the page
  • pageId (string, required, JSON body) — ID of the page to publish — retrieve from GET /api/configs/all-pages

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/publish-page" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID"
  }'

Sample Response:

{
  "message": "Page publish initiated",
  "site_id": "SITE_ID",
  "page_id": "PAGE_ID"
}

Get Page Sections

GET /api/configs/page-config

Retrieve the full page configuration including metadata. If the page has sections, they are included in the configs array.

Authentication: API key required

Parameters:

  • pageId (query string, required) — The page ID — retrieve from GET /api/configs/all-pages

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/page-config?pageId=PAGE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "page_id": "PAGE_ID",
  "site_id": "SITE_ID",
  "page_name": "Contact",
  "page_url": "/contact",
  "is_home_page": false,
  "is_published": true,
  "show_toc": false,
  "meta_title": "Contact Us",
  "meta_description": "Get in touch with us",
  "publishing_status": "Completed",
  "updated_at": 1785080407681,
  "configs": [
    {
      "id": "section-uuid",
      "uid": "section-uuid",
      "w": "contact",
      "c": { "n": "contact_v1", "c": { ... }, "s": { ... } }
    }
  ]
}

Note: The configs array contains raw section data and is only present if the page has sections. Pages created with metadata only (e.g., via PUT /page-config without a configs array) will not include this field. Use POST /api/configs/append-page-config (Add Section) to add sections to a page.

Get Page Sections (Structured)

GET /api/configs/page-sections

Retrieve all sections for a page in a structured, readable format. Returns section metadata, content, and style properties with human-readable names. This is an alternative to GET /api/configs/page-config which returns the raw internal format.

Authentication: API key required

Parameters:

  • pageId (query string, required) — The page ID — retrieve from GET /api/configs/all-pages

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/page-sections?pageId=PAGE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "page_id": "PAGE_ID",
  "site_id": "SITE_ID",
  "section_count": 3,
  "sections": [
    {
      "index": 0,
      "section_id": "sec-uuid-001",
      "section_uid": "sec-uuid-001",
      "type": "welcome",
      "layout": "welcome_v1",
      "title": "<h1>Welcome</h1>",
      "description": "<p>Hero section text</p>",
      "style": {
        "background_color": "#ffffff",
        "title_font_size": "large"
      }
    },
    {
      "index": 1,
      "section_id": "sec-uuid-002",
      "type": "services",
      "layout": "services_v1",
      "title": "<h2>Our Services</h2>"
    }
  ]
}

Error Responses:

  • 400 — pageId is required
  • 401 — Unauthorized
  • 404 — Page not found

List Available Layouts

GET /api/configs/layouts

List available layouts for a given section type. Use this before adding or changing section layouts.

Authentication: API key required

Parameters:

  • section_type (query string, required) — One of: welcome, about, services, features, products, testimonials, faq, contact, gallery, team, text, table, promotion, video, clients, separator, menu, pricing_cards, pricing_table, events, video_gallery

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/layouts?section_type=services" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "layouts": [
    {
      "layout_id": "services_v1",
      "description": "Three column grid — icon cards"
    },
    {
      "layout_id": "services_v2",
      "description": "Two column grid — icon cards"
    }
  ]
}

Section Management

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

Supported Section Types

All section types available in the RocketPages API, grouped by how they are managed.


Sections with repeatable items — use POST/PUT/DELETE /api/configs/section-item

  • services — Service cards with title, description, image, button
  • features — Feature cards with title, description, image, button
  • features_interactive — Animated feature cards with title, description, image, button
  • products — Product cards with title, description, image, button
  • testimonials — Testimonial cards with quote, name, designation, image
  • team — Team member cards with name, designation, description, image, social links
  • clients — Client logo cards with logo image and name
  • events — Event cards with title, description, date, time, address, organizers, image
  • gallery — Gallery image cards with image and caption
  • faq — FAQ items with question and answer (also has dedicated faq-item endpoints)
  • menu — Restaurant menu tabs with categories and food items
  • pricing_cards — Pricing plan cards with title, price, description, features, button
  • pricing_table — Pricing table columns with title, price, description, button
  • welcome_slider — Hero slider slides with title, description, image, buttons, background
  • video_gallery — Video gallery items with embedded video URL and description


Single-content sections — use PUT /api/configs/page-section

  • welcome — Hero section with title, description, image, buttons
  • welcome_interactive — Animated hero section
  • about — About section with title, description, image
  • promotion — Promotional banner with title, description, button
  • contact — Contact form section
  • text — Free-form text content block
  • video — Single embedded video section
  • separator — Visual divider between sections
  • post_list — Blog post listing (content managed via blog endpoints)


Table sections — use table-column and table-row endpoints

  • table — Data table with columns, rows, and cells


Protected sections — cannot be added, deleted, or reordered

  • header — Site header (use update_header)
  • footer — Site footer (use update_footer)
  • header_banner — Announcement banner above header
  • page_settings — Internal page configuration
  • post — Blog post content (managed via blog endpoints)
  • powered_by_rocketPages — Branding section
  • rocketPages_branding — Branding section

Add Section

POST /api/configs/add-section

Add a new section to a page at a specified position. The section is created with default content and styling based on the section type and layout.

Authentication: API key required

Parameters:

  • siteId (string, required) — The site ID
  • pageId (string, required) — The page ID — retrieve from GET /api/configs/all-pages
  • sectionType (string, required) — Section type. Supported values: welcome, welcome_interactive, welcome_slider, about, services, features, features_interactive, products, testimonials, faq, contact, gallery, team, text, table, promotion, video, video_gallery, clients, menu, events, pricing_cards, pricing_table, post_list, separator. Restricted (cannot be added manually): post, header, footer, powered_by_rocketPages, rocketPages_branding, header_banner, page_settings
  • layout (string, required) — Layout ID for the section type. Retrieve valid layouts from GET /api/configs/layouts?section_type=TYPE
  • position (number, optional) — 0-based index to insert the section at. If omitted, the section is appended at the end of the page
  • title (string, optional) — Section title in plain text. Automatically wrapped in <h1><strong>...</strong></h1> for hero sections (welcome, welcome_interactive, video) or <h2><strong>...</strong></h2> for all other section types. If omitted, a default title is generated based on the section type
  • description (string, optional) — Section description in plain text. Automatically wrapped in <h3>...</h3>. If omitted, a default description is generated based on the section type

Accepts: Both query string parameters and JSON body. Body parameters take precedence.

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/add-section" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "sectionType": "services",
    "layout": "services_v1",
    "position": 2,
    "title": "Our Services",
    "description": "Professional solutions tailored to your needs"
  }'

Sample Response (200):

{
  "message": "Section added successfully",
  "data": {
    "section_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "services",
    "layout": "services_v1",
    "index": 2
  }
}

Error Responses:

  • 400 — Missing required parameters, unknown section type, invalid layout, or restricted section type
  • 401 — Unauthorized (invalid or missing API key)
  • 404 — Page not found
  • 500 — Internal server error

Update Section

PUT /api/configs/page-section

Update a section's content, layout, image, CTA buttons/links, and styling.

Authentication: API key required

Parameters:

  • pageId (string, required) — The page ID — retrieve from GET /api/configs/all-pages
  • section_index (number, required*) — 0-based index of the section to update
  • section_type (string, required*) — Section type (e.g., welcome, about, services). If multiple sections of the same type exist, use section_index instead. When provided together with section_index, the endpoint validates that the section at the given index matches this type — returns 400 if they don't match
  • title (string, optional) — Section title (plain text or HTML)
  • description (string, optional) — Section description (HTML)
  • layout (string, optional) — New layout ID — retrieve valid layouts from GET /api/configs/layouts?section_type=TYPE. Validated against the layout catalog for the section type — returns 400 with the list of valid layouts if invalid
  • image_url (string, optional) — Section image URL. Sets the main section image (e.g., for about, welcome sections)
  • image_alt (string, optional) — Alt text for the section image. Can be sent with or without image_url (to update alt text on an existing image)
  • links (array, optional) — CTA buttons/links. Replaces all existing section-level links. Each link object supports: text (string, required), href (string, default "/"), type ("button_primary" | "button_secondary" | "link", default "button_primary"), action ("page" | "scroll" | "web" | "tel" | "mail", default "page"), section_id (string, for scroll action), page_id (string, for page/scroll action)
  • background_color (string, optional) — Background color (hex)
  • section_border_color (string, optional) — Section border color (hex)
  • section_border_width (string, optional) — Section border width: none, thin, medium, thick
  • title_font_size (string, optional) — Title font size: extra-small, small, medium, large, extra-large
  • title_font_weight (string, optional) — Title font weight: normal, bold
  • title_font_color (string, optional) — Title font color (hex)
  • title_font_family (string, optional) — Title font family
  • description_font_size, description_font_weight, description_font_color, description_font_family (string, optional) — Description font styling
  • spacing_vertical, spacing_horizontal (string, optional) — Section padding: none, small, medium, large
  • image_border_radius, image_border_width, image_border_color, image_opacity, image_overlay_color (optional) — Section image styling
  • background_image_* (optional) — Background image styling properties

* Either section_index or section_type is required.

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/page-section" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "pageId": "PAGE_ID",
    "section_index": 2,
    "section_type": "about",
    "title": "About Us",
    "description": "<p>We are a team of professionals</p>",
    "image_url": "https://cdn.rocketpages.io/sites/SITE_ID/images/about.jpg",
    "image_alt": "Team photo",
    "links": [
      {
        "text": "Get Started",
        "type": "button_primary",
        "action": "page",
        "href": "/contact"
      },
      {
        "text": "Learn More",
        "type": "button_secondary",
        "action": "web",
        "href": "https://example.com"
      }
    ],
    "background_color": "#f5f5f5"
  }'

Sample Response (200):

{
  "message": "Section updated",
  "page_id": "PAGE_ID",
  "section_index": 2,
  "section_type": "about"
}

Error Responses:

  • 400 — Missing required parameters, section type mismatch, or invalid layout ID
  • 401 — Unauthorized (invalid or missing API key)
  • 404 — Page or section not found
  • 500 — Internal server error

Section Type Mismatch (400):

{
  "error": "Section type mismatch: section at index 2 is \"services\", not \"about\"",
  "actual_section_type": "services",
  "section_index": 2
}

Invalid Layout (400):

{
  "error": "Invalid layout 'about_v1' for section type 'services'",
  "valid_layouts": [
    { "id": "services_v1", "description": "Three column grid - icon cards" },
    { "id": "services_v3", "description": "Three column grid - image cards" }
  ]
}

Delete Section

DELETE /api/configs/page-section

Remove a section from a page. Remaining sections are automatically reindexed.

Authentication: API key required

Parameters (query string):

  • siteId (string, required) — The site ID
  • pageId (string, required) — The page ID — retrieve from GET /api/configs/all-pages
  • section_id (string, required) — ID of the section to delete — retrieve from GET SECTION ID

Sample Request:

curl -X DELETE "https://api.rocketpages.io/api/configs/page-section?siteId=SITE_ID&pageId=PAGE_ID&section_id=sec-uuid-001" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "message": "Section deleted",
  "page_id": "PAGE_ID",
  "deleted_section_type": "services",
  "deleted_index": 2
}

Duplicate Section

POST /api/configs/duplicate-section

Create a copy of a section and insert it directly after the original. All nested IDs (section, items, links) are regenerated.

Authentication: API key required

Parameters (JSON body):

  • pageId (string, required) — The page ID — retrieve from GET /api/configs/all-pages
  • siteId (string, required) — The site ID
  • section_index (number, required) — 0-based index of the section to duplicate — retrieve from GET /api/configs/page-sections section IDs [Get SECTION IDS]

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/duplicate-section" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "section_index": 2
  }'

Sample Response (200):

{
  "message": "Section duplicated",
  "page_id": "PAGE_ID",
  "original_index": 2,
  "new_index": 3,
  "new_section_uid": "k7a3b2c1d0e9f8g7h6i5j4k3l2m1n0o",
  "section_type": "services"
}

Error Responses:

  • 400 — Missing required parameters (pageId, section_index), invalid index, or protected section type
  • 401 — Unauthorized (invalid or missing API key)
  • 404 — Page not found
  • 500 — Internal server error

Reorder Sections

POST /api/configs/reorder-sections

Change the order of sections on a page by providing the new ordering.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • pageId (query string, required) — The page ID — retrieve from GET /api/configs/all-pages
  • sectionIds (string[], required) — Array of section IDs in the desired new order GET SECTION IDS

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/reorder-sections?siteId=SITE_ID&pageId=PAGE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sectionIds": ["sec-uuid-003", "sec-uuid-001", "sec-uuid-002"]
  }'

Sample Response:

{
  "message": "Sections reordered successfully"
}

Section Items

Manage repeatable items within sections. See

Supported Section Types

at the top of this page for the full list of section types and which endpoints to use for each.

Add Item

POST /api/configs/section-item

Add a new item to a repeatable section. Each section type uses different fields to create items that match the editor UI defaults.

Authentication: API key required via Authorization: Bearer YOUR_API_KEY

Request Body Parameters:

  • siteId (required) — The site ID
  • pageId (required) — The page ID
  • section_type (required) — Section type (see Supported Section Types)
  • section_index (optional) — 0-based index when multiple sections of the same type exist
  • title (optional) — Item title (HTML supported)
  • description (optional) — Item description text
  • subtitle (optional) — Used by team (designation), menu (category label), testimonials (name)
  • image_url (optional) — Item image path or URL
  • image_alt (optional) — Image alt text

Supported Section Types: See Supported Section Types section at the top of this page for the full list.

Sample Response:

{"message":"Item added","page_id":"PAGE_ID","section_type":"services","section_index":3,"item_index":4,"item_id":"abc123..."}


Services

Fields: title, description, image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"services","section_index":3,"title":"<h3><strong>Digital Marketing</strong></h3>","description":"Drive growth with data-driven digital marketing strategies tailored to your business.","image_url":"/images/services/image3.jpg","image_alt":"digital marketing service"}'


Features

Fields: title, description, image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"features","section_index":5,"title":"<h3><strong>Cloud Integration</strong></h3>","description":"Seamlessly connect your tools and workflows with our cloud-native integration platform.","image_url":"/images/features/image3.jpg","image_alt":"cloud integration feature"}'


Features Interactive (Animated)

Fields: title, description, image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"features_interactive","section_index":6,"title":"<h3><strong>Real-Time Analytics</strong></h3>","description":"Monitor performance metrics in real time with interactive dashboards and alerts.","image_url":"/images/features_interactive/image3.jpg","image_alt":"real-time analytics feature"}'


Clients

Fields: description (client name), image_url (logo), image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"clients","section_index":7,"description":"Acme Corporation","image_url":"/images/clients/logo3.svg","image_alt":"Acme Corporation logo"}'


Events

Fields: title, description, image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"events","section_index":8,"title":"<h3><strong>Annual Tech Summit 2026</strong></h3>","description":"Join industry leaders for a day of keynotes, workshops, and networking opportunities.","image_url":"/images/events/image1.jpg","image_alt":"tech summit event"}'


Gallery

Fields: description, image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"gallery","section_index":9,"description":"Office headquarters exterior view","image_url":"/images/gallery/image3.jpg","image_alt":"office headquarters"}'


FAQ

Fields: title (question), description (answer)

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"faq","section_index":10,"title":"<h3><strong>What payment methods do you accept?</strong></h3>","description":"We accept all major credit cards, PayPal, and bank transfers. Enterprise clients can also pay via invoice with NET-30 terms."}'


Menu

Fields: title (tab label), subtitle (category name), image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"menu","section_index":11,"title":"Beverages","subtitle":"<h3><strong>Drinks</strong></h3>","image_url":"/images/menu/menu2.jpg","image_alt":"beverages menu"}'


Pricing Cards

Fields: title, description, image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"pricing_cards","section_index":12,"title":"<h3><strong>Enterprise</strong></h3>","description":"Unlimited access with dedicated support and custom integrations","image_url":"/images/pricing/icon2.svg","image_alt":"enterprise plan"}'


Pricing Table

Fields: title, description, image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"pricing_table","section_index":13,"title":"<h3><strong>Business</strong></h3>","description":"Advanced features for growing teams with priority support","image_url":"/images/pricing/icon3.svg","image_alt":"business plan"}'


Testimonials

Fields: title (quote), description, subtitle (person name), image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"testimonials","section_index":14,"title":"<h3>Their platform transformed how we manage our entire workflow. Highly recommended!</h3>","description":"We switched from three separate tools to this single platform and never looked back.","subtitle":"<strong>Sarah Mitchell</strong>","image_url":"/images/testimonials/image2.jpg","image_alt":"Sarah Mitchell"}'


Team

Fields: title (name), description, subtitle (designation), image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"team","section_index":15,"title":"<h3><strong>Ms. Jennifer</strong></h3>","description":"Over 10 years of experience in product design and user experience research.","subtitle":"<strong>Lead Designer</strong>","image_url":"/images/team/image2.jpg","image_alt":"Jennifer lead designer"}'


Products

Fields: title, description, image_url, image_alt

curl -X POST "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"products","section_index":16,"title":"<h3><strong>Premium Headphones</strong></h3>","description":"Noise-cancelling wireless headphones with 40-hour battery life and studio-quality sound.","image_url":"/images/products/image3.jpg","image_alt":"premium headphones"}'


Note: When optional fields are omitted, the API auto-generates default content matching the editor UI — including placeholder text, default images, buttons, and shadows where applicable.

Update Item

PUT /api/configs/section-item

Update an existing item by index within a repeatable section. Only the fields you include will be changed — all other fields remain untouched.

Authentication: API key required via Authorization: Bearer YOUR_API_KEY

Request Body Parameters:

  • pageId (required) — The page ID
  • section_type (required) — Section type (see Supported Section Types)
  • item_index (required) — 0-based index of the item to update
  • section_index (optional) — 0-based section index when multiple sections of the same type exist
  • title (optional) — New item title (HTML supported)
  • description (optional) — New item description
  • subtitle (optional) — New subtitle (name for testimonials, designation for team)
  • image_url (optional) — New item image path or URL
  • image_alt (optional) — New image alt text

Sample Response:

{"message":"Item updated","page_id":"PAGE_ID","section_type":"services","item_index":0}


Services / Features / Products / Features Interactive

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"services","section_index":3,"item_index":0,"title":"<h3><strong>Updated Service Title</strong></h3>","description":"Updated description for this service.","image_url":"/images/services/image4.jpg","image_alt":"updated service image"}'


Testimonials

Use subtitle to update the person's name.

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"testimonials","item_index":1,"title":"<h3>An amazing experience from start to finish!</h3>","description":"The team went above and beyond to deliver exactly what we needed.","subtitle":"<strong>John Davis</strong>","image_url":"/images/testimonials/image3.jpg","image_alt":"John Davis"}'


Team

Use subtitle to update the member's designation.

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"team","item_index":0,"title":"<h3><strong>Dr. Emily Chen</strong></h3>","description":"15 years of experience in artificial intelligence and machine learning research.","subtitle":"<strong>Chief Technology Officer</strong>","image_url":"/images/team/image3.jpg","image_alt":"Dr. Emily Chen CTO"}'


Clients

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"clients","item_index":2,"description":"Global Tech Inc.","image_url":"/images/clients/logo5.svg","image_alt":"Global Tech logo"}'


Events

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"events","item_index":0,"title":"<h3><strong>Product Launch 2026</strong></h3>","description":"Be the first to see our latest innovations at the annual product launch event.","image_url":"/images/events/image2.jpg","image_alt":"product launch event"}'


Gallery

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"gallery","item_index":1,"description":"Team collaboration workspace","image_url":"/images/gallery/image5.jpg","image_alt":"team workspace"}'


FAQ

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"faq","item_index":0,"title":"<h3><strong>How do I cancel my subscription?</strong></h3>","description":"You can cancel anytime from your account settings. Your access continues until the end of the current billing period."}'


Pricing Cards / Pricing Table

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"pricing_cards","item_index":0,"title":"<h3><strong>Starter</strong></h3>","description":"Perfect for individuals and small projects getting started.","image_url":"/images/pricing/icon1.svg","image_alt":"starter plan"}'


Products

curl -X PUT "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","section_type":"products","item_index":0,"title":"<h3><strong>Wireless Earbuds</strong></h3>","description":"Compact true wireless earbuds with active noise cancellation and 8-hour battery.","image_url":"/images/products/image2.jpg","image_alt":"wireless earbuds"}'


Note: Only include the fields you want to change. Omitted fields will keep their current values.

Delete Item

DELETE /api/configs/section-item

Remove an item from a repeatable section by index. The style array is automatically synced and remaining items are reindexed.

Authentication: API key required via Authorization: Bearer YOUR_API_KEY

Request Body Parameters:

  • pageId (required) — The page ID
  • section_type (required) — Section type (see Supported Section Types)
  • item_index (required) — 0-based index of the item to remove
  • siteId (optional) — The site ID
  • section_index (optional) — 0-based section index when multiple sections of the same type exist

Sample Request:

curl -X DELETE "https://api.rocketpages.io/api/configs/section-item" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"pageId":"PAGE_ID","siteId":"SITE_ID","section_type":"services","section_index":3,"item_index":2}'

Sample Response:

{"message":"Item removed","page_id":"PAGE_ID","section_type":"services","removed_index":2,"remaining_count":3}

Table Management

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

Add Table Column

POST /api/configs/table-column/add

Add a new column to a table section. Automatically adds empty cells to all existing rows.

Authentication: API key required

Parameters:

  • siteId (string, optional) — The site ID
  • pageId (string, required) — The page ID
  • sectionId (string, required) — Table section ID
  • header (string, required) — Column header text

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/table-column/add" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "sectionId": "table-sec-uuid",
    "header": "Price"
  }'

Sample Response:

{
  "message": "Column added successfully",
  "data": {
    "column_index": 3,
    "header": "Price"
  }
}

Update Table Column Header

POST /api/configs/table-column/update

Update a table column's header text by index.

Authentication: API key required

Parameters:

  • siteId (string, optional) — The site ID
  • pageId (string, required) — The page ID
  • sectionId (string, required) — Table section ID
  • column_index (number, required) — 0-based column index to update
  • header (string, required) — New column header text

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/table-column/update" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "sectionId": "table-sec-uuid",
    "column_index": 0,
    "header": "Updated Header"
  }'

Sample Response:

{
  "message": "Column updated successfully"
}

Remove Table Column

POST /api/configs/table-column/remove

Remove a column from a table by index. Also removes corresponding cells from every row.

Authentication: API key required

Parameters:

  • siteId (string, optional) — The site ID
  • pageId (string, required) — The page ID
  • sectionId (string, required) — Table section ID
  • column_index (number, required) — 0-based column index to remove

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/table-column/remove" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "sectionId": "table-sec-uuid",
    "column_index": 2
  }'

Sample Response:

{
  "message": "Column removed successfully"
}

Add Table Row

POST /api/configs/table-row/add

Add a new row to a table section. Cells are automatically padded or trimmed to match the current column count.

Authentication: API key required

Parameters:

  • siteId (string, optional) — The site ID
  • pageId (string, required) — The page ID
  • sectionId (string, required) — Table section ID
  • cells (array of strings, required) — Cell values for the new row

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/table-row/add" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "sectionId": "table-sec-uuid",
    "cells": ["Row Value 1", "Row Value 2", "Row Value 3"]
  }'

Sample Response:

{
  "message": "Row added successfully",
  "data": {
    "row_index": 5
  }
}

Update Table Row

POST /api/configs/table-row/update

Update a row's cell values by index. You can replace all cells or update a single cell.

Authentication: API key required

Parameters:

  • siteId (string, optional) — The site ID
  • pageId (string, required) — The page ID
  • sectionId (string, required) — Table section ID
  • row_index (number, required) — 0-based row index to update
  • cells (array of strings, optional) — Replace all cells in the row
  • cell_index (number, optional) — 0-based cell index for single cell update
  • value (string, optional) — New value for single cell update

Use either cells to replace the entire row, or cell_index + value to update a single cell.

Sample Request (update entire row):

curl -X POST "https://api.rocketpages.io/api/configs/table-row/update" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "sectionId": "table-sec-uuid",
    "row_index": 0,
    "cells": ["Updated 1", "Updated 2", "Updated 3"]
  }'

Sample Request (update single cell):

curl -X POST "https://api.rocketpages.io/api/configs/table-row/update" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "sectionId": "table-sec-uuid",
    "row_index": 0,
    "cell_index": 1,
    "value": "New Cell Value"
  }'

Sample Response:

{
  "message": "Row updated successfully"
}

Remove Table Row

POST /api/configs/table-row/remove

Remove a row from a table by index.

Authentication: API key required

Parameters:

  • siteId (string, optional) — The site ID
  • pageId (string, required) — The page ID
  • sectionId (string, required) — Table section ID
  • row_index (number, required) — 0-based row index to remove

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/table-row/remove" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "sectionId": "table-sec-uuid",
    "row_index": 2
  }'

Sample Response:

{
  "message": "Row removed successfully"
}

Update Table Styling

PUT /api/configs/page-section

Update table visual settings like borders, striped rows, and colors. Uses the general section update endpoint with table-specific fields.

Authentication: API key required

Parameters:

  • siteId (string, optional) — The site ID
  • pageId (string, required) — The page ID
  • section_type (string, required) — Must be "table"
  • section_index (number, required) — 0-based section index
  • table_striped (boolean, optional) — Enable alternating row colors
  • table_striped_color (string, optional) — Alternating row background color (hex)
  • table_border_color (string, optional) — Table border color (hex)
  • table_border_width (string, optional) — Border width: "none", "thin", "medium", "thick"
  • table_border_radius (string, optional) — Border radius: "sharp", "rounded", "curve", "medium_round"
  • table_header_background_color (string, optional) — Header row background color (hex)
  • table_header_font_color (string, optional) — Header text color (hex)
  • table_cell_font_color (string, optional) — Cell text color (hex)

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/page-section" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "section_type": "table",
    "section_index": 0,
    "table_striped": true,
    "table_striped_color": "#f5f5f5",
    "table_border_color": "#e0e0e0",
    "table_border_width": "thin",
    "table_border_radius": "rounded",
    "table_header_background_color": "#1a365d",
    "table_header_font_color": "#ffffff",
    "table_cell_font_color": "#333333"
  }'

Sample Response:

{
  "message": "Section updated successfully"
}

Blog

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

Update Blog Settings

POST /api/configs/blog

Update blog configuration for a site. The entire request body is stored as the site's blogConfig object, so you can include any configuration keys you need.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Request Body: A JSON object that becomes the site's blog configuration. Common fields include:

  • enabled (boolean, optional) — Enable or disable the blog
  • postsPerPage (number, optional) — Number of posts shown per page
  • showAuthor (boolean, optional) — Show author name on posts
  • showDate (boolean, optional) — Show date on posts

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/blog?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": true,
    "postsPerPage": 10,
    "showAuthor": true,
    "showDate": true
  }'

Sample Response:

{
  "message": "Blog Updated Successfully..!",
  "data": {
    "site_id": "SITE_ID",
    "blog_config": {
      "enabled": true,
      "posts_per_page": 10,
      "show_author": true,
      "show_date": true
    }
  }
}

Error Responses:

  • 401 — Unauthorized (no access to this site)
  • 500 — Could not create blog

Toggle Blog

GET /api/configs/site-update-blog-setting

Enable or disable the blog for a site. When enabled, a /blog page is activated on the published site. When disabled, the blog page is removed.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • status (query string, required) — "true" to enable, "false" to disable

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/site-update-blog-setting?siteId=SITE_ID&status=true" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "message": "Blog setting updated..."
}

Create Blog Post

POST /api/configs/upsert-post

Create a new blog post. Posts are stored as page objects with pageType: "post".

Authentication: API key required

Parameters (JSON body):

  • siteId (string, required) — The site ID
  • pageId (string, required) — Unique identifier for the post (any valid string, e.g. a UUID)
  • pageName (string, required) — Blog post title
  • pageType (string, required) — Must be "post" or "blog"
  • pageUrl (string, required) — URL path for the post (e.g., /blog/my-first-post)
  • slug (string, optional) — URL slug (e.g., my-first-post)
  • configs (array, required) — Array of content blocks. Can be an empty array [] for a blank post

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/upsert-post" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "post-uuid-001",
    "pageName": "Getting Started with RocketPages",
    "pageType": "post",
    "pageUrl": "/blog/getting-started",
    "slug": "getting-started",
    "configs": [
      {
        "p": "post",
        "c": {
          "c": {
            "d": "<p>Welcome to our first blog post...</p>"
          }
        }
      }
    ]
  }'

Sample Response:

{
  "post_id": "post-uuid-001",
  "site_id": "SITE_ID",
  "title": "Getting Started with RocketPages",
  "slug": "getting-started",
  "page_url": "/blog/getting-started",
  "is_published": false
}

Error Responses:

  • 400 — Missing required field (siteId, pageId, pageName, pageType, pageUrl, or configs)
  • 400 — pageType must be 'post' or 'blog'
  • 401 — Unauthorized (no access to this site)

Update Blog Post

POST /api/configs/upsert-post

Update an existing blog post. Uses the same endpoint as create — include the same pageId to update an existing post. Only include the fields you want to change along with the required fields.

Authentication: API key required

Parameters (JSON body):

  • siteId (string, required) — The site ID
  • pageId (string, required) — ID of the existing post to update
  • pageName (string, required) — Updated post title
  • pageType (string, required) — Must be "post" or "blog"
  • pageUrl (string, required) — Updated URL path
  • slug (string, optional) — Updated URL slug
  • configs (array, required) — Updated content blocks array

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/upsert-post" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "post-uuid-001",
    "pageName": "Updated: Getting Started with RocketPages",
    "pageType": "post",
    "pageUrl": "/blog/getting-started",
    "slug": "getting-started",
    "configs": [
      {
        "p": "post",
        "c": {
          "c": {
            "d": "<p>Updated blog post content...</p>"
          }
        }
      }
    ]
  }'

Sample Response:

{
  "post_id": "post-uuid-001",
  "site_id": "SITE_ID",
  "title": "Updated: Getting Started with RocketPages",
  "slug": "getting-started",
  "page_url": "/blog/getting-started",
  "is_published": false
}

Error Responses:

  • 400 — Missing required field (siteId, pageId, pageName, pageType, pageUrl, or configs)
  • 400 — pageType must be 'post' or 'blog'
  • 401 — Unauthorized (no access to this site)

List Blog Posts

GET /api/configs/blog-posts

Retrieve all blog posts for a site. Content, assets, and meta descriptions are excluded from the listing response to reduce payload size.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/blog-posts?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "posts": [
    {
      "page_id": "post-uuid-001",
      "page_name": "Getting Started with RocketPages",
      "site_id": "SITE_ID",
      "page_type": "post",
      "slug": "getting-started",
      "page_url": "/blog/getting-started",
      "is_published": true,
      "created_at": "2024-06-20T14:00:00.000Z",
      "updated_at": 1718888400000
    }
  ]
}

Get Blog Post

GET /api/configs/blog-post

Retrieve a single blog post by ID, including its full content and configuration.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • id (query string, required) — The post ID (pageId of the post)

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/blog-post?siteId=SITE_ID&id=POST_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "post": {
    "page_id": "post-uuid-001",
    "page_name": "Getting Started with RocketPages",
    "site_id": "SITE_ID",
    "page_type": "post",
    "slug": "getting-started",
    "page_url": "/blog/getting-started",
    "is_published": true,
    "published_at": "2024-06-20T14:00:00.000Z",
    "created_at": "2024-06-20T14:00:00.000Z",
    "updated_at": 1718888400000,
    "configs": [ ... ]
  }
}

Error Responses:

  • 400 — siteId or pageId is required
  • 401 — Unauthorized
  • 404 — Could not find post

Delete Blog Post

DELETE /api/configs/blog-post

Permanently delete a blog post. If the post was published, its static HTML file is also deleted and the blog listing page is republished.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • id (query string, required) — ID of the post to delete (the post's pageId)

Sample Request:

curl -X DELETE "https://api.rocketpages.io/api/configs/blog-post?siteId=SITE_ID&id=POST_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "message": "Post deleted successfully"
}

Error Responses:

  • 400 — siteId or pageId is required
  • 404 — Could not find post
  • 401 — Unauthorized (no access to this site)

Custom Domains

Connect your own domain to your RocketPages website. Follow these steps:

  1. Add your domain using PUT /api/configs/custom-domain
  2. Update DNS at your domain registrar (GoDaddy, Namecheap, Cloudflare, etc.):
    • Log in to your domain registrar's DNS management panel
    • Add an A record pointing your domain to the RocketPages server IP
    • For subdomains (e.g. www), add an A record for the subdomain as well
    • DNS propagation can take up to 48 hours
  3. Validate DNS using POST /api/configs/validate-custom-domain to confirm A records are pointing correctly
  4. SSL is provisioned automatically after validation. Check status with POST /api/configs/check-ssl-probe
  5. Set as primary (optional) using POST /api/configs/set-primary-domain

List Custom Domains

GET /api/configs/site-domains

Retrieve all custom domains configured for a website.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/site-domains?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": [
    {
      "domain": "www.example.com",
      "is_primary": true,
      "is_verified": true,
      "ssl_status": "active",
      "dns_records": {
        "type": "CNAME",
        "name": "www",
        "value": "proxy.rocketpages.io"
      },
      "created_at": "2024-03-10T08:00:00Z"
    },
    {
      "domain": "example.com",
      "is_primary": false,
      "is_verified": true,
      "ssl_status": "active"
    }
  ]
}

Add Custom Domain

PUT /api/configs/custom-domain

Add a new custom domain to a website. After adding, configure DNS records and validate the domain.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • domain (string, required) — The custom domain to add (e.g., "www.example.com" or "example.com")

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/custom-domain?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "www.example.com"
  }'

Sample Response:

{
  "message": "Domain added successfully",
  "data": {
    "domain": "www.example.com",
    "dns_records": {
      "type": "CNAME",
      "name": "www",
      "value": "proxy.rocketpages.io"
    }
  }
}

Validate Custom Domain

POST /api/configs/validate-custom-domain

Verify that DNS records are correctly configured for a custom domain and trigger SSL certificate provisioning.

Authentication: API key required

Parameters (body):

  • siteId (string, required) — The site ID
  • domain (string, required) — The domain to validate

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/validate-custom-domain" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "domain": "www.example.com"
  }'

Sample Response:

{
  "message": "Domain validated successfully",
  "data": {
    "domain": "www.example.com",
    "is_verified": true,
    "ssl_status": "provisioning"
  }
}

Check SSL Status

POST /api/configs/check-ssl-probe

Perform an external HTTPS probe to check the SSL certificate status for a domain.

Authentication: API key required

Parameters (body):

  • domain (string, required) — The domain to check (e.g., "www.example.com")

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/check-ssl-probe" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "www.example.com"
  }'

Sample Response:

{
  "valid": true,
  "issuer": "Let's Encrypt",
  "expires": "2024-06-10T10:00:00.000Z",
  "daysRemaining": 89
}

Set Primary Domain

POST /api/configs/set-primary-domain

Set a verified custom domain as the primary domain for the website.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • domain (string, required) — The verified domain to set as primary

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/set-primary-domain?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "www.example.com"
  }'

Sample Response:

{
  "message": "Primary domain updated",
  "data": {
    "domain": "www.example.com",
    "is_primary": true
  }
}

Delete Custom Domain

DELETE /api/configs/custom-domain

Remove a custom domain from the website.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • domain (query string, required) — The domain to remove

Sample Request:

curl -X DELETE "https://api.rocketpages.io/api/configs/custom-domain?siteId=SITE_ID&domain=www.example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "message": "Domain deleted successfully"
}

Images & Assets

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

Upload Image (Base64)

POST /api/assets/upload-base64

Upload an image using base64 encoding. Suitable for programmatic uploads and smaller images.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • imageData (string, required) — Base64-encoded image data with data URI prefix (e.g., "data:image/png;base64,iVBOR...")
  • imageName (string, required) — File name for the uploaded image (e.g., "hero-banner.png")

Sample Request:

curl -X POST "https://api.rocketpages.io/api/assets/upload-base64?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "imageData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
    "imageName": "hero-banner.png"
  }'

Sample Response:

{
  "message": "Image uploaded successfully",
  "data": {
    "asset_key": "sites/SITE_ID/images/hero-banner.png",
    "url": "https://cdn.rocketpages.io/sites/SITE_ID/images/hero-banner.png",
    "file_name": "hero-banner.png",
    "content_type": "image/png",
    "size_bytes": 45230
  }
}

List Images

GET /api/assets/images

Returns only the image records for a site.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/assets/images?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": [
    {
      "id": "d5dc7c59-a4d8-4b91-be19-73c8064860ae",
      "image_url": "https://...s3.amazonaws.com/IMAGE_KEY",
      "thumbnail_url": "https://...s3.amazonaws.com/IMAGE_KEY_thumbnail",
      "image_name": "hero-banner.png",
      "size": 45230,
      "site_id": "SITE_ID",
      "created_at": 1785498730455
    }
  ]
}

Edit Image

POST /api/assets/edit-image

Apply edits to an existing image (resize, crop, etc.).

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • assetKey (string, required) — The asset key of the image to edit
  • width (number, optional) — New width in pixels
  • height (number, optional) — New height in pixels

Sample Request:

curl -X POST "https://api.rocketpages.io/api/assets/edit-image?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "assetKey": "sites/SITE_ID/images/hero-banner.png",
    "width": 800,
    "height": 600
  }'

Sample Response:

{
  "message": "Image edited successfully",
  "data": {
    "url": "https://cdn.rocketpages.io/sites/SITE_ID/images/hero-banner.png",
    "width": 800,
    "height": 600
  }
}

Delete Image

POST /api/assets/delete-site-asset

Permanently delete an uploaded image. Also removes all references to this image from site header, footer, and page content.

Authentication: API key required

Parameters (JSON body):

  • id (string, required) — The image ID — retrieve from GET /api/assets/images

Sample Request:

curl -X POST "https://api.rocketpages.io/api/assets/delete-site-asset" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "image-uuid-001"
  }'

Sample Response:

{
  "message": "image delete successfully..!"
}

Error Responses:

  • 404 — Image not found
  • 404 — Image already deleted

Generate Image

POST /api/assets/generate-ai-image

Search for and download stock images from Unsplash based on a text prompt. Images are automatically uploaded to S3 and associated with your site.

Authentication: API key required

Parameters (JSON body):

  • siteId (string, required) — The site ID
  • prompt (string, required) — Search query for images (e.g., "modern office workspace")
  • fileName (string, optional) — Custom filename for the uploaded image
  • orientation (string, optional, default: "squarish") — Image orientation: "landscape", "portrait", or "squarish"
  • imageCount (number, optional, default: 1) — Number of images to generate

Sample Request:

curl -X POST "https://api.rocketpages.io/api/assets/generate-ai-image" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "prompt": "modern office workspace",
    "orientation": "landscape",
    "imageCount": 1
  }'

Sample Response:

{
  "images": [
    {
      "unsplash_id": "abc123",
      "alt": "Modern office with natural lighting",
      "s3_url": "https://cdn.rocketpages.io/sites/SITE_ID/images/modern-office.jpg",
      "url": "https://cdn.rocketpages.io/sites/SITE_ID/images/modern-office.jpg",
      "success": true,
      "size": 245000
    }
  ]
}

Error Responses:

  • 400 — siteId and prompt are required
  • 401 — Unauthorized

SEO

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

Read SEO Settings

GET /api/configs/seo

Retrieve current SEO settings for a site or a specific page.

Authentication: API key required

Parameters:

  • siteId (query string, optional) — Get site-level SEO settings
  • pageId (query string, optional) — Get page-level SEO settings — retrieve from GET /api/configs/all-pages

Sample Request (Site-level):

curl -X GET "https://api.rocketpages.io/api/configs/seo?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Request (Page-level):

curl -X GET "https://api.rocketpages.io/api/configs/seo?pageId=PAGE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": {
    "site_id": "SITE_ID",
    "meta_title": "My Website — Building the Future",
    "meta_description": "We provide innovative solutions for everyone.",
    "favicon": "https://cdn.rocketpages.io/sites/SITE_ID/favicon.ico",
    "social_image": "https://cdn.rocketpages.io/sites/SITE_ID/social-og.png",
    "default_social_media_image_alt": "Website preview"
  }
}

Update SEO Settings

PUT /api/configs/seo

Update SEO metadata for a site or specific page. Only include fields you want to change.

Authentication: API key required

Parameters (body):

  • siteId (string, optional) — Update site-level SEO
  • pageId (string, optional) — Update page-level SEO — retrieve from GET /api/configs/all-pages
  • metaTitle (string, optional) — Meta title for search engines (recommended: 50-60 characters)
  • metaDescription (string, optional) — Meta description for search results (recommended: 150-160 characters)
  • favicon (string, optional) — URL of the favicon image
  • socialImage (string, optional) — URL of the Open Graph / social sharing image
  • defaultSocialMediaImageAlt (string, optional) — Alt text for the social sharing image

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/seo" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "metaTitle": "My Website — Building the Future",
    "metaDescription": "We provide innovative solutions for everyone.",
    "favicon": "https://cdn.rocketpages.io/sites/SITE_ID/favicon.ico",
    "socialImage": "https://cdn.rocketpages.io/sites/SITE_ID/social-og.png",
    "defaultSocialMediaImageAlt": "Website preview image"
  }'

Sample Response:

{
  "message": "SEO settings updated successfully"
}

Custom Code

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

Read Custom Code

GET /api/configs/custom-code

Retrieve the current custom code injected into the site's HTML head and body sections.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/custom-code?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": {
    "site_id": "SITE_ID",
    "head_code": "<!-- Google Analytics -->\n<script async src=\"https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX\"></script>",
    "body_code": "<!-- Chat widget -->\n<script src=\"https://chat.example.com/widget.js\"></script>"
  }
}

Update Custom Code

PUT /api/configs/custom-code

Update custom code injected into the site's HTML. Use for analytics tracking, chat widgets, custom CSS, or any other code snippets.

Authentication: API key required

Parameters (body):

  • siteId (string, required) — The site ID
  • headCode (string, optional) — HTML/JS/CSS injected into the <head> section (max 10,000 characters). Use for analytics, meta tags, CSS stylesheets, and fonts.
  • bodyCode (string, optional) — HTML/JS injected before the closing </body> tag (max 10,000 characters). Use for chat widgets, tracking pixels, and scripts.

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/custom-code" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "headCode": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX\"></script>",
    "bodyCode": "<script src=\"https://chat.example.com/widget.js\"></script>"
  }'

Sample Response:

{
  "message": "Custom code updated successfully"
}

Theme & Styling

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

List Color Palettes

GET /api/configs/color-palettes


Retrieve all available color palettes. Use the palette id as the themeId when creating a website from a template.


Authentication: API key required

Parameters:

  • category (query string, optional) — Filter palettes by category. Available categories: Bright, Pastel, Dark


Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/color-palettes" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Request (with filter):

curl -X GET "https://api.rocketpages.io/api/configs/color-palettes?category=Pastel" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "palettes": [
    {
      "id": "ppp1",
      "name": "Pastel Blue",
      "category": "Pastel",
      "colors": [
        "#4B84E9",
        "#3E442B",
        "#F4F0ED",
        "#F4F0ED",
        "#E5E1D9",
        "#040100"
      ]
    },
    {
      "id": "bbb1",
      "name": "Bright Coral",
      "category": "Bright",
      "colors": [
        "#FF6B6B",
        "#4ECDC4",
        "#F7FFF7",
        "#FFE66D",
        "#FFFFFF",
        "#2C3E50"
      ]
    }
  ]
}

Palette ID Format:

  • ppp1ppp10 — Pastel palettes
  • bbb1bbb10 — Bright palettes
  • ddd1ddd10 — Dark palettes

List Font Pairings

GET /api/configs/font-pairings

Retrieve all available font family pairings. Each pairing includes a heading font and a body font designed to work well together.

Authentication: Not required (public endpoint)

Parameters: None

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/font-pairings"

Sample Response:

{
  "font_pairings": [
    {
      "id": "font-001",
      "label": "Poppins / Inter",
      "heading_font": "Poppins",
      "body_font": "Inter",
      "preview_url": "https://..."
    }
  ]
}

List Button Styles

GET /api/configs/button-styles

Retrieve all available button style presets. Use button style IDs when configuring site themes.

Authentication: Not required (public endpoint)

Parameters: None

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/button-styles"

Sample Response:

{
  "button_styles": [
    {
      "id": "btn-001",
      "label": "Rounded Solid",
      "border_radius": "rounded",
      "border_width": "none",
      "preview": {
        "primary": { ... },
        "secondary": { ... }
      }
    }
  ]
}

Contributors

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

Invite Contributors

POST /api/configs/invite-contributors

Invite one or more contributors to a site by email. Invited users receive an email notification with access to the site editor.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • emails (string[], required) — Array of email addresses to invite (each max 254 characters)

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/invite-contributors?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "emails": [
      "designer@example.com",
      "copywriter@example.com"
    ]
  }'

Sample Response:

{
  "message": "Invitations sent successfully",
  "data": {
    "invited": [
      {
        "email": "designer@example.com",
        "status": "invited",
        "invited_at": "2024-06-20T14:00:00Z"
      },
      {
        "email": "copywriter@example.com",
        "status": "invited",
        "invited_at": "2024-06-20T14:00:00Z"
      }
    ]
  }
}

List Contributors

GET /api/configs/contributors

Retrieve all contributors for a site including their roles and invitation status.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/contributors?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": [
    {
      "user_id": "user-uuid-001",
      "email": "designer@example.com",
      "role": "editor",
      "status": "active",
      "joined_at": "2024-06-20T15:00:00Z"
    },
    {
      "user_id": "user-uuid-002",
      "email": "copywriter@example.com",
      "role": "editor",
      "status": "invited",
      "invited_at": "2024-06-20T14:00:00Z"
    }
  ]
}

Remove Contributor

DELETE /api/configs/contributor

Remove a contributor's access from a site. Only the site owner can remove contributors.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • email (query string, required) — Email address of the contributor to remove

Sample Request:

curl -X DELETE "https://api.rocketpages.io/api/configs/contributor?siteId=SITE_ID&email=designer@example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "message": "Contributor removed successfully"
}

Error Responses:

  • 400 — siteId and email are required
  • 403 — Site owner permission is required
  • 404 — Site not found
  • 404 — User not found

Billing & Subscriptions

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

List Plans

GET /api/configs/plans

Retrieve all available subscription plans with pricing and feature details.

Authentication: API key required

Parameters: None

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/plans" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": [
    {
      "plan_id": "plan-free",
      "name": "Free",
      "price": 0,
      "billing_interval": "month",
      "features": {
        "custom_domain": false,
        "remove_branding": false,
        "form_submissions": 50,
        "pages": 5
      }
    },
    {
      "plan_id": "plan-pro",
      "name": "Pro",
      "price": 19,
      "billing_interval": "month",
      "stripe_price_id": "price_xxxxx",
      "features": {
        "custom_domain": true,
        "remove_branding": true,
        "form_submissions": 1000,
        "pages": 50
      }
    }
  ]
}

Get Active Subscriptions

GET /api/configs/site-config-get-active-subscriptions

Retrieve the active subscription(s) for a website including plan details and billing status.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/site-config-get-active-subscriptions?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": {
    "subscription_id": "sub_xxxxx",
    "plan_name": "Pro",
    "status": "active",
    "current_period_start": "2024-06-01T00:00:00Z",
    "current_period_end": "2024-07-01T00:00:00Z",
    "cancel_at_period_end": false,
    "stripe_customer_id": "cus_xxxxx"
  }
}

Create Checkout Session

POST /api/configs/create-stripe-checkout-session

Create a Stripe Checkout session to start a subscription. Returns a URL to redirect the user to Stripe's hosted checkout page.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • priceId (string, required) — Stripe Price ID from the plans endpoint
  • email (string, required) — Customer email for Stripe

Sample Request:

curl -X POST "https://api.rocketpages.io/api/configs/create-stripe-checkout-session?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "priceId": "price_xxxxx",
    "email": "user@example.com"
  }'

Sample Response:

{
  "checkout_url": "https://checkout.stripe.com/c/pay/cs_xxxxx",
  "session_id": "cs_xxxxx"
}

Cancel Subscription

PUT /api/configs/site-config-cancel-subscription

Cancel an active subscription. The subscription remains active until the end of the current billing period.

Authentication: API key required

Parameters (body):

  • siteId (string, required) — The site ID
  • subscriptionId (string, required) — Stripe subscription ID to cancel

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/site-config-cancel-subscription" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "subscriptionId": "sub_xxxxx"
  }'

Sample Response:

{
  "status": true,
  "subscription": {
    "id": "sub_xxxxx",
    "cancel_at_period_end": true,
    "current_period_end": 1719792000
  }
}

Cancel Upcoming Subscription

PUT /api/configs/cancel-upcoming-subscription

Cancel a scheduled (upcoming) plan change without cancelling the active subscription. The user stays on their current plan.

Authentication: API key required

Parameters:

  • siteId (string, required) — The site ID
  • subscriptionId (string, required) — Stripe subscription ID whose upcoming schedule should be cancelled

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/cancel-upcoming-subscription" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "subscriptionId": "sub_XXXXXXXXXXXXX"
  }'

Sample Response:

{
  "message": "Upcoming subscription cancelled",
  "data": {
    "status": true,
    "subscription": {
      "id": "sub_XXXXXXXXXXXXX",
      "status": "active",
      "current_period_end": "2024-07-20T00:00:00Z"
    }
  }
}

Resume Subscription

PUT /api/configs/site-config-resume-subscription

Resume a subscription that was previously set to cancel at the end of the billing period. Only works if the subscription hasn't expired yet.

Authentication: API key required

Parameters:

  • siteId (string, required) — The site ID
  • subscriptionId (string, required) — Stripe subscription ID to resume

Sample Request:

curl -X PUT "https://api.rocketpages.io/api/configs/site-config-resume-subscription" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "subscriptionId": "sub_XXXXXXXXXXXXX"
  }'

Sample Response:

{
  "status": true,
  "subscription": {
    "id": "sub_XXXXXXXXXXXXX",
    "status": "active",
    "cancel_at_period_end": false,
    "current_period_end": "2024-07-20T00:00:00Z"
  }
}

List Invoices

GET /api/configs/site-invoices

List all Stripe invoices for a site with amount, status, billing period, and hosted invoice/PDF URLs.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/site-invoices?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "invoices": [
    {
      "id": "in_XXXXXXXXXXXXX",
      "number": "INV-0001",
      "status": "paid",
      "amount_due": 1900,
      "amount_paid": 1900,
      "currency": "usd",
      "created": 1718899200,
      "period_start": 1718899200,
      "period_end": 1721491200,
      "hosted_invoice_url": "https://invoice.stripe.com/i/...",
      "invoice_pdf": "https://pay.stripe.com/invoice/..."
    }
  ]
}

Stripe Customer Portal

GET /api/configs/site-config-get-stripe-customer-session

Create a Stripe Customer Portal session. Returns a URL that allows the user to manage their billing, payment methods, and subscription details directly through Stripe's hosted portal.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID
  • subscriptionId (query string, required) — Stripe subscription ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/configs/site-config-get-stripe-customer-session?siteId=SITE_ID&subscriptionId=sub_xxxxx" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "url": "https://billing.stripe.com/p/session/..."
}

Error Responses:

  • 401 — Unauthorized

Forms

Lorem ipsum dolor sit amet consectetur. Vestibulum velit convallis porttitor lacinia auctor aliquet.

Submit Form

POST /api/form-submission

Submit a form entry from a contact form. This is a public endpoint used by the published site's contact forms.

Authentication: Not required (public endpoint)

Parameters:

  • siteId (string, required) — ID of the site the form belongs to
  • pageId (string, optional) — ID of the page containing the form — retrieve from GET /api/configs/all-pages
  • firstName (string, optional) — Submitter's first name
  • lastName (string, optional) — Submitter's last name
  • email (string, optional) — Submitter's email address
  • phoneNumber (string, optional) — Submitter's phone number
  • message (string, optional) — Message content

Sample Request:

curl -X POST "https://api.rocketpages.io/api/form-submission" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "SITE_ID",
    "pageId": "PAGE_ID",
    "firstName": "Jane",
    "lastName": "Doe",
    "email": "jane.doe@example.com",
    "phoneNumber": "+1-555-123-4567",
    "message": "I would like to learn more about your services."
  }'

Sample Response:

{
  "message": "Form submitted successfully",
  "data": {
    "id": "submission-uuid-001",
    "first_name": "Jane",
    "last_name": "Doe",
    "email": "jane.doe@example.com",
    "phone_number": "+1-555-123-4567",
    "message": "I would like to learn more about your services.",
    "created_at_dt": "2024-06-20 14:30:00"
  }
}

List Form Submissions

GET /api/all-form-submissions

Retrieve all form submissions for a site. Data visibility may be limited based on subscription tier.

Authentication: API key required

Parameters:

  • siteId (query string, required) — The site ID

Sample Request:

curl -X GET "https://api.rocketpages.io/api/all-form-submissions?siteId=SITE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response:

{
  "data": [
    {
      "id": "submission-uuid-001",
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "jane.doe@example.com",
      "phone_number": "+1-555-123-4567",
      "message": "I would like to learn more about your services.",
      "year_month": "2024-06",
      "created_at_dt": "2024-06-20 14:30:00",
      "is_blur": false
    }
  ]
}