{
	"info": {
		"_postman_id": "tresipunt-manager-api-v1",
		"name": "Tresipunt Manager API v1",
		"description": "Colección completa de la API versionada para plugins de Moodle",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
		"_exporter_id": "tresipunt-manager"
	},
	"auth": {
		"type": "bearer",
		"bearer": [
			{
				"key": "token",
				"value": "{{bearer_token}}",
				"type": "string"
			}
		]
	},
	"variable": [
		{
			"key": "base_url",
			"value": "https://tu-dominio.com/api/v1",
			"type": "string"
		},
		{
			"key": "bearer_token",
			"value": "TU_TOKEN_AQUI",
			"type": "string"
		},
		{
			"key": "host",
			"value": "http://prueba.test",
			"type": "string"
		}
	],
	"item": [
		{
			"name": "1. Sync",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"sync\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\",\n    \"lastversion\": \"4.5\",\n    \"lastminor\": \"4.5.3\",\n    \"token\": \"token_moodle_secreto\",\n    \"type\": \"moodle\",\n    \"env\": \"pro\",\n    \"key\": \"S3-3434\",\n    \"availableupdatesfetch\": 1647506303\n  },\n  \"projectid\": \"S3-3434\",\n  \"data\": {\n    \"plugins\": [\n      {\n        \"name\": \"Snap\",\n        \"component\": \"theme_snap\",\n        \"type\": \"theme\",\n        \"versiondisk\": 2021060102,\n        \"versiondb\": \"2021060102\",\n        \"versionrequires\": 2020110900,\n        \"release\": \"3.10.3\",\n        \"dependencies\": [\n          {\n            \"component\": \"theme_boost\",\n            \"version\": \"2020110900\"\n          }\n        ],\n        \"availableupdates\": [\n          {\n            \"version\": \"2022020100\",\n            \"release\": \"3.11.3\",\n            \"maturity\": 200,\n            \"url\": \"https://moodle.org/plugins/pluginversion.php?id=25958\",\n            \"download\": \"https://moodle.org/plugins/download.php/25958/theme_snap_moodle311_2022020100.zip\",\n            \"downloadmd5\": \"dc027254984717a1b63fb9fb93d03f92\"\n          }\n        ]\n      },\n      {\n        \"name\": \"Tresipunt SEPE\",\n        \"component\": \"block_tresipuntsepe\",\n        \"type\": \"block\",\n        \"versiondisk\": 2022021700,\n        \"versiondb\": \"2022021700\",\n        \"versionrequires\": 2018120301,\n        \"release\": \"1.0\",\n        \"dependencies\": [],\n        \"availableupdates\": []\n      }\n    ]\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Sincroniza el sitio: actualiza metadatos del entorno (site) y reemplaza el inventario de plugins con data.plugins. Requiere: host, plugin, version, data.plugins (array, puede estar vacío). site.version, site.release, site.env, site.type son opcionales pero recomendados. El sitio debe existir y estar vinculado al token. Si el sitio no existe devuelve 404; si está vinculado a otro token devuelve 401. La respuesta incluye plugins_count, processed, total y errors por ítems omitidos o fallidos."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"sync\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\",\n    \"type\": \"moodle\",\n    \"env\": \"pro\"\n  },\n  \"data\": {\n    \"plugins\": []\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"sync\",\n  \"data\": {\n    \"id\": 1,\n    \"name\": \"moodle.ejemplo.com\",\n    \"domain\": \"https://moodle.ejemplo.com\",\n    \"version\": \"2025081101\",\n    \"env\": \"pro\",\n    \"type\": \"moodle\",\n    \"lastversion\": \"4.5\",\n    \"lastminor\": \"4.5.3\",\n    \"active\": true,\n    \"has_support\": false,\n    \"plugins_count\": 2,\n    \"processed\": 2,\n    \"total\": 2,\n    \"errors\": []\n  }\n}"
				},
				{
					"name": "Success con errores parciales en plugins",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"sync\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": { \"version\": \"2025081101\", \"release\": \"4.5.1\" },\n  \"data\": {\n    \"plugins\": [\n      { \"name\": \"Snap\", \"component\": \"theme_snap\", \"type\": \"theme\", \"versiondisk\": \"2021060102\", \"versiondb\": \"2021060102\", \"release\": \"3.10.3\" },\n      { \"versiondisk\": \"2022021700\" }\n    ]\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"sync\",\n  \"data\": {\n    \"id\": 1,\n    \"name\": \"moodle.ejemplo.com\",\n    \"domain\": \"https://moodle.ejemplo.com\",\n    \"version\": \"2025081101\",\n    \"env\": \"pro\",\n    \"type\": \"moodle\",\n    \"lastversion\": \"4.5\",\n    \"lastminor\": \"4.5.3\",\n    \"active\": true,\n    \"has_support\": false,\n    \"plugins_count\": 1,\n    \"processed\": 1,\n    \"total\": 2,\n    \"errors\": [\n      {\n        \"plugin\": \"unknown\",\n        \"error\": \"El plugin debe tener al menos name o component\"\n      }\n    ]\n  }\n}"
				},
				{
					"name": "Error - Site Not Found",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"sync\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"https://sitio-inexistente.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"plugins\": []\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Not Found",
					"code": 404,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Environment not found for this host\",\n  \"code\": 404,\n  \"action\": \"sync\",\n  \"data\": {\n    \"searched_host\": \"https://sitio-inexistente.com\",\n    \"original_host\": \"https://sitio-inexistente.com\"\n  }\n}"
				},
				{
					"name": "Error - Site vinculado a otro token",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"sync\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"plugins\": []\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unauthorized",
					"code": 401,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"El host proporcionado no está vinculado a este token\",\n  \"code\": 401,\n  \"action\": \"sync\",\n  \"data\": {}\n}"
				}
			]
		},
		{
			"name": "2. Licence",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"licence\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\",\n    \"env\": \"pro\"\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Verifica si un plugin tiene licencia válida. Requiere que el site exista y el plugin esté autorizado."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"licence\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"licence\",\n  \"data\": {\n    \"expires_at\": \"2025-12-01\",\n    \"product\": \"theme_fresk\",\n    \"products\": [\"theme_fresk\", \"block_tresipuntsepe\"],\n    \"environmentid\": 3,\n    \"support_active\": false,\n    \"warnings\": []\n  }\n}"
				},
				{
					"name": "Error - Sin Licencia",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"licence\",\n  \"plugin\": \"plugin_sin_licencia\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unauthorized",
					"code": 401,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Licence does not include this plugin\",\n  \"code\": 2001,\n  \"action\": \"licence\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Site Not Found",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"licence\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://sitio-inexistente.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unauthorized",
					"code": 401,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Site not found for this host. Host searched: https://sitio-inexistente.com. Available hosts: https://moodle.ejemplo.com\",\n  \"code\": 2002,\n  \"action\": \"licence\",\n  \"data\": {\n    \"searched_host\": \"https://sitio-inexistente.com\",\n    \"original_host\": \"https://sitio-inexistente.com\",\n    \"available_hosts\": [\"https://moodle.ejemplo.com\"]\n  }\n}"
				}
			]
		},
		{
			"name": "2.1. Products",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"products\",\n  \"host\": \"{{host}}\",\n  \"site\": {\n    \"version\": \"2025100601.03\",\n    \"release\": \"5.1.1+ (Build: 20251219)\",\n    \"env\": \"pro\"\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Obtiene todos los productos activos asociados a un sitio. No requiere validación de plugin específico."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"products\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"site\": {\n    \"version\": \"2025100601.03\",\n    \"release\": \"5.1.1+ (Build: 20251219)\",\n    \"env\": \"pro\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"products\",\n  \"data\": {\n    \"products\": [\"theme_fresk\", \"block_tresipuntsepe\"],\n    \"environmentid\": 3,\n    \"support_active\": false,\n    \"warnings\": []\n  }\n}"
				},
				{
					"name": "Error - Site Not Found",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"products\",\n  \"host\": \"https://sitio-inexistente.com\",\n  \"site\": {\n    \"version\": \"2025100601.03\",\n    \"release\": \"5.1.1+ (Build: 20251219)\",\n    \"env\": \"pro\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unauthorized",
					"code": 401,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Site not found for this host. Host searched: https://sitio-inexistente.com. Available hosts: https://moodle.ejemplo.com\",\n  \"code\": 2002,\n  \"action\": \"products\",\n  \"data\": {\n    \"searched_host\": \"https://sitio-inexistente.com\",\n    \"original_host\": \"https://sitio-inexistente.com\",\n    \"available_hosts\": [\"https://moodle.ejemplo.com\"]\n  }\n}"
				}
			]
		},
		{
			"name": "3. SCSS",
			"item": [
				{
					"name": "Obtener todos los archivos SCSS",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"scss\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"description": "Obtiene todos los archivos SCSS de la versión compatible del plugin. Si no se especifica data.files, devuelve todos los archivos de la versión."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"scss\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"scss\",\n  \"data\": {\n    \"files\": [\n      {\n        \"filename\": \"variables\",\n        \"found\": true,\n        \"content\": \"$primary-color: #007bff;\\n$secondary-color: #6c757d;\"\n      },\n      {\n        \"filename\": \"mixins\",\n        \"found\": true,\n        \"content\": \"@mixin button-style {\\n  padding: 10px 20px;\\n  border-radius: 4px;\\n}\"\n      }\n    ]\n  }\n}"
						},
						{
							"name": "Error - Sin versión compatible",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"scss\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2020010100\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"No compatible SCSS version found for this product version\",\n  \"code\": 3002,\n  \"action\": \"scss\",\n  \"data\": {}\n}"
						},
						{
							"name": "Error - Sin archivos",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"scss\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"No SCSS files found for this version\",\n  \"code\": 3002,\n  \"action\": \"scss\",\n  \"data\": {}\n}"
						}
					]
				},
				{
					"name": "Obtener archivos SCSS específicos",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"scss\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"files\": [\"variables\", \"mixins\"]\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"description": "Obtiene archivos SCSS específicos. Si un archivo no existe, se devuelve con found: false y content: null."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"scss\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"files\": [\"variables\", \"mixins\"]\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"scss\",\n  \"data\": {\n    \"files\": [\n      {\n        \"filename\": \"variables\",\n        \"found\": true,\n        \"content\": \"$primary-color: #007bff;\\n$secondary-color: #6c757d;\"\n      },\n      {\n        \"filename\": \"mixins\",\n        \"found\": true,\n        \"content\": \"@mixin button-style {\\n  padding: 10px 20px;\\n  border-radius: 4px;\\n}\"\n      }\n    ]\n  }\n}"
						},
						{
							"name": "Archivo no encontrado",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"scss\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"files\": [\"variables\", \"archivo_inexistente\"]\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"scss\",\n  \"data\": {\n    \"files\": [\n      {\n        \"filename\": \"variables\",\n        \"found\": true,\n        \"content\": \"$primary-color: #007bff;\\n$secondary-color: #6c757d;\"\n      },\n      {\n        \"filename\": \"archivo_inexistente\",\n        \"found\": false,\n        \"content\": null\n      }\n    ]\n  }\n}"
						}
					]
				}
			]
		},
		{
			"name": "3.1. SCSS CDN",
			"item": [
				{
					"name": "Obtener archivos SCSS CDN servibles",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"scss-cdn\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"description": "Obtiene todos los archivos SCSS CDN marcados como servibles del bundle compatible. Los imports se procesan dinámicamente y se reemplazan por URLs firmadas con expiración de 1 hora."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"scss-cdn\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"scss-cdn\",\n  \"data\": {\n    \"files\": [\n      {\n        \"filename\": \"main\",\n        \"found\": true,\n        \"content\": \"@import url('https://tu-dominio.com/api/cdn/scss/TOKEN_1H/main.scss?signature=...');\\n$primary-color: #007bff;\\n$secondary-color: #6c757d;\"\n      }\n    ]\n  }\n}"
						},
						{
							"name": "Error - Sin bundle compatible",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"scss-cdn\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2020010100\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"No compatible SCSS CDN bundle found for this product version\",\n  \"code\": 3002,\n  \"action\": \"scss-cdn\",\n  \"data\": {}\n}"
						},
						{
							"name": "Error - Sin archivos servibles",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"scss-cdn\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"No servable SCSS files found for this bundle\",\n  \"code\": 3002,\n  \"action\": \"scss-cdn\",\n  \"data\": {}\n}"
						}
					]
				}
			]
		},
		{
			"name": "4. JS",
			"item": [
				{
					"name": "Obtener todos los archivos JS",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"js\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"description": "Obtiene todos los archivos JavaScript de la versión compatible del plugin. Si no se especifica data.files, devuelve todos los archivos de la versión."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"js\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"js\",\n  \"data\": {\n    \"files\": [\n      {\n        \"filename\": \"main\",\n        \"found\": true,\n        \"content\": \"console.log('Plugin theme_fresk loaded');\\nfunction initTheme() {\\n  // Código de inicialización\\n}\"\n      },\n      {\n        \"filename\": \"utils\",\n        \"found\": true,\n        \"content\": \"export function formatDate(date) {\\n  return new Date(date).toLocaleDateString();\\n}\"\n      }\n    ]\n  }\n}"
						},
						{
							"name": "Error - Sin versión compatible",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"js\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2020010100\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"No compatible JS version found for this product version\",\n  \"code\": 4002,\n  \"action\": \"js\",\n  \"data\": {}\n}"
						},
						{
							"name": "Error - Sin archivos",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"js\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Not Found",
							"code": 404,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"No JS files found for this version\",\n  \"code\": 4002,\n  \"action\": \"js\",\n  \"data\": {}\n}"
						}
					]
				},
				{
					"name": "Obtener archivos JS específicos",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"js\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"files\": [\"main\", \"utils\"]\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"description": "Obtiene archivos JavaScript específicos. Si un archivo no existe, se devuelve con found: false y content: null."
					},
					"response": [
						{
							"name": "Success",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"js\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"files\": [\"main\", \"utils\"]\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"js\",\n  \"data\": {\n    \"files\": [\n      {\n        \"filename\": \"main\",\n        \"found\": true,\n        \"content\": \"console.log('Plugin theme_fresk loaded');\\nfunction initTheme() {\\n  // Código de inicialización\\n}\"\n      },\n      {\n        \"filename\": \"utils\",\n        \"found\": true,\n        \"content\": \"export function formatDate(date) {\\n  return new Date(date).toLocaleDateString();\\n}\"\n      }\n    ]\n  }\n}"
						},
						{
							"name": "Archivo no encontrado",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"action\": \"js\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"files\": [\"main\", \"archivo_inexistente\"]\n  }\n}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"js\",\n  \"data\": {\n    \"files\": [\n      {\n        \"filename\": \"main\",\n        \"found\": true,\n        \"content\": \"console.log('Plugin theme_fresk loaded');\"\n      },\n      {\n        \"filename\": \"archivo_inexistente\",\n        \"found\": false,\n        \"content\": null\n      }\n    ]\n  }\n}"
						}
					]
				}
			]
		},
		{
			"name": "5. Setup",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"setup\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Obtiene la configuración automatizada recomendada para el plugin desde archivos YAML. Busca la versión exacta o la versión compatible más alta (menor o igual a la versión del plugin)."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"setup\",\n  \"plugin\": \"block_tresipuntsepe\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"setup\",\n  \"data\": {\n    \"rules\": {\n      \"rule1\": true,\n      \"rule2\": false\n    },\n    \"defaults\": {\n      \"enabled\": true,\n      \"auto_update\": false\n    },\n    \"settings\": {\n      \"key1\": \"value1\",\n      \"key2\": \"value2\"\n    }\n  }\n}"
				},
				{
					"name": "Error - Site Not Found",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"setup\",\n  \"plugin\": \"block_tresipuntsepe\",\n  \"host\": \"https://sitio-inexistente.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unauthorized",
					"code": 401,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Site not found for this host. Host searched: https://sitio-inexistente.com. Available hosts: https://moodle.ejemplo.com\",\n  \"code\": 3000,\n  \"action\": \"setup\",\n  \"data\": {\n    \"searched_host\": \"https://sitio-inexistente.com\",\n    \"original_host\": \"https://sitio-inexistente.com\",\n    \"available_hosts\": [\"https://moodle.ejemplo.com\"]\n  }\n}"
				},
				{
					"name": "Error - Configuración No Encontrada",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"setup\",\n  \"plugin\": \"plugin_sin_config\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Not Found",
					"code": 404,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"No compatible setup configuration found for this product version\",\n  \"code\": 3002,\n  \"action\": \"setup\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Archivo YAML Inválido",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"setup\",\n  \"plugin\": \"block_tresipuntsepe\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Internal Server Error",
					"code": 500,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Invalid or unreadable setup configuration file\",\n  \"code\": 3003,\n  \"action\": \"setup\",\n  \"data\": {}\n}"
				}
			]
		},
		{
			"name": "5.1. Features",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"features\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Obtiene las funcionalidades (features) publicadas de un producto. Busca la versión compatible de features (versión exacta o la más alta compatible menor o igual a la versión del plugin). Solo devuelve features con status = published, ordenadas por sort_order ascendente."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"features\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"features\",\n  \"data\": [\n    {\n      \"title\": \"Apariencia del curso\",\n      \"description\": \"Configuración visual del curso\",\n      \"content_html\": \"<p>Contenido HTML de la funcionalidad con imágenes y formato...</p>\",\n      \"thumbnail_url\": \"https://tu-dominio.com/storage/features/1/thumbnail_xxx.jpg\",\n      \"header_url\": \"https://tu-dominio.com/storage/features/1/header_xxx.jpg\",\n      \"sort_order\": 1,\n      \"updated_at\": \"2026-01-13T10:30:00Z\"\n    },\n    {\n      \"title\": \"Personalización avanzada\",\n      \"description\": \"Opciones de personalización del tema\",\n      \"content_html\": \"<p>Más contenido HTML...</p>\",\n      \"thumbnail_url\": null,\n      \"header_url\": null,\n      \"sort_order\": 2,\n      \"updated_at\": \"2026-01-14T15:45:00Z\"\n    }\n  ]\n}"
				},
				{
					"name": "Success - Sin Features Publicadas",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"features\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"features\",\n  \"data\": []\n}"
				},
				{
					"name": "Error - Producto No Encontrado",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"features\",\n  \"plugin\": \"plugin_inexistente\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unauthorized",
					"code": 401,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Product not validated\",\n  \"code\": 3000,\n  \"action\": \"features\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Sin Versión Compatible",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"features\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2020010100\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Not Found",
					"code": 404,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"No compatible features version found for this product version\",\n  \"code\": 3002,\n  \"action\": \"features\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Formato de Versión Inválido",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"features\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"invalid\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Internal Server Error",
					"code": 500,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Invalid version format. Expected YYYYMMDDXX format (10 digits)\",\n  \"code\": 3003,\n  \"action\": \"features\",\n  \"data\": {}\n}"
				}
			]
		},
		{
			"name": "5.2. Tutoriales",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"tutorials\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Obtiene los tutoriales (vídeos) publicados de un producto. Busca la versión compatible de tutoriales (versión exacta o la más alta compatible menor o igual a la versión del plugin). Solo devuelve tutoriales con status = published, ordenados por sort_order ascendente."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"tutorials\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"tutorials\",\n  \"data\": [\n    {\n      \"title\": \"Configuración inicial del tema\",\n      \"desc\": \"Aprende a configurar el tema desde cero\",\n      \"platform\": \"youtube\",\n      \"videoid\": \"dQw4w9WgXcQ\",\n      \"video_url\": \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\n      \"embed_url\": \"https://www.youtube.com/embed/dQw4w9WgXcQ\",\n      \"sort_order\": 1,\n      \"updated_at\": \"2026-01-13T10:30:00Z\"\n    },\n    {\n      \"title\": \"Personalización avanzada\",\n      \"desc\": \"Tutorial sobre opciones avanzadas de personalización\",\n      \"platform\": \"vimeo\",\n      \"videoid\": \"123456789\",\n      \"video_url\": \"https://vimeo.com/123456789\",\n      \"embed_url\": \"https://player.vimeo.com/video/123456789\",\n      \"sort_order\": 2,\n      \"updated_at\": \"2026-01-14T15:45:00Z\"\n    }\n  ]\n}"
				},
				{
					"name": "Success - Sin Tutoriales Publicados",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"tutorials\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"tutorials\",\n  \"data\": []\n}"
				},
				{
					"name": "Error - Producto No Encontrado",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"tutorials\",\n  \"plugin\": \"plugin_inexistente\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unauthorized",
					"code": 401,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Product not validated\",\n  \"code\": 4000,\n  \"action\": \"tutorials\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Sin Versión Compatible",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"tutorials\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2020010100\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Not Found",
					"code": 404,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"No compatible tutorials version found for this product version\",\n  \"code\": 4002,\n  \"action\": \"tutorials\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Formato de Versión Inválido",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"tutorials\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"invalid\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Internal Server Error",
					"code": 500,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Invalid version format. Expected YYYYMMDDXX format (10 digits)\",\n  \"code\": 4003,\n  \"action\": \"tutorials\",\n  \"data\": {}\n}"
				}
			]
		},
		{
			"name": "5.3. Resources",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"resources\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Obtiene los recursos (material relacionado) publicados y públicos de un producto. Busca la versión compatible de recursos (versión exacta o la más alta compatible menor o igual a la versión del plugin). Solo devuelve recursos con status = published e is_public = true, ordenados por sort_order ascendente."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"resources\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"resources\",\n  \"data\": [\n    {\n      \"title\": \"Guía de instalación\",\n      \"description\": \"Documento PDF con instrucciones detalladas\",\n      \"type\": \"file\",\n      \"file_url\": \"https://tu-dominio.com/storage/resources/1/guia_instalacion_20260116115000_abc123.pdf\",\n      \"original_filename\": \"guia_instalacion.pdf\",\n      \"size\": 524288,\n      \"mime\": \"application/pdf\",\n      \"read_time\": 300,\n      \"sort_order\": 1,\n      \"updated_at\": \"2026-01-13T10:30:00Z\"\n    },\n    {\n      \"title\": \"Documentación oficial\",\n      \"description\": \"Enlace a la documentación completa\",\n      \"type\": \"external\",\n      \"url\": \"https://docs.ejemplo.com/theme_fresk\",\n      \"read_time\": 600,\n      \"sort_order\": 2,\n      \"updated_at\": \"2026-01-14T15:45:00Z\"\n    }\n  ]\n}"
				},
				{
					"name": "Success - Sin Recursos Publicados",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"resources\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"resources\",\n  \"data\": []\n}"
				},
				{
					"name": "Error - Producto No Encontrado",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"resources\",\n  \"plugin\": \"plugin_inexistente\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unauthorized",
					"code": 401,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Product not validated\",\n  \"code\": 5000,\n  \"action\": \"resources\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Sin Versión Compatible",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"resources\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2020010100\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Not Found",
					"code": 404,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"No compatible resources version found for this product version\",\n  \"code\": 5002,\n  \"action\": \"resources\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Formato de Versión Inválido",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"resources\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"invalid\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Internal Server Error",
					"code": 500,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"Invalid version format. Expected YYYYMMDDXX format (10 digits)\",\n  \"code\": 5003,\n  \"action\": \"resources\",\n  \"data\": {}\n}"
				}
			]
		},
		{
			"name": "6. Data",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"data\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"courses\": 150,\n    \"users\": 5000,\n    \"activeusers\": 3200,\n    \"enrolments\": 12000,\n    \"moodlerelease\": \"4.5.1\",\n    \"language\": \"es\",\n    \"countrycode\": \"ES\",\n    \"contactemail\": \"admin@ejemplo.com\"\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Envía datos de telemetría desde Moodle hacia Laravel."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"data\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"courses\": 150,\n    \"users\": 5000,\n    \"activeusers\": 3200\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"data\",\n  \"data\": {\n    \"received\": true,\n    \"environment_id\": 3\n  }\n}"
				}
			]
		},
		{
			"name": "7. Plugins",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"plugins\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"plugins\": [\n      {\n        \"name\": \"theme_fresk\",\n        \"component\": \"theme_fresk\",\n        \"type\": \"theme\",\n        \"version\": \"2025110401\",\n        \"versiondisk\": \"2025110401\",\n        \"versiondb\": \"2025110401\",\n        \"release\": \"1.0.0\",\n        \"dependencies\": [],\n        \"availableupdates\": []\n      },\n      {\n        \"name\": \"block_tresipuntsepe\",\n        \"component\": \"block_tresipuntsepe\",\n        \"type\": \"block\",\n        \"version\": \"2025110301\",\n        \"release\": \"2.1.0\"\n      }\n    ]\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Envía información sobre plugins instalados en Moodle."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"plugins\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"plugins\": [\n      {\n        \"name\": \"theme_fresk\",\n        \"component\": \"theme_fresk\",\n        \"type\": \"theme\",\n        \"version\": \"2025110401\"\n      }\n    ]\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"plugins\",\n  \"data\": {\n    \"processed\": 2,\n    \"total\": 2,\n    \"errors\": []\n  }\n}"
				},
				{
					"name": "Success con Errores Parciales",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"plugins\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"https://moodle.ejemplo.com\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  },\n  \"data\": {\n    \"plugins\": [\n      {\n        \"name\": \"theme_fresk\",\n        \"version\": \"2025110401\"\n      },\n      {\n        \"version\": \"2025110301\"\n      }\n    ]\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"plugins\",\n  \"data\": {\n    \"processed\": 1,\n    \"total\": 2,\n    \"errors\": [\n      {\n        \"plugin\": \"unknown\",\n        \"error\": \"El plugin debe tener al menos name o component\"\n      }\n    ]\n  }\n}"
				}
			]
		},
		{
			"name": "8. Stats",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"action\": \"stats\",\n  \"plugin\": \"local_tresipunt\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1+ (Build: 20251219)\",\n    \"token\": \"{{token_moodle}}\",\n    \"type\": \"moodle\",\n    \"env\": \"pro\",\n    \"key\": \"S3-3434\"\n  },\n  \"projectid\": \"S3-3434\",\n  \"date\": \"2026-03-05\",\n  \"data\": {\n    \"domain\": \"http://moodle311.test\",\n    \"policyagreed\": \"1\",\n    \"language\": \"en\",\n    \"countrycode\": \"ES\",\n    \"privacy\": \"notdisplayed\",\n    \"contactemail\": \"admin@ejemplo.com\",\n    \"contactable\": null,\n    \"emailalert\": \"0\",\n    \"emailalertemail\": null,\n    \"commnews\": \"0\",\n    \"commnewsemail\": null,\n    \"contactname\": \"Admin Usuario\",\n    \"name\": \"Moodle 3.11\",\n    \"description\": null,\n    \"imageurl\": null,\n    \"contactphone\": null,\n    \"regioncode\": null,\n    \"geolocation\": null,\n    \"street\": null,\n    \"courses\": 14,\n    \"users\": 10,\n    \"activeusers\": 2,\n    \"enrolments\": 2,\n    \"posts\": 0,\n    \"questions\": 2,\n    \"resources\": 2,\n    \"badges\": 0,\n    \"issuedbadges\": 0,\n    \"participantnumberaverage\": 0,\n    \"activeparticipantnumberaverage\": 0,\n    \"modulenumberaverage\": 2,\n    \"moodlerelease\": \"3.11.3+ (Build: 20211013)\",\n    \"url\": \"http://moodle311.test\",\n    \"mobileservicesenabled\": 0,\n    \"mobilenotificationsenabled\": 0,\n    \"registereduserdevices\": 0,\n    \"registeredactiveuserdevices\": 0,\n    \"analyticsenabledmodels\": 4,\n    \"analyticspredictions\": 0,\n    \"analyticsactions\": 0,\n    \"analyticsactionsnotuseful\": 0,\n    \"sitename\": \"Moodle 3.11\"\n  }\n}"
				},
				"url": {
					"raw": "{{base_url}}",
					"host": ["{{base_url}}"],
					"path": [""]
				},
				"description": "Guarda un snapshot diario de métricas del sitio. Obligatorios: host, date (YYYY-MM-DD), data (objeto con métricas). Plugin y version son opcionales. Idempotencia: un único registro por (environment_id, date); si ya existe se actualiza el snapshot de ese día. El host debe estar vinculado al token. No actualiza metadatos de Environment ni Data."
			},
			"response": [
				{
					"name": "Success",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"stats\",\n  \"host\": \"{{host}}\",\n  \"date\": \"2026-03-05\",\n  \"data\": {\n    \"courses\": 14,\n    \"users\": 10,\n    \"activeusers\": 2,\n    \"moodlerelease\": \"3.11.3+ (Build: 20211013)\",\n    \"sitename\": \"Moodle 3.11\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "OK",
					"code": 200,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": true,\n  \"error\": \"\",\n  \"code\": 0,\n  \"action\": \"stats\",\n  \"data\": {\n    \"saved\": true,\n    \"environment_id\": 3,\n    \"date\": \"2026-03-05\"\n  }\n}"
				},
				{
					"name": "Error - Host no vinculado al token",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"stats\",\n  \"host\": \"https://otro-sitio.com\",\n  \"date\": \"2026-03-05\",\n  \"data\": { \"courses\": 10, \"users\": 5 }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Forbidden",
					"code": 403,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"El host proporcionado no está vinculado a este token\",\n  \"code\": 403,\n  \"action\": \"stats\",\n  \"data\": {}\n}"
				},
				{
					"name": "Error - Validación (date o data faltante)",
					"originalRequest": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"stats\",\n  \"host\": \"{{host}}\",\n  \"data\": { \"courses\": 10 }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						}
					},
					"status": "Unprocessable Entity",
					"code": 422,
					"_postman_previewlanguage": "json",
					"header": [
						{
							"key": "Content-Type",
							"value": "application/json"
						}
					],
					"cookie": [],
					"body": "{\n  \"success\": false,\n  \"error\": \"El campo date es obligatorio para la acción stats.\",\n  \"code\": 400,\n  \"action\": \"stats\",\n  \"data\": { \"errors\": [\"El campo date es obligatorio para la acción stats.\"] }\n}"
				}
			]
		},
		{
			"name": "Errores Comunes",
			"item": [
				{
					"name": "Token No Proporcionado",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"licence\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"auth": {
							"type": "noauth"
						},
						"description": "Ejemplo de error cuando no se proporciona el Bearer Token."
					},
					"response": [
						{
							"name": "401 Unauthorized",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Unauthorized",
							"code": 401,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"Token no proporcionado\",\n  \"code\": 401,\n  \"action\": null,\n  \"data\": {}\n}"
						}
					]
				},
				{
					"name": "Token Inválido",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"licence\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"description": "Ejemplo de error cuando el token no existe en la base de datos."
					},
					"response": [
						{
							"name": "401 Unauthorized",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Unauthorized",
							"code": 401,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"Token no válido\",\n  \"code\": 401,\n  \"action\": null,\n  \"data\": {}\n}"
						}
					]
				},
				{
					"name": "Token Expirado",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"action\": \"licence\",\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\",\n  \"version\": \"2025110401\",\n  \"site\": {\n    \"version\": \"2025081101\",\n    \"release\": \"4.5.1\"\n  }\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"description": "Ejemplo de error cuando el token ha expirado."
					},
					"response": [
						{
							"name": "403 Forbidden",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Forbidden",
							"code": 403,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"Token expirado. Fecha de expiración: 2025-01-01 00:00:00\",\n  \"code\": 403,\n  \"action\": null,\n  \"data\": {}\n}"
						}
					]
				},
				{
					"name": "Error de Validación",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"plugin\": \"theme_fresk\",\n  \"host\": \"{{host}}\"\n}"
						},
						"url": {
							"raw": "{{base_url}}",
							"host": ["{{base_url}}"],
							"path": [""]
						},
						"description": "Ejemplo de error cuando faltan campos obligatorios."
					},
					"response": [
						{
							"name": "400 Bad Request",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{}"
								},
								"url": {
									"raw": "{{base_url}}",
									"host": ["{{base_url}}"],
									"path": [""]
								}
							},
							"status": "Bad Request",
							"code": 400,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							],
							"cookie": [],
							"body": "{\n  \"success\": false,\n  \"error\": \"El campo action es obligatorio.\",\n  \"code\": 400,\n  \"action\": null,\n  \"data\": {}\n}"
						}
					]
				}
			]
		}
	]
}
