---
title: "Distribución y origen de marketing de las ventas del evento (#22)"
method: GET
path: "/events/{eventId}/sales-provenance/summary"
tags: ["Event Sales Provenance"]
---

# Distribución y origen de marketing de las ventas del evento (#22)

`GET /events/{eventId}/sales-provenance/summary`

## Request

- Base URL: `http://localhost:8081`
- URL: `http://localhost:8081/events/{eventId}/sales-provenance/summary`
- Auth: HTTP bearer

Desglose por `dimension`: `provider` (ticketera), `distribution` (canal del proveedor),
`purchaseChannel`, `promoCode` (código promocional del pedido: etiqueta, no causalidad)
o `marketing` (fuente → medio → campaña, con `level` y `parent`). Claves de proveedor:
`FEVER`, `DICE`, `NEVENT` o `PROVIDER:<id>`. En DICE, canal de distribución y UTM son
`NOT_SUPPORTED` (su API no los da por pedido).
Bloques por moneda y, dentro, por proveedor: un slug igual en dos proveedores son dos
filas distintas. Cada bloque cumple **filas + otros + sin información = total del
proveedor** (o = `parentTotals` en niveles medio/campaña); si no, 500
`INVARIANT_VIOLATION`. Ranking: pedidos DESC, bruto DESC, clave ASC; `top` filas y el
resto en «Otros». `search` solo selecciona filas en `searchMatches` (incluidas las que
están dentro de «Otros»); no cambia totales, otros ni cuotas. La etiqueta es el valor raw
más frecuente (desempate lexicográfico), con todas sus variantes en `rawVariants`. En
marketing, `origin` distingue lo informado por la ticketera (`PROVIDER_PROVENANCE`) de lo
capturado por Nevent (`NEVENT_ATTRIBUTION`). No se infiere «directo» desde null ni
«paid social» desde «facebook». `ticketsTransferred` es diagnóstico y no se suma.

## Path parameters

- `eventId` string, required

## Query parameters

- `from` string, date, required
- `to` string, date, required
- `tz` string
- `currency` string
- `population` 'SETTLED_SALES' | 'REFUNDED_FULL' | 'REFUNDED_UNREPRESENTABLE' | 'ALL_REPORTED'
- `dimension` 'provider' | 'distribution' | 'purchaseChannel' | 'promoCode' | 'marketing'
- `level` 'source' | 'medium' | 'campaign'
- `parent` string
- `top` integer
- `search` string

## Response `200`

Desglose conciliado

## Other responses

- `400`: Parámetro inválido (INVALID_DATE, INVALID_RANGE, INVALID_TZ, INVALID_CURRENCY, INVALID_POPULATION, INVALID_DIMENSION, INVALID_LEVEL, INVALID_PARENT, INVALID_KEY, INVALID_PARAM, INVALID_EVENT)
- `401`: Token ausente o inválido
- `403`: Rol sin acceso (ADMIN
- `404`: El evento no existe o no pertenece al ámbito del JWT (indistinguible)
- `500`: INVARIANT_VIOLATION (el desglose no concilia; no se devuelven cifras parciales) o INTERNAL_ERROR

---

[API](https://skmtc.dev/nevent/apis/nevent-data-api.md) · [All operations](https://skmtc.dev/nevent/apis/nevent-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nevent/apis/nevent-data-api/revisions/81035d32c1c1?raw)
