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 +256 -30
- package/dist/core/resources.js +84 -21
- package/dist/core/resources.js.map +1 -1
- package/dist/core/tools.d.ts +9 -1
- package/dist/core/tools.js +697 -31
- package/dist/core/tools.js.map +1 -1
- package/dist/index.js +2 -2
- package/package.json +1 -1
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
|
-
- **
|
|
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
|
-
### `
|
|
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
|
-
"
|
|
681
|
-
|
|
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
|
-
- `
|
|
695
|
-
- `
|
|
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`**:
|
|
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):
|
|
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 |
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
1712
|
+
- `returnUrl` (string, requerido): URL de retorno después del pago
|
|
1694
1713
|
|
|
1695
|
-
- `webhookUrl` (string,
|
|
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
|
|
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
|
-
### `
|
|
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
|
-
|
|
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
|
|