Zoca Website API

The Website API from Zoca — 128 operation(s) for website.

Operations 177

POST /website/{websiteId}/gallery/migrate Migrate website gallery media from chrone_mapping to website.media #
POST /website/forms Create a new form #
GET /website/forms Get all forms (paginated) #
GET /website/forms/{id} Get form by ID #
PATCH /website/forms/{id} Update a form #
DELETE /website/forms/{id} Delete a form (soft delete) #
GET /website/{websiteId}/generate-metadata Generate metadata for a website #
POST /website/generate-fonts Generate AI font pair suggestions #
GET /website/{websiteId}/website-forms Get all formIds mapped to a websiteId #
POST /website/{websiteId}/website-forms Create website-form mapping #
PATCH /website/{websiteId}/website-forms/{id} Update website-form mapping by ID #
DELETE /website/{websiteId}/website-forms/{id} Delete a website-form mapping #
GET /website/global-pages Get paginated list of global pages #
GET /website/sections/{sectionId}/colors Get all colors for a section #
PATCH /website/sections/{sectionId}/colors Update color for a section #
POST /website/{websiteId}/products Create a new product for a website #
GET /website/{websiteId}/products Get all products for a website #
GET /website/{websiteId}/products/{productId} Get a product by ID for a website #
PATCH /website/{websiteId}/products/{productId} Update a product for a website #
DELETE /website/{websiteId}/products/{productId} Delete a product for a website #
PATCH /website/{websiteId}/products/reorder Reorder products for a website #
POST /website/navigation-links Create a navigation link #
GET /website/navigation-links Get navigation links by parent ID #
PATCH /website/navigation-links/{id} Update a navigation link #
DELETE /website/navigation-links/{id} Delete a navigation link #
PATCH /website/navigation-links/reorder/{parentId} Reorder navigation links #
POST /website/navigation-links/reset/{parentId} Reset a page's navigation links to the generated list #
POST /website/website-font Create website font configuration #
GET /website/website-font/{websiteId} Get website font configuration #
PATCH /website/website-font/{websiteId}/{fontType} Update website font configuration #
DELETE /website/website-font/{websiteId}/{fontId}/{fontType} Delete website font configuration #
POST /website/{websiteId}/add/font Add a font to a website by name and URL #
POST /website/font Create a new font #
GET /website/font Get paginated list of fonts with optional filtering #
PATCH /website/font/{id} Update a font by ID #
DELETE /website/font/{id} Delete a font by ID #
GET /website/font/{id}/websites Get all websites associated with a specific font #
POST /website/create-website-v2 Create website V2 from location payload #
POST /website/create-website-v3 Create website V3 with booking link #
POST /website/scrape-theme Queue a website-theme scrape (colors + fonts) from reference_website_url #
POST /website/scrape-theme-preview Queue a URL-only theme scrape (colors + fonts); no DB writes — poll for the result #
GET /website/scrape-theme-preview/{jobId} Poll a URL-only theme-preview job for its scraped colors + fonts #
POST /website/scrape-data Scrape business data from booking link #
POST /website/collect-website-data Mode B Phase 1: Collect raw website data for frontend review (no DB writes) #
POST /website/create-from-confirmed-data Mode B Phase 2: Create website from user-confirmed data #
POST /website/sync-services-from-booking Sync services from a booking platform into the database #
GET /website/booking-link-data Get business details from booking link #
POST /website/get-new-website-id Get or create new website ID for location #
POST /website/add-booking-link Add booking link and trigger website creation #
GET /website/onboarding-creation-status Get onboarding website-creation status #
GET /website/generate-website Generate website for a location #
GET /website/generate-subdomains Generate subdomain suggestions #
GET /website/platforms Get available booking platforms #
GET /website/get-website-id/{locationEntityId} Get website ID by location entity ID #
GET /website/{websiteId} Get website data by ID #
GET /website/{websiteId}/v2 Get website data V2 with sections #
GET /website/{websiteId}/v2/pages/{pageId}/sections Hydrate a single page's sections (metadata-mode companion) #
POST /website/{websiteId}/check-website-live-on-gbp Check if website is live on GBP #
POST /website/{websiteId}/editor/publish Batch publish editor changes for website sections #
POST /website/{websiteId}/ctas Create a call-to-action for website #
GET /website/{websiteId}/ctas Get CTAs filtered by parent entity #
GET /website/{websiteId}/ctas/{ctaId} Get a CTA by ID #
PUT /website/{websiteId}/ctas/{ctaId} Update a CTA by ID #
DELETE /website/{websiteId}/ctas/{ctaId} Delete a CTA by ID #
GET /website/{websiteId}/working-hours Get website working hours #
POST /website/{websiteId}/working-hours Update website working hours #
GET /website/{websiteId}/reviews Get website reviews #
GET /website/{parentId}/{parentType}/attributes Get website attributes #
PATCH /website/{parentId}/{parentType}/attributes/{attributeId} Update website attribute #
DELETE /website/{parentId}/{parentType}/attributes/{attributeId} Delete website attribute #
GET /website/{websiteId}/themes Get all themes for a website #
POST /website/{websiteId}/themes Create a theme for website #
GET /website/{websiteId}/themes/v2 Get website themes V2 #
GET /website/{websiteId}/themes/{themeId} Delete a theme for a website #
PATCH /website/{websiteId}/themes/{themeId} Update a website theme #
DELETE /website/{websiteId}/themes/{themeId} Delete a website theme #
DELETE /website/themes/{themeId} Delete a global theme by ID #
GET /website/themes/{themeId} Get theme by ID #
GET /website/{websiteId}/pages Get website pages mapping #
POST /website/{websiteId}/pages Create a website page #
GET /website/{websiteId}/website-pages List website_pages rows for a website (per-row name/path/metadata) #
GET /website/{websiteId}/pages/{pageId} Get website page by page ID #
PATCH /website/{websiteId}/pages/{pageId} Update a website page #
DELETE /website/{websiteId}/pages/{id} Delete a website page #
GET /website/{websiteId}/pages/{pageId}/attributes Get page attributes #
POST /website/{websiteId}/pages/{pageId}/attributes Create a page attribute #
PATCH /website/{websiteId}/pages/{pageId}/attributes/{attributeId} Update a page attribute #
DELETE /website/{websiteId}/pages/{pageId}/attributes/{attributeId} Delete a page attribute #
GET /website/{templateId}/template-sections Get template sections #
GET /website/{websiteId}/pages/{pageId}/sections Get page sections #
POST /website/{websiteId}/pages/{pageId}/sections Create a page section #
PATCH /website/{websiteId}/pages/{pageId}/sections/reorder Reorder page sections #
PATCH /website/{websiteId}/pages/{pageId}/sections/{sectionId} Update a page section #
DELETE /website/{websiteId}/pages/{pageId}/sections/{sectionId} Delete a page section #
GET /website/{websiteId}/pages/{pageId}/sections/{sectionId}/attributes Get section attributes #
POST /website/{websiteId}/pages/{pageId}/sections/{sectionId}/attributes Create a section attribute #
DELETE /website/{websiteId}/pages/{pageId}/sections/{sectionId}/attributes/{attributeId} Delete a section attribute #
GET /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents Get section contents #
POST /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents Create section content #
GET /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId} Get section content by ID #
PATCH /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId} Update section content #
DELETE /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId} Delete section content #
GET /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId}/attributes Get content attributes #
POST /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId}/attributes Create content attribute #
PATCH /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId}/attributes/{attributeId} Update content attribute #
DELETE /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId}/attributes/{attributeId} Delete content attribute #
GET /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId}/media Get content media #
POST /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId}/media Create content media #
PATCH /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId}/media/{mediaId} Update content media #
DELETE /website/{websiteId}/pages/{pageId}/sections/{sectionId}/contents/{contentId}/media/{mediaId} Delete content media #
POST /website/themes Upload themes #
POST /website/themes/v2 Upload themes V2 without template-theme link #
GET /website/themes/list Get paginated list of themes with optional filtering #
GET /website/templates Get templates, optionally filtered by website ID #
GET /website/section-media Get section media data #
GET /website/category-media Get category media data #
GET /website/single-section-media Get single section media #
POST /website/replace-media-in-section Replace media in section #
POST /website/save-theme-template Save selected theme and template #
POST /website/{websiteId}/themes/generate-palette Generate AI color palettes from a prompt #
GET /website/{websiteId}/ai-colors List a website's AI-generated color palettes #
DELETE /website/{websiteId}/ai-colors/{id} Delete an AI-generated color palette #
POST /website/{websiteId}/ai-colors/{id}/persist Persist a stored AI palette as a theme (returns themeId) #
POST /website/{websiteId}/ai-colors/{id}/apply Apply a stored AI palette to the website and publish #
GET /website/{websiteId}/theme-template Get theme and template for website #
POST /website/reorder-media-in-section Reorder media in section #
POST /website/update-website-status Update website status #
GET /website/get-website-status Get website status and preferences #
GET /website/subdomain Get website subdomain #
PUT /website/subdomain Update website subdomain (preserves current domain) #
GET /website/subdomain-validate Validate subdomain availability #
PUT /website/domain Update website domain (preserves current subdomain) #
PATCH /website/{websiteId}/pipeline Update website pipeline version #
GET /website/get-system-category Get system category by name #
GET /website/default-category-images Get default images for a category #
POST /website/add-user-preferences Add user preferences #
GET /website/get-ip-details Get IP details from request #
POST /website/create-website-from-location Create website from location data #
GET /website/{websiteId}/location Get location for website #
PUT /website/{websiteId}/location Update website location details #
GET /website/{websiteId}/location/canonical Get canonical website location NAP and contact data #
GET /website/list Get paginated list of websites with optional filtering #
GET /website/get-websites/{websiteId} Get website by ID #
PATCH /website/{websiteId}/{sectionId}/section Update section #
GET /website/chrone-services Get chrone services for a location #
GET /website/gallery-media Get website gallery media for a location #
POST /website/set-external-domain/{externalDomain}/{subDomain} Set external domain for website #
DELETE /website/kill/{websiteName} Delete website by name #
GET /website/respawn/{websiteName} Respawn website by name #
POST /website/{websiteId}/build Build website #
POST /website/build/all Build all published websites #
PATCH /website/{websiteId}/build-status/{buildStatus} Update website build status #
GET /website/{websiteId}/page/{pageId}/metadata Get page metadata #
DELETE /website/{websiteId}/page/{pageId}/metadata Delete page metadata #
PATCH /website/{websiteId}/page/{pageId}/metadata Update page metadata #
PATCH /website/{websiteId}/schema-markup Update schema markup #
DELETE /website/{websiteId}/schema-markup Delete schema markup #
GET /website/{websiteId}/schema-markup Get schema markup #
POST /website/{websiteId}/analytics Create website analytics tracking codes in bulk #
PATCH /website/{websiteId}/analytics Update website analytics tracking codes in bulk #
DELETE /website/{websiteId}/analytics Delete website analytics tracking code #
GET /website/{websiteId}/analytics Get website analytics tracking codes #
GET /website/book-now-clicks Get book now clicks breakdown by page type #
GET /website/website-funnel Get website funnel data with conversion rates #
GET /website/website-mixpanel-funnel Get Mixpanel-only website funnel data (visitors + book-now clicks) #
GET /website/page-views-trend Get website page views trend over time #
GET /website/location-details Get lightweight location and website details #
GET /website/top-pages Get top pages by page views for a website #
GET /website/traffic-sources Get traffic sources breakdown for a website #
POST /website/{websiteId}/description/generate Generate AI copy (title or description) for a website section #
POST /website/template-theme Create a template-theme mapping #
GET /website/template-theme List template-theme mappings with optional filters + pagination #
GET /website/template-theme/{id} Get a single template-theme mapping by id #
PATCH /website/template-theme/{id} Update a template-theme mapping #
DELETE /website/template-theme/{id} Delete a template-theme mapping #
GET /website/generation-status/{generationId} Get the status of a website generation run #
POST /website/generation-status/{generationId} Update website generation status (called by prism lambda) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/zoca-website-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

zoca-website-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Zoca Platform Website API
  description: 'The Zoca platform API behind the Zoca web app and mobile apps: scheduling, website generation, Google Business Profile, discovery/local SEO, social media, booking enquiries, offers, clients, staff, billing and the Zoca "brain" agent layer.'
  version: 3.20.10
  contact: {}
  x-apievangelist-note: Harvested verbatim from https://api.zoca.ai/swagger.json. The provider ships the default NestJS Swagger metadata (title "API Documentation", empty servers[]); title/description/servers were set by API Evangelist for identification and the unmodified original is preserved at openapi/_original/zoca-platform-swagger.json. Every path, operation, summary, parameter and response is exactly as published.
servers:
- url: https://api.zoca.ai
  description: Production
tags:
- name: Website
paths:
  /website/{websiteId}/gallery/migrate:
    post:
      description: Fetches media from media.chrone_mapping where entity_id matches and is_website_gallery is true, then migrates to website.media with duplicate checking
      operationId: t_value
      parameters:
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema:
          type: string
      responses:
        '200':
          description: Gallery migration completed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Website gallery migration completed successfully
                  migrated:
                    type: number
                    example: 10
                  skipped:
                    type: number
                    example: 2
                  failed:
                    type: number
                    example: 0
                  details:
                    type: object
                    properties:
                      totalChroneMappingRecords:
                        type: number
                      validZocaIds:
                        type: number
                      validMediaRecords:
                        type: number
                      existingInWebsite:
                        type: number
                      newlyInserted:
                        type: number
        '400':
          description: Invalid request parameters
        '500':
          description: Migration failed
      summary: Migrate website gallery media from chrone_mapping to website.media
      tags:
      - Website
  /website/forms:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: Form created successfully
      summary: Create a new form
      tags:
      - Website
    get:
      operationId: t_value
      parameters:
      - name: pageSize
        required: false
        in: query
        description: 'Items per page (default: 10)'
        schema:
          type: number
      - name: page
        required: false
        in: query
        description: 'Page number (default: 1)'
        schema:
          type: number
      responses:
        '200':
          description: List of forms
      summary: Get all forms (paginated)
      tags:
      - Website
  /website/forms/{id}:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Form details
      summary: Get form by ID
      tags:
      - Website
    patch:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Form updated successfully
      summary: Update a form
      tags:
      - Website
    delete:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Form deleted successfully
      summary: Delete a form (soft delete)
      tags:
      - Website
  /website/{websiteId}/generate-metadata:
    get:
      operationId: t_value
      parameters:
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: Metadata generated successfully
        '400':
          description: Invalid websiteId
        '404':
          description: Metadata not found
      summary: Generate metadata for a website
      tags:
      - Website
  /website/generate-fonts:
    post:
      description: Describe the font style you want and AI returns matching Google Font heading/body pairs.
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Font suggestions generated successfully
        '400':
          description: Invalid request parameters
      summary: Generate AI font pair suggestions
      tags:
      - Website
  /website/{websiteId}/website-forms:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Returns list of formIds
      summary: Get all formIds mapped to a websiteId
      tags:
      - Website
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: Mapping created successfully
      summary: Create website-form mapping
      tags:
      - Website
  /website/{websiteId}/website-forms/{id}:
    patch:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Mapping updated successfully
      summary: Update website-form mapping by ID
      tags:
      - Website
    delete:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Mapping deleted successfully
      summary: Delete a website-form mapping
      tags:
      - Website
  /website/global-pages:
    get:
      operationId: t_value
      parameters:
      - name: search
        required: false
        in: query
        description: Search global page by name
        schema:
          maxLength: 256
          example: About
          type: string
      - name: pageSize
        required: false
        in: query
        description: 'Items per page (default: 10)'
        schema:
          type: number
      - name: page
        required: false
        in: query
        description: 'Page number (default: 1)'
        schema:
          type: number
      responses:
        '200':
          description: Paginated list of global pages
      summary: Get paginated list of global pages
      tags:
      - Website
  /website/sections/{sectionId}/colors:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get all colors for a section
      tags:
      - Website
    patch:
      operationId: t_value
      parameters:
      - name: sectionId
        required: true
        in: path
        description: ID of the section to update colors for
        schema: {}
      requestBody:
        required: true
        description: Color variables to update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: ''
      summary: Update color for a section
      tags:
      - Website
  /website/{websiteId}/products:
    post:
      operationId: t_value
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/e'
      responses:
        '201':
          description: ''
      summary: Create a new product for a website
      tags:
      - Website
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get all products for a website
      tags:
      - Website
  /website/{websiteId}/products/{productId}:
    get:
      operationId: t_value
      parameters:
      - name: productId
        required: true
        in: path
        description: ID of the product
        schema: {}
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: ''
      summary: Get a product by ID for a website
      tags:
      - Website
    patch:
      operationId: t_value
      parameters:
      - name: productId
        required: true
        in: path
        description: ID of the product
        schema: {}
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: ''
      summary: Update a product for a website
      tags:
      - Website
    delete:
      operationId: t_value
      parameters:
      - name: productId
        required: true
        in: path
        description: ID of the product
        schema: {}
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: ''
      summary: Delete a product for a website
      tags:
      - Website
  /website/{websiteId}/products/reorder:
    patch:
      operationId: t_value
      parameters:
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      requestBody:
        required: true
        description: Product reordering configuration
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Products reordered successfully
        '400':
          description: Invalid request data
        '404':
          description: Website or products not found
      summary: Reorder products for a website
      tags:
      - Website
  /website/navigation-links:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Create a navigation link
      tags:
      - Website
    get:
      operationId: t_value
      parameters:
      - name: isActive
        required: false
        in: query
        description: Filter by active status (true/false). Omit to return all links regardless of active status.
        schema:
          type: boolean
      - name: parentId
        required: false
        in: query
        description: ID of the parent entity to filter navigation links
        schema:
          type: string
      responses:
        '200':
          description: ''
      summary: Get navigation links by parent ID
      tags:
      - Website
  /website/navigation-links/{id}:
    patch:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        description: ID of the navigation link
        schema: {}
      responses:
        '200':
          description: ''
      summary: Update a navigation link
      tags:
      - Website
    delete:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        description: ID of the navigation link
        schema: {}
      responses:
        '200':
          description: ''
      summary: Delete a navigation link
      tags:
      - Website
  /website/navigation-links/reorder/{parentId}:
    patch:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Reorder navigation links
      tags:
      - Website
  /website/navigation-links/reset/{parentId}:
    post:
      description: Clears the page's stored navigation links so the next website generation rebuilds them from the page's sections. Does not itself regenerate the site — until it runs, the page has no stored navigation.
      operationId: t_value
      parameters:
      - name: parentId
        required: true
        in: path
        description: ID of the page whose navigation is reset
        schema: {}
      responses:
        '201':
          description: ''
      summary: Reset a page's navigation links to the generated list
      tags:
      - Website
  /website/website-font:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Create website font configuration
      tags:
      - Website
  /website/website-font/{websiteId}:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get website font configuration
      tags:
      - Website
  /website/website-font/{websiteId}/{fontType}:
    patch:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Update website font configuration
      tags:
      - Website
  /website/website-font/{websiteId}/{fontId}/{fontType}:
    delete:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Delete website font configuration
      tags:
      - Website
  /website/{websiteId}/add/font:
    post:
      description: Checks if the font exists in website.fonts by name and URL. If it exists, reuses the ID. If not, creates the font first. Then creates the website_fonts association.
      operationId: t_value
      parameters:
      - name: websiteId
        required: true
        in: path
        description: Website UUID
        schema: {}
      responses:
        '201':
          description: ''
      summary: Add a font to a website by name and URL
      tags:
      - Website
  /website/font:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Create a new font
      tags:
      - Website
    get:
      operationId: t_value
      parameters:
      - name: pageSize
        required: false
        in: query
        description: 'Items per page (default: 10)'
        schema:
          type: number
      - name: page
        required: false
        in: query
        description: 'Page number (default: 1)'
        schema:
          type: number
      responses:
        '200':
          description: ''
      summary: Get paginated list of fonts with optional filtering
      tags:
      - Website
  /website/font/{id}:
    patch:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Update a font by ID
      tags:
      - Website
    delete:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Delete a font by ID
      tags:
      - Website
  /website/font/{id}/websites:
    get:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        description: Font ID
        schema:
          type: number
      responses:
        '200':
          description: List of websites using this font
          content:
            application/json:
              schema:
                type: object
                properties:
                  fontId:
                    type: number
                    example: 68
                  totalWebsites:
                    type: number
                    example: 3
                  totalAssociations:
                    type: number
                    example: 5
                  websites:
                    type: array
                    items:
                      type: object
                      properties:
                        websiteId:
                          type: string
                          example: 5f8ed882-309d-45b9-aec1-acfb22352995
                        websiteUrl:
                          type: string
                          example: https://example.zoca.ai
                        fontType:
                          type: string
                          example: HEAD
                        isPublished:
                          type: boolean
                          example: true
                        isCreated:
                          type: boolean
                          example: true
        '404':
          description: Font not found
      summary: Get all websites associated with a specific font
      tags:
      - Website
  /website/create-website-v2:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Create website V2 from location payload
      tags:
      - Website
  /website/create-website-v3:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Create website V3 with booking link
      tags:
      - Website
  /website/scrape-theme:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Queue a website-theme scrape (colors + fonts) from reference_website_url
      tags:
      - Website
  /website/scrape-theme-preview:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Queue a URL-only theme scrape (colors + fonts); no DB writes — poll for the result
      tags:
      - Website
  /website/scrape-theme-preview/{jobId}:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Poll a URL-only theme-preview job for its scraped colors + fonts
      tags:
      - Website
  /website/scrape-data:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Scrape business data from booking link
      tags:
      - Website
  /website/collect-website-data:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: 'Mode B Phase 1: Collect raw website data for frontend review (no DB writes)'
      tags:
      - Website
  /website/create-from-confirmed-data:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: 'Mode B Phase 2: Create website from user-confirmed data'
      tags:
      - Website
  /website/sync-services-from-booking:
    post:
      description: Scrapes services from a booking platform URL (fast — skips media, reviews, etc.), categorizes them into website-friendly groups via LLM, replaces all existing services for the entity, and returns the full categories → services → variations tree with prices, durations, and all details.
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Categories with nested services returned successfully
        '400':
          description: Invalid booking link or unrecognized platform
        '404':
          description: No services found or entity not found
      summary: Sync services from a booking platform into the database
      tags:
      - Website
  /website/booking-link-data:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get business details from booking link
      tags:
      - Website
  /website/get-new-website-id:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Get or create new website ID for location
      tags:
      - Website
  /website/add-booking-link:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Add booking link and trigger website creation
      tags:
      - Website
  /website/onboarding-creation-status:
    get:
      description: 'Returns status for the two onboarding flows tracked in website.processes: WEBSITE_CREATION_ONBOARDING (Orca user.onboarded path) and WEBSITE_CREATION_ONBOARDING_WITH_BOOKING_LINK (add-booking-link path). Either websiteId or locationEntityId must be provided.'
      operationId: t_value
      parameters:
      - name: locationEntityId
        required: false
        in: query
        schema:
          format: uuid
          type: string
      - name: websiteId
        required: false
        in: query
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: ''
      summary: Get onboarding website-creation status
      tags:
      - Website
  /website/generate-website:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Generate website for a location
      tags:
      - Website
  /website/generate-subdomains:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Generate subdomain suggestions
      tags:
      - Website
  /website/platforms:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get available booking platforms
      tags:
      - Website
  /website/get-website-id/{locationEntityId}:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get website ID by location entity ID
      tags:
      - Website
  /website/{websiteId}:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get website data by ID
      tags:
      - Website
  /website/{websiteId}/v2:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get website data V2 with sections
      tags:
      - Website
  /website/{websiteId}/v2/pages/{pageId}/sections:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Hydrate a single page's sections (metadata-mode companion)
      tags:
      - Website
  /website/{websiteId}/check-website-live-on-gbp:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Check if website is live on GBP
      tags:
      - Website
  /website/{websiteId}/editor/publish:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Batch publish editor changes for website sections
      tags:
      - Website
  /website/{websiteId}/ctas:
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Create a call-to-action for website
      tags:
      - Website
    get:
      operationId: t_value
      parameters:
      - name: parentType
        required: true
        in: query
        description: Type of the parent entity (e.g., SECTION)
        schema:
          type: string
      - name: parentId
        required: true
        in: query
        description: ID of the parent entity
        schema:
          type: string
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: CTAs retrieved successfully
        '400':
          description: Missing required parameters
      summary: Get CTAs filtered by parent entity
      tags:
      - Website
  /website/{websiteId}/ctas/{ctaId}:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get a CTA by ID
      tags:
      - Website
    put:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Update a CTA by ID
      tags:
      - Website
    delete:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Delete a CTA by ID
      tags:
      - Website
  /website/{websiteId}/working-hours:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get website working hours
      tags:
      - Website
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Update website working hours
      tags:
      - Website
  /website/{websiteId}/reviews:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get website reviews
      tags:
      - Website
  /website/{parentId}/{parentType}/attributes:
    get:
      description: Retrieve attributes for a specific parent entity (website, component, etc.)
      operationId: t_value
      parameters:
      - name: attributeName
        required: false
        in: query
        description: Filter by specific attribute name
        schema:
          example: primaryColor
          type: string
      - name: isActive
        required: false
        in: query
        description: Filter by active status
        schema:
          example: true
          type: boolean
      - name: parentType
        required: true
        in: path
        description: Parent entity type
        schema:
          example: website
      - name: parentId
        required: true
        in: path
        description: Parent entity ID
        schema:
          example: website_123
      responses:
        '200':
          description: Successfully retrieved attributes
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/e'
        '400':
          description: Invalid request parameters
      summary: Get website attributes
      tags:
      - Website
  /website/{parentId}/{parentType}/attributes/{attributeId}:
    patch:
      description: Update a specific attribute by ID
      operationId: t_value
      parameters:
      - name: attributeId
        required: true
        in: path
        description: Attribute ID to update
        schema:
          example: 1
      - name: parentType
        required: true
        in: path
        description: Parent entity type
        schema:
          example: website
      - name: parentId
        required: true
        in: path
        description: Parent entity ID
        schema:
          example: website_123
      requestBody:
        required: true
        description: Attribute data to update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Successfully updated attribute
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '400':
          description: Invalid request data
        '404':
          description: Attribute not found
      summary: Update website attribute
      tags:
      - Website
    delete:
      description: Delete a specific attribute by ID
      operationId: t_value
      parameters:
      - name: attributeId
        required: true
        in: path
        description: Attribute ID to delete
        schema:
          example: 1
      - name: parentType
        required: true
        in: path
        description: Parent entity type
        schema:
          example: website
      - name: parentId
        required: true
        in: path
        description: Parent entity ID
        schema:
          example: website_123
      responses:
        '200':
          description: Successfully deleted attribute
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Attribute deleted successfully
        '400':
          description: Invalid request parameters
        '404':
          description: Attribute not found
      summary: Delete website attribute
      tags:
      - Website
  /website/{websiteId}/themes:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get all themes for a website
      tags:
      - Website
    post:
      operationId: t_value
      parameters: []
      responses:
        '201':
          description: ''
      summary: Create a theme for website
      tags:
      - Website
  /website/{websiteId}/themes/v2:
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get website themes V2
      tags:
      - Website
  /website/{websiteId}/themes/{themeId}:
    get:
      operationId: t_value
      parameters:
      - name: themeId
        required: true
        in: path
        description: ID of the theme to delete
        schema: {}
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: ''
      summary: Delete a theme for a website
      tags:
      - Website
    patch:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Update a website theme
      tags:
      - Website
    delete:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Delete a website theme
      tags:
      - Website
  /website/themes/{themeId}:
    delete:
      operationId: t_value
      parameters:
      - name: themeId
        required: true
        in: path
        description: ID of the theme to delete
        schema: {}
      responses:
        '200':
          description: ''
      summary: Delete a global theme by ID
      tags:
      - Website
    get:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Get theme by ID
      tags:
      - Website
  /website/{websiteId}/pages:
    get:
      operationId: t_value
      parameters:
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: ''
      summary: Get website pages mapping
      tags:
      - Website
    post:
      operationId: t_value
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Page created
      summary: Create a website page
      tags:
      - Website
  /website/{websiteId}/website-pages:
    get:
      operationId: t_value
      parameters:
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: ''
      summary: List website_pages rows for a website (per-row name/path/metadata)
      tags:
      - Website
  /website/{websiteId}/pages/{pageId}:
    get:
      operationId: t_value
      parameters:
      - name: pageId
        required: true
        in: path
        description: ID of the page
        schema: {}
      - name: websiteId
        required: true
        in: path
        description: ID of the website
        schema: {}
      responses:
        '200':
          description: Page retrieved
        '404':
          description: Page not found
      summary: Get website page by page ID
      tags:
      - Website
    patch:
      operationId: t_value
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Page updated
      summary: Update a website page
      tags:
      - Website
  /website/{websiteId}/pages/{id}:
    delete:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        description: ID of website-page mapping
        schema

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