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

# Publicar una página

> Renderiza una página por URL o publica la copia de un GEO Score para agentes de IA.



## OpenAPI

````yaml POST /v1/ai-rendering/sites/{id}/pages
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/ai-rendering/sites/{id}/pages:
    parameters:
      - name: id
        in: path
        required: true
        description: The site's id.
        schema:
          type: string
    post:
      tags:
        - AI Rendering
      summary: Publish a page
      description: >-
        With url, queues an AI_RENDERING task that renders the page as a person
        sees it in the site's country and writes the text of its images into
        their alt text (202). The copy joins the site's copy list once it is
        made, and the page is rendered again every refreshDays. A page already
        rendering returns that task; a published page sent again is rendered
        now. A render costs 5 credits, plus 5 for each image whose text is read
        and 2 for each image the account read in the last 90 days, at most 12
        images: submitting holds 65 credits and a failed render is not charged.
        A refresh is charged the same, to the site's account. With taskId,
        publishes the copy a completed GEO Score of the account made, without
        rendering again (201). A site publishes up to 1,000 pages.
      operationId: publishAiRenderingPage
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiRenderingPublishRequest'
            examples:
              url:
                summary: Render by URL
                value:
                  url: https://www.example.com/products/sunscreen
              geoScore:
                summary: Publish a GEO Score's copy
                value:
                  taskId: 0b6c1f7e-2d4a-4c55-9a0e-3f1d2b7c8e91
      responses:
        '201':
          description: >-
            Published from a GEO Score; the copy is in the site's copy list at
            once.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiRenderingPageResponse'
        '202':
          description: Rendering; the copy joins the site's copy list once it is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiRenderingPageResponse'
              example:
                success: true
                page:
                  id: a3d1c9e0-7b52-4e1f-9c84-0f6b2d5e7a10
                  url: https://www.example.com/products/sunscreen
                  path: /products/sunscreen
                  status: rendering
                  copy: null
                  taskId: null
                  renderedAt: null
                  expiresAt: null
                  publishedAt: '2026-10-23T01:00:00.000Z'
                  refreshAt: '2026-10-23T01:00:00.000Z'
                  refreshTaskId: 7c4e2a90-1d3b-4f6a-8e25-9b0c1f3d4e57
                taskId: 7c4e2a90-1d3b-4f6a-8e25-9b0c1f3d4e57
        '400':
          description: >-
            VALIDATION_ERROR: the body is not a JSON object or has an unknown
            field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: 'INSUFFICIENT_CREDITS: the balance cannot cover the 65-credit hold.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            KEY_SCOPE_DENIED: the API key is limited to engines that leave out
            GEO_SCORE.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            NOT_FOUND: no site of the account with that id, or no GEO Score task
            of the account with taskId.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: >-
            PAGE_LIMIT: the site has 1,000 pages. TASK_NOT_COMPLETED: the GEO
            Score has not completed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '410':
          description: >-
            COPY_EXPIRED: the GEO Score's copy has expired; publish the page by
            url.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: >-
            VALIDATION_ERROR: url is not a page on the site's host, or the GEO
            Score was scored from another country than the site's.
            NO_RENDERED_COPY: the GEO Score made no copy.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Plan concurrency is full; retry after Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: The engine's backlog is full; retry after Retry-After.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    AiRenderingPublishRequest:
      type: object
      additionalProperties: false
      description: >-
        Send url to render the page now, or taskId to publish the copy a
        completed GEO Score made.
      properties:
        url:
          type: string
          description: >-
            A page on the site's host. With taskId, the page to publish the GEO
            Score's copy on; by default the page the GEO Score scored.
        taskId:
          type: string
          description: >-
            A completed GEO_SCORE task of the account, scored from the site's
            country.
    AiRenderingPageResponse:
      type: object
      required:
        - success
        - page
      properties:
        success:
          type: boolean
        page:
          $ref: '#/components/schemas/AiRenderingPage'
        taskId:
          type: string
          description: >-
            The AI_RENDERING task rendering the page. Only when the page was
            published by url.
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          $ref: '#/components/schemas/ErrorDetail'
    AiRenderingPage:
      type: object
      required:
        - id
        - url
        - path
        - status
        - copy
        - taskId
        - renderedAt
        - expiresAt
        - publishedAt
        - refreshAt
        - refreshTaskId
      properties:
        id:
          type: string
        url:
          type: string
          description: The page, tracking parameters removed.
        path:
          type: string
          description: Path and query that identify the page on its site.
        status:
          type: string
          enum:
            - rendering
            - failed
            - ready
            - expired
          description: >-
            Whether the page has a copy for the site to serve. ready: the copy
            is in the site's copy list. rendering: the first copy is being made.
            failed: the first render failed; the page is rendered again at
            refreshAt. expired: the copy's file expired and left the list until
            the next render.
        copy:
          type:
            - string
            - 'null'
          description: The page's copy, as an HTML file. Its URL is its access key.
        taskId:
          type:
            - string
            - 'null'
          description: >-
            The task that made the copy: an AI_RENDERING task or the GEO Score
            it was published from.
        renderedAt:
          type:
            - string
            - 'null'
          format: date-time
        expiresAt:
          type:
            - string
            - 'null'
          format: date-time
          description: When the copy's file expires, 30 days after it was made.
        publishedAt:
          type: string
          format: date-time
        refreshAt:
          type: string
          format: date-time
          description: When the page is rendered next.
        refreshTaskId:
          type:
            - string
            - 'null'
          description: >-
            The AI_RENDERING task rendering the page now or last tried. Read it
            with GET /v1/async/task/{id}.
    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
  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.