> ## 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.

# Créer un Place Lookup

> Interrogez les moteurs d’IA sur un établissement. Chaque question est mise en file comme une tâche ordinaire.



## OpenAPI

````yaml POST /v1/place-lookup
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/place-lookup:
    post:
      tags:
        - Research
      summary: Create a place lookup
      description: >-
        Ask AI engines about one store. Each engine gets two questions, and each
        question is an ordinary task of that engine under the key {lookup
        id}:{engine}:{ask}, so holds, plan concurrency and the 24-hour window
        are those of single tasks. Engines: CHATGPT, GEMINI, GOOGLE,
        BING_COPILOT, and NAVER_AI_TAB in KR. Read the lookup with GET
        /v1/place-lookup/{id}; a lookup sends no webhook.


        A lookup of the country's default engines costs 10 credits: 1 credit for
        each of the 10 questions in KR and 1.25 for each of the 8 elsewhere. A
        lookup that names fewer engines pays for the questions it sends, and a
        failed question costs 0.


        A question the account's plan or the engine's queue has no room for yet
        waits: it answers status PENDING without a task and starts on its own as
        room frees up, within a minute or on the next GET, so one request runs
        the whole lookup. A waiting question's price is held when it starts; if
        the key that sent the lookup is revoked or expires first, the question
        ends as FAILED with API_KEY_INACTIVE and costs 0. A question refused for
        good (balance, key scope) is reported in tasks[] with success false.
        When every question is refused, the first refusal is the response and
        nothing is created. The same request under the same idempotencyKey
        returns the existing tasks and sends the questions that have no task
        yet; the same id with another store, country or engine list returns 409.
      operationId: createPlaceLookup
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaceLookupRequest'
            example:
              place:
                name: Canlis
                address: 2576 Aurora Ave N, Seattle, WA 98109
                location:
                  latitude: 47.6430534
                  longitude: -122.3467361
                phone: (206) 283-3313
                website: https://canlis.com/
              country: US
              idempotencyKey: canlis-2026-10
      responses:
        '200':
          description: >-
            Lookup created, or resent under its id. Each question's outcome is
            in tasks[]: its task, status PENDING while it waits for room, or its
            error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaceLookupSubmitResult'
              example:
                success: true
                lookup:
                  id: canlis-2026-10
                tasks:
                  - engine: CHATGPT
                    ask: 1
                    success: true
                    task:
                      id: 9d02deef-4c1c-47db-8d86-e1a71f8b00e8
                      taskType: CHATGPT
                      status: QUEUED
                      priority: 1
                      createdAt: '2026-10-20T09:00:00.000Z'
                      idempotencyKey: canlis-2026-10:CHATGPT:1
                  - engine: CHATGPT
                    ask: 2
                    success: true
                    task:
                      id: 91505c8f-d2d6-4bd3-8623-a8706249f1e1
                      taskType: CHATGPT
                      status: QUEUED
                      priority: 1
                      createdAt: '2026-10-20T09:00:00.000Z'
                      idempotencyKey: canlis-2026-10:CHATGPT:2
        '400':
          description: >-
            Request rejected: the body is not valid JSON, a field is missing or
            invalid, an unknown field or webhook was sent, or NAVER_AI_TAB was
            asked outside KR. details names the field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          description: 'Every question was refused: not enough credits. Nothing was created.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Every question was refused: the API key is not allowed to use the
            engines (KEY_SCOPE_DENIED). Nothing was created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: >-
            The idempotencyKey names a lookup of another store, country or
            engine list. Nothing was created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '413':
          description: Request rejected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: >-
            Every question was refused: the engines do not serve the country
            (REGION_UNSUPPORTED). Nothing was created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: >-
            Every question was refused by a sub-account's credit limit
            (SUB_ACCOUNT_CREDIT_LIMIT); retry after Retry-After. Nothing was
            created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: >-
            Task storage is temporarily unavailable; retry after Retry-After.
            Nothing was created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    PlaceLookupRequest:
      type: object
      additionalProperties: false
      required:
        - place
        - country
      properties:
        place:
          $ref: '#/components/schemas/PlaceLookupPlace'
        country:
          type: string
          description: The store's country, an ISO 3166-1 alpha-2 code such as US or KR.
        engines:
          type: array
          items:
            $ref: '#/components/schemas/PlaceLookupEngine'
          minItems: 1
          uniqueItems: true
          description: >-
            Engines to ask. Default: all five in KR, CHATGPT, GEMINI, GOOGLE and
            BING_COPILOT elsewhere.
        idempotencyKey:
          type: string
          minLength: 1
          maxLength: 200
          description: >-
            Names the lookup and becomes lookup.id. Without it the server mints
            a UUID. The same request under it adds only the missing questions.
        priority:
          type: integer
          minimum: 1
          maximum: 10
          default: 1
          description: >-
            Set on every task. Out-of-range values are clamped. It does not
            guarantee execution order.
    PlaceLookupSubmitResult:
      type: object
      properties:
        success:
          type: boolean
        lookup:
          type: object
          properties:
            id:
              type: string
        tasks:
          type: array
          description: Two entries per engine, in engine order.
          items:
            type: object
            properties:
              engine:
                $ref: '#/components/schemas/PlaceLookupEngine'
              ask:
                type: integer
                enum:
                  - 1
                  - 2
                description: Which of the engine's two questions.
              success:
                type: boolean
              task:
                $ref: '#/components/schemas/TaskMeta'
              status:
                type: string
                enum:
                  - PENDING
                description: >-
                  Present while the question waits for room; the entry then has
                  no task. It starts on its own as room frees up.
              error:
                $ref: '#/components/schemas/ErrorDetail'
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          $ref: '#/components/schemas/ErrorDetail'
    PlaceLookupPlace:
      type: object
      additionalProperties: false
      required:
        - name
      description: The store and its official details. address or location is required.
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 200
          description: The store's name. For a chain, include the branch.
        address:
          type: string
          maxLength: 500
          description: The street address.
        location:
          $ref: '#/components/schemas/LocationPoint'
          description: >-
            The store's pin. With it, each record carries distanceMeters and a
            pin more than 300 m away is reported as location_mismatch.
        phone:
          type: string
          maxLength: 50
          description: The official phone number, in any format.
        website:
          type: string
          format: uri
          description: The official website, an http or https URL.
        googlePlaceId:
          type: string
          description: The store's Google Place ID. A record with this ID is the store.
        naverPlaceId:
          type: string
          description: >-
            The store's Naver Place ID, or its map.naver.com or place.naver.com
            page.
        yelpUrl:
          type: string
          format: uri
          description: The store's yelp.com/biz/ page.
    PlaceLookupEngine:
      type: string
      enum:
        - CHATGPT
        - GEMINI
        - GOOGLE
        - BING_COPILOT
        - NAVER_AI_TAB
      description: An engine a place lookup asks. NAVER_AI_TAB answers for KR only.
    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.
    ErrorDetail:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: Stable, safe to branch on. See the Errors guide for the full list.
        message:
          type: string
          description: For humans. May change.
        details:
          description: >-
            Context for the error. An array of `{field, message}` on most
            `VALIDATION_ERROR`s; an object elsewhere (for example `{id}` on
            `RESOURCE_NOT_FOUND`, `retryAfterSec` on 429 and 503 codes). 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
    LocationPoint:
      type: object
      additionalProperties: false
      required:
        - latitude
        - longitude
      properties:
        latitude:
          type: number
          minimum: -90
          maximum: 90
        longitude:
          type: number
          minimum: -180
          maximum: 180
      example:
        latitude: 37.4979
        longitude: 127.0276
    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. `NAVER_AI_MODE` is accepted as an earlier spelling of
        `NAVER_AI_TAB`. `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`. `WEB_SCRAPE` reads
        one web page by `payload.url` and returns its main content as Markdown
        with its images. `WEB_MAP` lists a site's addresses from its start page
        links and sitemaps. `WEB_CRAWL` reads a site's pages under a start
        address, each as WEB_SCRAPE reads it, at 1 credit per page returned.
        `KEYWORD_VOLUME` returns the monthly search volume of `payload.keywords`
        (1-100) in `payload.country`: Naver for KR and Google for 216 other
        countries. `META_AI` returns the meta.ai chat answer with its cited
        sources, search queries and the products it shows (`shoppingCards`,
        `inlineProducts`); a prompt Meta refuses completes with an empty text
        and a `notice` quoting Meta. `QWEN` returns the answer of Qwen's China
        web chat (qianwen.com) with its web search, sources and search queries;
        `payload.country` sets the exit and the answer locale. `DOUBAO` returns
        the answer of Doubao's China web chat (doubao.com) with its web search,
        sources and search queries; it always asks from mainland China, whatever
        `payload.country` is. `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. Private
        engines (for example CLAUDE) are rejected with 403 ENGINE_PRIVATE.
        CITATION_ANALYSIS, PROMPT_RESEARCH and GEO_SCORE tasks are created
        through their own endpoints (POST /v1/citation-analysis, POST
        /v1/prompt-research, POST /v1/geo-score) and are rejected here with 400
        USE_DEDICATED_ENDPOINT; they appear in this list because their tasks
        report them. GEO_AUDIT, SOURCE_INFLUENCE and CITATION_ATTRIBUTION are
        accepted as earlier names of CITATION_ANALYSIS; responses echo
        CITATION_ANALYSIS.
      enum:
        - CHATGPT
        - PERPLEXITY
        - GEMINI
        - AIMODE
        - GOOGLE_AIMODE
        - GOOGLE
        - GOOGLE_AIO
        - GOOGLE_SERP
        - NAVER_AI_BRIEF
        - NAVER_AI_TAB
        - NAVER_AI_MODE
        - NAVER
        - NAVER_SERP
        - COMMERCE_SERP
        - COMMERCE_PRODUCT
        - BING_SEARCH
        - BING
        - BING_COPILOT_SEARCH
        - BING_COPILOT
        - COPILOT
        - META_AI
        - QWEN
        - DOUBAO
        - REDDIT
        - WEB_SCRAPE
        - WEB_MAP
        - WEB_CRAWL
        - KEYWORD_VOLUME
        - CITATION_ANALYSIS
        - GEO_AUDIT
        - SOURCE_INFLUENCE
        - CITATION_ATTRIBUTION
        - PROMPT_RESEARCH
        - GEO_SCORE
    TaskStatus:
      type: string
      description: >-
        `PROCESSING` means a worker holds the task. `COMPLETED` and `FAILED` are
        terminal.
      enum:
        - QUEUED
        - PROCESSING
        - COMPLETED
        - FAILED
  responses:
    Unauthorized:
      description: Missing or invalid bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: MISSING_API_KEY
              message: Missing or invalid API key
              timestamp: '2026-07-09T04:12:00.000Z'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Your API key, sent as `Authorization: Bearer <key>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.