> ## Documentation Index
> Fetch the complete documentation index at: https://docs.querying.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Prompt Research

> 排入一个任务，按搜索需求整理人们就某个主题向 AI 助手提出的问题。



## OpenAPI

````yaml post /v1/prompt-research
openapi: 3.1.0
info:
  title: querying.ai
  description: >-
    One API for every AI answer engine. Every task is asynchronous: submit, then
    collect the result via webhook or polling.
  version: 1.0.0
servers:
  - url: https://api.querying.ai
    description: Production
security:
  - bearerAuth: []
paths:
  /v1/prompt-research:
    post:
      tags:
        - Research
      summary: Research prompts by search demand
      description: >-
        Queues a task that turns a topic into the questions people ask AI
        assistants about it, ranked by the monthly search demand behind each
        one, and picks the set a GEO monitor should track (monitorSet), with the
        demand for competitor brands kept separately. South Korea (KR) and the
        United States (US). 12 credits per completed task; a failed task
        releases its hold. The task usually completes in 30-60 seconds; poll
        /v1/async/task/{id} or use a webhook. A task fails with NO_SEARCH_DEMAND
        when no search demand is found for the seed or anything related to it,
        and with NO_RELATED_SEARCHES when only the seed itself is searched.
      operationId: createPromptResearch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromptResearchRequest'
            examples:
              seed:
                summary: A seed topic
                value:
                  seed: 선크림
                  country: KR
                  limit: 20
                  brand: MyBrand
              described:
                summary: With your brand described
                value:
                  seed: 선크림
                  country: KR
                  monitorSize: 12
                  monitorEngines:
                    - CHATGPT
                    - PERPLEXITY
                  brand: MyBrand
                  brandAliases:
                    - 마이브랜드
                  brandDescription: Gentle mineral sunscreens for sensitive and dry skin
      responses:
        '200':
          description: >-
            Queued; poll /v1/async/task/{id}. Its response follows
            PromptResearchResult.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncResponse'
              examples:
                queued:
                  summary: Queued prompt research
                  value:
                    success: true
                    task:
                      id: 4299622a-1321-43a9-b780-809a0116f1b5
                      taskType: PROMPT_RESEARCH
                      status: QUEUED
                      priority: 1
                      createdAt: '2026-09-28T13:03:26.092Z'
                    credits:
                      creditsToCharge: 0
                      creditsCharged: 0
        '400':
          description: 'Request rejected: the body is not valid JSON.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Request rejected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Not enough credits.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: The API key is not allowed to use PROMPT_RESEARCH.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: A task with this idempotencyKey already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '413':
          description: Request rejected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: >-
            VALIDATION_ERROR for a field out of range or for brandAliases or
            brandDescription without brand, or REGION_UNSUPPORTED when country
            is not KR or US.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Request rejected; retry after Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Request rejected; retry after Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    PromptResearchRequest:
      type: object
      required:
        - seed
        - country
      additionalProperties: false
      properties:
        seed:
          type: string
          minLength: 1
          maxLength: 30
          description: >-
            The topic: letters, digits and single spaces, such as 선크림. A short
            product or category term works best; a sentence finds nothing.
        country:
          type: string
          enum:
            - KR
            - US
          description: >-
            Market: KR (South Korea) or US (United States). Any other value is a
            422 REGION_UNSUPPORTED.
        limit:
          type: integer
          minimum: 1
          maximum: 50
          default: 20
          description: Prompts to return.
        exclude:
          type: array
          maxItems: 20
          items:
            type: string
            minLength: 1
            maxLength: 30
          description: >-
            Terms to leave out, such as a subtopic you do not want. A prompt
            containing one is left out. Put your own brand in brand.
        monitorSize:
          type: integer
          minimum: 1
          maximum: 50
          default: 20
          description: Prompts in monitorSet.
        monitorEngines:
          type: array
          minItems: 1
          maxItems: 12
          items:
            $ref: '#/components/schemas/MonitorEngine'
          description: >-
            The engines your monitor will run. A monitor runs at most 200 prompt
            × engine tasks at a time, so monitorSize × the number of engines
            above 200 is a 422 VALIDATION_ERROR on monitorSize. It does not
            change the result.
        brand:
          type: string
          minLength: 1
          maxLength: 80
          description: >-
            Your brand, with at least two letters or digits; punctuation is
            allowed. Prompts containing it are left out, as with exclude.
        brandAliases:
          type: array
          maxItems: 10
          items:
            type: string
            minLength: 1
            maxLength: 80
          description: >-
            Other names or spellings of your brand, left out the same way.
            Requires brand.
        brandDescription:
          type: string
          maxLength: 500
          description: >-
            What your brand sells and to whom. Requires brand. Adds fit to every
            prompt, which monitorSet weighs.
        idempotencyKey:
          type: string
          description: Optional. Deduplicates submissions; a duplicate is a 409.
        webhook:
          type: object
          description: Optional. Omit to collect the result by polling instead.
          required:
            - url
          properties:
            url:
              type: string
              format: uri
              description: Receives a POST when the task reaches a terminal state.
    AsyncResponse:
      type: object
      required:
        - success
        - task
        - credits
      properties:
        success:
          type: boolean
          const: true
        task:
          $ref: '#/components/schemas/TaskMeta'
        credits:
          $ref: '#/components/schemas/Credits'
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          $ref: '#/components/schemas/ErrorDetail'
    MonitorEngine:
      type: string
      description: >-
        An engine a monitor can schedule: the prompt surfaces sold to customers
        plus the deprecated NAVER alias. GOOGLE_AIO and GOOGLE_AIMODE are
        accepted as input aliases and echoed as GOOGLE and AIMODE.
        SOURCE_INFLUENCE is an analysis task, not a prompt surface, and cannot
        be scheduled on a monitor.
      enum:
        - CHATGPT
        - GEMINI
        - PERPLEXITY
        - GOOGLE
        - AIMODE
        - NAVER_AI_BRIEF
        - NAVER_AI_TAB
        - NAVER
    TaskMeta:
      type: object
      required:
        - id
        - taskType
        - status
        - priority
        - createdAt
      properties:
        id:
          type: string
          format: uuid
        taskType:
          $ref: '#/components/schemas/TaskType'
        status:
          $ref: '#/components/schemas/TaskStatus'
        priority:
          type: integer
        createdAt:
          type: string
          format: date-time
        idempotencyKey:
          type: string
          description: >-
            Echoed back verbatim. **Omitted** — not null — when the caller
            supplied none.
    Credits:
      type: object
      description: >-
        Submit and polling envelopes preserve zero values. With billing enabled,
        account settlement uses the engine pricing policy; webhooks report the
        persisted charge. SOURCE_INFLUENCE is metered by actual usage.
      properties:
        creditsToCharge:
          type: integer
        creditsCharged:
          type:
            - integer
            - 'null'
    ErrorDetail:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: Stable, safe to branch on.
          enum:
            - MISSING_API_KEY
            - VALIDATION_ERROR
            - REGION_UNAVAILABLE
            - RESOURCE_ALREADY_EXISTS
            - PAYLOAD_TOO_LARGE
            - RESOURCE_NOT_FOUND
            - ENQUEUE_ERROR
        message:
          type: string
          description: For humans. May change.
        details:
          description: >-
            Field-level context. An array of `{field, message}` on
            `VALIDATION_ERROR`; an object on `RESOURCE_NOT_FOUND` (`{id}`) and
            `REGION_UNAVAILABLE`. Omitted when there is nothing to add.
          oneOf:
            - type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                  message:
                    type: string
            - type: object
              additionalProperties: true
        timestamp:
          type: string
          format: date-time
    TaskType:
      type: string
      description: >-
        The engine to query. `NAVER` is a deprecated alias for `NAVER_AI_BRIEF`.
        GOOGLE_AIO and GOOGLE_AIMODE are the unified names for GOOGLE and
        AIMODE; both spellings are accepted and responses echo the canonical
        GOOGLE / AIMODE. `GOOGLE_SERP` returns the Google results page without
        the AI Overview; `payload.page` selects pages 1-10. `NAVER_SERP` returns
        Naver's web results, 15 per page (`payload.page` 1-10), and with
        `payload.action` `page` reads one naver.com page by `payload.url`.
        `REDDIT` searches Reddit posts by `query` (optionally within one
        `subreddit`), reads one post with its first page of comments by `url`,
        or lists posts with `action` `feed` or `user_posts`. `BING` and
        `BING_COPILOT_SEARCH` are accepted as earlier spellings of
        `BING_SEARCH`, and `COPILOT` as the earlier spelling of `BING_COPILOT`;
        responses echo the new names. SOURCE_INFLUENCE and PROMPT_RESEARCH tasks
        are created through their own endpoints (POST /v1/source-influence, POST
        /v1/prompt-research); they appear here because their tasks report them.
      enum:
        - CHATGPT
        - PERPLEXITY
        - GEMINI
        - AIMODE
        - GOOGLE_AIMODE
        - GOOGLE
        - GOOGLE_AIO
        - GOOGLE_SERP
        - NAVER_AI_BRIEF
        - NAVER_AI_TAB
        - NAVER
        - NAVER_SERP
        - BING_SEARCH
        - BING
        - BING_COPILOT
        - COPILOT
        - REDDIT
        - SOURCE_INFLUENCE
        - CITATION_ATTRIBUTION
        - PROMPT_RESEARCH
    TaskStatus:
      type: string
      description: >-
        `PROCESSING` means a worker holds the task. `COMPLETED` and `FAILED` are
        terminal.
      enum:
        - QUEUED
        - PROCESSING
        - COMPLETED
        - FAILED
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Your API key, sent as `Authorization: Bearer <key>`.'

````