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

# Consultar el reporte de ventas

> Facturas autorizadas en un rango de fechas: totales frente al período
anterior, la serie por día (o por mes en rangos de más de 92 días), y
los principales clientes, productos y establecimientos.

Las ventas son netas: sin IVA ni otros impuestos, que se le deben al
SRI. Solo `total` incluye impuestos.




## OpenAPI

````yaml /api-reference/openapi.yaml get /api/v1/accounts/{account_id}/reports/sales_summary
openapi: 3.1.0
info:
  title: Tellen API
  version: 1.0.0
  description: |
    API REST de Tellen para facturación electrónica en Ecuador.

    Autentícate con un token de API (`Authorization: Bearer tellen_tk_...`) que
    generas desde tu cuenta de Tellen. Todas las solicitudes actúan sobre una
    cuenta, indicada por su identificador en la ruta:
    `/api/v1/accounts/{account_id}/...`.

    Normalmente ese identificador es el de tu propia cuenta. Si administras
    varias cuentas, usa el identificador de cada una para operar sobre ella. Si
    intentas acceder a una cuenta que no administras, la API responde `404`.
servers:
  - url: https://dashboard.tellen.app
    description: Producción
security:
  - bearerAuth: []
tags:
  - name: Cuentas
    description: Tu cuenta y, si administras varias, las cuentas que gestionas.
  - name: Resumen
    description: Las cifras del mes de una cuenta, lo vendido y comprado y lo que se debe.
  - name: Certificados
    description: >-
      Certificados de firma electrónica (.p12) usados para firmar documentos
      ante el SRI.
  - name: Contactos
    description: Clientes y proveedores de la cuenta.
  - name: Establecimientos
    description: Establecimientos (sucursales) de la cuenta, sincronizados desde el SRI.
  - name: Puntos de emisión
    description: >-
      Puntos de emisión por establecimiento, desde donde se emiten los
      comprobantes.
  - name: Productos
    description: >
      Catálogo de productos y servicios de la cuenta, con su configuración de

      impuestos e inventario.


      **Variantes.** Cada producto tiene al menos una variante interna. Un

      producto de un solo SKU se representa de forma plana (su variante por

      defecto es un detalle de implementación y no aparece en la respuesta), por

      lo que `variants` llega vacío. El arreglo `variants` solo lista variantes

      **con nombre** (talla, color, etc.), cuando existen.


      **Inventario.** El stock vive en las variantes, no en el producto; el
      campo

      `stock` es un consolidado de solo lectura sobre las variantes vendibles.

      Es `null` cuando el producto no controla inventario (todos los servicios,
      y

      los bienes con el control desactivado), lo que permite distinguir "no

      controla stock" de "controla stock, con 0 existencias".


      **El stock no se edita directamente.** Las existencias se mueven a través

      del kardex (entradas y salidas registradas por documentos autorizados,

      compras o ajustes), nunca escribiendo `stock_quantity`. Al **crear** un

      producto puedes fijar las existencias iniciales con `initial_stock`, que
      se

      registra como una entrada en el kardex. En una **actualización**,

      `initial_stock` se ignora.
  - name: Facturas
    description: Facturas de venta (comprobante electrónico 01).
  - name: Notas de crédito
    description: >-
      Notas de crédito (comprobante electrónico 04). Cada una acredita una
      factura autorizada.
  - name: Notas de débito
    description: >-
      Notas de débito (comprobante electrónico 05). Cada una carga a una factura
      autorizada, p. ej. intereses por mora o gastos de cobranza.
  - name: Cotizaciones
    description: |
      Cotizaciones (proformas) para tus clientes. No son comprobantes del SRI;
      se convierten en factura cuando el cliente acepta. Disponibles desde el
      plan Profesional.
  - name: Órdenes
    description: |
      Órdenes de tus clientes: acumulan abonos y se emiten como
      factura cuando los abonos cubren el total. No son comprobantes del SRI.
      Disponibles desde el plan Profesional.
  - name: Comprobantes recibidos
    description: |
      Comprobantes que te emitieron tus proveedores, tal como llegan del SRI.
      Por ahora, los que tienen detalle de productos: facturas, notas de
      crédito y liquidaciones de compra. Siempre son de producción.
  - name: Reportes
    description: |
      Los reportes de la web, con las mismas cifras. Los comprobantes emitidos
      siguen el ambiente de la cuenta (pruebas o producción); los recibidos del
      SRI no tienen ambiente. Requieren poder ver reportes
      (`permissions.read_reports`).
paths:
  /api/v1/accounts/{account_id}/reports/sales_summary:
    parameters:
      - name: account_id
        in: path
        required: true
        description: Identificador de la cuenta.
        schema:
          type: string
          format: uuid
    get:
      tags:
        - Reportes
      summary: Consultar el reporte de ventas
      description: |
        Facturas autorizadas en un rango de fechas: totales frente al período
        anterior, la serie por día (o por mes en rangos de más de 92 días), y
        los principales clientes, productos y establecimientos.

        Las ventas son netas: sin IVA ni otros impuestos, que se le deben al
        SRI. Solo `total` incluye impuestos.
      operationId: getSalesSummaryReport
      parameters:
        - name: from
          in: query
          required: false
          description: >-
            Primer día del rango, como `AAAA-MM-DD`. Va junto con `to`; sin
            ambos, el mes en curso.
          schema:
            type: string
            format: date
            example: '2026-10-01'
        - name: to
          in: query
          required: false
          description: Último día del rango, como `AAAA-MM-DD`.
          schema:
            type: string
            format: date
            example: '2026-10-31'
        - name: store_id
          in: query
          required: false
          description: Solo las ventas de este establecimiento. Sin él, todos.
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: El reporte de ventas.
          content:
            application/json:
              schema:
                type: object
                required:
                  - sales_summary
                properties:
                  sales_summary:
                    $ref: '#/components/schemas/SalesSummaryReport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/ReportsForbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
components:
  schemas:
    SalesSummaryReport:
      type: object
      required:
        - from
        - to
        - store_id
        - current
        - previous
        - change
        - series
        - series_granularity
        - top_products
        - top_customers
        - sales_by_store
      properties:
        from:
          type: string
          format: date
        to:
          type: string
          format: date
        store_id:
          type:
            - string
            - 'null'
          format: uuid
          description: El establecimiento filtrado, o `null` para todos.
        current:
          $ref: '#/components/schemas/SalesSummaryTotals'
        previous:
          $ref: '#/components/schemas/SalesSummaryTotals'
          description: >-
            El período anterior de igual duración (o el mes, semana o año
            calendario anterior).
        change:
          type: object
          required:
            - subtotal_pct
          properties:
            subtotal_pct:
              type:
                - number
                - 'null'
              description: >-
                Variación porcentual de las ventas netas frente al período
                anterior. `null` si el anterior no tuvo ventas.
        series:
          type: array
          description: >-
            Ventas netas por día o por mes, con ceros donde no hubo ventas.
            Termina hoy si el rango sigue en curso.
          items:
            type: object
            required:
              - date
              - subtotal
            properties:
              date:
                type: string
                format: date
                description: El día, o el primer día del mes.
              subtotal:
                type: number
        series_granularity:
          type: string
          enum:
            - day
            - month
        top_products:
          type: array
          description: Los 5 productos más vendidos por subtotal.
          items:
            type: object
            required:
              - id
              - name
              - quantity
              - unit
              - revenue
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              quantity:
                type: number
              unit:
                type: string
                description: >-
                  La unidad para mostrar junto a la cantidad ("unidades",
                  "kg"…).
              revenue:
                type: number
                description: Subtotal vendido, sin impuestos.
        top_customers:
          type: array
          description: Los 5 clientes con más ventas.
          items:
            type: object
            required:
              - id
              - name
              - count
              - revenue
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              count:
                type: integer
              revenue:
                type: number
                description: Ventas netas.
        sales_by_store:
          type: array
          description: Ventas por establecimiento, de mayor a menor.
          items:
            type: object
            required:
              - id
              - code
              - name
              - count
              - revenue
            properties:
              id:
                type: string
                format: uuid
              code:
                type: string
              name:
                type:
                  - string
                  - 'null'
              count:
                type: integer
              revenue:
                type: number
                description: Ventas netas.
    SalesSummaryTotals:
      type: object
      required:
        - subtotal
        - iva
        - total
        - count
        - average_ticket
      properties:
        subtotal:
          type: number
          description: Ventas netas, sin impuestos.
        iva:
          type: number
        total:
          type: number
          description: Total facturado, con impuestos.
        count:
          type: integer
        average_ticket:
          type: number
          description: Ventas netas promedio por factura.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Mensaje de error descriptivo, en español.
  responses:
    Unauthorized:
      description: >-
        Falta el token, o es inválido o está inactivo. Verifica el encabezado
        `Authorization`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ReportsForbidden:
      description: Tu rol no permite ver reportes.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: La cuenta no existe o no la administras.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: Los datos enviados no son válidos.
      content:
        application/json:
          schema:
            type: object
            required:
              - errors
            properties:
              errors:
                type: array
                items:
                  type: string
              field_errors:
                type: object
                description: |
                  Los mismos mensajes agrupados por atributo (`razon_social`,
                  `identificacion`…), para mostrarlos junto a cada campo. Solo
                  viene cuando el error es de validación de datos; los errores
                  que no son de un campo concreto llegan bajo `base`.
                additionalProperties:
                  type: array
                  items:
                    type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        Token de API enviado como `Authorization: Bearer tellen_tk_...`. Genera
        tu token desde tu cuenta de Tellen. Tu cuenta debe tener el acceso a la
        API habilitado.

````

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