products-payment-refacil-mcp 1.2.6 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,7 @@ Servidor MCP (Model Context Protocol) generado automáticamente para la API prod
4
4
 
5
5
  ## 🚀 Características
6
6
 
7
- - **13 herramientas** generadas automáticamente desde la colección Postman
7
+ - **21 herramientas** generadas automáticamente desde la colección Postman
8
8
  - **Autenticación flexible**: secretId con renovación automática de tokens
9
9
  - **Servidor HTTP** con Fastify
10
10
  - **Protocolo MCP** estándar para integración con IDEs
@@ -353,7 +353,7 @@ Este endpoint incluye un script automático que:
353
353
  | --- | --- | --- |
354
354
  | secretId | string | Campo del body: secretId |
355
355
 
356
- ### `status`
356
+ ### `health_check_health_check_get`
357
357
 
358
358
  Verificación del estado de la API y conectividad con servicios
359
359
 
@@ -369,7 +369,6 @@ Verificación del estado de la API y conectividad con servicios
369
369
  "status": "ok",
370
370
  "timestamp": "2024-01-15T10:30:45.123Z",
371
371
  "uptime": 3600,
372
- "services": "connected",
373
372
  "version": "1.0.0",
374
373
  "environment": "development"
375
374
  }
@@ -386,7 +385,6 @@ Verificación del estado de la API y conectividad con servicios
386
385
  "status": "error",
387
386
  "timestamp": "2024-01-15T10:30:45.123Z",
388
387
  "uptime": 3600,
389
- "services": "disconnected",
390
388
  "error": "Connection timeout",
391
389
  "version": "1.0.0",
392
390
  "environment": "development"
@@ -394,6 +392,12 @@ Verificación del estado de la API y conectividad con servicios
394
392
  }
395
393
  ```
396
394
 
395
+ ### `status`
396
+
397
+ Verificación del estado de la API y conectividad con servicios
398
+
399
+ Verifica conectividad de la API contra el core service.
400
+
397
401
  ### `products_categories`
398
402
 
399
403
  Endpoints para consultar categorías y productos disponibles
@@ -676,13 +680,16 @@ Si el usuario decide comprar usando `/product-requests/create` con los **mismos
676
680
  "date": 1733932800000,
677
681
  "payload": {
678
682
  "quoteId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
683
+ "productId": 52368,
684
+ "categoryId": 120,
679
685
  "amount": 150000,
680
- "status": "SUCCESS",
681
- "data": {
686
+ "additionalData": {
687
+ "invoiceDueDate": "2026-05-10",
682
688
  "reference": "123456789",
683
689
  "customerName": "JUAN PEREZ",
684
690
  "address": "Calle 123"
685
- }
691
+ },
692
+ "quotedAt": "2024-01-11T10:30:00.000Z"
686
693
  }
687
694
  }
688
695
  ```
@@ -690,9 +697,11 @@ Si el usuario decide comprar usando `/product-requests/create` con los **mismos
690
697
  **Campos de la respuesta:**
691
698
 
692
699
  - `quoteId`: ID de la cotización guardada
700
+ - `productId`: ID del producto cotizado
701
+ - `categoryId`: ID de la categoría del producto
693
702
  - `amount`: Monto cotizado
694
- - `status`: Estado de la cotización (SUCCESS, INVALID, FAILED)
695
- - `data`: Datos adicionales del producto consultado
703
+ - `additionalData`: Datos adicionales del producto consultado. Incluye `invoiceDueDate: string | null` cuando el proveedor retorna fecha de vencimiento de la factura; es `null` para productos que no aplican
704
+ - `quotedAt`: Timestamp de la cotización
696
705
 
697
706
  **Respuesta de error (400) - Producto directo:**
698
707
 
@@ -776,7 +785,7 @@ Endpoints para crear solicitudes de productos
776
785
  **📋 Relación con Endpoint de Productos:**
777
786
  Los datos para crear esta solicitud provienen principalmente del endpoint `products/by-customer-and-category`:
778
787
 
779
- - **`category_id`**: Debe usar el mismo valor de `categoryId` enviado en la consulta a `products/by-customer-and-category`
788
+ - **`category_id`**: ID de la categoría (del endpoint de productos)
780
789
 
781
790
  - **`id`**: ID del producto seleccionado (del campo `id` del producto)
782
791
 
@@ -798,7 +807,7 @@ Los datos para crear esta solicitud provienen principalmente del endpoint `produ
798
807
 
799
808
  **Body (JSON):**
800
809
 
801
- - `category_id` (number, requerido): mismo valor de `categoryId` usado al consultar `products/by-customer-and-category`
810
+ - `category_id` (number, requerido): ID de la categoría (obtenido del endpoint de productos)
802
811
 
803
812
  - `id` (number, requerido): ID del producto seleccionado (obtenido del campo `id` del producto)
804
813
 
@@ -812,7 +821,9 @@ Los datos para crear esta solicitud provienen principalmente del endpoint `produ
812
821
 
813
822
  - `agreement` (string, opcional): Aceptación de términos (puede venir del campo `agreement` del producto)
814
823
 
815
- - `customer_id` (string, opcional): Identificador único del usuario o dispositivo
824
+ - `customer_id` (string, requerido si omite `cart_id`; opcional si envía `cart_id`): Identificador único del usuario o dispositivo; persiste en `core.shopping_carts.user_temp_id` al crear carrito.
825
+
826
+ - `subcustomer_id` (string, opcional): Identificador del subcliente o cuenta hija asociada al `customer_id`
816
827
 
817
828
  - cart_id (string, opcional): identificador del carrito de compra al que se quiere agregar la solicictud de producto
818
829
 
@@ -890,7 +901,8 @@ const customerId = deviceId || sessionId;
890
901
  "query_type": "BILLData",
891
902
  "sell_type": "Bill",
892
903
  "agreement": "2010910",
893
- "customer_id": "device_abc123def456"
904
+ "customer_id": "device_abc123def456",
905
+ "subcustomer_id": "subcust_01"
894
906
  }
895
907
 
896
908
  ```
@@ -949,6 +961,7 @@ GET /products/by-customer-and-category
949
961
  "amount": null,
950
962
  "meta": {
951
963
  "fnArgs": 20363,
964
+ "categoryId": 44,
952
965
  "form": [
953
966
  {
954
967
  "active": true,
@@ -986,7 +999,8 @@ GET /products/by-customer-and-category
986
999
  },
987
1000
  "query_type": "BILLData",
988
1001
  "sell_type": "Bill",
989
- "agreement": "2010910"
1002
+ "agreement": "2010910",
1003
+ "customer_id": "customer_123"
990
1004
  }
991
1005
 
992
1006
  ```
@@ -1154,14 +1168,15 @@ Con la respuesta de este endpoint, puedes proceder a crear el pago usando `/prod
1154
1168
 
1155
1169
  | Name | Type | Description |
1156
1170
  | --- | --- | --- |
1157
- | category_id * | number | mismo valor de `categoryId` usado al consultar `products/by-customer-and-category` |
1171
+ | category_id * | number | ID de la categoría (obtenido del endpoint de productos) |
1158
1172
  | id * | number | ID del producto seleccionado (obtenido del campo `id` del producto) |
1159
1173
  | amount | null | Monto del producto (ver reglas de uso) |
1160
1174
  | data * | object | Datos específicos del producto basados en `template_data_request` del producto |
1161
1175
  | query_type * | string | Tipo de consulta del producto (PHONE_QUERY, PLATE_QUERY, etc.) |
1162
1176
  | sell_type * | string | Tipo de venta del producto (DIRECT_SALE, QUERY_FIRST) |
1163
1177
  | agreement | string | Aceptación de términos (puede venir del campo `agreement` del producto) |
1164
- | customer_id | string | Identificador único del usuario o dispositivo |
1178
+ | customer_id | string | Identificador único del usuario o dispositivo; persiste en `core.shopping_carts.user_temp_id` al crear carrito. |
1179
+ | subcustomer_id | string | Identificador del subcliente o cuenta hija asociada al `customer_id` |
1165
1180
  | cart_id | string | identificador del carrito de compra al que se quiere agregar la solicictud de producto |
1166
1181
 
1167
1182
  ### `product_requests_status`
@@ -1175,7 +1190,7 @@ Este endpoint incluye validación de seguridad que garantiza que solo puedas con
1175
1190
 
1176
1191
  **📋 Parámetros:**
1177
1192
 
1178
- Debes proporcionar **uno** de los siguientes parámetros (no ambos obligatorios):
1193
+ Debes proporcionar al menos uno de los siguientes parámetros:
1179
1194
 
1180
1195
  - **`requestId`** (string, opcional): ID único de la solicitud de producto individual (UUID)
1181
1196
 
@@ -1258,12 +1273,15 @@ POST /product-requests/status
1258
1273
  "customer_id": "customer_124"
1259
1274
  },
1260
1275
  "urlInvoice": "https://prep.refacil.co/#/factura/215765/10549",
1261
- "urlSummary": "https://mf-core.refacil.co/refacilpay/resumen/62/28137590-b69d-11f0-8c08-b71754a3ac6b"
1276
+ "urlSummary": "https://mf-core.refacil.co/refacilpay/resumen/62/28137590-b69d-11f0-8c08-b71754a3ac6b",
1277
+ "invoiceDueDate": "2026-05-31"
1262
1278
  }
1263
1279
  }
1264
1280
 
1265
1281
  ```
1266
1282
 
1283
+ > ⚠️ `invoiceDueDate` es `string | null` — tiene valor solo cuando el proveedor retorna fecha de vencimiento de la factura. En productos que no son facturas, siempre es `null`.
1284
+
1267
1285
  **🛒 Flujo de Uso - Carrito Completo:**
1268
1286
 
1269
1287
  **1\. Consultar estado usando cartId:**
@@ -1308,7 +1326,8 @@ POST /product-requests/status
1308
1326
  "agreement": "2010910",
1309
1327
  "customer_id": "customer_124"
1310
1328
  },
1311
- "urlInvoice": "https://prep.refacil.co/#/factura/215765/10549"
1329
+ "urlInvoice": "https://prep.refacil.co/#/factura/215765/10549",
1330
+ "invoiceDueDate": "2026-05-31"
1312
1331
  }
1313
1332
  ]
1314
1333
  }
@@ -1387,7 +1406,7 @@ Este endpoint incluye validación de seguridad que garantiza que solo puedas des
1387
1406
 
1388
1407
  **📋 Parámetros:**
1389
1408
 
1390
- Debes proporcionar **uno** de los siguientes parámetros (no ambos obligatorios):
1409
+ Debes proporcionar al menos uno de los siguientes parámetros:
1391
1410
 
1392
1411
  - **`requestId`** (string, opcional): ID único de la solicitud de producto individual (UUID)
1393
1412
 
@@ -1664,7 +1683,7 @@ Crea el pago de un producto usando el medio de pago seleccionado. Esta es la eta
1664
1683
  **📋 Relación con Endpoint de Solicitud:**
1665
1684
  Los datos para crear este pago provienen de la respuesta del endpoint `product-requests/create`:
1666
1685
 
1667
- - **`cartId`**: Del campo `cartId` de la respuesta de solicitud
1686
+ - **`cartId`**: Del campo `cartId` de la respuesta del carrito
1668
1687
 
1669
1688
  - **`id`**: Del campo `id` del medio de pago seleccionado
1670
1689
 
@@ -1682,7 +1701,7 @@ Los datos para crear este pago provienen de la respuesta del endpoint `product-r
1682
1701
 
1683
1702
  **Body (JSON):**
1684
1703
 
1685
- - `cartId` (string, requerido): ID de la solicitud obtenido de `product-requests/create`
1704
+ - `cartId` (string, requerido): ID del carrito obtenido de `product-requests/create`
1686
1705
 
1687
1706
  - `id` (number, requerido): ID del medio de pago seleccionado
1688
1707
 
@@ -1690,9 +1709,9 @@ Los datos para crear este pago provienen de la respuesta del endpoint `product-r
1690
1709
 
1691
1710
  - `data` (object, requerido): Datos del pagador basados en `template_data_request` del medio de pago
1692
1711
 
1693
- - `returnUrl` (string, opcional): URL de retorno después del pago
1712
+ - `returnUrl` (string, requerido): URL de retorno después del pago
1694
1713
 
1695
- - `webhookUrl` (string, opcional): URL para notificaciones de estado del pago
1714
+ - `webhookUrl` (string, requerido): URL para notificaciones de estado del pago
1696
1715
 
1697
1716
 
1698
1717
  **🔄 Flujo de Creación de Pago:**
@@ -1815,7 +1834,7 @@ Los datos para crear este pago provienen de la respuesta del endpoint `product-r
1815
1834
  "cartId": "88d0b575-80f4-4f9b-af8f-5d09ec2cb877",
1816
1835
  "url": "https://mf-core.refacil.co/refacilpay/resumen/62/5ff47b60-77b1-11f0-b5e9-6f43bd8928c1",
1817
1836
  "reference": "5ff47b60-77b1-11f0-b5e9-6f43bd8928c1",
1818
- "amount": 19000
1837
+ "amount": 19000,
1819
1838
  "expiresIn": "2025-08-13T07:20:15.038Z"
1820
1839
  }
1821
1840
  }
@@ -1896,12 +1915,12 @@ Los datos para crear este pago provienen de la respuesta del endpoint `product-r
1896
1915
 
1897
1916
  | Name | Type | Description |
1898
1917
  | --- | --- | --- |
1899
- | cartId * | string | ID de la solicitud obtenido de `product-requests/create` |
1918
+ | cartId * | string | ID del carrito obtenido de `product-requests/create` |
1900
1919
  | id * | number | ID del medio de pago seleccionado |
1901
1920
  | categoryid * | number | ID de la categoría del medio de pago |
1902
1921
  | data * | object | Datos del pagador basados en `template_data_request` del medio de pago |
1903
- | returnUrl | string | URL de retorno después del pago |
1904
- | webhookUrl | string | URL para notificaciones de estado del pago |
1922
+ | returnUrl * | string | URL de retorno después del pago |
1923
+ | webhookUrl * | string | URL para notificaciones de estado del pago |
1905
1924
 
1906
1925
  ### `products_payment_retry_sale`
1907
1926
 
@@ -2137,11 +2156,218 @@ Endpoints para crear reembolsos
2137
2156
  | email * | string | Email del cliente |
2138
2157
  | webhookUrl * | string | URL para notificaciones del reembolso |
2139
2158
 
2140
- ### `docs_cli_web_documentation`
2159
+ ### `dashboard_summary`
2160
+
2161
+ Endpoints read-only para dashboards de cliente. Los siete `POST /dashboard/*` requieren autenticación (Bearer + `x-secret-id`) y filtran por el `user_api_id` del token. `customer_id` es obligatorio y mapea a `core.product_requests.user_temp_id`. El campo opcional `subcustomer_id` (string o null) se acepta en **todas** las rutas y mapea a `core.product_requests.subcustomer_id`: si se omite, es null o queda en blanco tras trim, no hay filtro por subcliente (todo el subsegmento bajo ese `customer_id`); si se envía, los resultados se limitan a ese subcliente. El rango `from`/`to` (ISO-8601 UTC) sigue las reglas de cada endpoint. Cada request documenta ambos patrones (con y sin `subcustomer_id`).
2162
+
2163
+ Devuelve KPIs agregados del cliente: totalRequests, totalSales, totalSalesAmount, totalRefunds, totalRefundsAmount, failedRequests, conversionRate (0..1).
2164
+
2165
+ **Body:**
2166
+ - `customer_id` (string, requerido)
2167
+ - `subcustomer_id` (string, opcional) → `core.product_requests.subcustomer_id`
2168
+ - `from`/`to` (ISO-8601 UTC, opcional; ambos o ninguno; from <= to)
2169
+
2170
+ Si no se envía rango, se aplican los últimos 30 días en UTC.
2171
+
2172
+ La pestaña **Body** incluye `subcustomer_id` y un rango de fechas explícito.
2173
+
2174
+ **Ejemplo — sin filtro por subcliente (omite `subcustomer_id`):**
2175
+ ```json
2176
+ {
2177
+ "customer_id": "customer_123",
2178
+ "from": "2026-03-01T00:00:00.000Z",
2179
+ "to": "2026-03-31T23:59:59.000Z"
2180
+ }
2181
+ ```
2182
+
2183
+ **Parámetros:**
2184
+
2185
+ | Name | Type | Description |
2186
+ | --- | --- | --- |
2187
+ | customer_id | string | Campo del body: customer_id |
2188
+ | subcustomer_id | string | Campo del body: subcustomer_id |
2189
+ | from | string | Campo del body: from |
2190
+ | to | string | Campo del body: to |
2191
+
2192
+ ### `dashboard_sales`
2193
+
2194
+ Endpoints read-only para dashboards de cliente. Los siete `POST /dashboard/*` requieren autenticación (Bearer + `x-secret-id`) y filtran por el `user_api_id` del token. `customer_id` es obligatorio y mapea a `core.product_requests.user_temp_id`. El campo opcional `subcustomer_id` (string o null) se acepta en **todas** las rutas y mapea a `core.product_requests.subcustomer_id`: si se omite, es null o queda en blanco tras trim, no hay filtro por subcliente (todo el subsegmento bajo ese `customer_id`); si se envía, los resultados se limitan a ese subcliente. El rango `from`/`to` (ISO-8601 UTC) sigue las reglas de cada endpoint. Cada request documenta ambos patrones (con y sin `subcustomer_id`).
2195
+
2196
+ Listado paginado de ventas exitosas (`product_sales.status = SUCCESS`) enriquecido con datos del `product_request`.
2197
+
2198
+ **Body adicional:**
2199
+ - `subcustomer_id` (opcional) → `core.product_requests.subcustomer_id`
2200
+ - `page` (default 1, min 1)
2201
+ - `limit` (default 20, max 100)
2202
+ - `product_type` (opcional)
2203
+
2204
+ Filtro de fechas: `COALESCE(executed_at, created_at)` de la venta.
2205
+
2206
+ La pestaña **Body** trae un ejemplo **con** `subcustomer_id` para que se vea directo en la colección.
2207
+
2208
+ **Ejemplo — todo el segmento de `customer_id` (sin `subcustomer_id` o null):**
2209
+ ```json
2210
+ {
2211
+ "customer_id": "customer_123",
2212
+ "page": 1,
2213
+ "limit": 20,
2214
+ "product_type": "RECARGA"
2215
+ }
2216
+ ```
2217
+
2218
+ **Parámetros:**
2219
+
2220
+ | Name | Type | Description |
2221
+ | --- | --- | --- |
2222
+ | customer_id | string | Campo del body: customer_id |
2223
+ | subcustomer_id | string | Campo del body: subcustomer_id |
2224
+ | page | number | Campo del body: page |
2225
+ | limit | number | Campo del body: limit |
2226
+ | product_type | string | Campo del body: product_type |
2227
+
2228
+ ### `dashboard_transactions`
2229
+
2230
+ Endpoints read-only para dashboards de cliente. Los siete `POST /dashboard/*` requieren autenticación (Bearer + `x-secret-id`) y filtran por el `user_api_id` del token. `customer_id` es obligatorio y mapea a `core.product_requests.user_temp_id`. El campo opcional `subcustomer_id` (string o null) se acepta en **todas** las rutas y mapea a `core.product_requests.subcustomer_id`: si se omite, es null o queda en blanco tras trim, no hay filtro por subcliente (todo el subsegmento bajo ese `customer_id`); si se envía, los resultados se limitan a ese subcliente. El rango `from`/`to` (ISO-8601 UTC) sigue las reglas de cada endpoint. Cada request documenta ambos patrones (con y sin `subcustomer_id`).
2231
+
2232
+ Listado paginado de `product_requests` con el estado consolidado del flujo (request + payment + topup + sale). Filtros opcionales: `status` (array de ProductRequestStatus) y `product_type`. `subcustomer_id` opcional → `core.product_requests.subcustomer_id`.
2233
+
2234
+ La pestaña **Body** incluye `subcustomer_id` para que el campo se vea en la colección.
2235
+
2236
+ **Ejemplo — sin filtro por subcliente (omite `subcustomer_id`):**
2237
+ ```json
2238
+ {
2239
+ "customer_id": "customer_123",
2240
+ "page": 1,
2241
+ "limit": 20,
2242
+ "status": ["SOLD", "REFUNDED"],
2243
+ "product_type": "FACTURA"
2244
+ }
2245
+ ```
2246
+
2247
+ **Parámetros:**
2248
+
2249
+ | Name | Type | Description |
2250
+ | --- | --- | --- |
2251
+ | customer_id | string | Campo del body: customer_id |
2252
+ | subcustomer_id | string | Campo del body: subcustomer_id |
2253
+ | page | number | Campo del body: page |
2254
+ | limit | number | Campo del body: limit |
2255
+ | status | array | Campo del body: status |
2256
+ | product_type | string | Campo del body: product_type |
2257
+
2258
+ ### `dashboard_stats_by_status`
2259
+
2260
+ Endpoints read-only para dashboards de cliente. Los siete `POST /dashboard/*` requieren autenticación (Bearer + `x-secret-id`) y filtran por el `user_api_id` del token. `customer_id` es obligatorio y mapea a `core.product_requests.user_temp_id`. El campo opcional `subcustomer_id` (string o null) se acepta en **todas** las rutas y mapea a `core.product_requests.subcustomer_id`: si se omite, es null o queda en blanco tras trim, no hay filtro por subcliente (todo el subsegmento bajo ese `customer_id`); si se envía, los resultados se limitan a ese subcliente. El rango `from`/`to` (ISO-8601 UTC) sigue las reglas de cada endpoint. Cada request documenta ambos patrones (con y sin `subcustomer_id`).
2261
+
2262
+ Agrupa `product_requests` por `ProductRequestStatus`. La respuesta SIEMPRE incluye una entrada por cada estado del enum (count=0, totalAmount=0 si no hay registros). `subcustomer_id` opcional → `core.product_requests.subcustomer_id`.
2263
+
2264
+ La pestaña **Body** incluye `subcustomer_id`.
2265
+
2266
+ **Ejemplo — sin filtro por subcliente:**
2267
+ ```json
2268
+ {
2269
+ "customer_id": "customer_123"
2270
+ }
2271
+ ```
2272
+
2273
+ **Parámetros:**
2274
+
2275
+ | Name | Type | Description |
2276
+ | --- | --- | --- |
2277
+ | customer_id | string | Campo del body: customer_id |
2278
+ | subcustomer_id | string | Campo del body: subcustomer_id |
2279
+
2280
+ ### `dashboard_stats_by_product_type`
2281
+
2282
+ Endpoints read-only para dashboards de cliente. Los siete `POST /dashboard/*` requieren autenticación (Bearer + `x-secret-id`) y filtran por el `user_api_id` del token. `customer_id` es obligatorio y mapea a `core.product_requests.user_temp_id`. El campo opcional `subcustomer_id` (string o null) se acepta en **todas** las rutas y mapea a `core.product_requests.subcustomer_id`: si se omite, es null o queda en blanco tras trim, no hay filtro por subcliente (todo el subsegmento bajo ese `customer_id`); si se envía, los resultados se limitan a ese subcliente. El rango `from`/`to` (ISO-8601 UTC) sigue las reglas de cada endpoint. Cada request documenta ambos patrones (con y sin `subcustomer_id`).
2283
+
2284
+ Agrupa por `product_type`. Por defecto solo `status=SOLD`. Acepta `statuses` (array) para overridear. `subcustomer_id` opcional → `core.product_requests.subcustomer_id`.
2285
+
2286
+ La pestaña **Body** incluye `subcustomer_id`.
2287
+
2288
+ **Ejemplo — sin filtro por subcliente:**
2289
+ ```json
2290
+ {
2291
+ "customer_id": "customer_123",
2292
+ "statuses": ["SOLD"]
2293
+ }
2294
+ ```
2295
+
2296
+ **Parámetros:**
2297
+
2298
+ | Name | Type | Description |
2299
+ | --- | --- | --- |
2300
+ | customer_id | string | Campo del body: customer_id |
2301
+ | subcustomer_id | string | Campo del body: subcustomer_id |
2302
+ | statuses | array | Campo del body: statuses |
2303
+
2304
+ ### `dashboard_stats_timeseries`
2305
+
2306
+ Endpoints read-only para dashboards de cliente. Los siete `POST /dashboard/*` requieren autenticación (Bearer + `x-secret-id`) y filtran por el `user_api_id` del token. `customer_id` es obligatorio y mapea a `core.product_requests.user_temp_id`. El campo opcional `subcustomer_id` (string o null) se acepta en **todas** las rutas y mapea a `core.product_requests.subcustomer_id`: si se omite, es null o queda en blanco tras trim, no hay filtro por subcliente (todo el subsegmento bajo ese `customer_id`); si se envía, los resultados se limitan a ese subcliente. El rango `from`/`to` (ISO-8601 UTC) sigue las reglas de cada endpoint. Cada request documenta ambos patrones (con y sin `subcustomer_id`).
2307
+
2308
+ Serie temporal de ventas SOLD agrupada por `granularity` (`day` | `month`, default `day`). Buckets vacíos vienen con `count=0` y `totalAmount=0`. `subcustomer_id` opcional → `core.product_requests.subcustomer_id`.
2309
+
2310
+ La pestaña **Body** incluye `subcustomer_id`.
2311
+
2312
+ **Ejemplo — todos los subsegmentos en el rango (omite `subcustomer_id`):**
2313
+ ```json
2314
+ {
2315
+ "customer_id": "customer_123",
2316
+ "granularity": "day",
2317
+ "from": "2026-03-01T00:00:00.000Z",
2318
+ "to": "2026-03-07T23:59:59.000Z"
2319
+ }
2320
+ ```
2321
+
2322
+ **Parámetros:**
2323
+
2324
+ | Name | Type | Description |
2325
+ | --- | --- | --- |
2326
+ | customer_id | string | Campo del body: customer_id |
2327
+ | subcustomer_id | string | Campo del body: subcustomer_id |
2328
+ | granularity | string | Campo del body: granularity |
2329
+ | from | string | Campo del body: from |
2330
+ | to | string | Campo del body: to |
2331
+
2332
+ ### `dashboard_refunds`
2333
+
2334
+ Endpoints read-only para dashboards de cliente. Los siete `POST /dashboard/*` requieren autenticación (Bearer + `x-secret-id`) y filtran por el `user_api_id` del token. `customer_id` es obligatorio y mapea a `core.product_requests.user_temp_id`. El campo opcional `subcustomer_id` (string o null) se acepta en **todas** las rutas y mapea a `core.product_requests.subcustomer_id`: si se omite, es null o queda en blanco tras trim, no hay filtro por subcliente (todo el subsegmento bajo ese `customer_id`); si se envía, los resultados se limitan a ese subcliente. El rango `from`/`to` (ISO-8601 UTC) sigue las reglas de cada endpoint. Cada request documenta ambos patrones (con y sin `subcustomer_id`).
2335
+
2336
+ Listado paginado de reembolsos del customer con datos del `product_request` asociado. Filtro opcional `status` (array). `subcustomer_id` opcional → `core.product_requests.subcustomer_id`. Filtro de fechas sobre `refunds.created_at`.
2337
+
2338
+ La pestaña **Body** incluye `subcustomer_id`.
2339
+
2340
+ **Ejemplo — sin filtro por subcliente:**
2341
+ ```json
2342
+ {
2343
+ "customer_id": "customer_123",
2344
+ "page": 1,
2345
+ "limit": 20,
2346
+ "status": ["CONFIRMED"]
2347
+ }
2348
+ ```
2349
+
2350
+ **Parámetros:**
2351
+
2352
+ | Name | Type | Description |
2353
+ | --- | --- | --- |
2354
+ | customer_id | string | Campo del body: customer_id |
2355
+ | subcustomer_id | string | Campo del body: subcustomer_id |
2356
+ | page | number | Campo del body: page |
2357
+ | limit | number | Campo del body: limit |
2358
+ | status | array | Campo del body: status |
2359
+
2360
+ ### `about_webhook_guide`
2141
2361
 
2142
2362
  Guía para implementar webhooks del lado del cliente para recibir notificaciones de pagos y reembolsos
2143
2363
 
2144
- **📋 IMPORTANTE: Implementación de Webhooks del Cliente Requerida**
2364
+ **⚠️ ESTE ITEM NO ES UN ENDPOINT EJECUTABLE DE LA API.**
2365
+
2366
+ Es una referencia informativa para integradores. La URL `about:client-webhook-guide` se usa a propósito para evitar que Postman lo ejecute como request HTTP del microservicio (no generará 404 contra el API). El contenido debe leerse solo como guía.
2367
+
2368
+ ---
2369
+
2370
+ **📋 IMPORTANTE: Implementación de Webhooks del Cliente Requerida**
2145
2371
 
2146
2372
  Este NO es un endpoint de la API, sino una guía para implementar webhooks en TU sistema.
2147
2373