AI Demos Utilities API

The utilities API from AI Demos — 11 operation(s) for utilities.

Operations 11

POST /v1/seo Submit Seo #
POST /v1/seo/queries Submit Queries #
POST /v1/seo/citation Submit Citation #
POST /v1/cta Submit Cta #
POST /v1/classify-category Submit Classify Category #
POST /v1/enrich Submit Enrich #
POST /v1/catalog/reconcile Submit Catalog Reconcile #
POST /v1/features/reconcile Submit Features Reconcile #
POST /v1/pricing/discover Submit Pricing Discover #
POST /v1/pricing/refresh Submit Pricing Refresh #
POST /v1/pricing/sweep Submit Pricing Sweep #

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-utilities-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-utilities-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Aidemos Com Utilities API
  version: 0.1.0
  description: 'Operations tagged utilities 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: Utilities
paths:
  /v1/seo:
    post:
      tags:
      - Utilities
      summary: Submit Seo
      description: Generate slug + SEO title + meta description (each with reasoning) + 3–6 keywords.
      operationId: submit_seo_v1_seo_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/SeoRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/seo/queries:
    post:
      tags:
      - Utilities
      summary: Submit Queries
      description: Generate up to `count` user-style test queries for SEO diagnostics.
      operationId: submit_queries_v1_seo_queries_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/QueriesRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/seo/citation:
    post:
      tags:
      - Utilities
      summary: Submit Citation
      description: One provider citation run → cited URLs (poll the job). Multi-provider.
      operationId: submit_citation_v1_seo_citation_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/CitationRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/cta:
    post:
      tags:
      - Utilities
      summary: Submit Cta
      description: Generate the per-topic custom-solution phrase (the only LLM-generated CTA field).
      operationId: submit_cta_v1_cta_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/CtaRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/classify-category:
    post:
      tags:
      - Utilities
      summary: Submit Classify Category
      description: Classify a tool into the live taxonomy (category + subcategory, enum-locked) or flag a gap.
      operationId: submit_classify_category_v1_classify_category_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/ClassifyCategoryRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/enrich:
    post:
      tags:
      - Utilities
      summary: Submit Enrich
      description: Propose category + subCategory + personas (+ optional SEO) for a page, enum-locked to taxonomy.
      operationId: submit_enrich_v1_enrich_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/EnrichRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/catalog/reconcile:
    post:
      tags:
      - Utilities
      summary: Submit Catalog Reconcile
      description: Decide system-owned tool-page identity (6 actions). Candidate lookup stays in Payload (request body).
      operationId: submit_catalog_reconcile_v1_catalog_reconcile_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/CatalogReconcileRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/features/reconcile:
    post:
      tags:
      - Utilities
      summary: Submit Features Reconcile
      description: Canonicalize one existing tool page's Feature Breakdown (capabilities, not per-input/criterion cards).
      operationId: submit_features_reconcile_v1_features_reconcile_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/FeaturesReconcileRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pricing/discover:
    post:
      tags:
      - Utilities
      summary: Submit Pricing Discover
      description: Find + store a tool's pricing-page URL (one-time; reused by refresh).
      operationId: submit_pricing_discover_v1_pricing_discover_post
      parameters:
      - name: slug
        in: query
        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:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pricing/refresh:
    post:
      tags:
      - Utilities
      summary: Submit Pricing Refresh
      description: Scrape → parse → diff → apply(minor)/flag(major) one tool's pricing (#86).
      operationId: submit_pricing_refresh_v1_pricing_refresh_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/PricingRefreshRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/pricing/sweep:
    post:
      tags:
      - Utilities
      summary: Submit Pricing Sweep
      description: Refresh every tool with a stored pricing_url (weekly cadence).
      operationId: submit_pricing_sweep_v1_pricing_sweep_post
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 200
          title: Limit
      - 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:
                $ref: '#/components/schemas/SubmitResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    CtaRequest:
      properties:
        title:
          type: string
          title: Title
          description: Page title / tool name — the primary topic signal
        page_type:
          type: string
          enum:
          - tool
          - ranking
          - use-case
          - compare
          - list
          title: Page Type
          default: tool
        category:
          anyOf:
          - type: string
          - type: 'null'
          title: Category
        summary:
          anyOf:
          - type: string
          - type: 'null'
          title: Summary
          description: Short summary / tagline (supporting signal)
      type: object
      required:
      - title
      title: CtaRequest
    SeoExisting:
      properties:
        slug:
          anyOf:
          - type: string
          - type: 'null'
          title: Slug
        seoTitle:
          anyOf:
          - type: string
          - type: 'null'
          title: Seotitle
        seoDescription:
          anyOf:
          - type: string
          - type: 'null'
          title: Seodescription
      type: object
      title: SeoExisting
    SeoContext:
      properties:
        category:
          anyOf:
          - type: string
          - type: 'null'
          title: Category
        monthYear:
          anyOf:
          - type: string
          - type: 'null'
          title: Monthyear
      type: object
      title: SeoContext
    FeaturesReconcileRequest:
      properties:
        slug:
          type: string
          title: Slug
          description: Tool page slug in sip.page_content
        apply:
          type: boolean
          title: Apply
          description: False = dry-run proposal; True = update canonical.features + audit log
          default: false
      type: object
      required:
      - slug
      title: FeaturesReconcileRequest
    EnrichRequest:
      properties:
        page:
          additionalProperties: true
          type: object
          title: Page
          description: 'Page fields: title (req) + pageType/heading/existingSeoDescription/fields/current'
        taxonomy:
          $ref: '#/components/schemas/EnrichTaxonomy'
          description: Live taxonomy (Payload sends it)
      type: object
      required:
      - page
      - taxonomy
      title: EnrichRequest
    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
    PricingRefreshRequest:
      properties:
        slug:
          type: string
          title: Slug
          description: Tool page slug
        apply:
          type: boolean
          title: Apply
          description: True = write minor changes / flag major; False = dry-run diff
          default: true
      type: object
      required:
      - slug
      title: PricingRefreshRequest
    SeoRequest:
      properties:
        page_type:
          type: string
          enum:
          - ranking
          - use-case
          - tool
          title: Page Type
          default: tool
        title:
          type: string
          title: Title
          description: Page title / use-case / tool name — the primary signal
        content:
          anyOf:
          - type: string
          - type: 'null'
          title: Content
          description: Page content (supporting signal; trimmed)
        existing:
          anyOf:
          - $ref: '#/components/schemas/SeoExisting'
          - type: 'null'
          description: Existing SEO on the page (may be changed)
        feedback:
          anyOf:
          - type: string
          - type: 'null'
          title: Feedback
          description: Admin feedback to fold into a regeneration
        context:
          anyOf:
          - $ref: '#/components/schemas/SeoContext'
          - type: 'null'
          description: category, monthYear
      type: object
      required:
      - title
      title: SeoRequest
    CatalogReconcileRequest:
      properties:
        candidate:
          additionalProperties: true
          type: object
          title: Candidate
          description: 'Candidate tool: name (req) + slug/website/heading/sourceTaskId/sourceNodeId'
        existing_candidates:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Existing Candidates
          description: Similar existing catalog pages (Payload computes from its DB). Empty -> standalone, no LLM call.
        official_evidence:
          items:
            type: string
          type: array
          title: Official Evidence
          description: Official-website evidence strings
      type: object
      required:
      - candidate
      title: CatalogReconcileRequest
    SubmitResponse:
      properties:
        job_run_id:
          type: string
          title: Job Run Id
        status:
          type: string
          title: Status
          default: queued
      type: object
      required:
      - job_run_id
      title: SubmitResponse
    EnrichTaxonomy:
      properties:
        category_slugs:
          items:
            type: string
          type: array
          title: Category Slugs
        sub_slugs:
          items:
            type: string
          type: array
          title: Sub Slugs
        persona_slugs:
          items:
            type: string
          type: array
          title: Persona Slugs
        prompt_block:
          type: string
          title: Prompt Block
          description: Rendered taxonomy block (Payload's renderTaxonomyForPrompt)
          default: ''
      type: object
      title: EnrichTaxonomy
    QueriesRequest:
      properties:
        title:
          type: string
          title: Title
          description: Page title
        style:
          type: string
          enum:
          - keyword
          - question
          title: Style
          default: keyword
        count:
          type: integer
          maximum: 10.0
          minimum: 1.0
          title: Count
          default: 3
        topic:
          anyOf:
          - type: string
          - type: 'null'
          title: Topic
      type: object
      required:
      - title
      title: QueriesRequest
    Taxonomy:
      properties:
        categories:
          items:
            type: string
          type: array
          title: Categories
          description: Allowed category slugs
        subs:
          items:
            type: string
          type: array
          title: Subs
          description: Allowed subcategory slugs
        prompt_block:
          type: string
          title: Prompt Block
          description: The 'category → subcategories' prompt block
          default: ''
      type: object
      title: Taxonomy
    ClassifyCategoryRequest:
      properties:
        tool:
          additionalProperties: true
          type: object
          title: Tool
          description: 'Tool fields: name (req) + heading/website/seo/ourTake/featureBreakdown/tags/content_type'
        taxonomy:
          $ref: '#/components/schemas/Taxonomy'
          description: The live taxonomy (Payload sends it — keeps this layer stateless)
      type: object
      required:
      - tool
      - taxonomy
      title: ClassifyCategoryRequest
    CitationRequest:
      properties:
        prompt:
          type: string
          title: Prompt
          description: The full citation-diagnostic prompt (Payload builds it).
        provider:
          type: string
          title: Provider
          description: openai | claude | gemini | perplexity
          default: openai
        model:
          anyOf:
          - type: string
          - type: 'null'
          title: Model
          description: Provider model override.
      type: object
      required:
      - prompt
      title: CitationRequest
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
x-refined-from:
- aidemos-com-openapi.json
- mcp-openapi.json