{
	"info": {
		"_postman_id": "e19cb4c5-7894-4427-bd73-83c726190f8b",
		"name": "WP Umbrella - Public API Documentation",
		"description": "This Postman project lets you use the WP Umbrella API to test the various endpoints.\n\n## API Responses\n\nThe format of an API response is:\n\n``` json\n{\n    code : \"error_code\" // success, internal_error, etc...\n    data : \"\" // data return\n}\n\n ```\n\n### Headers\n\n**RateLimit**\n\nThe RateLimit header is used to manage and communicate request limits as part of rate limiting policies. This header typically includes information such as the maximum number of requests allowed, the number of requests remaining in the current time window, and the time until the limit resets.\n\n• **Example Value**: limit=1000, remaining=998, reset=41\n\n• **Explanation of Values**:\n\n• limit=1000: Indicates the total number of requests allowed within a defined period.\n\n• remaining=998: The number of requests left before reaching the limit.\n\n• reset=41: The time (in seconds) remaining until the rate limit window resets.\n\n• **Usage**: This header is useful for API clients and front-end services to monitor their request volume and avoid being blocked for exceeding quotas.\n\n**Content-Range**\n\nThe Content-Range header is used to specify the portion of a resource returned in an HTTP partial response, commonly used when a specific range of data is requested. This header is primarily associated with the 206 Partial Content status code, allowing clients to resume downloads or retrieve a specific part of a resource.\n\n• **Example Value**: 0-5/6\n\n• **Explanation of Values**:\n\n• 0-5: Indicates the range of content returned in this response (e.g., from byte 0 to byte 5).\n\n• /6: Indicates the total size of the resource (6 bytes in this example).\n\n• **Usage**: This header is particularly useful for segmented downloads or systems that require partial data access (e.g., video streaming, large file retrieval).",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
		"_exporter_id": "456054",
		"_collection_link": "https://wp-umbrella-team.postman.co/workspace/WP-Umbrella~10dd90af-ba17-47d1-9ab6-afb2a3519930/collection/456054-e19cb4c5-7894-4427-bd73-83c726190f8b?action=share&source=collection_link&creator=456054"
	},
	"item": [
		{
			"name": "Me",
			"item": [
				{
					"name": "Retrieve current user information",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript",
								"packages": {}
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{publicApiUrl}}/me",
							"host": [
								"{{publicApiUrl}}"
							],
							"path": [
								"me"
							]
						},
						"description": "### Retrieve current user information\n\nThis endpoint retrieves user information.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/me`\n    \n\n#### Response\n\nUpon a successful execution (Status: 200), the response will be in JSON format and will include `code` and `data` fields. The `code` value will be `success`, and the `data` field will include the following information:\n\n- `id` (integer): User ID\n    \n- `firstname` (string): User's first name\n    \n- `lastname` (string): User's last name\n    \n- `email` (string): User's email address\n    \n\nWhen the access token is missing, the API returns a `401 Unauthorized` status with the following response:\n\n``` json\n{\n    \"stauts\": \"error\",\n    \"code\": \"missing_token\",\n    \"message\": \"Missing token\"\n}\n\n ```\n\nWhen the access token is invalid, the API will return a `401 Unauthorized` status with the following response:\n\n``` json\n{\n    \"status\": 401,\n    \"code\": \"invalid_token\",\n    \"message\": \"Invalid token: access token is invalid\"\n}\n\n ```\n\nWhen the access token scope is incorrect, the API returns a `403 Forbidden` status with the following response:\n\n``` json\n{\n    \"stauts\": \"error\",\n    \"code\": \"invalid_scope\",\n    \"message\": \"Invalid scope\"\n}\n\n ```\n\nWhen an internal error occurs, the API returns a `500 Internal Server Error` status with the following response:\n\n``` json\n{\n    \"code\": \"internal_error\"\n}\n\n ```"
					},
					"response": []
				}
			],
			"description": "Endpoints for the current user"
		},
		{
			"name": "Projects",
			"item": [
				{
					"name": "Themes",
					"item": [
						{
							"name": "Retrieve themes by project",
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{publicApiUrl}}/projects/{{projectId}}/themes",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"projects",
										"{{projectId}}",
										"themes"
									]
								},
								"description": "### Get Project Themes\n\nThis endpoint retrieves a list of themes for a specific project.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/projects/:projectId/themes`\n    \n- Query Parameters:\n    \n    - page (integer, optional) - The page number for pagination. By default, 1. The minimum value is 1.\n        \n    - per_page (integer, optional) - The number of plugins per page. By default, 10. The minimum value is 1.\n        \n    - sort (string, optional) - The field to sort the results by. Can be `name` (default) or `author`\n        \n    - order (string, optional) - The order of sorting (`asc` (default) or `desc`).\n        \n\n#### Response\n\n- Status: 200\n    \n- Content-Type: application/json\n    \n- Content-Range: first index-last index/total count. (e.g. 10-19/30)\n    \n\n``` json\n{\n  \"code\": \"success\",\n  \"data\": [\n    {\n      \"id\": \"\",\n      \"name\": \"NAME_OF_THEME\",\n      \"is_active\": true,\n      \"version\": \"\",\n      \"latest_version\": \"\",\n      \"require_wp_version\": \"\",\n      \"require_php_version\": \"\",\n      \"author\": \"\",\n      \"author_uri\": \"\",\n      \"theme_uri\": \"\"\n    }\n  ]\n}\n\n ```\n\nWhen query parameters are wrong, it returns `400 Bad Request` with the response like the following:\n\n``` json\n{\n    \"code\": \"bad_params\",\n    \"message\": \"\\\"sort\\\" must be one of [name, author]\"\n}\n\n ```"
							},
							"response": []
						}
					]
				},
				{
					"name": "Vulnerabilities",
					"item": [
						{
							"name": "Retrieve vulnerabilities",
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{publicApiUrl}}/projects/{{projectId}}/vulnerabilities",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"projects",
										"{{projectId}}",
										"vulnerabilities"
									]
								},
								"description": "### Get Project Vulnerabilities\n\nThis endpoint retrieves a list of vulnerabilities for a specific project.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/projects/:projectId/vulnerabilities`\n    \n\n#### Response\n\n- Status: 200\n    \n- Content-Type: application/json\n    \n\nThe response body is a JSON object with the schema described in the request body section.\n\n``` json\n{\n    \"code\": \"success\",\n    \"data\": {\n        \"plugin_vulnerabilities\": [\n            {\n                \"plugin\": {\n                    \"id\": \"string\",\n                    \"name\": \"string\",\n                    \"version\": \"string\",\n                    \"latest_version\": \"string\"\n                },\n                \"vulnerabilities\": [\n                    {\n                        \"title\": \"string\",\n                        \"description\": \"string\",\n                        \"disclosure_date\": \"ISO date string\",\n                        \"cvss_score\": 0,\n                        \"version_affected_in\": \"string\",\n                        \"version_fixed_in\": \"string\",\n                        \"patchstack_id\": 0,\n                        \"patchstack_url\": \"string\"\n                    }\n                ]\n            }\n        ],\n        \"theme_vulnerabilities\": [\n            {\n                \"theme\": {\n                    \"id\": \"string\",\n                    \"name\": \"string\",\n                    \"version\": \"string\",\n                    \"latest_version\": \"string\"\n                },\n                \"vulnerabilities\": [\n                    {\n                        \"title\": \"string\",\n                        \"description\": \"string\",\n                        \"disclosure_date\": \"ISO date string\",\n                        \"cvss_score\": 0,\n                        \"version_affected_in\": \"string\",\n                        \"version_fixed_in\": \"string\",\n                        \"patchstack_id\": 0,\n                        \"patchstack_url\": \"string\"\n                    }\n                ]\n            }\n        ],\n        \"wordpress_vulnerabilities\": {\n            \"wordpress\": {\n                \"version\": \"string\",\n                \"latest_version\": \"string\"\n            },\n            \"vulnerabilities\": [\n                {\n                    \"title\": \"string\",\n                    \"description\": \"string\",\n                    \"disclosure_date\": \"ISO date string\",\n                    \"cvss_score\": 0,\n                    \"version_affected_in\": \"string\",\n                    \"version_fixed_in\": \"string\",\n                    \"patchstack_id\": 0,\n                    \"patchstack_url\": \"string\"\n                }\n            ]\n        },\n        \"last_scan_date\": \"ISO date string\",\n        \"scan_in_progress\": true\n    }\n}\n\n ```"
							},
							"response": []
						}
					]
				},
				{
					"name": "Security Checks",
					"item": [
						{
							"name": "Retrieve security check points",
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{publicApiUrl}}/projects/{{projectId}}/security-checks",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"projects",
										"{{projectId}}",
										"security-checks"
									]
								},
								"description": "### Get Project Vulnerabilities\n\nThis endpoint retrieves a list of vulnerabilities for a specific project.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/projects/:projectId/vulnerabilities`\n    \n\n#### Response\n\n- Status: 200\n    \n- Content-Type: application/json\n    \n\nThe response body is a JSON object with the following schema. The `passed_checkpoints` and `failed_checkpoints` can contain the following values:\n\n- `has_ssl`\n    \n- `is_indexable`\n    \n- `wp_is_up_to_date`\n    \n- `php_version_is_supported`\n    \n- `wp_debug_is_defined`\n    \n- `plugins_inactive`\n    \n- `themes_inactive`\n    \n\n``` json\n{\n    \"code\": \"success\",\n    \"data\": {\n        \"passed_checkpoints\": [\"string\"],\n        \"failed_checkpoints\": [\"string\"],\n        \"inactive_plugins\": [\n            {\n                \"id\": \"string\",\n                \"name\": \"string\",\n                \"version\": \"string\",\n                \"slug\": \"string\"\n            }\n        ],\n        \"inactive_themes\": [\n            {\n                \"id\": \"string\",\n                \"name\": \"string\",\n                \"stylesheet\": \"string\",\n                \"version\": \"string\",\n                \"template\": \"string\"\n            }\n        ],\n        \"wordpress\": {\n            \"version\": \"string\",\n            \"latest_version\": \"string\",\n            \"php_current_version\": \"string\"\n        }\n    }\n}\n\n ```"
							},
							"response": []
						}
					]
				},
				{
					"name": "Database Optimization",
					"item": [
						{
							"name": "Optimize database for a project",
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"auto_drafts\": true,\n  \"expired_transients\": true,\n  \"post_revisions\": true,\n  \"trashed_posts\": true\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{publicApiUrl}}/projects/{{projectId}}/database-optimization",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"projects",
										"{{projectId}}",
										"database-optimization"
									]
								},
								"description": "### This endpoint optimizes the database for a specific project.\n\n#### Request\n\n- Method: POST\n- URL: `/projects/{{projectId}}/database-optimization`\n\n#### Response\n\n- Status: 200 Success\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"success\",\n    \"data\": {\n        \"processId\": \"cm4s1zmdc00012nufwpwp1th7\"\n    },\n    \"links\": {\n        \"process\": \"https://public-api.wp-umbrella.com/processes/cm4s1zmdc00012nufwpwp1th7\"\n    }\n}\n```\n\n- Status: 400 Invalid parameters\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"bad_params\",\n    \"message\": \"At least one optimization option must be enabled\"\n}\n```\n\n"
							},
							"response": []
						}
					],
					"description": "Endpoints for database-optimization"
				},
				{
					"name": "Tasks",
					"item": [
						{
							"name": "Retrieve tasks for a project",
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{publicApiUrl}}/projects/{{projectId}}/tasks",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"projects",
										"{{projectId}}",
										"tasks"
									]
								},
								"description": "### This endpoint retrieves a list of tasks for a specific project.\n\n#### Request\n\n- Method: GET\n- URL: `/projects/{{projectId}}/tasks`\n\n#### Query Parameters\n\n- `types` (string[], optional): - UPDATE_PLUGIN - Update a plugin\n    - UPDATE_THEME - Update a theme\n    - UPDATE_CORE - Update WordPress core\n    - ACTIVATE_PLUGIN - Activate a plugin\n    - DEACTIVATE_PLUGIN - Deactivate a plugin\n    - DELETE_PLUGIN - Delete a plugin\n    - DELETE_THEME - Delete a theme\n    - OPTIMIZE_DATABASE - Optimize database.\n- `from` (number, optional): .\n- `to` (number, optional): @response 200 Success\n```json\n{\n\"code\": \"success\",\n\"data\": [\n{\n\"id\": \"task123\",\n\"type\": \"UPDATE_PLUGIN\",\n\"code\": \"success\",\n\"entities\": {\n\"id\": \"plugin123\",\n\"name\": \"Example Plugin\",\n\"plugin\": \"example-plugin/example-plugin.php\",\n\"version\": \"2.0.0\",\n\"is_active\": true,\n\"old_version\": \"1.9.0\",\n\"update_type\": \"QUICK_UPDATE\"\n},\n\"entities_result\": {\n\"status_code\": 200,\n\"visual_regression\": {\n\"diff_percent\": 0.5,\n\"mainProcessTaskScreenshotId\": \"screenshot123\",\n\"compareProcessTaskScreenshotId\": \"screenshot456\"\n}\n},\n\"created_at\": \"2024-01-01T12:00:00.000Z\"\n}\n],\n\"links\": {\n\"pagination\": {\n\"first\": \"https://public-api.wp-umbrella.com?page=1&per_page=10\",\n\"last\": \"https://public-api.wp-umbrella.com?page=1&per_page=10\"\n}\n}\n}\n```.\n\n#### Response\n\n- Status: 200 Success\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"success\",\n    \"data\": [\n        {\n            \"id\": \"task123\",\n            \"type\": \"UPDATE_PLUGIN\",\n            \"code\": \"success\",\n            \"entities\": {\n                \"id\": \"plugin123\",\n                \"name\": \"Example Plugin\",\n                \"plugin\": \"example-plugin/example-plugin.php\",\n                \"version\": \"2.0.0\",\n                \"is_active\": true,\n                \"old_version\": \"1.9.0\",\n                \"update_type\": \"QUICK_UPDATE\"\n            },\n            \"entities_result\": {\n                \"status_code\": 200,\n                \"visual_regression\": {\n                    \"diff_percent\": 0.5,\n                    \"mainProcessTaskScreenshotId\": \"screenshot123\",\n                    \"compareProcessTaskScreenshotId\": \"screenshot456\"\n                }\n            },\n            \"created_at\": \"2024-01-01T12:00:00.000Z\"\n        }\n    ],\n    \"links\": {\n        \"pagination\": {\n            \"first\": \"https://public-api.wp-umbrella.com?page=1&per_page=10\",\n            \"last\": \"https://public-api.wp-umbrella.com?page=1&per_page=10\"\n        }\n    }\n}\n```\n\n"
							},
							"response": []
						}
					],
					"description": "Endpoints for tasks"
				},
				{
					"name": "Plugins",
					"item": [
						{
							"name": "Retrieve plugins for a project",
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{publicApiUrl}}/projects/{{projectId}}/plugins",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"projects",
										"{{projectId}}",
										"plugins"
									]
								},
								"description": "### This endpoint retrieves a list of plugins for a specific project.\n\n#### Request\n\n- Method: GET\n- URL: `/projects/{{projectId}}/plugins`\n\n#### Response\n\n- Status: 200 Success\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"success\",\n    \"data\": [\n        {\n            \"id\": \"plugin123\",\n            \"name\": \"Example Plugin\",\n            \"key\": \"example-plugin/example-plugin.php\",\n            \"is_active\": true,\n            \"version\": \"2.1.0\",\n            \"require_wp_version\": \"5.8\",\n            \"require_php_version\": \"7.4\",\n            \"need_update\": {\n                \"id\": \"w.org/plugins/example-plugin\",\n                \"url\": \"https://wordpress.org/plugins/example-plugin/\",\n                \"slug\": \"example-plugin\",\n                \"plugin\": \"example-plugin/example-plugin.php\",\n                \"tested\": \"6.7.1\",\n                \"package\": \"https://downloads.wordpress.org/plugin/example-plugin.2.2.0.zip\",\n                \"new_version\": \"2.2.0\",\n                \"requires_php\": \"7.4\",\n                \"compatibility\": \"\"\n            }\n        },\n        {\n            \"id\": \"plugin456\",\n            \"name\": \"Another Plugin\",\n            \"key\": \"another-plugin/another-plugin.php\",\n            \"is_active\": false,\n            \"version\": \"1.5.0\",\n            \"require_wp_version\": \"5.6\",\n            \"require_php_version\": \"7.2\",\n            \"need_update\": {}\n        }\n    ],\n    \"links\": {\n        \"pagination\": {\n            \"first\": \"https://public-api.wp-umbrella.com?page=1&per_page=10\",\n            \"last\": \"https://public-api.wp-umbrella.com?page=1&per_page=10\"\n        }\n    }\n}\n```\n\n- Status: 400 Invalid parameters\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"bad_params\",\n    \"message\": \"\\\"sort\\\" must be one of [name]\"\n}\n```\n\n"
							},
							"response": []
						},
						{
							"name": "Update plugins for a project",
							"request": {
								"method": "POST",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"plugin_keys\": [\n    \"wp-seopress/seopress.php\",\n    \"wp-health/wp-health.php\"\n  ],\n  \"clear_cache\": false\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{publicApiUrl}}/projects/{{projectId}}/plugins/update",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"projects",
										"{{projectId}}",
										"plugins",
										"update"
									]
								},
								"description": "### This endpoint updates plugins for a specific project.\n\n#### Request\n\n- Method: POST\n- URL: `/projects/{{projectId}}/plugins/update`\n\n#### Body Parameters\n\n- `plugin_keys` (string[], required): - Array of plugin keys to update (required).\n- `update_type` (string, required): - Type of update to perform (QUICK_UPDATE or SAFE_UPDATE or ADVANCED_SAFE_UPDATE) (optional) - Default: QUICK_UPDATE.\n\n#### Response\n\n- Status: 200 Success\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"success\",\n    \"data\": {\n        \"processId\": \"cm4s1zmdc00012nufwpwp1th7\"\n    },\n    \"links\": {\n        \"process\": \"https://public-api.wp-umbrella.com/processes/cm4s1zmdc00012nufwpwp1th7\"\n    }\n}\n```\n\n- Status: 400 Invalid parameters\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"bad_params\",\n    \"message\": \"\\\"plugin_keys\\\" is required\"\n}\n```\n\n- Status: 404 Not Found\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"not_found\",\n    \"message\": \"Plugins not found\"\n}\n```\n\n"
							},
							"response": []
						}
					],
					"description": "Endpoints for plugins"
				},
				{
					"name": "Retrieve list of projects",
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{publicApiUrl}}/projects",
							"host": [
								"{{publicApiUrl}}"
							],
							"path": [
								"projects"
							]
						},
						"description": "### Retrieve list of projects\n\nThis endpoint retrieves a list of projects of a current user with pagination and sorting options.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/projects`\n    \n\n#### Query Parameters\n\n- `page` (integer, optional): The page number for pagination. By default, `1`. The minimum value is `1`.\n    \n- `per_page` (integer, optional): The number of projects per page. By default, `10`. The minimum value is `1`.\n    \n- `sort` (string, optional): The field to sort the projects by. Can be `name` (default) or `base_url`.\n    \n- `order` (string, optional): The order of sorting (`asc` (default) or `desc`).\n    \n\n#### Response\n\n- Status: 200 OK\n    \n- Content-Type: application/json\n    \n- `Content-Range` header: -/. (e.g. `10-19/30`)\n    \n\nExample Response Body:\n\n``` json\n{\n    \"code\": \"success\",\n    \"data\": [\n        {\n            // Site Details\n            \"base_url\": \"string\",                    // Base URL of the monitored site\n            \"name\": \"string\",                        // Name of the site\n            \"source_domain\": \"string\",               // Source domain of the site\n            \"id\": integer,                           // Unique identifier for the site\n            \"hosting\": \"string\",                     // Hosting information (e.g., server name or environment)\n            \"is_currently_down\": boolean,            // Indicates if the site is currently down\n            \"count_php_issues\": integer,             // Number of PHP-related issues detected\n            \"latest_downtime\": \"string\",             // ISO 8601 timestamp of the latest downtime\n            \"latest_ping\": integer,                  // Latest ping response time in milliseconds\n            \"latest_performance_score\": float,       // Performance score (range: 0 - 1)\n            \"user_id_wp_login\": integer | null,      // User ID for WordPress login, if available\n            \"created_at\": \"string\",                  // ISO 8601 timestamp of when the site was added\n            \"starred\": boolean,                      // Indicates if the site is marked as starred/favorite\n            \"userId\": integer,                       // ID of the user who owns this site\n            // Labels\n            \"labels\": [],                            // Array of labels associated with the site\n            // Plugins Information\n            \"plugins\": [\n                {\n                    \"version\": \"string\",             // Plugin version\n                    \"key\": \"string\",                 // Unique plugin identifier (path format)\n                    \"slug\": \"string\",                // Slug of the plugin\n                    \"need_update\": boolean,          // Indicates if the plugin needs an update\n                    \"is_active\": boolean             // Indicates if the plugin is currently active\n                }\n            ],\n            // Themes Information\n            \"themes\": [\n                {\n                    \"id\": \"string\",                  // Unique theme identifier\n                    \"version\": \"string\",             // Theme version\n                    \"stylesheet\": \"string\",          // Stylesheet identifier of the theme\n                    \"latest_version\": \"string\",      // Latest available version of the theme\n                    \"template\": \"string\",            // Template name\n                    \"is_active\": boolean,            // Indicates if the theme is active\n                    \"ThemeVulnerability\": []         // Array of vulnerabilities associated with the theme, if any\n                }\n            ],\n            // Warnings & Health Checks\n            \"warnings\": {\n                \"wordpress_version\": \"string\",       // Current WordPress version on the site\n                \"php_current_version\": \"string\",     // Current PHP version running on the site\n                \"php_recommended_version\": \"string\", // Recommended PHP version for optimal performance\n                \"php_is_secure\": boolean,            // Indicates if the PHP version is secure\n                \"php_is_supported\": boolean,         // Indicates if the PHP version is officially supported\n                \"is_ssl\": boolean,                   // Indicates if the site is running on SSL\n                \"is_indexable\": boolean,             // Indicates if the site is indexable by search engines\n                \"is_up_to_date\": boolean,            // Indicates if WordPress core, plugins, and themes are up to date\n                \"defined_wp_debug\": boolean,         // Indicates if WP_DEBUG is defined in wp-config.php\n                // Database Optimization Warnings\n                \"total_db_optimization_auto_draft_post\": integer,  // Number of auto-draft posts\n                \"total_db_optimization_expired_transient\": integer, // Number of expired transients\n                \"total_db_optimization_post_revision\": integer,     // Number of post revisions\n                \"total_db_optimization_spam_comment\": integer,      // Number of spam comments\n                \"total_db_optimization_table\": integer,             // Number of database tables that may need optimization\n                \"total_db_optimization_trashed_comment\": integer,   // Number of trashed comments\n                \"total_db_optimization_trashed_post\": integer,      // Number of trashed posts\n                // Vulnerabilities\n                \"WordPressVulnerability\": []         // Array of WordPress core vulnerabilities, if any\n            },\n            // Synchronization Details\n            \"last_synchronization\": {\n                \"date\": \"string\",                    // ISO 8601 timestamp of the last sync\n                \"date_with_success\": \"string\",       // ISO 8601 timestamp of the last successful sync\n                \"date_with_success_timestamp\": integer // UNIX timestamp of the last successful sync\n            },\n            // Vulnerabilities\n            \"vulnerabilities\": {\n                \"plugins\": [\n                    {\n                        \"id\": \"string\"               // Unique identifier for plugin vulnerability\n                    }\n                ],\n                \"themes\": [],                        // Array of theme vulnerabilities, if any\n                \"wordpress\": []                      // Array of WordPress core vulnerabilities, if any\n            },\n            // Maintenance Customer Details\n            \"maintenanceCustomer\": {\n                \"id\": \"string\",                      // Unique identifier for the maintenance customer\n                \"company_name\": \"string\",            // Company name of the maintenance customer\n                \"firstname\": \"string\",               // First name of the maintenance customer\n                \"lastname\": \"string\",                // Last name of the maintenance customer\n                \"website_url\": \"string\"              // Website URL of the maintenance customer\n            } | null                                 // Null if no maintenance customer is associated\n        }\n    ]\n}\n\n ```\n\nWhen query parameters are wrong, it returns `400 Bad Request` with the response like the following:\n\n``` json\n{\n    \"code\": \"bad_params\",\n    \"message\": \"\\\"sort\\\" must be one of [name, base_url]\"\n}\n\n ```"
					},
					"response": []
				},
				{
					"name": "Retrieve a project",
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{publicApiUrl}}/projects/{{projectId}}",
							"host": [
								"{{publicApiUrl}}"
							],
							"path": [
								"projects",
								"{{projectId}}"
							]
						},
						"description": "### Get Project Details\n\nThis endpoint retrieves the details of a specific project.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/projects/:projectId`\n    \n\n#### Response\n\n- `id` (number): The unique identifier of the project.\n    \n- `name` (string): The name of the project.\n    \n- `base_url` (string): The base URL of the project.\n    \n- `php_current_version` (string): The current version of PHP used in the project.\n    \n- `wordpress_version` (string): The version of WordPress used in the project.\n    \n\nThe response will be in JSON format.\n\nIt throws `401 Unauthorized` error with the following response when there is no project for a given ID, or the current user has no access to the given project.\n\n``` json\n{\n    \"status\": 401,\n    \"code\": \"unauthorized_request\",\n    \"message\": \"You are not authorized to access this resource.\"\n}\n\n ```"
					},
					"response": []
				}
			]
		},
		{
			"name": "Processes",
			"item": [
				{
					"name": "ProcessId",
					"item": [
						{
							"name": "Check process status",
							"request": {
								"method": "GET",
								"header": [],
								"url": {
									"raw": "{{publicApiUrl}}/processes/{{processId}}/status",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"processes",
										"{{processId}}",
										"status"
									]
								},
								"description": "### Check the status of process\n\nThe endpoint retrieves the status of a specific process execution. It returns a number of waiting, pending, successful and failed process tasks.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/processes/:processId/status`\n    \n\n#### Response\n\nUpon a successful execution, it returns `200 OK` code with the response like the following:\n\n``` json\n{\n    \"code\": \"success\",\n    \"data\": {\n        \"tasks\": [\n            {\n                \"userId\": 1,\n                \"projectId\": 21,\n                \"progress\": 0,\n                \"details\": {\n                    \"id\": \"cm1p8wcwn0003qt5g9re0c7jg\",\n                    \"name\": \"SEOPress\",\n                    \"plugin\": \"wp-seopress/seopress.php\",\n                    \"version\": \"8.0\",\n                    \"is_active\": true,\n                    \"update_type\": \"QUICK_UPDATE\"\n                },\n                \"detailsResult\": {},\n                \"status\": \"waiting\",\n                \"codeError\": null,\n                \"processId\": \"cm4cdij9u00022qgr8q6phl3l\",\n                \"type\": \"UPDATE_PLUGIN\",\n                \"created_at\": \"2024-12-06T06:37:13.394Z\"\n            }\n        ],\n        \"created_at_timestamp\": 1733467033362,\n        \"finished_at_timestamp\": null,\n        \"is_finished\": false\n    }\n}\n\n ```\n\n**Root Fields**\n\n---\n\n• code (String): Indicates the status of the API call. Example: \"success\".\n\n• data (Object): Contains detailed information about the tasks.\n\n**data Object Fields**\n\n---\n\n• tasks (Array): A list of tasks related to the operation. Each task is an object with its own structure (see below).\n\n• created_at_timestamp (Integer): The timestamp when the task batch was created, in milliseconds since epoch.\n\n• finished_at_timestamp (Integer or null): The timestamp when the task batch was completed. If the batch is not completed, this field is null.\n\n• is_finished (Boolean): Indicates whether the task batch is finished. Example: false.\n\n**tasks Array Fields**\n\n---\n\n• userId (Integer): The ID of the user associated with the task. Example: 1.\n\n• projectId (Integer): The ID of the project related to the task. Example: 21.\n\n• progress (Integer): The progress of the task, expressed as a percentage from 0 to 100. Example: 0.\n\n• details (Object): Contains details about the plugin involved in the task (see below for the structure).\n\n• detailsResult (Object): An optional field for storing the result details of the task. Typically an empty object at the start of the task. Example: {}.\n\n• status (String): The current status of the task. Possible values include: \"waiting\" / \"active\" / \"completed\".\n\n• codeError (String or null): If an error occurs during the task, this field contains the error code. Otherwise, it is null.\n\n• processId (String): A unique identifier for the task’s process. Example: \"cm4cdij9u00022qgr8q6phl3l\".\n\n• type (String): The type of task being executed. Example: \"UPDATE_PLUGIN\".\n\n• created_at (String): The timestamp when the task was created, in ISO 8601 format. Example: \"2024-12-06T06:37:13.394Z\".\n\nIf no process is found, returns `404 Not Found` with the following response.\n\n``` json\n{\n    \"code\": \"not_found\",\n    \"message\": \"Process not found\"\n}\n\n ```"
							},
							"response": []
						}
					]
				},
				{
					"name": "Retrieve processes",
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{publicApiUrl}}/processes",
							"host": [
								"{{publicApiUrl}}"
							],
							"path": [
								"processes"
							]
						},
						"description": "### This endpoint retrieves a list of processes.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/processes`\n    \n\n#### Query Parameters\n\n- `types` (string\\[\\], optional): - UPDATE_PLUGIN - Update a plugin\n    - UPDATE_THEME - Update a theme\n        \n    - UPDATE_CORE - Update WordPress core\n        \n    - ACTIVATE_PLUGIN - Activate a plugin\n        \n    - DEACTIVATE_PLUGIN - Deactivate a plugin\n        \n    - DELETE_PLUGIN - Delete a plugin\n        \n    - DELETE_THEME - Delete a theme\n        \n    - OPTIMIZE_DATABASE - Optimize database.\n        \n- `from` (number, optional): .\n    \n- `to` (number, optional): .\n    \n- `status` (string, optional): - finished - Finished tasks\n    \n    - failed - Failed tasks\n        \n    - pending - Pending tasks\n        \n    - success - Success tasks\n        \n    - finished - Finished tasks\n        \n\nReponse\n\n- Status: 200 Success\n    \n- Content-Type: application/json\n    \n\n``` json\n{\n    \"code\": \"success\",\n    \"data\": [\n        {\n            \"id\": \"task123\",\n            \"type\": \"UPDATE_PLUGIN\",\n            \"code\": \"success\",\n            \"entities\": {\n                \"id\": \"plugin123\",\n                \"name\": \"Example Plugin\",\n                \"plugin\": \"example-plugin/example-plugin.php\",\n                \"version\": \"2.0.0\",\n                \"is_active\": true,\n                \"old_version\": \"1.9.0\",\n                \"update_type\": \"QUICK_UPDATE\"\n            },\n            \"entities_result\": {\n                \"status_code\": 200,\n                \"visual_regression\": {\n                    \"diff_percent\": 0.5,\n                    \"mainProcessTaskScreenshotId\": \"screenshot123\",\n                    \"compareProcessTaskScreenshotId\": \"screenshot456\"\n                }\n            },\n            \"created_at\": \"2024-01-01T12:00:00.000Z\"\n        }\n    ],\n    \"links\": {\n        \"pagination\": {\n            \"first\": \"https://public-api.wp-umbrella.com?page=1&per_page=10\",\n            \"last\": \"https://public-api.wp-umbrella.com?page=1&per_page=10\"\n        }\n    }\n}\n\n ```"
					},
					"response": []
				}
			]
		},
		{
			"name": "Customers",
			"item": [
				{
					"name": "CustomerId",
					"item": [
						{
							"name": "Update a customer",
							"request": {
								"method": "PUT",
								"header": [],
								"body": {
									"mode": "raw",
									"raw": "{\n  \"firstname\": \"John\",\n  \"lastname\": \"Doe\",\n  \"emails\": [\n    \"john.doe@example.com\",\n    \"jdoe@company.com\"\n  ],\n  \"company_name\": \"ACME Corp\",\n  \"website_url\": \"https://www.acmecorp.com\",\n  \"phone\": \"+1-555-123-4567\",\n  \"projectIds\": [\n    123,\n    456\n  ]\n}",
									"options": {
										"raw": {
											"language": "json"
										}
									}
								},
								"url": {
									"raw": "{{publicApiUrl}}/customers/{{customerId}}",
									"host": [
										"{{publicApiUrl}}"
									],
									"path": [
										"customers",
										"{{customerId}}"
									]
								},
								"description": "### This endpoint updates a customer for a specific user.\n\n#### Request\n\n- Method: PUT\n- URL: `/customers/{{customerId}}`\n\n#### Body Parameters\n\n- `firstname` (string, required): - The first name of the customer (optional).\n- `lastname` (string, required): - The last name of the customer (optional).\n- `emails` (string[], required): - The emails of the customer (optional).\n- `company_name` (string, required): - The company name of the customer (optional).\n- `website` (string, required): - The website of the customer (optional).\n- `phone` (string, required): - The phone of the customer (optional).\n- `projectIds` (number[], required): - The IDs of projects to associate with this customer (optional).\n\n#### Response\n\n- Status: 200 Success\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"success\",\n    \"data\": {\n        \"id\": \"cltxhdr9o00011qeigyp3flqg\",\n        \"company_name\": \"My company name\",\n        \"phone\": \"+339837\",\n        \"firstname\": \"My firstname\",\n        \"lastname\": \"My lastname\",\n        \"created_at_timestamp\": 1710798712908,\n        \"emails\": [\n            \"doe@gmail.com\",\n            \"john@gmail.com\"\n        ],\n        \"website_url\": \"https://mywebsite.com\"\n    }\n}\n```\n\n"
							},
							"response": []
						}
					],
					"description": "Endpoints for [customerid]"
				},
				{
					"name": "Get customers for a user",
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{publicApiUrl}}/customers",
							"host": [
								"{{publicApiUrl}}"
							],
							"path": [
								"customers"
							]
						},
						"description": "### This endpoint retrieves a list of customers for a specific user.\n\n#### Request\n\n- Method: GET\n- URL: `/customers`\n\n#### Response\n\n- Status: 200 Success\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"success\",\n    \"data\": [\n        {\n            \"id\": \"cltxhdr9o00011qeigyp3flqg\",\n            \"company_name\": \"My company name\",\n            \"phone\": \"+339837\",\n            \"firstname\": \"My firstname\",\n            \"lastname\": \"My lastname\",\n            \"created_at_timestamp\": 1710798712908,\n            \"emails\": [\n                \"doe@gmail.com\",\n                \"john@gmail.com\"\n            ],\n            \"website_url\": \"https://mywebsite.com\"\n        }\n    ],\n    \"links\": {\n        \"pagination\": {\n            \"first\": \"https://public-api.wp-umbrella.com?page=1&per_page=1\",\n            \"last\": \"https://public-api.wp-umbrella.com?page=2&per_page=1\",\n            \"next\": \"https://public-api.wp-umbrella.com?page=2&per_page=1\"\n        }\n    }\n}\n```\n\n"
					},
					"response": []
				},
				{
					"name": "Create a customer",
					"request": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"firstname\": \"John\",\n  \"lastname\": \"Doe\",\n  \"emails\": [\n    \"john.doe@example.com\",\n    \"jdoe@company.com\"\n  ],\n  \"company_name\": \"ACME Corp\",\n  \"website_url\": \"https://www.acmecorp.com\",\n  \"phone\": \"+1-555-123-4567\",\n  \"projectIds\": [\n    123,\n    456\n  ]\n}\n",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "{{publicApiUrl}}/customers",
							"host": [
								"{{publicApiUrl}}"
							],
							"path": [
								"customers"
							]
						},
						"description": "### This endpoint creates a customer for a specific user.\n\n#### Request\n\n- Method: POST\n- URL: `/customers`\n\n#### Body Parameters\n\n- `firstname` (string, required): - The first name of the customer (required).\n- `lastname` (string, required): - The last name of the customer (required).\n- `emails` (string[], required): - The emails of the customer (required).\n- `company_name` (string, required): - The company name of the customer (required).\n- `website` (string, required): - The website of the customer (optional).\n- `phone` (string, required): - The phone of the customer (optional).\n- `projectIds` (number[], required): - The IDs of projects to associate with this customer (optional).\n\n#### Response\n\n- Status: 200 Success\n\n- Content-Type: application/json\n\nExample Response Body:\n\n```json\n{\n    \"code\": \"success\",\n    \"data\": {\n        \"id\": \"cltxhdr9o00011qeigyp3flqg\",\n        \"company_name\": \"My company name\",\n        \"phone\": \"+339837\",\n        \"firstname\": \"My firstname\",\n        \"lastname\": \"My lastname\",\n        \"created_at_timestamp\": 1710798712908,\n        \"emails\": [\n            \"doe@gmail.com\",\n            \"john@gmail.com\"\n        ],\n        \"website_url\": \"https://mywebsite.com\"\n    }\n}\n```\n\n"
					},
					"response": []
				}
			],
			"description": "Endpoints for customers"
		},
		{
			"name": "Health checker",
			"request": {
				"auth": {
					"type": "noauth"
				},
				"method": "GET",
				"header": [],
				"url": {
					"raw": "{{publicApiUrl}}",
					"host": [
						"{{publicApiUrl}}"
					]
				},
				"description": "### Check the health status of API\n\nThis endpoint serves as a health check to verify the status of the public API.\n\n#### Request\n\n- Method: GET\n    \n- URL: `/`\n    \n\n#### Response\n\nUpon successful execution, it returns a `200 OK` status with the following response:\n\n``` json\n{\n    \"code\": \"success\",\n    \"data\": { status: \"up\" }\n}\n\n ```\n\nWhen the API throttlnig limit is reached, it returns `429 Too Many Requests` status with the following headers:\n\n- `ratelimit-policy`: `1000;w=60`\n    \n- `ratelimit: limit=1000, remaining=0, reset=`\n    \n- `retry-after: 60`"
			},
			"response": []
		}
	],
	"auth": {
		"type": "bearer",
		"bearer": [
			{
				"key": "token",
				"value": "{{accessToken}}",
				"type": "string"
			}
		]
	},
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"type": "text/javascript",
				"packages": {},
				"exec": [
					""
				]
			}
		},
		{
			"listen": "test",
			"script": {
				"type": "text/javascript",
				"packages": {},
				"exec": [
					""
				]
			}
		}
	],
	"variable": [
		{
			"key": "accessToken",
			"value": "myToken",
			"type": "string"
		},
		{
			"key": "publicApiUrl",
			"value": "https://public-api.wp-umbrella.com",
			"type": "string"
		},
		{
			"key": "projectId",
			"value": "1",
			"type": "string"
		},
		{
			"key": "processId",
			"value": "1",
			"type": "string"
		},
		{
			"key": "customerId",
			"value": "1",
			"type": "string"
		}
	]
}