AI Demos Page Content API

The page-content API from AI Demos — 8 operation(s) for page-content.

Operations 8

GET /v1/pages/{page_type}/editor-index Editor Index #
GET /v1/pages/{page_type}/{slug}/edit Get Page Layers #
PUT /v1/pages/{page_type}/{slug}/override Put Override #
POST /v1/pages/{page_type}/{slug}/publish Publish Page #
POST /v1/pages/{page_type}/{slug}/unpublish Unpublish Page #
POST /v1/pages/{page_type}/{slug}/rename Rename Page Endpoint #
POST /v1/catalog/apply Catalog Apply #
POST /v1/pages/{page_type}/resync/{slug} Resync From Payload #

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/aidemos-com:aidemos-com-page-content-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

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

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

aidemos-com-page-content-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Aidemos Com Page Content API
  version: 0.1.0
  description: 'Operations tagged page-content across 2 of this provider''s published API definitions: aidemos-com-openapi.json, mcp-openapi.json. Each path carries the servers of the definition it was published in.'
tags:
- name: page-content
paths:
  /v1/pages/{page_type}/editor-index:
    get:
      tags:
      - page-content
      summary: Editor Index
      description: 'Console editor list: ALL sip.page_content rows for a page_type — drafts included — so an

        unpublished page (e.g. a generated ranking awaiting publish) is findable in the Content editor.

        The PUBLIC list (site_read.list_page_content) stays published-only so drafts never leak into the

        sitemap; this route lives on the service-token/session-authed router instead. Registered before

        site_read''s dynamic /v1/pages/{page_type}/{slug}, so the literal segment wins the route match.

        Returns title so the console can search by the human name, and status to badge drafts.'
      operationId: editor_index_v1_pages__page_type__editor_index_get
      parameters:
      - name: page_type
        in: path
        required: true
        schema:
          type: string
          title: Page Type
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 500
          title: Limit
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          default: 0
          title: Offset
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Editor Index V1 Pages  Page Type  Editor Index Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pages/{page_type}/{slug}/edit:
    get:
      tags:
      - page-content
      summary: Get Page Layers
      description: 'Editor read: { canonical, override, effective, meta, pending_draft, review_flags } — so the

        admin can show the AI baseline, the human deltas, the merged result (+ per-field revert), AND a

        pointer to a newer unpublished regen draft when the live page is published (86bata8ry).'
      operationId: get_page_layers_v1_pages__page_type___slug__edit_get
      parameters:
      - name: page_type
        in: path
        required: true
        schema:
          type: string
          title: Page Type
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Get Page Layers V1 Pages  Page Type   Slug  Edit Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pages/{page_type}/{slug}/override:
    put:
      tags:
      - page-content
      summary: Put Override
      description: 'Save the human override layer (replaces the stored override with the provided delta map). The

        canonical baseline is untouched, so a later re-migration/regeneration never loses these edits.

        Returns the new effective content.'
      operationId: put_override_v1_pages__page_type___slug__override_put
      parameters:
      - name: page_type
        in: path
        required: true
        schema:
          type: string
          title: Page Type
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OverridePut'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Put Override V1 Pages  Page Type   Slug  Override Put
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pages/{page_type}/{slug}/publish:
    post:
      tags:
      - page-content
      summary: Publish Page
      description: 'Publish a page in sip: status→''published'', stamp published_at (first time), then best-effort bust

        the site cache. This is the sip-native publish action (W2/C2) — the website''s public read serves only

        published rows, so this is what makes a draft/generated page go live WITHOUT Payload. 404 if no row.


        SEO GATE (D4 2026-07-03, Pradip): a page with no SEO details (effective seo.title + seo.description,

        from the LLM SEO step or a human override) MUST NOT go live — publish returns 409. No force bypass:

        the remedy is generating SEO (generate.seo / console) or an override, never publishing without it.'
      operationId: publish_page_v1_pages__page_type___slug__publish_post
      parameters:
      - name: page_type
        in: path
        required: true
        schema:
          type: string
          title: Page Type
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Publish Page V1 Pages  Page Type   Slug  Publish Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pages/{page_type}/{slug}/unpublish:
    post:
      tags:
      - page-content
      summary: Unpublish Page
      description: 'Take a page out of the live read set (status→''draft'') and bust the cache so the site drops it.

        404 if no row. published_at is retained for audit.'
      operationId: unpublish_page_v1_pages__page_type___slug__unpublish_post
      parameters:
      - name: page_type
        in: path
        required: true
        schema:
          type: string
          title: Page Type
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Unpublish Page V1 Pages  Page Type   Slug  Unpublish Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pages/{page_type}/{slug}/rename:
    post:
      tags:
      - page-content
      summary: Rename Page Endpoint
      description: '#495 — move a page to a durable slug, with a 301 and every slug-addressed row carried along.


        The remedy the `SlugNotDurable` mint refusal was missing: until this existed, an operator told

        "that slug names a model, not a product" had no way to act on it, because `catalog_apply`''s

        `fold` only merges into a page that already exists (a gate ships with its refusal surface —

        RC-0108).


        The page is MOVED, not republished: `published_at`, the `tool_id` evidence binding, upvotes,

        researcher credit and the draft chain all survive, because it is the same page under a name that

        will not rot. `dry_run` reports the blast radius without writing.'
      operationId: rename_page_endpoint_v1_pages__page_type___slug__rename_post
      parameters:
      - name: page_type
        in: path
        required: true
        schema:
          type: string
          title: Page Type
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RenameBody'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Rename Page Endpoint V1 Pages  Page Type   Slug  Rename Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/catalog/apply:
    post:
      tags:
      - page-content
      summary: Catalog Apply
      description: '#55 apply workflow (the piece never finished in TS): act on an identity decision against the

        live catalog. `fold` → sip.redirects row + unpublish the source page (public URL 301s via the

        website middleware; content accumulation happens through the normal regen/merge path on the

        target). `subproduct` → partOf/childPages cross-links on the CANONICAL layer (overrides

        untouched). Both idempotent; every apply is auditable via redirects.reason / canonical logs.'
      operationId: catalog_apply_v1_catalog_apply_post
      parameters:
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CatalogApply'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Catalog Apply V1 Catalog Apply Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pages/{page_type}/resync/{slug}:
    post:
      tags:
      - page-content
      summary: Resync From Payload
      description: 'Compatibility tombstone: the decommissioned CMS is never contacted or used to overwrite SIP.'
      operationId: resync_from_payload_v1_pages__page_type__resync__slug__post
      parameters:
      - name: page_type
        in: path
        required: true
        schema:
          type: string
          title: Page Type
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: x-api-key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Resync From Payload V1 Pages  Page Type  Resync  Slug  Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    RenameBody:
      properties:
        to_slug:
          type: string
          title: To Slug
        reason:
          type: string
          title: Reason
          default: ''
        dry_run:
          type: boolean
          title: Dry Run
          default: false
      type: object
      required:
      - to_slug
      title: RenameBody
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    CatalogApply:
      properties:
        action:
          type: string
          title: Action
        source_slug:
          type: string
          title: Source Slug
        target_slug:
          type: string
          title: Target Slug
        reason:
          type: string
          title: Reason
          default: ''
      type: object
      required:
      - action
      - source_slug
      - target_slug
      title: CatalogApply
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    OverridePut:
      properties:
        override:
          additionalProperties: true
          type: object
          title: Override
      type: object
      required:
      - override
      title: OverridePut
x-refined-from:
- aidemos-com-openapi.json
- mcp-openapi.json