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

# Listar órdenes persistidas (paginado)

> Orden por `created_at` descendente. Filtros opcionales por tienda, origen, estado, texto en `order_id`,
rango de fechas de creación e intentos de webhook.




## OpenAPI

````yaml espanol/api-reference/openapi.json GET /admin/orders
openapi: 3.0.1
info:
  title: Api V3 documentación
  description: >-
    A sample API that uses a plant store as an example to demonstrate features
    in the OpenAPI specification
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.artisn.desarrollo-redbrand.com/api
  - url: https://api.kfc-group.desarrollo-redbrand.com
  - url: https://{apiId}.execute-api.{region}.amazonaws.com/{stage}
    description: API Gateway (PRIVATE; invocación típica vía VPC endpoint).
    variables:
      apiId:
        default: '{api-id}'
        description: ID del API REST desplegado.
      region:
        default: us-east-1
      stage:
        default: dev
        description: Mismo valor que parámetro EnvironmentName del stack.
security:
  - bearerAuth: []
paths:
  /admin/orders:
    get:
      tags:
        - Admin
        - Orders
      summary: Listar órdenes persistidas (paginado)
      description: >
        Orden por `created_at` descendente. Filtros opcionales por tienda,
        origen, estado, texto en `order_id`,

        rango de fechas de creación e intentos de webhook.
      operationId: listOrders
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            minimum: 1
            default: 1
          description: Página (base 1).
        - name: pageSize
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
          description: Tamaño de página (máximo 100).
        - name: storeId
          in: query
          schema:
            type: string
          description: Filtrar por `store_id`.
        - name: source
          in: query
          schema:
            type: string
          description: Filtrar por origen (ej. pos).
        - name: status
          in: query
          schema:
            type: string
          description: Filtrar por estado (ej. ENRICHED).
        - name: q
          in: query
          schema:
            type: string
          description: >-
            Subcadena en `order_id` (búsqueda case-insensitive; `%` y `_`
            literales escapados).
        - name: createdFrom
          in: query
          schema:
            type: string
            format: date-time
          description: >
            Inclusive: filtra `created_at` >= este instante. Usar ISO 8601 con
            zona explícita

            (ej. `2025-06-15T00:00:00.000Z`) para evitar ambigüedad local vs
            UTC.

            Si se envían `createdFrom` y `createdTo`, debe cumplirse
            `createdFrom` <= `createdTo` (si no, 400).
        - name: createdTo
          in: query
          schema:
            type: string
            format: date-time
          description: >
            Inclusive: filtra `created_at` <= este instante. Un día calendario
            completo suele requerir

            el fin del día en UTC (ej. `2025-06-15T23:59:59.999Z`), no solo
            `T00:00:00`, para no excluir

            órdenes creadas después de medianoche ese día. Misma regla de orden
            que `createdFrom`.
        - name: webhookAttemptsMin
          in: query
          schema:
            type: integer
            minimum: 0
          description: Mínimo de `webhook_attempts`.
        - name: webhookAttemptsMax
          in: query
          schema:
            type: integer
            minimum: 0
          description: Máximo de `webhook_attempts`.
      responses:
        '200':
          description: Página de resultados
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderListResponse'
        '400':
          description: Parámetros de query inválidos
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorMessage'
        '405':
          description: Método no permitido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorMessage'
        '500':
          description: Error al consultar la base de datos
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorMessage'
components:
  schemas:
    OrderListResponse:
      type: object
      required:
        - items
        - total
        - page
        - pageSize
        - totalPages
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/OrderListItem'
        total:
          type: integer
          minimum: 0
          description: Total de filas que cumplen los filtros (sin paginar).
        page:
          type: integer
          minimum: 1
        pageSize:
          type: integer
          minimum: 1
        totalPages:
          type: integer
          minimum: 0
          description: Número de páginas; 0 si no hay resultados.
    ApiErrorMessage:
      type: object
      required:
        - message
      properties:
        message:
          type: string
        error:
          type: string
    OrderListItem:
      type: object
      description: Fila de `orders` tal como la devuelve Postgres/Drizzle (payloads JSON).
      required:
        - id
        - orderId
        - status
        - payload
        - enrichedPayload
        - webhookAttempts
      properties:
        id:
          type: string
          format: uuid
        orderId:
          type: string
        storeId:
          type: string
          nullable: true
        status:
          type: string
        source:
          type: string
          nullable: true
        payload:
          type: object
          additionalProperties: true
        enrichedPayload:
          type: object
          additionalProperties: true
        webhookAttempts:
          type: integer
        webhookLastResponse:
          type: object
          nullable: true
          additionalProperties: true
          description: Última respuesta del webhook (JSON) o null.
        createdAt:
          type: string
          format: date-time
          nullable: true
        updatedAt:
          type: string
          format: date-time
          nullable: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````