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

# Puntuación principal y serie diaria, juntas

> Obtén tanto la puntuación del periodo como la línea diaria de un activo y entiende por qué son llamadas distintas.

Un mosaico de panel real muestra dos números: la **puntuación principal del periodo** (un
número grande) y la **serie diaria** (la línea). Ambos proceden de **dos
llamadas independientes** al mismo endpoint. Esta receta ejecuta ambas en paralelo
y explica cómo se extrae cada una y por qué no puedes derivar una de la
otra.

<Warning>
  **No promedies las filas diarias para derivar una puntuación del período**: se calculan
  de forma diferente. Consulta [Convenciones y errores comunes](/es/cookbook/setup/conventions#dont-average-daily-rows-to-get-a-period-score).
</Warning>

## Cómo funciona este ejemplo

1. **La llamada principal** no tiene dimensión `date`. La API devuelve una única
   puntuación ponderada por tráfico para todo el intervalo.
2. **La llamada de serie** añade `date` a las dimensiones y establece `date_interval`. La
   API devuelve una fila por día, cada una con la tasa no ponderada de ese día.
3. **No promedies los valores diarios para calcular la puntuación principal.** Los días con
   más prompts cuentan más en la puntuación principal; la media diaria trata todos los días
   por igual. Las dos se calculan de forma distinta a propósito.

<RequestExample>
  ```python Python theme={null}
  import os
  from profound import Profound

  client = Profound(api_key=os.environ["PROFOUND_API_KEY"])

  # What to fetch — replace with your own values.
  CATEGORY_NAME = "<your-category-name>"
  ASSET_NAME    = "<your-asset-name>"
  START_DATE    = "2026-05-05"
  END_DATE      = "2026-05-12"   # exclusive — returns data through 2026-05-11


  def get_headline_score(category_id, asset_name, start_date, end_date):
      """Traffic-weighted period score (no date dim)."""
      res = client.reports.visibility(
          category_id=category_id,
          start_date=start_date,
          end_date=end_date,
          metrics=["visibility_score"],
          filters=[{"field": "asset_name", "operator": "is", "value": asset_name}],
      )
      order = res.info.query["metrics"]
      return res.data[0].metrics[order.index("visibility_score")]


  def get_daily_series(category_id, asset_name, start_date, end_date):
      """One (date, score) point per day — for the line chart."""
      res = client.reports.visibility(
          category_id=category_id,
          start_date=start_date,
          end_date=end_date,
          metrics=["visibility_score"],
          dimensions=["date"],
          date_interval="day",
          filters=[{"field": "asset_name", "operator": "is", "value": asset_name}],
      )
      m_order = res.info.query["metrics"]
      d_order = res.info.query["dimensions"]
      i_score = m_order.index("visibility_score")
      i_date  = d_order.index("date")
      points = [
          (row.dimensions[i_date], row.metrics[i_score])
          for row in res.data
      ]
      return sorted(points, key=lambda p: p[0])


  # Helpers — translate human-readable names into the IDs the report API needs.

  def find_category_id(name):
      """Return the UUID of the category whose name matches (case-insensitive)."""
      for c in client.organizations.categories.list():
          if c.name.lower() == name.lower():
              return c.id
      raise ValueError(f"No category named {name!r}")


  def find_asset_name(category_id, name):
      """Return the canonical asset name (case-insensitive) inside the category."""
      for a in client.organizations.categories.assets(category_id):
          if a.name.lower() == name.lower():
              return a.name
      raise ValueError(f"No asset named {name!r} in this category")


  # Resolve names → IDs, then run both calls.
  category_id = find_category_id(CATEGORY_NAME)
  asset_name  = find_asset_name(category_id, ASSET_NAME)

  headline_score = get_headline_score(category_id, asset_name, START_DATE, END_DATE)
  daily          = get_daily_series(category_id, asset_name, START_DATE, END_DATE)

  print(f"Headline: {headline_score:.1%}\n")
  print("Daily:")
  for date, score in daily:
      print(f"  {date}  {score:.1%}")
  ```

  ```bash curl theme={null}
  export PROFOUND_API_KEY=your_api_key_here

  # 1) Headline (no date dimension)
  curl -X POST "https://api.tryprofound.com/v1/reports/visibility" \
    -H "X-API-Key: $PROFOUND_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "category_id": "your-category-uuid",
      "start_date": "2026-05-05",
      "end_date": "2026-05-12",
      "metrics": ["visibility_score"],
      "filters": [{"field": "asset_name", "operator": "is", "value": "<your-asset-name>"}]
    }'

  # 2) Daily series (add date dimension + date_interval)
  curl -X POST "https://api.tryprofound.com/v1/reports/visibility" \
    -H "X-API-Key: $PROFOUND_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "category_id": "your-category-uuid",
      "start_date": "2026-05-05",
      "end_date": "2026-05-12",
      "metrics": ["visibility_score"],
      "dimensions": ["date"],
      "date_interval": "day",
      "filters": [{"field": "asset_name", "operator": "is", "value": "<your-asset-name>"}]
    }'
  ```
</RequestExample>

## En qué se diferencian las dos respuestas

| | Llamada principal | Llamada de serie |
| - | - | - |
| `dimensions` | `[]` | `["date"]` |
| `date_interval` | no se envía | `"day"` (o week/month) |
| Filas devueltas | 1 | N (una por intervalo) |
| Puntuación por fila | Ponderada por tráfico en todo el intervalo | No ponderada dentro de ese día |
| Se usa para | El número grande del KPI | La línea del gráfico |

## Por qué no puedes promediar los valores diarios

La puntuación principal pondera los días según su volumen de prompts: un día con 10.000
prompts influye más en la puntuación principal que un día con 100. Promediar las tasas diarias
trata esos dos días como iguales. Para la mayoría de los activos, la diferencia es de 1 a 3 puntos
porcentuales; para activos con tráfico irregular puede ser mayor. Usa siempre la
llamada principal para la puntuación principal.
