{
	"info": {
		"title": "Reactive Resume",
		"version": "5.2.2",
		"description": "Reactive Resume API",
		"license": {
			"name": "MIT",
			"url": "https://github.com/amruthpillai/reactive-resume/blob/main/LICENSE"
		},
		"contact": {
			"name": "Amruth Pillai",
			"email": "hello@amruthpillai.com",
			"url": "https://amruthpillai.com"
		}
	},
	"servers": [
		{
			"url": "http://localhost:3000/api/openapi"
		}
	],
	"externalDocs": {
		"url": "https://docs.rxresu.me",
		"description": "Reactive Resume Documentation"
	},
	"components": {
		"securitySchemes": {
			"apiKey": {
				"type": "apiKey",
				"name": "x-api-key",
				"in": "header",
				"description": "The API key to authenticate requests."
			}
		},
		"schemas": {
			"ResumeData": {
				"type": "object",
				"properties": {
					"picture": {
						"type": "object",
						"properties": {
							"hidden": {
								"type": "boolean",
								"description": "Whether to hide the picture from the resume."
							},
							"url": {
								"type": "string",
								"description": "The URL to the picture to display on the resume. Prefer local app-served paths (for example /uploads/...) populated via upload."
							},
							"size": {
								"type": "number",
								"minimum": 32,
								"maximum": 512,
								"description": "The size of the picture to display on the resume, defined in points (pt)."
							},
							"rotation": {
								"type": "number",
								"minimum": 0,
								"maximum": 360,
								"description": "The rotation of the picture to display on the resume, defined in degrees (°)."
							},
							"aspectRatio": {
								"type": "number",
								"minimum": 0.5,
								"maximum": 2.5,
								"description": "The aspect ratio of the picture to display on the resume, defined as width / height (e.g. 1.5 for 1.5:1 or 0.5 for 1:2)."
							},
							"borderRadius": {
								"type": "number",
								"minimum": 0,
								"maximum": 100,
								"description": "The border radius of the picture to display on the resume, defined in points (pt)."
							},
							"borderColor": {
								"type": "string",
								"description": "The color of the border of the picture to display on the resume, defined as rgba(r, g, b, a)."
							},
							"borderWidth": {
								"type": "number",
								"minimum": 0,
								"description": "The width of the border of the picture to display on the resume, defined in points (pt)."
							},
							"shadowColor": {
								"type": "string",
								"description": "The color of the shadow of the picture to display on the resume, defined as rgba(r, g, b, a)."
							},
							"shadowWidth": {
								"type": "number",
								"minimum": 0,
								"description": "The width of the shadow of the picture to display on the resume, defined in points (pt)."
							}
						},
						"required": [
							"hidden",
							"url",
							"size",
							"rotation",
							"aspectRatio",
							"borderRadius",
							"borderColor",
							"borderWidth",
							"shadowColor",
							"shadowWidth"
						],
						"description": "Configuration for photograph displayed on the resume"
					},
					"basics": {
						"type": "object",
						"properties": {
							"name": {
								"type": "string",
								"description": "The full name of the author of the resume."
							},
							"headline": {
								"type": "string",
								"description": "The headline of the author of the resume."
							},
							"email": {
								"type": "string",
								"description": "The email address of the author of the resume."
							},
							"phone": {
								"type": "string",
								"description": "The phone number of the author of the resume."
							},
							"location": {
								"type": "string",
								"description": "The location of the author of the resume."
							},
							"website": {
								"type": "object",
								"properties": {
									"url": {
										"type": "string",
										"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
									},
									"label": {
										"type": "string",
										"description": "The label to display for the URL. Leave blank to display the URL as-is."
									}
								},
								"required": ["url", "label"],
								"description": "The website of the author of the resume."
							},
							"customFields": {
								"type": "array",
								"items": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The unique identifier for the custom field. Usually generated as a UUID."
										},
										"icon": {
											"type": "string",
											"description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available."
										},
										"text": {
											"type": "string",
											"description": "The text to display for the custom field."
										},
										"link": {
											"type": "string",
											"description": "If the custom field should be a link, the URL to link to."
										}
									},
									"required": ["id", "icon", "text", "link"]
								},
								"description": "The custom fields to display on the resume."
							}
						},
						"required": ["name", "headline", "email", "phone", "location", "website", "customFields"],
						"description": "Basic information about the author, such as name, email, phone, location, and website"
					},
					"summary": {
						"type": "object",
						"properties": {
							"title": {
								"type": "string",
								"description": "The title of the summary of the resume."
							},
							"icon": {
								"type": "string",
								"description": "Phosphor icon name to display before the summary section title in the PDF output. Empty string uses the default summary icon; 'none' hides the icon."
							},
							"columns": {
								"type": "integer",
								"minimum": 1,
								"maximum": 6,
								"description": "The number of columns the summary should span across."
							},
							"hidden": {
								"type": "boolean",
								"description": "Whether to hide the summary from the resume."
							},
							"keepTogether": {
								"type": "boolean",
								"description": "If true, the summary is kept on a single page instead of splitting across a page break."
							},
							"startOnNewPage": {
								"type": "boolean",
								"description": "If true, the summary always begins on a new page."
							},
							"content": {
								"type": "string",
								"description": "The content of the summary of the resume. This should be a HTML-formatted string."
							}
						},
						"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "content"],
						"description": "Summary section of the resume, useful for a short bio or introduction"
					},
					"sections": {
						"type": "object",
						"properties": {
							"profiles": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"icon": {
													"type": "string",
													"description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available."
												},
												"iconColor": {
													"type": "string",
													"description": "Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color."
												},
												"network": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the network or platform."
												},
												"username": {
													"type": "string",
													"description": "The username of the author on the network or platform."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The link to the profile of the author on the network or platform, if any."
												}
											},
											"required": ["id", "hidden", "icon", "iconColor", "network", "username", "website"]
										},
										"description": "The items to display in the profiles section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the profiles of the author."
							},
							"experience": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"company": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the company or organization."
												},
												"position": {
													"type": "string",
													"description": "The position held at the company or organization. Used when there is only a single role. If multiple roles are provided in the 'roles' field, this serves as a summary title or can be left blank."
												},
												"location": {
													"type": "string",
													"description": "The location of the company or organization."
												},
												"period": {
													"type": "string",
													"description": "The overall period of time at the company. When multiple roles are used, this should reflect the total tenure."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The website of the company or organization, if any."
												},
												"description": {
													"type": "string",
													"description": "The description of the experience. This should be a HTML-formatted string."
												},
												"roles": {
													"type": "array",
													"items": {
														"type": "object",
														"properties": {
															"id": {
																"type": "string",
																"description": "The unique identifier for the role. Usually generated as a UUID."
															},
															"position": {
																"type": "string",
																"description": "The position or job title for this role."
															},
															"period": {
																"type": "string",
																"description": "The period of time this role was held."
															},
															"description": {
																"type": "string",
																"description": "The description of this specific role. This should be a HTML-formatted string."
															}
														},
														"required": ["id", "position", "period", "description"]
													},
													"description": "List of individual roles held at this company to show career progression."
												}
											},
											"required": [
												"id",
												"hidden",
												"company",
												"position",
												"location",
												"period",
												"website",
												"description",
												"roles"
											]
										},
										"description": "The items to display in the experience section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the experience of the author."
							},
							"education": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"school": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the school or institution."
												},
												"degree": {
													"type": "string",
													"description": "The degree or qualification obtained."
												},
												"area": {
													"type": "string",
													"description": "The area of study or specialization."
												},
												"grade": {
													"type": "string",
													"description": "The grade or score achieved."
												},
												"location": {
													"type": "string",
													"description": "The location of the school or institution."
												},
												"period": {
													"type": "string",
													"description": "The period of time the education was obtained over."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The website of the school or institution, if any."
												},
												"description": {
													"type": "string",
													"description": "The description of the education. This should be a HTML-formatted string."
												}
											},
											"required": [
												"id",
												"hidden",
												"school",
												"degree",
												"area",
												"grade",
												"location",
												"period",
												"website",
												"description"
											]
										},
										"description": "The items to display in the education section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the education of the author."
							},
							"projects": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"name": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the project."
												},
												"period": {
													"type": "string",
													"description": "The period of time the project was worked on."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The link to the project, if any."
												},
												"description": {
													"type": "string",
													"description": "The description of the project. This should be a HTML-formatted string."
												}
											},
											"required": ["id", "hidden", "name", "period", "website", "description"]
										},
										"description": "The items to display in the projects section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the projects of the author."
							},
							"skills": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"icon": {
													"type": "string",
													"description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available."
												},
												"iconColor": {
													"type": "string",
													"description": "Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color."
												},
												"name": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the skill."
												},
												"proficiency": {
													"type": "string",
													"description": "The proficiency level of the skill. Can be any text, such as 'Beginner', 'Intermediate', 'Advanced', etc."
												},
												"level": {
													"type": "number",
													"minimum": 0,
													"maximum": 5,
													"description": "The proficiency level of the skill, defined as a number between 0 and 5. If set to 0, the icons displaying the level will be hidden."
												},
												"keywords": {
													"type": "array",
													"items": {
														"type": "string"
													},
													"description": "The keywords associated with the skill, if any. These are displayed as tags below the name."
												}
											},
											"required": ["id", "hidden", "icon", "iconColor", "name", "proficiency", "level", "keywords"]
										},
										"description": "The items to display in the skills section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the skills of the author."
							},
							"languages": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"language": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the language the author knows."
												},
												"fluency": {
													"type": "string",
													"description": "The fluency level of the language. Can be any text, such as 'Native', 'Fluent', 'Conversational', etc. or can also be a CEFR level (A1, A2, B1, B2, C1, C2)."
												},
												"level": {
													"type": "number",
													"minimum": 0,
													"maximum": 5,
													"description": "The proficiency level of the language, defined as a number between 0 and 5. If set to 0, the icons displaying the level will be hidden."
												}
											},
											"required": ["id", "hidden", "language", "fluency", "level"]
										},
										"description": "The items to display in the languages section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the languages of the author."
							},
							"interests": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"icon": {
													"type": "string",
													"description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available."
												},
												"iconColor": {
													"type": "string",
													"description": "Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color."
												},
												"name": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the interest/hobby."
												},
												"keywords": {
													"type": "array",
													"items": {
														"type": "string"
													},
													"description": "The keywords associated with the interest/hobby, if any. These are displayed as tags below the name."
												}
											},
											"required": ["id", "hidden", "icon", "iconColor", "name", "keywords"]
										},
										"description": "The items to display in the interests section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the interests of the author."
							},
							"awards": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"title": {
													"type": "string",
													"minLength": 1,
													"description": "The title of the award."
												},
												"awarder": {
													"type": "string",
													"description": "The awarder of the award."
												},
												"date": {
													"type": "string",
													"description": "The date when the award was received."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The website of the award, if any."
												},
												"description": {
													"type": "string",
													"description": "The description of the award. This should be a HTML-formatted string."
												}
											},
											"required": ["id", "hidden", "title", "awarder", "date", "website", "description"]
										},
										"description": "The items to display in the awards section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the awards of the author."
							},
							"certifications": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"title": {
													"type": "string",
													"minLength": 1,
													"description": "The title of the certification."
												},
												"issuer": {
													"type": "string",
													"description": "The issuer of the certification."
												},
												"date": {
													"type": "string",
													"description": "The date when the certification was received."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The website of the certification, if any."
												},
												"description": {
													"type": "string",
													"description": "The description of the certification. This should be a HTML-formatted string."
												}
											},
											"required": ["id", "hidden", "title", "issuer", "date", "website", "description"]
										},
										"description": "The items to display in the certifications section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the certifications of the author."
							},
							"publications": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"title": {
													"type": "string",
													"minLength": 1,
													"description": "The title of the publication."
												},
												"publisher": {
													"type": "string",
													"description": "The publisher of the publication."
												},
												"date": {
													"type": "string",
													"description": "The date when the publication was published."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The link to the publication, if any."
												},
												"description": {
													"type": "string",
													"description": "The description of the publication. This should be a HTML-formatted string."
												}
											},
											"required": ["id", "hidden", "title", "publisher", "date", "website", "description"]
										},
										"description": "The items to display in the publications section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the publications of the author."
							},
							"volunteer": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"organization": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the organization or company."
												},
												"location": {
													"type": "string",
													"description": "The location of the organization or company."
												},
												"period": {
													"type": "string",
													"description": "The period of time the author was volunteered at the organization or company."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The link to the organization or company, if any."
												},
												"description": {
													"type": "string",
													"description": "The description of the volunteer experience. This should be a HTML-formatted string."
												}
											},
											"required": ["id", "hidden", "organization", "location", "period", "website", "description"]
										},
										"description": "The items to display in the volunteer section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the volunteer experience of the author."
							},
							"references": {
								"type": "object",
								"properties": {
									"title": {
										"type": "string",
										"description": "The title of the section."
									},
									"icon": {
										"type": "string",
										"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
									},
									"columns": {
										"type": "integer",
										"minimum": 1,
										"maximum": 6,
										"description": "The number of columns the section should span across."
									},
									"hidden": {
										"type": "boolean",
										"description": "Whether to hide the section from the resume."
									},
									"keepTogether": {
										"type": "boolean",
										"description": "If true, the section is kept on a single page instead of splitting across a page break."
									},
									"startOnNewPage": {
										"type": "boolean",
										"description": "If true, the section always begins on a new page."
									},
									"items": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"id": {
													"type": "string",
													"description": "The unique identifier for the item. Usually generated as a UUID."
												},
												"hidden": {
													"type": "boolean",
													"description": "Whether to hide the item from the resume."
												},
												"name": {
													"type": "string",
													"minLength": 1,
													"description": "The name of the reference, or a note such as 'Available upon request'."
												},
												"position": {
													"type": "string",
													"description": "The position or job title of the reference."
												},
												"website": {
													"type": "object",
													"properties": {
														"url": {
															"type": "string",
															"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
														},
														"label": {
															"type": "string",
															"description": "The label to display for the URL. Leave blank to display the URL as-is."
														},
														"inlineLink": {
															"type": "boolean",
															"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
														}
													},
													"required": ["url", "label", "inlineLink"],
													"description": "The website or LinkedIn profile of the reference, if any."
												},
												"phone": {
													"type": "string",
													"description": "The phone number of the reference."
												},
												"description": {
													"type": "string",
													"description": "The description of the reference. Can be used to display a quote, a testimonial, etc. This should be a HTML-formatted string."
												}
											},
											"required": ["id", "hidden", "name", "position", "website", "phone", "description"]
										},
										"description": "The items to display in the references section."
									}
								},
								"required": ["title", "icon", "columns", "hidden", "keepTogether", "startOnNewPage", "items"],
								"description": "The section to display the references of the author."
							}
						},
						"required": [
							"profiles",
							"experience",
							"education",
							"projects",
							"skills",
							"languages",
							"interests",
							"awards",
							"certifications",
							"publications",
							"volunteer",
							"references"
						],
						"description": "Various sections of the resume, such as experience, education, projects, etc."
					},
					"customSections": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"title": {
									"type": "string",
									"description": "The title of the section."
								},
								"icon": {
									"type": "string",
									"description": "Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon."
								},
								"columns": {
									"type": "integer",
									"minimum": 1,
									"maximum": 6,
									"description": "The number of columns the section should span across."
								},
								"hidden": {
									"type": "boolean",
									"description": "Whether to hide the section from the resume."
								},
								"keepTogether": {
									"type": "boolean",
									"description": "If true, the section is kept on a single page instead of splitting across a page break."
								},
								"startOnNewPage": {
									"type": "boolean",
									"description": "If true, the section always begins on a new page."
								},
								"id": {
									"type": "string",
									"description": "The unique identifier for the custom section. Usually generated as a UUID."
								},
								"type": {
									"enum": [
										"summary",
										"profiles",
										"experience",
										"education",
										"projects",
										"skills",
										"languages",
										"interests",
										"awards",
										"certifications",
										"publications",
										"volunteer",
										"references",
										"cover-letter"
									],
									"type": "string",
									"description": "The type of items this custom section contains. Determines which item schema and form fields to use."
								},
								"items": {
									"type": "array",
									"items": {
										"anyOf": [
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"recipient": {
														"type": "string",
														"description": "The recipient's address block as HTML (name, title, company, address, email)."
													},
													"content": {
														"type": "string",
														"description": "The cover letter body as HTML (salutation, paragraphs, closing, signature)."
													}
												},
												"required": ["id", "hidden", "recipient", "content"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"content": {
														"type": "string",
														"description": "The rich text content of the summary item. This should be a HTML-formatted string."
													}
												},
												"required": ["id", "hidden", "content"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"icon": {
														"type": "string",
														"description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available."
													},
													"iconColor": {
														"type": "string",
														"description": "Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color."
													},
													"network": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the network or platform."
													},
													"username": {
														"type": "string",
														"description": "The username of the author on the network or platform."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The link to the profile of the author on the network or platform, if any."
													}
												},
												"required": ["id", "hidden", "icon", "iconColor", "network", "username", "website"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"company": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the company or organization."
													},
													"position": {
														"type": "string",
														"description": "The position held at the company or organization. Used when there is only a single role. If multiple roles are provided in the 'roles' field, this serves as a summary title or can be left blank."
													},
													"location": {
														"type": "string",
														"description": "The location of the company or organization."
													},
													"period": {
														"type": "string",
														"description": "The overall period of time at the company. When multiple roles are used, this should reflect the total tenure."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The website of the company or organization, if any."
													},
													"description": {
														"type": "string",
														"description": "The description of the experience. This should be a HTML-formatted string."
													},
													"roles": {
														"type": "array",
														"items": {
															"type": "object",
															"properties": {
																"id": {
																	"type": "string",
																	"description": "The unique identifier for the role. Usually generated as a UUID."
																},
																"position": {
																	"type": "string",
																	"description": "The position or job title for this role."
																},
																"period": {
																	"type": "string",
																	"description": "The period of time this role was held."
																},
																"description": {
																	"type": "string",
																	"description": "The description of this specific role. This should be a HTML-formatted string."
																}
															},
															"required": ["id", "position", "period", "description"]
														},
														"description": "List of individual roles held at this company to show career progression."
													}
												},
												"required": [
													"id",
													"hidden",
													"company",
													"position",
													"location",
													"period",
													"website",
													"description",
													"roles"
												]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"school": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the school or institution."
													},
													"degree": {
														"type": "string",
														"description": "The degree or qualification obtained."
													},
													"area": {
														"type": "string",
														"description": "The area of study or specialization."
													},
													"grade": {
														"type": "string",
														"description": "The grade or score achieved."
													},
													"location": {
														"type": "string",
														"description": "The location of the school or institution."
													},
													"period": {
														"type": "string",
														"description": "The period of time the education was obtained over."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The website of the school or institution, if any."
													},
													"description": {
														"type": "string",
														"description": "The description of the education. This should be a HTML-formatted string."
													}
												},
												"required": [
													"id",
													"hidden",
													"school",
													"degree",
													"area",
													"grade",
													"location",
													"period",
													"website",
													"description"
												]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"name": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the project."
													},
													"period": {
														"type": "string",
														"description": "The period of time the project was worked on."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The link to the project, if any."
													},
													"description": {
														"type": "string",
														"description": "The description of the project. This should be a HTML-formatted string."
													}
												},
												"required": ["id", "hidden", "name", "period", "website", "description"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"icon": {
														"type": "string",
														"description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available."
													},
													"iconColor": {
														"type": "string",
														"description": "Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color."
													},
													"name": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the skill."
													},
													"proficiency": {
														"type": "string",
														"description": "The proficiency level of the skill. Can be any text, such as 'Beginner', 'Intermediate', 'Advanced', etc."
													},
													"level": {
														"type": "number",
														"minimum": 0,
														"maximum": 5,
														"description": "The proficiency level of the skill, defined as a number between 0 and 5. If set to 0, the icons displaying the level will be hidden."
													},
													"keywords": {
														"type": "array",
														"items": {
															"type": "string"
														},
														"description": "The keywords associated with the skill, if any. These are displayed as tags below the name."
													}
												},
												"required": ["id", "hidden", "icon", "iconColor", "name", "proficiency", "level", "keywords"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"language": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the language the author knows."
													},
													"fluency": {
														"type": "string",
														"description": "The fluency level of the language. Can be any text, such as 'Native', 'Fluent', 'Conversational', etc. or can also be a CEFR level (A1, A2, B1, B2, C1, C2)."
													},
													"level": {
														"type": "number",
														"minimum": 0,
														"maximum": 5,
														"description": "The proficiency level of the language, defined as a number between 0 and 5. If set to 0, the icons displaying the level will be hidden."
													}
												},
												"required": ["id", "hidden", "language", "fluency", "level"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"icon": {
														"type": "string",
														"description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available."
													},
													"iconColor": {
														"type": "string",
														"description": "Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color."
													},
													"name": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the interest/hobby."
													},
													"keywords": {
														"type": "array",
														"items": {
															"type": "string"
														},
														"description": "The keywords associated with the interest/hobby, if any. These are displayed as tags below the name."
													}
												},
												"required": ["id", "hidden", "icon", "iconColor", "name", "keywords"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"title": {
														"type": "string",
														"minLength": 1,
														"description": "The title of the award."
													},
													"awarder": {
														"type": "string",
														"description": "The awarder of the award."
													},
													"date": {
														"type": "string",
														"description": "The date when the award was received."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The website of the award, if any."
													},
													"description": {
														"type": "string",
														"description": "The description of the award. This should be a HTML-formatted string."
													}
												},
												"required": ["id", "hidden", "title", "awarder", "date", "website", "description"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"title": {
														"type": "string",
														"minLength": 1,
														"description": "The title of the certification."
													},
													"issuer": {
														"type": "string",
														"description": "The issuer of the certification."
													},
													"date": {
														"type": "string",
														"description": "The date when the certification was received."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The website of the certification, if any."
													},
													"description": {
														"type": "string",
														"description": "The description of the certification. This should be a HTML-formatted string."
													}
												},
												"required": ["id", "hidden", "title", "issuer", "date", "website", "description"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"title": {
														"type": "string",
														"minLength": 1,
														"description": "The title of the publication."
													},
													"publisher": {
														"type": "string",
														"description": "The publisher of the publication."
													},
													"date": {
														"type": "string",
														"description": "The date when the publication was published."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The link to the publication, if any."
													},
													"description": {
														"type": "string",
														"description": "The description of the publication. This should be a HTML-formatted string."
													}
												},
												"required": ["id", "hidden", "title", "publisher", "date", "website", "description"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"organization": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the organization or company."
													},
													"location": {
														"type": "string",
														"description": "The location of the organization or company."
													},
													"period": {
														"type": "string",
														"description": "The period of time the author was volunteered at the organization or company."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The link to the organization or company, if any."
													},
													"description": {
														"type": "string",
														"description": "The description of the volunteer experience. This should be a HTML-formatted string."
													}
												},
												"required": ["id", "hidden", "organization", "location", "period", "website", "description"]
											},
											{
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"description": "The unique identifier for the item. Usually generated as a UUID."
													},
													"hidden": {
														"type": "boolean",
														"description": "Whether to hide the item from the resume."
													},
													"name": {
														"type": "string",
														"minLength": 1,
														"description": "The name of the reference, or a note such as 'Available upon request'."
													},
													"position": {
														"type": "string",
														"description": "The position or job title of the reference."
													},
													"website": {
														"type": "object",
														"properties": {
															"url": {
																"type": "string",
																"description": "The URL to show as a link. Must be a valid URL with a protocol (http:// or https://)."
															},
															"label": {
																"type": "string",
																"description": "The label to display for the URL. Leave blank to display the URL as-is."
															},
															"inlineLink": {
																"type": "boolean",
																"description": "If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom."
															}
														},
														"required": ["url", "label", "inlineLink"],
														"description": "The website or LinkedIn profile of the reference, if any."
													},
													"phone": {
														"type": "string",
														"description": "The phone number of the reference."
													},
													"description": {
														"type": "string",
														"description": "The description of the reference. Can be used to display a quote, a testimonial, etc. This should be a HTML-formatted string."
													}
												},
												"required": ["id", "hidden", "name", "position", "website", "phone", "description"]
											}
										]
									},
									"description": "The items to display in the custom section. Items follow the schema of the section type."
								}
							},
							"required": [
								"title",
								"icon",
								"columns",
								"hidden",
								"keepTogether",
								"startOnNewPage",
								"id",
								"type",
								"items"
							]
						},
						"description": "Custom sections of the resume, such as a custom section for notes, etc."
					},
					"metadata": {
						"type": "object",
						"properties": {
							"template": {
								"enum": [
									"azurill",
									"bronzor",
									"chikorita",
									"ditgar",
									"ditto",
									"gengar",
									"glalie",
									"kakuna",
									"lapras",
									"leafish",
									"meowth",
									"onyx",
									"pikachu",
									"rhyhorn",
									"scizor"
								],
								"type": "string",
								"description": "The template to use for the resume. Determines the overall design and appearance of the resume."
							},
							"layout": {
								"type": "object",
								"properties": {
									"sidebarWidth": {
										"type": "number",
										"minimum": 10,
										"maximum": 50,
										"description": "The width of the sidebar column, defined as a percentage of the page width."
									},
									"pages": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"fullWidth": {
													"type": "boolean",
													"description": "Whether the layout of the page should be full width. If true, the main column will span the entire width of the page. This means that there should be no items in the sidebar column."
												},
												"main": {
													"type": "array",
													"items": {
														"type": "string"
													},
													"description": "The items to display in the main column of the page. A string array of section IDs (experience, education, projects, skills, languages, interests, awards, certifications, publications, volunteer, references, profiles, summary or UUIDs for custom sections)."
												},
												"sidebar": {
													"type": "array",
													"items": {
														"type": "string"
													},
													"description": "The items to display in the sidebar column of the page. A string array of section IDs (experience, education, projects, skills, languages, interests, awards, certifications, publications, volunteer, references, profiles, summary or UUIDs for custom sections)."
												}
											},
											"required": ["fullWidth", "main", "sidebar"]
										},
										"description": "The pages to display in the layout."
									}
								},
								"required": ["sidebarWidth", "pages"],
								"description": "The layout of the resume. Determines the structure and arrangement of the sections on the resume."
							},
							"page": {
								"type": "object",
								"properties": {
									"gapX": {
										"type": "number",
										"minimum": 0,
										"description": "The horizontal gap between the sections of the page, defined in points (pt)."
									},
									"gapY": {
										"type": "number",
										"minimum": 0,
										"description": "The vertical gap between the sections of the page, defined in points (pt)."
									},
									"marginX": {
										"type": "number",
										"minimum": 0,
										"description": "The horizontal margin of the page, defined in points (pt)."
									},
									"marginY": {
										"type": "number",
										"minimum": 0,
										"description": "The vertical margin of the page, defined in points (pt)."
									},
									"format": {
										"enum": ["a4", "letter", "free-form"],
										"type": "string",
										"description": "The format of the page. Can be 'a4', 'letter', or 'free-form'."
									},
									"locale": {
										"type": "string",
										"description": "The locale of the page. Used for displaying pre-translated section headings, if not overridden."
									},
									"hideLinkUnderline": {
										"type": "boolean",
										"description": "Whether to hide the underlines of the links."
									},
									"hideIcons": {
										"type": "boolean",
										"description": "Whether to hide the item-level icons (skills, profiles, interests)."
									},
									"hideSectionIcons": {
										"type": "boolean",
										"description": "Whether to hide the section heading icons displayed before section titles."
									}
								},
								"required": [
									"gapX",
									"gapY",
									"marginX",
									"marginY",
									"format",
									"locale",
									"hideLinkUnderline",
									"hideIcons",
									"hideSectionIcons"
								],
								"description": "The page settings of the resume. Determines the margins, format, and locale of the resume."
							},
							"design": {
								"type": "object",
								"properties": {
									"level": {
										"type": "object",
										"properties": {
											"icon": {
												"type": "string",
												"description": "The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available."
											},
											"type": {
												"enum": ["hidden", "circle", "square", "rectangle", "rectangle-full", "progress-bar", "icon"],
												"type": "string",
												"description": "The type of the level design. 'hidden' will hide the level design, 'circle' will display a circle, 'square' will display a square, 'rectangle' will display a rectangle, 'rectangle-full' will display a full rectangle, 'progress-bar' will display a progress bar, and 'icon' will display an icon. If 'icon' is selected, the icon to display should be specified in the 'icon' field."
											}
										},
										"required": ["icon", "type"]
									},
									"colors": {
										"type": "object",
										"properties": {
											"primary": {
												"type": "string",
												"description": "The primary color of the design, defined as rgba(r, g, b, a)."
											},
											"text": {
												"type": "string",
												"description": "The text color of the design, defined as rgba(r, g, b, a). Usually set to black: rgba(0, 0, 0, 1)."
											},
											"background": {
												"type": "string",
												"description": "The background color of the design, defined as rgba(r, g, b, a). Usually set to white: rgba(255, 255, 255, 1)."
											}
										},
										"required": ["primary", "text", "background"]
									}
								},
								"required": ["level", "colors"],
								"description": "The design settings of the resume. Determines the colors, level designs, and typography of the resume."
							},
							"typography": {
								"type": "object",
								"properties": {
									"body": {
										"type": "object",
										"properties": {
											"fontFamily": {
												"type": "string",
												"description": "The family of the font to use. Must be a supported resume font."
											},
											"fontWeights": {
												"type": "array",
												"items": {
													"enum": ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
													"type": "string"
												},
												"description": "The weight of the font, defined as a number between 100 and 900. Default to 400 when unsure if the weight is available in the font."
											},
											"fontSize": {
												"type": "number",
												"minimum": 6,
												"maximum": 24,
												"description": "The size of the font to use, defined in points (pt)."
											},
											"lineHeight": {
												"type": "number",
												"minimum": 0.5,
												"maximum": 4,
												"description": "The line height of the font to use, defined as a multiplier of the font size (e.g. 1.5 for 1.5x)."
											}
										},
										"required": ["fontFamily", "fontWeights", "fontSize", "lineHeight"],
										"description": "The typography for the body of the resume."
									},
									"heading": {
										"type": "object",
										"properties": {
											"fontFamily": {
												"type": "string",
												"description": "The family of the font to use. Must be a supported resume font."
											},
											"fontWeights": {
												"type": "array",
												"items": {
													"enum": ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
													"type": "string"
												},
												"description": "The weight of the font, defined as a number between 100 and 900. Default to 400 when unsure if the weight is available in the font."
											},
											"fontSize": {
												"type": "number",
												"minimum": 6,
												"maximum": 24,
												"description": "The size of the font to use, defined in points (pt)."
											},
											"lineHeight": {
												"type": "number",
												"minimum": 0.5,
												"maximum": 4,
												"description": "The line height of the font to use, defined as a multiplier of the font size (e.g. 1.5 for 1.5x)."
											}
										},
										"required": ["fontFamily", "fontWeights", "fontSize", "lineHeight"],
										"description": "The typography for the headings of the resume."
									}
								},
								"required": ["body", "heading"],
								"description": "The typography settings of the resume. Determines the fonts and sizes of the body and headings of the resume."
							},
							"notes": {
								"type": "string",
								"description": "Personal notes for the resume. Can be used to add any additional information or instructions for the resume. These notes are not displayed on the resume, they are only visible to the author of the resume when editing the resume. This should be a HTML-formatted string."
							},
							"styleRules": {
								"type": "array",
								"items": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"minLength": 1,
											"description": "Unique identifier for this style rule."
										},
										"label": {
											"type": "string",
											"description": "Human-readable label for this style rule."
										},
										"enabled": {
											"type": "boolean",
											"description": "Whether this style rule should affect PDF rendering."
										},
										"target": {
											"anyOf": [
												{
													"type": "object",
													"properties": {
														"scope": {
															"const": "global"
														}
													},
													"required": ["scope"],
													"additionalProperties": false
												},
												{
													"type": "object",
													"properties": {
														"scope": {
															"const": "sectionType"
														},
														"sectionType": {
															"enum": [
																"summary",
																"profiles",
																"experience",
																"education",
																"projects",
																"skills",
																"languages",
																"interests",
																"awards",
																"certifications",
																"publications",
																"volunteer",
																"references",
																"cover-letter"
															],
															"type": "string"
														}
													},
													"required": ["scope", "sectionType"],
													"additionalProperties": false
												},
												{
													"type": "object",
													"properties": {
														"scope": {
															"const": "sectionId"
														},
														"sectionId": {
															"type": "string",
															"minLength": 1
														}
													},
													"required": ["scope", "sectionId"],
													"additionalProperties": false
												}
											],
											"description": "The resume content this style rule applies to."
										},
										"slots": {
											"type": "object",
											"propertyNames": {
												"enum": [
													"section",
													"heading",
													"item",
													"text",
													"secondaryText",
													"link",
													"icon",
													"level",
													"richParagraph",
													"richList",
													"richListItemRow",
													"richListItemContent",
													"richLink",
													"richBold",
													"richMark"
												],
												"type": "string"
											},
											"additionalProperties": {
												"type": "object",
												"properties": {
													"color": {
														"type": "string"
													},
													"backgroundColor": {
														"type": "string"
													},
													"borderColor": {
														"type": "string"
													},
													"textDecorationColor": {
														"type": "string"
													},
													"opacity": {
														"type": "number",
														"minimum": 0,
														"maximum": 1
													},
													"fontSize": {
														"type": "number",
														"minimum": 6,
														"maximum": 48
													},
													"fontWeight": {
														"enum": ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
														"type": "string"
													},
													"fontStyle": {
														"enum": ["normal", "italic"],
														"type": "string"
													},
													"lineHeight": {
														"type": "number",
														"minimum": 0.5,
														"maximum": 4
													},
													"letterSpacing": {
														"type": "number",
														"minimum": -16,
														"maximum": 16
													},
													"textDecoration": {
														"enum": ["none", "underline", "line-through"],
														"type": "string"
													},
													"textDecorationStyle": {
														"enum": ["solid", "dashed", "dotted"],
														"type": "string"
													},
													"textAlign": {
														"enum": ["left", "center", "right", "justify"],
														"type": "string"
													},
													"textTransform": {
														"enum": ["none", "uppercase", "lowercase", "capitalize"],
														"type": "string"
													},
													"padding": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"paddingTop": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"paddingRight": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"paddingBottom": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"paddingLeft": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"marginTop": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"marginRight": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"marginBottom": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"marginLeft": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"rowGap": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"columnGap": {
														"type": "number",
														"minimum": -72,
														"maximum": 72
													},
													"borderStyle": {
														"enum": ["solid", "dashed", "dotted"],
														"type": "string"
													},
													"borderWidth": {
														"type": "number",
														"minimum": 0
													},
													"borderRadius": {
														"type": "number",
														"minimum": 0
													}
												},
												"additionalProperties": false,
												"description": "Constrained visual style intent that can be safely translated to React PDF styles."
											},
											"description": "The semantic style slots configured by this rule."
										}
									},
									"required": ["id", "label", "enabled", "target", "slots"],
									"additionalProperties": false
								},
								"description": "Structured style rules that target semantic resume sections and slots for React PDF rendering."
							}
						},
						"required": ["template", "layout", "page", "design", "typography", "notes", "styleRules"],
						"description": "Metadata for the resume, such as template, layout, typography, etc. This section describes the overall design and appearance of the resume."
					}
				},
				"required": ["picture", "basics", "summary", "sections", "customSections", "metadata"],
				"additionalProperties": {}
			}
		}
	},
	"security": [
		{
			"apiKey": []
		}
	],
	"openapi": "3.1.1",
	"paths": {
		"/ai/parse-pdf": {
			"post": {
				"operationId": "parseResumePdf",
				"summary": "Parse a PDF file into resume data",
				"description": "Extracts structured resume data from a PDF file using the specified AI provider. The file should be sent as a base64-encoded string along with AI provider credentials. Returns a complete ResumeData object. Requires authentication.",
				"tags": ["AI"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"aiProviderId": {
										"type": "string"
									},
									"file": {
										"type": "object",
										"properties": {
											"name": {
												"type": "string"
											},
											"data": {
												"type": "string",
												"maxLength": 13981018
											}
										},
										"required": ["name", "data"]
									}
								},
								"required": ["file"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The PDF was successfully parsed into structured resume data.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_REQUEST"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "The AI returned an improperly formatted structure."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"502": {
						"description": "502",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_GATEWAY"
												},
												"status": {
													"const": 502
												},
												"message": {
													"type": "string",
													"default": "The AI provider returned an error or is unreachable."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/ai/parse-docx": {
			"post": {
				"operationId": "parseResumeDocx",
				"summary": "Parse a DOCX file into resume data",
				"description": "Extracts structured resume data from a DOCX or DOC file using the specified AI provider. The file should be sent as a base64-encoded string along with AI provider credentials and the document's media type. Returns a complete ResumeData object. Requires authentication.",
				"tags": ["AI"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"aiProviderId": {
										"type": "string"
									},
									"file": {
										"type": "object",
										"properties": {
											"name": {
												"type": "string"
											},
											"data": {
												"type": "string",
												"maxLength": 13981018
											}
										},
										"required": ["name", "data"]
									},
									"mediaType": {
										"enum": [
											"application/msword",
											"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
										],
										"type": "string"
									}
								},
								"required": ["file", "mediaType"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The DOCX was successfully parsed into structured resume data.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_REQUEST"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "The AI returned an improperly formatted structure."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"502": {
						"description": "502",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_GATEWAY"
												},
												"status": {
													"const": 502
												},
												"message": {
													"type": "string",
													"default": "The AI provider returned an error or is unreachable."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/ai/chat": {
			"post": {
				"operationId": "aiChat",
				"summary": "Chat with AI to modify resume",
				"description": "Streams a chat response from the configured AI provider. The LLM can call the propose_resume_patches tool to generate JSON Patch proposals for explicit user approval. Requires authentication and AI provider credentials.",
				"tags": ["AI"],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/ai/analyze-resume": {
			"post": {
				"operationId": "analyzeResume",
				"summary": "Analyze resume and persist latest analysis",
				"description": "Uses AI to analyze the current resume and returns a structured analysis with scorecard, strengths, and improvement suggestions. The latest analysis is persisted and can be fetched later. Requires authentication and AI credentials.",
				"tags": ["AI"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"aiProviderId": {
										"type": "string"
									},
									"resumeId": {
										"type": "string"
									}
								},
								"required": ["resumeId"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Structured resume analysis returned and persisted successfully.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"overallScore": {
											"type": "integer",
											"minimum": 0,
											"maximum": 100
										},
										"scorecard": {
											"type": "array",
											"minItems": 1,
											"items": {
												"type": "object",
												"properties": {
													"dimension": {
														"type": "string",
														"minLength": 1
													},
													"score": {
														"type": "integer",
														"minimum": 0,
														"maximum": 100
													},
													"rationale": {
														"type": "string",
														"minLength": 1
													}
												},
												"required": ["dimension", "score", "rationale"]
											}
										},
										"suggestions": {
											"type": "array",
											"maxItems": 10,
											"items": {
												"type": "object",
												"properties": {
													"title": {
														"type": "string",
														"minLength": 1
													},
													"impact": {
														"enum": ["high", "medium", "low"],
														"type": "string"
													},
													"why": {
														"type": "string",
														"minLength": 1
													},
													"exampleRewrite": {
														"anyOf": [
															{
																"type": "string"
															},
															{
																"type": "null"
															}
														]
													},
													"copyPrompt": {
														"type": "string",
														"minLength": 1
													}
												},
												"required": ["title", "impact", "why", "exampleRewrite", "copyPrompt"]
											}
										},
										"strengths": {
											"type": "array",
											"maxItems": 10,
											"items": {
												"type": "string",
												"minLength": 1
											}
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"modelMeta": {
											"type": "object",
											"properties": {
												"provider": {
													"type": "string",
													"minLength": 1
												},
												"model": {
													"type": "string",
													"minLength": 1
												}
											},
											"required": ["provider", "model"]
										}
									},
									"required": ["overallScore", "scorecard", "suggestions", "strengths", "updatedAt", "modelMeta"]
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_REQUEST"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "The AI returned an improperly formatted structure."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"502": {
						"description": "502",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_GATEWAY"
												},
												"status": {
													"const": 502
												},
												"message": {
													"type": "string",
													"default": "The AI provider returned an error or is unreachable."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/ai-providers": {
			"get": {
				"operationId": "listAiProviders",
				"summary": "List saved AI providers",
				"description": "Lists saved provider/model/API key combinations for the authenticated user. API keys are redacted.",
				"tags": ["AI Providers"],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					},
					"412": {
						"description": "412",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "PRECONDITION_FAILED"
												},
												"status": {
													"const": 412
												},
												"message": {
													"type": "string",
													"default": "AI agent workspace is not configured."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			},
			"post": {
				"operationId": "createAiProvider",
				"summary": "Create saved AI provider",
				"description": "Stores an encrypted provider/model/API key combination. The key is never returned.",
				"tags": ["AI Providers"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"label": {
										"type": "string",
										"minLength": 1
									},
									"provider": {
										"enum": [
											"openai",
											"anthropic",
											"gemini",
											"vercel-ai-gateway",
											"openrouter",
											"ollama",
											"openai-compatible"
										],
										"type": "string"
									},
									"model": {
										"type": "string",
										"minLength": 1
									},
									"baseURL": {
										"type": "string",
										"default": ""
									},
									"apiKey": {
										"type": "string",
										"minLength": 1
									}
								},
								"required": ["label", "provider", "model", "apiKey"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_REQUEST"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "Invalid AI provider configuration."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"412": {
						"description": "412",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "PRECONDITION_FAILED"
												},
												"status": {
													"const": 412
												},
												"message": {
													"type": "string",
													"default": "AI agent workspace is not configured."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/ai-providers/{id}": {
			"patch": {
				"operationId": "updateAiProvider",
				"summary": "Update saved AI provider",
				"description": "Updates a saved provider/model/API key combination. Updating the key requires retesting before use.",
				"tags": ["AI Providers"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": false,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"label": {
										"type": "string",
										"minLength": 1
									},
									"provider": {
										"enum": [
											"openai",
											"anthropic",
											"gemini",
											"vercel-ai-gateway",
											"openrouter",
											"ollama",
											"openai-compatible"
										],
										"type": "string"
									},
									"model": {
										"type": "string",
										"minLength": 1
									},
									"baseURL": {
										"type": "string",
										"default": ""
									},
									"apiKey": {
										"type": "string",
										"minLength": 1
									},
									"enabled": {
										"type": "boolean"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_REQUEST"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "Invalid AI provider configuration."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"404": {
						"description": "404",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "NOT_FOUND"
												},
												"status": {
													"const": 404
												},
												"message": {
													"type": "string",
													"default": "AI provider was not found."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"412": {
						"description": "412",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "PRECONDITION_FAILED"
												},
												"status": {
													"const": 412
												},
												"message": {
													"type": "string",
													"default": "AI agent workspace is not configured."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			},
			"delete": {
				"operationId": "deleteAiProvider",
				"summary": "Delete saved AI provider",
				"description": "Deletes a saved provider/model/API key combination.",
				"tags": ["AI Providers"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					},
					"412": {
						"description": "412",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "PRECONDITION_FAILED"
												},
												"status": {
													"const": 412
												},
												"message": {
													"type": "string",
													"default": "AI agent workspace is not configured."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/ai-providers/{id}/test": {
			"post": {
				"operationId": "testAiProvider",
				"summary": "Test saved AI provider",
				"description": "Decrypts the saved API key server-side and validates the provider/model connection.",
				"tags": ["AI Providers"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_REQUEST"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "Invalid AI provider configuration."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"404": {
						"description": "404",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "NOT_FOUND"
												},
												"status": {
													"const": 404
												},
												"message": {
													"type": "string",
													"default": "AI provider was not found."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"412": {
						"description": "412",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "PRECONDITION_FAILED"
												},
												"status": {
													"const": 412
												},
												"message": {
													"type": "string",
													"default": "AI agent workspace is not configured."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"502": {
						"description": "502",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "BAD_GATEWAY"
												},
												"status": {
													"const": 502
												},
												"message": {
													"type": "string",
													"default": "The AI provider returned an error or is unreachable."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/threads": {
			"get": {
				"operationId": "listAgentThreads",
				"summary": "List agent threads",
				"tags": ["Agent"],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			},
			"post": {
				"operationId": "createAgentThread",
				"summary": "Create agent thread",
				"tags": ["Agent"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"aiProviderId": {
										"type": "string"
									},
									"sourceResumeId": {
										"type": "string"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/threads/for-resume": {
			"post": {
				"operationId": "getOrCreateAgentThreadForResume",
				"summary": "Get or create an in-resume agent thread",
				"tags": ["Agent"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"resumeId": {
										"type": "string"
									},
									"aiProviderId": {
										"type": "string"
									}
								},
								"required": ["resumeId"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/threads/{id}": {
			"get": {
				"operationId": "getAgentThread",
				"summary": "Get agent thread",
				"tags": ["Agent"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			},
			"delete": {
				"operationId": "deleteAgentThread",
				"summary": "Delete agent thread",
				"tags": ["Agent"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/threads/{id}/archive": {
			"post": {
				"operationId": "archiveAgentThread",
				"summary": "Archive agent thread",
				"tags": ["Agent"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/messages/send": {
			"post": {
				"operationId": "sendAgentMessage",
				"summary": "Send agent message",
				"tags": ["Agent"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"threadId": {
										"type": "string"
									},
									"message": {
										"not": {}
									},
									"attachmentIds": {
										"type": "array",
										"maxItems": 10,
										"items": {
											"type": "string",
											"minLength": 1
										}
									}
								},
								"required": ["threadId", "message"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/messages/stop": {
			"post": {
				"operationId": "stopAgentMessage",
				"summary": "Stop active agent run",
				"tags": ["Agent"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"threadId": {
										"type": "string"
									},
									"partialMessage": {
										"not": {}
									}
								},
								"required": ["threadId"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/messages/resume": {
			"get": {
				"operationId": "resumeAgentMessages",
				"summary": "Resume agent message stream",
				"tags": ["Agent"],
				"parameters": [
					{
						"name": "threadId",
						"in": "query",
						"required": true,
						"schema": {
							"type": "string"
						},
						"allowEmptyValue": true,
						"allowReserved": true
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/attachments": {
			"post": {
				"operationId": "createAgentAttachment",
				"summary": "Create agent attachment",
				"tags": ["Agent"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"threadId": {
										"type": "string"
									},
									"filename": {
										"type": "string",
										"minLength": 1
									},
									"mediaType": {
										"type": "string",
										"minLength": 1
									},
									"data": {
										"type": "string",
										"minLength": 1
									}
								},
								"required": ["threadId", "filename", "mediaType", "data"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/attachments/{id}": {
			"delete": {
				"operationId": "deleteAgentAttachment",
				"summary": "Delete agent attachment",
				"tags": ["Agent"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/agent/actions/{id}/revert": {
			"post": {
				"operationId": "revertAgentAction",
				"summary": "Restore agent action snapshot",
				"tags": ["Agent"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/applications": {
			"get": {
				"operationId": "listApplications",
				"summary": "List job applications",
				"description": "Returns all job applications belonging to the authenticated user, most recently updated first. Archived applications are excluded unless includeArchived is set. Optionally filter by pipeline stage. Requires authentication.",
				"tags": ["Applications"],
				"parameters": [
					{
						"name": "status",
						"in": "query",
						"schema": {
							"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
							"type": "string"
						},
						"allowEmptyValue": true,
						"allowReserved": true
					},
					{
						"name": "tags",
						"in": "query",
						"schema": {
							"type": "array",
							"items": {
								"type": "string"
							}
						},
						"style": "deepObject",
						"explode": true,
						"allowEmptyValue": true,
						"allowReserved": true
					},
					{
						"name": "includeArchived",
						"in": "query",
						"schema": {
							"type": "boolean",
							"default": false
						},
						"allowEmptyValue": true,
						"allowReserved": true
					}
				],
				"responses": {
					"200": {
						"description": "A list of the user's job applications.",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"type": "object",
										"properties": {
											"id": {
												"type": "string",
												"description": "The ID of the application."
											},
											"company": {
												"type": "string",
												"minLength": 1,
												"description": "The company applied to."
											},
											"role": {
												"type": "string",
												"minLength": 1,
												"description": "The role / job title."
											},
											"location": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"salary": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"status": {
												"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
												"type": "string",
												"description": "The current pipeline stage."
											},
											"archived": {
												"type": "boolean"
											},
											"resumeId": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												],
												"description": "The linked Reactive Resume, if any."
											},
											"source": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"tags": {
												"type": "array",
												"items": {
													"type": "string"
												}
											},
											"sourceUrl": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"jobDescription": {
												"anyOf": [
													{
														"type": "string",
														"maxLength": 20000
													},
													{
														"type": "null"
													}
												]
											},
											"matchScore": {
												"anyOf": [
													{
														"type": "integer",
														"minimum": 0,
														"maximum": 100
													},
													{
														"type": "null"
													}
												]
											},
											"aiMetadata": {
												"anyOf": [
													{
														"type": "object",
														"propertyNames": {
															"type": "string"
														},
														"additionalProperties": {}
													},
													{
														"type": "null"
													}
												]
											},
											"notes": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"resumeFileUrl": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"resumeFileName": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"coverLetterUrl": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"coverLetterName": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"followUpAt": {
												"anyOf": [
													{
														"type": "string",
														"format": "date-time",
														"x-native-type": "date"
													},
													{
														"type": "null"
													}
												]
											},
											"followUpNote": {
												"anyOf": [
													{
														"type": "string"
													},
													{
														"type": "null"
													}
												]
											},
											"contacts": {
												"type": "array",
												"items": {
													"type": "object",
													"properties": {
														"name": {
															"type": "string",
															"minLength": 1
														},
														"role": {
															"type": "string",
															"default": ""
														},
														"type": {
															"type": "string",
															"default": ""
														}
													},
													"required": ["name"]
												}
											},
											"activity": {
												"type": "array",
												"items": {
													"type": "object",
													"properties": {
														"id": {
															"type": "string",
															"minLength": 1
														},
														"type": {
															"enum": ["stage", "note", "created"],
															"type": "string"
														},
														"text": {
															"type": "string",
															"minLength": 1
														},
														"at": {
															"type": "string",
															"format": "date-time",
															"x-native-type": "date"
														}
													},
													"required": ["id", "type", "text", "at"]
												}
											},
											"appliedAt": {
												"type": "string",
												"format": "date-time",
												"x-native-type": "date"
											},
											"createdAt": {
												"type": "string",
												"format": "date-time",
												"x-native-type": "date"
											},
											"updatedAt": {
												"type": "string",
												"format": "date-time",
												"x-native-type": "date"
											}
										},
										"required": [
											"id",
											"company",
											"role",
											"location",
											"salary",
											"status",
											"archived",
											"resumeId",
											"source",
											"tags",
											"sourceUrl",
											"jobDescription",
											"matchScore",
											"aiMetadata",
											"notes",
											"resumeFileUrl",
											"resumeFileName",
											"coverLetterUrl",
											"coverLetterName",
											"followUpAt",
											"followUpNote",
											"contacts",
											"activity",
											"appliedAt",
											"createdAt",
											"updatedAt"
										]
									}
								}
							}
						}
					}
				}
			},
			"post": {
				"operationId": "createApplication",
				"summary": "Create a job application",
				"description": "Creates a new job application in the pipeline. Company and role are required; all other fields (stage, location, salary, source, linked resume, follow-up, notes, contacts) are optional. Requires authentication.",
				"tags": ["Applications"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"company": {
										"type": "string",
										"minLength": 1,
										"description": "The company applied to."
									},
									"role": {
										"type": "string",
										"minLength": 1,
										"description": "The role / job title."
									},
									"location": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"salary": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"source": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"sourceUrl": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"jobDescription": {
										"anyOf": [
											{
												"type": "string",
												"maxLength": 20000
											},
											{
												"type": "null"
											}
										]
									},
									"notes": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"resumeFileUrl": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"resumeFileName": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"coverLetterUrl": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"coverLetterName": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"followUpAt": {
										"anyOf": [
											{
												"type": "string",
												"format": "date-time",
												"x-native-type": "date"
											},
											{
												"type": "null"
											}
										]
									},
									"followUpNote": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"contacts": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"name": {
													"type": "string",
													"minLength": 1
												},
												"role": {
													"type": "string",
													"default": ""
												},
												"type": {
													"type": "string",
													"default": ""
												}
											},
											"required": ["name"]
										}
									},
									"resumeId": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										],
										"description": "The linked Reactive Resume, if any."
									},
									"tags": {
										"type": "array",
										"items": {
											"type": "string"
										}
									},
									"status": {
										"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
										"type": "string"
									}
								},
								"required": ["company", "role"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The ID of the newly created application.",
						"content": {
							"application/json": {
								"schema": {
									"type": "string",
									"description": "The ID of the created application."
								}
							}
						}
					}
				}
			}
		},
		"/applications/{id}": {
			"get": {
				"operationId": "getApplication",
				"summary": "Get application by ID",
				"description": "Returns a single job application with its full detail (contacts, activity timeline, linked resume). Only applications belonging to the authenticated user can be retrieved. Requires authentication.",
				"tags": ["Applications"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the application."
						}
					}
				],
				"responses": {
					"200": {
						"description": "The job application.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the application."
										},
										"company": {
											"type": "string",
											"minLength": 1,
											"description": "The company applied to."
										},
										"role": {
											"type": "string",
											"minLength": 1,
											"description": "The role / job title."
										},
										"location": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"salary": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"status": {
											"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
											"type": "string",
											"description": "The current pipeline stage."
										},
										"archived": {
											"type": "boolean"
										},
										"resumeId": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											],
											"description": "The linked Reactive Resume, if any."
										},
										"source": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											}
										},
										"sourceUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"jobDescription": {
											"anyOf": [
												{
													"type": "string",
													"maxLength": 20000
												},
												{
													"type": "null"
												}
											]
										},
										"matchScore": {
											"anyOf": [
												{
													"type": "integer",
													"minimum": 0,
													"maximum": 100
												},
												{
													"type": "null"
												}
											]
										},
										"aiMetadata": {
											"anyOf": [
												{
													"type": "object",
													"propertyNames": {
														"type": "string"
													},
													"additionalProperties": {}
												},
												{
													"type": "null"
												}
											]
										},
										"notes": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpAt": {
											"anyOf": [
												{
													"type": "string",
													"format": "date-time",
													"x-native-type": "date"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpNote": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"contacts": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"name": {
														"type": "string",
														"minLength": 1
													},
													"role": {
														"type": "string",
														"default": ""
													},
													"type": {
														"type": "string",
														"default": ""
													}
												},
												"required": ["name"]
											}
										},
										"activity": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"minLength": 1
													},
													"type": {
														"enum": ["stage", "note", "created"],
														"type": "string"
													},
													"text": {
														"type": "string",
														"minLength": 1
													},
													"at": {
														"type": "string",
														"format": "date-time",
														"x-native-type": "date"
													}
												},
												"required": ["id", "type", "text", "at"]
											}
										},
										"appliedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"createdAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										}
									},
									"required": [
										"id",
										"company",
										"role",
										"location",
										"salary",
										"status",
										"archived",
										"resumeId",
										"source",
										"tags",
										"sourceUrl",
										"jobDescription",
										"matchScore",
										"aiMetadata",
										"notes",
										"resumeFileUrl",
										"resumeFileName",
										"coverLetterUrl",
										"coverLetterName",
										"followUpAt",
										"followUpNote",
										"contacts",
										"activity",
										"appliedAt",
										"createdAt",
										"updatedAt"
									]
								}
							}
						}
					}
				}
			},
			"put": {
				"operationId": "updateApplication",
				"summary": "Update a job application",
				"description": "Updates one or more fields of an application, including moving it to a different pipeline stage or archiving it. Moving stages automatically appends an entry to the activity timeline. Only provided fields are changed. Requires authentication.",
				"tags": ["Applications"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": false,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"company": {
										"type": "string",
										"minLength": 1,
										"description": "The company applied to."
									},
									"role": {
										"type": "string",
										"minLength": 1,
										"description": "The role / job title."
									},
									"location": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"salary": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"source": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"sourceUrl": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"jobDescription": {
										"anyOf": [
											{
												"type": "string",
												"maxLength": 20000
											},
											{
												"type": "null"
											}
										]
									},
									"notes": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"resumeFileUrl": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"resumeFileName": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"coverLetterUrl": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"coverLetterName": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"followUpAt": {
										"anyOf": [
											{
												"type": "string",
												"format": "date-time",
												"x-native-type": "date"
											},
											{
												"type": "null"
											}
										]
									},
									"followUpNote": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										]
									},
									"contacts": {
										"type": "array",
										"items": {
											"type": "object",
											"properties": {
												"name": {
													"type": "string",
													"minLength": 1
												},
												"role": {
													"type": "string",
													"default": ""
												},
												"type": {
													"type": "string",
													"default": ""
												}
											},
											"required": ["name"]
										}
									},
									"resumeId": {
										"anyOf": [
											{
												"type": "string"
											},
											{
												"type": "null"
											}
										],
										"description": "The linked Reactive Resume, if any."
									},
									"tags": {
										"type": "array",
										"items": {
											"type": "string"
										}
									},
									"status": {
										"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
										"type": "string"
									},
									"archived": {
										"type": "boolean"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The updated application.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the application."
										},
										"company": {
											"type": "string",
											"minLength": 1,
											"description": "The company applied to."
										},
										"role": {
											"type": "string",
											"minLength": 1,
											"description": "The role / job title."
										},
										"location": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"salary": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"status": {
											"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
											"type": "string",
											"description": "The current pipeline stage."
										},
										"archived": {
											"type": "boolean"
										},
										"resumeId": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											],
											"description": "The linked Reactive Resume, if any."
										},
										"source": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											}
										},
										"sourceUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"jobDescription": {
											"anyOf": [
												{
													"type": "string",
													"maxLength": 20000
												},
												{
													"type": "null"
												}
											]
										},
										"matchScore": {
											"anyOf": [
												{
													"type": "integer",
													"minimum": 0,
													"maximum": 100
												},
												{
													"type": "null"
												}
											]
										},
										"aiMetadata": {
											"anyOf": [
												{
													"type": "object",
													"propertyNames": {
														"type": "string"
													},
													"additionalProperties": {}
												},
												{
													"type": "null"
												}
											]
										},
										"notes": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpAt": {
											"anyOf": [
												{
													"type": "string",
													"format": "date-time",
													"x-native-type": "date"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpNote": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"contacts": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"name": {
														"type": "string",
														"minLength": 1
													},
													"role": {
														"type": "string",
														"default": ""
													},
													"type": {
														"type": "string",
														"default": ""
													}
												},
												"required": ["name"]
											}
										},
										"activity": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"minLength": 1
													},
													"type": {
														"enum": ["stage", "note", "created"],
														"type": "string"
													},
													"text": {
														"type": "string",
														"minLength": 1
													},
													"at": {
														"type": "string",
														"format": "date-time",
														"x-native-type": "date"
													}
												},
												"required": ["id", "type", "text", "at"]
											}
										},
										"appliedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"createdAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										}
									},
									"required": [
										"id",
										"company",
										"role",
										"location",
										"salary",
										"status",
										"archived",
										"resumeId",
										"source",
										"tags",
										"sourceUrl",
										"jobDescription",
										"matchScore",
										"aiMetadata",
										"notes",
										"resumeFileUrl",
										"resumeFileName",
										"coverLetterUrl",
										"coverLetterName",
										"followUpAt",
										"followUpNote",
										"contacts",
										"activity",
										"appliedAt",
										"createdAt",
										"updatedAt"
									]
								}
							}
						}
					}
				}
			},
			"delete": {
				"operationId": "deleteApplication",
				"summary": "Delete a job application",
				"description": "Permanently deletes a job application. Requires authentication.",
				"tags": ["Applications"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the application."
						}
					}
				],
				"responses": {
					"200": {
						"description": "The application was deleted successfully.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/applications/import": {
			"post": {
				"operationId": "importApplications",
				"summary": "Bulk import applications",
				"description": "Creates many applications at once from a parsed CSV. Each item requires company and role. Returns the number imported. Requires authentication.",
				"tags": ["Applications"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"items": {
										"type": "array",
										"minItems": 1,
										"maxItems": 500,
										"items": {
											"type": "object",
											"properties": {
												"company": {
													"type": "string",
													"minLength": 1,
													"description": "The company applied to."
												},
												"role": {
													"type": "string",
													"minLength": 1,
													"description": "The role / job title."
												},
												"location": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"salary": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"source": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"sourceUrl": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"jobDescription": {
													"anyOf": [
														{
															"type": "string",
															"maxLength": 20000
														},
														{
															"type": "null"
														}
													]
												},
												"notes": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"resumeFileUrl": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"resumeFileName": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"coverLetterUrl": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"coverLetterName": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"followUpAt": {
													"anyOf": [
														{
															"type": "string",
															"format": "date-time",
															"x-native-type": "date"
														},
														{
															"type": "null"
														}
													]
												},
												"followUpNote": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													]
												},
												"contacts": {
													"type": "array",
													"items": {
														"type": "object",
														"properties": {
															"name": {
																"type": "string",
																"minLength": 1
															},
															"role": {
																"type": "string",
																"default": ""
															},
															"type": {
																"type": "string",
																"default": ""
															}
														},
														"required": ["name"]
													}
												},
												"resumeId": {
													"anyOf": [
														{
															"type": "string"
														},
														{
															"type": "null"
														}
													],
													"description": "The linked Reactive Resume, if any."
												},
												"tags": {
													"type": "array",
													"items": {
														"type": "string"
													}
												},
												"status": {
													"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
													"type": "string"
												}
											},
											"required": ["company", "role"]
										}
									}
								},
								"required": ["items"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The number of applications imported.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"imported": {
											"type": "number"
										}
									},
									"required": ["imported"]
								}
							}
						}
					}
				}
			}
		},
		"/applications/{id}/documents/{kind}": {
			"post": {
				"operationId": "attachApplicationDocument",
				"summary": "Attach an application document",
				"description": "Uploads and attaches a PDF document to an application. Kind must be either resume or cover-letter. Requires authentication.",
				"tags": ["Applications"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "kind",
						"in": "path",
						"required": true,
						"schema": {
							"enum": ["resume", "cover-letter"],
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"multipart/form-data": {
							"schema": {
								"type": "object",
								"properties": {
									"file": {
										"type": "string",
										"contentMediaType": "application/pdf"
									}
								},
								"required": ["file"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The updated application.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the application."
										},
										"company": {
											"type": "string",
											"minLength": 1,
											"description": "The company applied to."
										},
										"role": {
											"type": "string",
											"minLength": 1,
											"description": "The role / job title."
										},
										"location": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"salary": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"status": {
											"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
											"type": "string",
											"description": "The current pipeline stage."
										},
										"archived": {
											"type": "boolean"
										},
										"resumeId": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											],
											"description": "The linked Reactive Resume, if any."
										},
										"source": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											}
										},
										"sourceUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"jobDescription": {
											"anyOf": [
												{
													"type": "string",
													"maxLength": 20000
												},
												{
													"type": "null"
												}
											]
										},
										"matchScore": {
											"anyOf": [
												{
													"type": "integer",
													"minimum": 0,
													"maximum": 100
												},
												{
													"type": "null"
												}
											]
										},
										"aiMetadata": {
											"anyOf": [
												{
													"type": "object",
													"propertyNames": {
														"type": "string"
													},
													"additionalProperties": {}
												},
												{
													"type": "null"
												}
											]
										},
										"notes": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpAt": {
											"anyOf": [
												{
													"type": "string",
													"format": "date-time",
													"x-native-type": "date"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpNote": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"contacts": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"name": {
														"type": "string",
														"minLength": 1
													},
													"role": {
														"type": "string",
														"default": ""
													},
													"type": {
														"type": "string",
														"default": ""
													}
												},
												"required": ["name"]
											}
										},
										"activity": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"minLength": 1
													},
													"type": {
														"enum": ["stage", "note", "created"],
														"type": "string"
													},
													"text": {
														"type": "string",
														"minLength": 1
													},
													"at": {
														"type": "string",
														"format": "date-time",
														"x-native-type": "date"
													}
												},
												"required": ["id", "type", "text", "at"]
											}
										},
										"appliedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"createdAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										}
									},
									"required": [
										"id",
										"company",
										"role",
										"location",
										"salary",
										"status",
										"archived",
										"resumeId",
										"source",
										"tags",
										"sourceUrl",
										"jobDescription",
										"matchScore",
										"aiMetadata",
										"notes",
										"resumeFileUrl",
										"resumeFileName",
										"coverLetterUrl",
										"coverLetterName",
										"followUpAt",
										"followUpNote",
										"contacts",
										"activity",
										"appliedAt",
										"createdAt",
										"updatedAt"
									]
								}
							}
						}
					}
				}
			},
			"delete": {
				"operationId": "removeApplicationDocument",
				"summary": "Remove an application document",
				"description": "Removes a resume or cover-letter PDF from an application and clears the stored document fields. Requires authentication.",
				"tags": ["Applications"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "kind",
						"in": "path",
						"required": true,
						"schema": {
							"enum": ["resume", "cover-letter"],
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "The updated application.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the application."
										},
										"company": {
											"type": "string",
											"minLength": 1,
											"description": "The company applied to."
										},
										"role": {
											"type": "string",
											"minLength": 1,
											"description": "The role / job title."
										},
										"location": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"salary": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"status": {
											"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
											"type": "string",
											"description": "The current pipeline stage."
										},
										"archived": {
											"type": "boolean"
										},
										"resumeId": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											],
											"description": "The linked Reactive Resume, if any."
										},
										"source": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											}
										},
										"sourceUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"jobDescription": {
											"anyOf": [
												{
													"type": "string",
													"maxLength": 20000
												},
												{
													"type": "null"
												}
											]
										},
										"matchScore": {
											"anyOf": [
												{
													"type": "integer",
													"minimum": 0,
													"maximum": 100
												},
												{
													"type": "null"
												}
											]
										},
										"aiMetadata": {
											"anyOf": [
												{
													"type": "object",
													"propertyNames": {
														"type": "string"
													},
													"additionalProperties": {}
												},
												{
													"type": "null"
												}
											]
										},
										"notes": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpAt": {
											"anyOf": [
												{
													"type": "string",
													"format": "date-time",
													"x-native-type": "date"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpNote": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"contacts": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"name": {
														"type": "string",
														"minLength": 1
													},
													"role": {
														"type": "string",
														"default": ""
													},
													"type": {
														"type": "string",
														"default": ""
													}
												},
												"required": ["name"]
											}
										},
										"activity": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"minLength": 1
													},
													"type": {
														"enum": ["stage", "note", "created"],
														"type": "string"
													},
													"text": {
														"type": "string",
														"minLength": 1
													},
													"at": {
														"type": "string",
														"format": "date-time",
														"x-native-type": "date"
													}
												},
												"required": ["id", "type", "text", "at"]
											}
										},
										"appliedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"createdAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										}
									},
									"required": [
										"id",
										"company",
										"role",
										"location",
										"salary",
										"status",
										"archived",
										"resumeId",
										"source",
										"tags",
										"sourceUrl",
										"jobDescription",
										"matchScore",
										"aiMetadata",
										"notes",
										"resumeFileUrl",
										"resumeFileName",
										"coverLetterUrl",
										"coverLetterName",
										"followUpAt",
										"followUpNote",
										"contacts",
										"activity",
										"appliedAt",
										"createdAt",
										"updatedAt"
									]
								}
							}
						}
					}
				}
			}
		},
		"/applications/{id}/notes": {
			"post": {
				"operationId": "addApplicationNote",
				"summary": "Log a note on the timeline",
				"description": "Appends a free-text note to the application's activity timeline. Requires authentication.",
				"tags": ["Applications"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"text": {
										"type": "string",
										"minLength": 1
									}
								},
								"required": ["text"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The updated application.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the application."
										},
										"company": {
											"type": "string",
											"minLength": 1,
											"description": "The company applied to."
										},
										"role": {
											"type": "string",
											"minLength": 1,
											"description": "The role / job title."
										},
										"location": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"salary": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"status": {
											"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
											"type": "string",
											"description": "The current pipeline stage."
										},
										"archived": {
											"type": "boolean"
										},
										"resumeId": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											],
											"description": "The linked Reactive Resume, if any."
										},
										"source": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											}
										},
										"sourceUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"jobDescription": {
											"anyOf": [
												{
													"type": "string",
													"maxLength": 20000
												},
												{
													"type": "null"
												}
											]
										},
										"matchScore": {
											"anyOf": [
												{
													"type": "integer",
													"minimum": 0,
													"maximum": 100
												},
												{
													"type": "null"
												}
											]
										},
										"aiMetadata": {
											"anyOf": [
												{
													"type": "object",
													"propertyNames": {
														"type": "string"
													},
													"additionalProperties": {}
												},
												{
													"type": "null"
												}
											]
										},
										"notes": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"resumeFileName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterUrl": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"coverLetterName": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpAt": {
											"anyOf": [
												{
													"type": "string",
													"format": "date-time",
													"x-native-type": "date"
												},
												{
													"type": "null"
												}
											]
										},
										"followUpNote": {
											"anyOf": [
												{
													"type": "string"
												},
												{
													"type": "null"
												}
											]
										},
										"contacts": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"name": {
														"type": "string",
														"minLength": 1
													},
													"role": {
														"type": "string",
														"default": ""
													},
													"type": {
														"type": "string",
														"default": ""
													}
												},
												"required": ["name"]
											}
										},
										"activity": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"id": {
														"type": "string",
														"minLength": 1
													},
													"type": {
														"enum": ["stage", "note", "created"],
														"type": "string"
													},
													"text": {
														"type": "string",
														"minLength": 1
													},
													"at": {
														"type": "string",
														"format": "date-time",
														"x-native-type": "date"
													}
												},
												"required": ["id", "type", "text", "at"]
											}
										},
										"appliedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"createdAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date"
										}
									},
									"required": [
										"id",
										"company",
										"role",
										"location",
										"salary",
										"status",
										"archived",
										"resumeId",
										"source",
										"tags",
										"sourceUrl",
										"jobDescription",
										"matchScore",
										"aiMetadata",
										"notes",
										"resumeFileUrl",
										"resumeFileName",
										"coverLetterUrl",
										"coverLetterName",
										"followUpAt",
										"followUpNote",
										"contacts",
										"activity",
										"appliedAt",
										"createdAt",
										"updatedAt"
									]
								}
							}
						}
					}
				}
			}
		},
		"/applications/bulk-update": {
			"post": {
				"operationId": "bulkUpdateApplications",
				"summary": "Bulk update applications",
				"description": "Applies the same change (move stage, archive/unarchive, add tags) to multiple applications at once. Requires authentication.",
				"tags": ["Applications"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"ids": {
										"type": "array",
										"minItems": 1,
										"items": {
											"type": "string"
										}
									},
									"status": {
										"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
										"type": "string"
									},
									"archived": {
										"type": "boolean"
									},
									"addTags": {
										"type": "array",
										"items": {
											"type": "string"
										}
									}
								},
								"required": ["ids"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The number of applications updated.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"updated": {
											"type": "number"
										}
									},
									"required": ["updated"]
								}
							}
						}
					}
				}
			}
		},
		"/applications/bulk-delete": {
			"post": {
				"operationId": "bulkDeleteApplications",
				"summary": "Bulk delete applications",
				"description": "Permanently deletes multiple applications at once. Requires authentication.",
				"tags": ["Applications"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"ids": {
										"type": "array",
										"minItems": 1,
										"items": {
											"type": "string"
										}
									}
								},
								"required": ["ids"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The number of applications deleted.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"deleted": {
											"type": "number"
										}
									},
									"required": ["deleted"]
								}
							}
						}
					}
				}
			}
		},
		"/applications/stats": {
			"get": {
				"operationId": "getApplicationStats",
				"summary": "Application pipeline stats",
				"description": "Returns aggregate counts (per stage, per source) for the Insights view. Requires authentication.",
				"tags": ["Applications"],
				"parameters": [],
				"responses": {
					"200": {
						"description": "Aggregate application counts.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"total": {
											"type": "number"
										},
										"byStage": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"status": {
														"enum": ["saved", "applied", "screening", "interview", "offer", "rejected"],
														"type": "string"
													},
													"count": {
														"type": "number"
													}
												},
												"required": ["status", "count"]
											}
										},
										"bySource": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"source": {
														"type": "string"
													},
													"count": {
														"type": "number"
													}
												},
												"required": ["source", "count"]
											}
										}
									},
									"required": ["total", "byStage", "bySource"]
								}
							}
						}
					}
				}
			}
		},
		"/applications/tags": {
			"get": {
				"operationId": "listApplicationTags",
				"summary": "List application tags",
				"description": "Returns the distinct tags used across the user's applications. Requires authentication.",
				"tags": ["Applications"],
				"responses": {
					"200": {
						"description": "Distinct tags.",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"type": "string"
									}
								}
							}
						}
					}
				}
			}
		},
		"/applications/ai/autofill": {
			"post": {
				"operationId": "aiAutofillApplication",
				"tags": ["Applications", "AI"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"sourceUrl": {
										"type": "string"
									},
									"jobDescription": {
										"type": "string",
										"maxLength": 20000
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"company": {
											"type": "string"
										},
										"role": {
											"type": "string"
										},
										"location": {
											"type": "string"
										},
										"salary": {
											"type": "string"
										},
										"jobDescription": {
											"type": "string"
										}
									},
									"required": ["company", "role", "location", "salary", "jobDescription"]
								}
							}
						}
					}
				}
			}
		},
		"/applications/{id}/ai/match-score": {
			"post": {
				"operationId": "aiApplicationMatchScore",
				"tags": ["Applications", "AI"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"score": {},
										"gaps": {},
										"strengths": {}
									}
								}
							}
						}
					}
				}
			}
		},
		"/applications/{id}/ai/draft-message": {
			"post": {
				"operationId": "aiDraftApplicationMessage",
				"tags": ["Applications", "AI"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"kind": {
										"enum": ["cover-letter", "follow-up"],
										"type": "string"
									}
								},
								"required": ["kind"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"text": {
											"type": "string"
										}
									},
									"required": ["text"]
								}
							}
						}
					}
				}
			}
		},
		"/applications/{id}/ai/tailor-resume": {
			"post": {
				"operationId": "aiTailorResumeForApplication",
				"tags": ["Applications", "AI"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"resumeId": {
											"type": "string"
										},
										"name": {
											"type": "string"
										}
									},
									"required": ["resumeId", "name"]
								}
							}
						}
					}
				}
			}
		},
		"/auth/providers": {
			"get": {
				"operationId": "listAuthProviders",
				"summary": "List authentication providers",
				"description": "Returns a list of all authentication providers enabled on this Reactive Resume instance, along with their display names. Possible providers include password-based credentials, Google, GitHub, LinkedIn, and custom OAuth. No authentication required.",
				"tags": ["Authentication"],
				"responses": {
					"200": {
						"description": "A map of enabled authentication provider identifiers to their display names.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/auth/account/export": {
			"get": {
				"operationId": "exportAccountData",
				"summary": "Export user account data",
				"description": "Returns a JSON-serializable export of the authenticated user's data, including their public profile fields and all of their resumes. Secrets such as password hashes, tokens, and API keys are never included. Requires authentication.",
				"tags": ["Authentication"],
				"responses": {
					"200": {
						"description": "The user's exported account data.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/auth/account": {
			"delete": {
				"operationId": "deleteAccount",
				"summary": "Delete user account",
				"description": "Permanently deletes the authenticated user's account, including all resumes, uploaded files (profile pictures, screenshots, PDFs), and associated data. This action is irreversible. Requires authentication.",
				"tags": ["Authentication"],
				"responses": {
					"200": {
						"description": "The user account and all associated data have been successfully deleted.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/flags": {
			"get": {
				"operationId": "getFeatureFlags",
				"summary": "Get feature flags",
				"description": "Returns the current feature flags for this Reactive Resume instance. Feature flags control instance-wide settings such as whether new user signups or email-based authentication are disabled. No authentication required.",
				"tags": ["Feature Flags"],
				"responses": {
					"200": {
						"description": "The current feature flags for this instance.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"disableSignups": {
											"type": "boolean",
											"description": "Whether new user signups are disabled on this instance."
										},
										"disableEmailAuth": {
											"type": "boolean",
											"description": "Whether email-based authentication is disabled on this instance."
										},
										"showSponsors": {
											"type": "boolean",
											"description": "Whether sponsor placements are shown on this instance."
										},
										"smtpEnabled": {
											"type": "boolean",
											"description": "Whether outbound email (SMTP) is configured on this instance."
										}
									},
									"required": ["disableSignups", "disableEmailAuth", "showSponsors", "smtpEnabled"]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/tags": {
			"get": {
				"operationId": "listResumeTags",
				"summary": "List all resume tags",
				"description": "Returns a sorted list of all unique tags across the authenticated user's resumes. Useful for populating tag filters in the dashboard. Requires authentication.",
				"tags": ["Resumes"],
				"responses": {
					"200": {
						"description": "A sorted array of unique tag strings.",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"type": "string"
									}
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}/statistics": {
			"get": {
				"operationId": "getResumeStatistics",
				"summary": "Get resume statistics",
				"description": "Returns view and download statistics for the specified resume, including total counts and the timestamps of the last view and download. Requires authentication.",
				"tags": ["Resume Statistics"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The unique identifier of the resume."
						}
					}
				],
				"responses": {
					"200": {
						"description": "The resume's view and download statistics.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"isPublic": {
											"type": "boolean",
											"description": "Whether the resume is currently public."
										},
										"views": {
											"type": "number",
											"description": "Total number of times the resume has been viewed."
										},
										"downloads": {
											"type": "number",
											"description": "Total number of times the resume has been downloaded."
										},
										"lastViewedAt": {
											"anyOf": [
												{
													"type": "string",
													"format": "date-time",
													"x-native-type": "date"
												},
												{
													"type": "null"
												}
											],
											"description": "Timestamp of the last view, or null if never viewed."
										},
										"lastDownloadedAt": {
											"anyOf": [
												{
													"type": "string",
													"format": "date-time",
													"x-native-type": "date"
												},
												{
													"type": "null"
												}
											],
											"description": "Timestamp of the last download, or null if never downloaded."
										}
									},
									"required": ["isPublic", "views", "downloads", "lastViewedAt", "lastDownloadedAt"]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}/statistics/daily": {
			"get": {
				"operationId": "getResumeDailyStatistics",
				"summary": "Get resume daily statistics",
				"description": "Returns a continuous, zero-filled per-day series of view and download counts for the specified resume over the last `days` days (UTC). Requires authentication and resume ownership.",
				"tags": ["Resume Statistics"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The unique identifier of the resume."
						}
					},
					{
						"name": "days",
						"in": "query",
						"schema": {
							"type": "integer",
							"minimum": 1,
							"maximum": 365,
							"default": 30,
							"description": "Number of trailing days to include."
						},
						"allowEmptyValue": true,
						"allowReserved": true
					}
				],
				"responses": {
					"200": {
						"description": "The resume's daily view and download statistics.",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"type": "object",
										"properties": {
											"date": {
												"type": "string",
												"description": "The UTC day in YYYY-MM-DD format."
											},
											"views": {
												"type": "number",
												"description": "Number of views recorded on this day."
											},
											"downloads": {
												"type": "number",
												"description": "Number of downloads recorded on this day."
											}
										},
										"required": ["date", "views", "downloads"]
									}
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}/analysis": {
			"get": {
				"operationId": "getResumeAnalysis",
				"summary": "Get latest resume analysis",
				"description": "Returns the latest persisted AI analysis for the specified resume, if one exists. Requires authentication.",
				"tags": ["Resume Analysis"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The unique identifier of the resume."
						}
					}
				],
				"responses": {
					"200": {
						"description": "The latest persisted resume analysis, or null if no analysis has been saved yet.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"type": "object",
											"properties": {
												"overallScore": {
													"type": "integer",
													"minimum": 0,
													"maximum": 100
												},
												"scorecard": {
													"type": "array",
													"minItems": 1,
													"items": {
														"type": "object",
														"properties": {
															"dimension": {
																"type": "string",
																"minLength": 1
															},
															"score": {
																"type": "integer",
																"minimum": 0,
																"maximum": 100
															},
															"rationale": {
																"type": "string",
																"minLength": 1
															}
														},
														"required": ["dimension", "score", "rationale"]
													}
												},
												"suggestions": {
													"type": "array",
													"maxItems": 10,
													"items": {
														"type": "object",
														"properties": {
															"title": {
																"type": "string",
																"minLength": 1
															},
															"impact": {
																"enum": ["high", "medium", "low"],
																"type": "string"
															},
															"why": {
																"type": "string",
																"minLength": 1
															},
															"exampleRewrite": {
																"anyOf": [
																	{
																		"type": "string"
																	},
																	{
																		"type": "null"
																	}
																]
															},
															"copyPrompt": {
																"type": "string",
																"minLength": 1
															}
														},
														"required": ["title", "impact", "why", "exampleRewrite", "copyPrompt"]
													}
												},
												"strengths": {
													"type": "array",
													"maxItems": 10,
													"items": {
														"type": "string",
														"minLength": 1
													}
												},
												"updatedAt": {
													"type": "string",
													"format": "date-time",
													"x-native-type": "date"
												},
												"modelMeta": {
													"type": "object",
													"properties": {
														"provider": {
															"type": "string",
															"minLength": 1
														},
														"model": {
															"type": "string",
															"minLength": 1
														}
													},
													"required": ["provider", "model"]
												}
											},
											"required": ["overallScore", "scorecard", "suggestions", "strengths", "updatedAt", "modelMeta"]
										},
										{
											"type": "null"
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}/updates": {
			"get": {
				"operationId": "subscribeResumeUpdates",
				"summary": "Subscribe to resume updates",
				"description": "Streams lightweight invalidation events when the specified resume changes. The event payload contains metadata only; clients should refetch the resume for canonical data.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The unique identifier of the resume."
						}
					}
				],
				"responses": {
					"200": {
						"description": "A stream of resume update invalidation events.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/resumes": {
			"get": {
				"operationId": "listResumes",
				"summary": "List all resumes",
				"description": "Returns a list of all resumes belonging to the authenticated user. Results can be filtered by tags and sorted by last updated date, creation date, or name. Resume data is not included in the response for performance; use the get endpoint to fetch full resume data. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "tags",
						"in": "query",
						"schema": {
							"type": "array",
							"items": {
								"type": "string"
							},
							"default": []
						},
						"style": "deepObject",
						"explode": true,
						"allowEmptyValue": true,
						"allowReserved": true
					},
					{
						"name": "sort",
						"in": "query",
						"schema": {
							"enum": ["lastUpdatedAt", "createdAt", "name"],
							"type": "string",
							"default": "lastUpdatedAt"
						},
						"allowEmptyValue": true,
						"allowReserved": true
					}
				],
				"responses": {
					"200": {
						"description": "A list of resumes with their metadata (without full resume data).",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"type": "object",
										"properties": {
											"id": {
												"type": "string",
												"description": "The ID of the resume."
											},
											"name": {
												"type": "string",
												"minLength": 1,
												"description": "The name of the resume."
											},
											"slug": {
												"type": "string",
												"minLength": 1,
												"description": "The slug of the resume."
											},
											"tags": {
												"type": "array",
												"items": {
													"type": "string"
												},
												"description": "The tags of the resume."
											},
											"isPublic": {
												"type": "boolean",
												"description": "Whether the resume is public."
											},
											"isLocked": {
												"type": "boolean",
												"description": "Whether the resume is locked."
											},
											"createdAt": {
												"type": "string",
												"format": "date-time",
												"x-native-type": "date",
												"description": "The date and time the resume was created."
											},
											"updatedAt": {
												"type": "string",
												"format": "date-time",
												"x-native-type": "date",
												"description": "The date and time the resume was last updated."
											}
										},
										"required": ["id", "name", "slug", "tags", "isPublic", "isLocked", "createdAt", "updatedAt"]
									}
								}
							}
						}
					}
				}
			},
			"post": {
				"operationId": "createResume",
				"summary": "Create a new resume",
				"description": "Creates a new resume with the given name, slug, and tags. Optionally initializes the resume with sample data by setting withSampleData to true. The slug must be unique across the user's resumes. Returns the ID of the newly created resume. Requires authentication.",
				"tags": ["Resumes"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"name": {
										"type": "string",
										"minLength": 1,
										"description": "The name of the resume."
									},
									"slug": {
										"type": "string",
										"minLength": 1,
										"description": "The slug of the resume."
									},
									"tags": {
										"type": "array",
										"items": {
											"type": "string"
										},
										"description": "The tags of the resume."
									},
									"withSampleData": {
										"type": "boolean",
										"default": false
									}
								},
								"required": ["name", "slug", "tags"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The ID of the newly created resume.",
						"content": {
							"application/json": {
								"schema": {
									"type": "string",
									"description": "The ID of the created resume."
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "RESUME_SLUG_ALREADY_EXISTS"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "A resume with this slug already exists."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}": {
			"get": {
				"operationId": "getResume",
				"summary": "Get resume by ID",
				"description": "Returns a single resume with its full data, identified by its unique ID. Only resumes belonging to the authenticated user can be retrieved. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume."
						}
					}
				],
				"responses": {
					"200": {
						"description": "The resume with its full data.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the resume."
										},
										"name": {
											"type": "string",
											"minLength": 1,
											"description": "The name of the resume."
										},
										"slug": {
											"type": "string",
											"minLength": 1,
											"description": "The slug of the resume."
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											},
											"description": "The tags of the resume."
										},
										"isPublic": {
											"type": "boolean",
											"description": "Whether the resume is public."
										},
										"isLocked": {
											"type": "boolean",
											"description": "Whether the resume is locked."
										},
										"data": {
											"$ref": "#/components/schemas/ResumeData"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date",
											"description": "The date and time the resume was last updated."
										},
										"hasPassword": {
											"type": "boolean"
										}
									},
									"required": ["id", "name", "slug", "tags", "isPublic", "isLocked", "data", "updatedAt", "hasPassword"]
								}
							}
						}
					}
				}
			},
			"put": {
				"operationId": "updateResume",
				"summary": "Update a resume",
				"description": "Updates one or more fields of a resume identified by its ID. All fields are optional; only provided fields will be updated. Locked resumes cannot be updated. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": false,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"name": {
										"type": "string",
										"minLength": 1,
										"description": "The name of the resume."
									},
									"slug": {
										"type": "string",
										"minLength": 1,
										"description": "The slug of the resume."
									},
									"tags": {
										"type": "array",
										"items": {
											"type": "string"
										},
										"description": "The tags of the resume."
									},
									"data": {
										"$ref": "#/components/schemas/ResumeData"
									},
									"isPublic": {
										"type": "boolean",
										"description": "Whether the resume is public."
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The updated resume with its full data.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the resume."
										},
										"name": {
											"type": "string",
											"minLength": 1,
											"description": "The name of the resume."
										},
										"slug": {
											"type": "string",
											"minLength": 1,
											"description": "The slug of the resume."
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											},
											"description": "The tags of the resume."
										},
										"isPublic": {
											"type": "boolean",
											"description": "Whether the resume is public."
										},
										"isLocked": {
											"type": "boolean",
											"description": "Whether the resume is locked."
										},
										"data": {
											"$ref": "#/components/schemas/ResumeData"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date",
											"description": "The date and time the resume was last updated."
										},
										"hasPassword": {
											"type": "boolean"
										}
									},
									"required": ["id", "name", "slug", "tags", "isPublic", "isLocked", "data", "updatedAt", "hasPassword"]
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "RESUME_SLUG_ALREADY_EXISTS"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "A resume with this slug already exists."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			},
			"patch": {
				"operationId": "patchResume",
				"summary": "Patch resume data",
				"description": "Applies JSON Patch (RFC 6902) operations to partially update a resume's data. This allows small, targeted changes (e.g. updating a single field) without sending the entire resume object. Locked resumes cannot be patched. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume to patch."
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"expectedUpdatedAt": {
										"type": "string",
										"format": "date-time",
										"x-native-type": "date",
										"description": "If provided, the patch only applies when the resume version still matches this timestamp."
									},
									"operations": {
										"type": "array",
										"minItems": 1,
										"items": {
											"anyOf": [
												{
													"type": "object",
													"properties": {
														"op": {
															"const": "add"
														},
														"path": {
															"type": "string"
														},
														"value": {}
													},
													"required": ["op", "path"]
												},
												{
													"type": "object",
													"properties": {
														"op": {
															"const": "remove"
														},
														"path": {
															"type": "string"
														}
													},
													"required": ["op", "path"]
												},
												{
													"type": "object",
													"properties": {
														"op": {
															"const": "replace"
														},
														"path": {
															"type": "string"
														},
														"value": {}
													},
													"required": ["op", "path"]
												},
												{
													"type": "object",
													"properties": {
														"op": {
															"const": "move"
														},
														"path": {
															"type": "string"
														},
														"from": {
															"type": "string"
														}
													},
													"required": ["op", "path", "from"]
												},
												{
													"type": "object",
													"properties": {
														"op": {
															"const": "copy"
														},
														"path": {
															"type": "string"
														},
														"from": {
															"type": "string"
														}
													},
													"required": ["op", "path", "from"]
												},
												{
													"type": "object",
													"properties": {
														"op": {
															"const": "test"
														},
														"path": {
															"type": "string"
														},
														"value": {}
													},
													"required": ["op", "path"]
												}
											]
										},
										"description": "An array of JSON Patch (RFC 6902) operations to apply to the resume data."
									}
								},
								"required": ["operations"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The patched resume with its full data.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the resume."
										},
										"name": {
											"type": "string",
											"minLength": 1,
											"description": "The name of the resume."
										},
										"slug": {
											"type": "string",
											"minLength": 1,
											"description": "The slug of the resume."
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											},
											"description": "The tags of the resume."
										},
										"isPublic": {
											"type": "boolean",
											"description": "Whether the resume is public."
										},
										"isLocked": {
											"type": "boolean",
											"description": "Whether the resume is locked."
										},
										"data": {
											"$ref": "#/components/schemas/ResumeData"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date",
											"description": "The date and time the resume was last updated."
										},
										"hasPassword": {
											"type": "boolean"
										}
									},
									"required": ["id", "name", "slug", "tags", "isPublic", "isLocked", "data", "updatedAt", "hasPassword"]
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "INVALID_PATCH_OPERATIONS"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "The patch operations are invalid or produced an invalid resume."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					},
					"409": {
						"description": "409",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "RESUME_VERSION_CONFLICT"
												},
												"status": {
													"const": 409
												},
												"message": {
													"type": "string",
													"default": "The resume changed after this patch was generated."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			},
			"delete": {
				"operationId": "deleteResume",
				"summary": "Delete a resume",
				"description": "Permanently deletes a resume and its associated files (screenshots, PDFs) from storage. Locked resumes cannot be deleted; unlock the resume first. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume."
						}
					}
				],
				"responses": {
					"200": {
						"description": "The resume and its associated files were deleted successfully.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{username}/{slug}": {
			"get": {
				"operationId": "getResumeBySlug",
				"summary": "Get public resume by username and slug",
				"description": "Returns a publicly shared resume identified by the owner's username and the resume's slug. If the resume is password-protected and the viewer has not yet verified the password, a 401 error with code NEED_PASSWORD is returned. No authentication required for public resumes; if authenticated as the owner, private resumes are also accessible.",
				"tags": ["Resume Sharing"],
				"parameters": [
					{
						"name": "username",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "slug",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "The public resume with its full data.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the resume."
										},
										"slug": {
											"type": "string",
											"minLength": 1,
											"description": "The slug of the resume."
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											},
											"description": "The tags of the resume."
										},
										"isPublic": {
											"type": "boolean",
											"description": "Whether the resume is public."
										},
										"isLocked": {
											"type": "boolean",
											"description": "Whether the resume is locked."
										},
										"data": {
											"$ref": "#/components/schemas/ResumeData"
										},
										"name": {
											"type": "string"
										}
									},
									"required": ["id", "slug", "tags", "isPublic", "isLocked", "data", "name"]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/import": {
			"post": {
				"operationId": "importResume",
				"summary": "Import a resume",
				"description": "Creates a new resume from an existing ResumeData object (e.g. from a previously exported JSON file). A random name and slug are generated automatically. Returns the ID of the imported resume. Requires authentication.",
				"tags": ["Resumes"],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"data": {
										"$ref": "#/components/schemas/ResumeData"
									}
								},
								"required": ["data"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The ID of the imported resume.",
						"content": {
							"application/json": {
								"schema": {
									"type": "string",
									"description": "The ID of the imported resume."
								}
							}
						}
					},
					"400": {
						"description": "400",
						"content": {
							"application/json": {
								"schema": {
									"oneOf": [
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": true
												},
												"code": {
													"const": "RESUME_SLUG_ALREADY_EXISTS"
												},
												"status": {
													"const": 400
												},
												"message": {
													"type": "string",
													"default": "A resume with this slug already exists."
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										},
										{
											"type": "object",
											"properties": {
												"defined": {
													"const": false
												},
												"code": {
													"type": "string"
												},
												"status": {
													"type": "number"
												},
												"message": {
													"type": "string"
												},
												"data": {}
											},
											"required": ["defined", "code", "status", "message"]
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}/lock": {
			"post": {
				"operationId": "setResumeLocked",
				"summary": "Set resume lock status",
				"description": "Toggles the locked status of a resume. When locked, a resume cannot be updated, patched, or deleted. Useful for protecting finalized resumes from accidental edits. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume."
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"isLocked": {
										"type": "boolean",
										"description": "Whether the resume is locked."
									}
								},
								"required": ["isLocked"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The resume lock status was updated successfully.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}/password": {
			"put": {
				"operationId": "setResumePassword",
				"summary": "Set resume password",
				"description": "Sets or updates a password on a resume. When a password is set, viewers of the public resume must enter the password before the resume data is revealed. The password must be between 6 and 64 characters. Requires authentication.",
				"tags": ["Resume Sharing"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume."
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"password": {
										"type": "string",
										"minLength": 6,
										"maxLength": 64
									}
								},
								"required": ["password"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The resume password was set successfully.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			},
			"delete": {
				"operationId": "removeResumePassword",
				"summary": "Remove resume password",
				"description": "Removes password protection from a resume. After removal, the resume (if public) can be viewed without entering a password. Requires authentication.",
				"tags": ["Resume Sharing"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume."
						}
					}
				],
				"responses": {
					"200": {
						"description": "The resume password was removed successfully.",
						"content": {
							"application/json": {
								"schema": {
									"anyOf": [
										{
											"not": {}
										},
										{
											"not": {}
										}
									]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{username}/{slug}/password/verify": {
			"post": {
				"operationId": "verifyResumePassword",
				"summary": "Verify resume password",
				"description": "Verifies a password for a password-protected public resume. On success, the viewer is granted access to view the resume data for the duration of their session. No authentication required.",
				"tags": ["Resume Sharing"],
				"parameters": [
					{
						"name": "username",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"minLength": 1,
							"description": "The username of the resume owner."
						}
					},
					{
						"name": "slug",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"minLength": 1,
							"description": "The slug of the resume."
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"password": {
										"type": "string",
										"minLength": 1,
										"description": "The password to verify."
									}
								},
								"required": ["password"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The password was verified successfully and access has been granted.",
						"content": {
							"application/json": {
								"schema": {
									"type": "boolean"
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}/duplicate": {
			"post": {
				"operationId": "duplicateResume",
				"summary": "Duplicate a resume",
				"description": "Creates a copy of an existing resume with the same data. Optionally override the name, slug, and tags for the duplicate. If not provided, the original resume's name, slug, and tags are used. Returns the ID of the duplicated resume. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume."
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"name": {
										"type": "string",
										"minLength": 1,
										"description": "The name of the resume."
									},
									"slug": {
										"type": "string",
										"minLength": 1,
										"description": "The slug of the resume."
									},
									"tags": {
										"type": "array",
										"items": {
											"type": "string"
										},
										"description": "The tags of the resume."
									}
								},
								"required": ["name", "slug", "tags"]
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "The ID of the duplicated resume.",
						"content": {
							"application/json": {
								"schema": {
									"type": "string",
									"description": "The ID of the duplicated resume."
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{resumeId}/versions": {
			"get": {
				"operationId": "listResumeVersions",
				"summary": "List resume version history",
				"description": "Returns the recent version-history snapshots for a resume (id, label, and timestamp only). Snapshots are taken at milestones such as imports, AI edits, and periodic manual saves. Only the resume owner can list versions. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "resumeId",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume whose version history to list."
						}
					}
				],
				"responses": {
					"200": {
						"description": "A list of recent version snapshots, newest first.",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"type": "object",
										"properties": {
											"id": {
												"type": "string",
												"description": "The ID of the version snapshot."
											},
											"label": {
												"type": "string",
												"description": "A short description of what triggered the snapshot."
											},
											"createdAt": {
												"type": "string",
												"format": "date-time",
												"x-native-type": "date",
												"description": "The date and time the snapshot was taken."
											}
										},
										"required": ["id", "label", "createdAt"]
									}
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{resumeId}/versions/{versionId}/restore": {
			"post": {
				"operationId": "restoreResumeVersion",
				"summary": "Restore a resume version",
				"description": "Non-destructively restores a resume to a previous version snapshot by writing that snapshot's data back through the normal update path. Prior versions are preserved and the restore itself becomes a new snapshot. Only the resume owner can restore versions. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "resumeId",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume to restore."
						}
					},
					{
						"name": "versionId",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the version snapshot to restore."
						}
					}
				],
				"responses": {
					"200": {
						"description": "The restored resume with its full data.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"description": "The ID of the resume."
										},
										"name": {
											"type": "string",
											"minLength": 1,
											"description": "The name of the resume."
										},
										"slug": {
											"type": "string",
											"minLength": 1,
											"description": "The slug of the resume."
										},
										"tags": {
											"type": "array",
											"items": {
												"type": "string"
											},
											"description": "The tags of the resume."
										},
										"isPublic": {
											"type": "boolean",
											"description": "Whether the resume is public."
										},
										"isLocked": {
											"type": "boolean",
											"description": "Whether the resume is locked."
										},
										"data": {
											"$ref": "#/components/schemas/ResumeData"
										},
										"updatedAt": {
											"type": "string",
											"format": "date-time",
											"x-native-type": "date",
											"description": "The date and time the resume was last updated."
										},
										"hasPassword": {
											"type": "boolean"
										}
									},
									"required": ["id", "name", "slug", "tags", "isPublic", "isLocked", "data", "updatedAt", "hasPassword"]
								}
							}
						}
					}
				}
			}
		},
		"/resumes/{id}/pdf": {
			"get": {
				"operationId": "downloadResumePdf",
				"summary": "Download resume as PDF",
				"description": "Generates a PDF for the specified resume and returns it as a forced download. Only resumes belonging to the authenticated user can be downloaded. Requires authentication.",
				"tags": ["Resumes"],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"description": "The ID of the resume."
						}
					},
					{
						"name": "target",
						"in": "query",
						"schema": {
							"enum": ["resume", "cover-letter"],
							"type": "string",
							"description": "Which document to download."
						},
						"allowEmptyValue": true,
						"allowReserved": true
					}
				],
				"responses": {
					"200": {
						"description": "The generated resume PDF.",
						"headers": {
							"content-disposition": {
								"schema": {
									"type": "string"
								},
								"required": true
							}
						},
						"content": {
							"application/pdf": {
								"schema": {
									"type": "string",
									"contentMediaType": "application/pdf"
								}
							}
						}
					}
				}
			}
		},
		"/statistics/users": {
			"get": {
				"operationId": "getUserCount",
				"summary": "Get total number of users",
				"description": "Returns the total number of registered users on this Reactive Resume instance. The count is cached for up to 6 hours for performance. No authentication required.",
				"tags": ["Platform Statistics"],
				"responses": {
					"200": {
						"description": "The total number of registered users.",
						"content": {
							"application/json": {
								"schema": {
									"type": "number",
									"description": "The total number of registered users."
								}
							}
						}
					}
				}
			}
		},
		"/statistics/resumes": {
			"get": {
				"operationId": "getResumeCount",
				"summary": "Get total number of resumes",
				"description": "Returns the total number of resumes created on this Reactive Resume instance. The count is cached for up to 6 hours for performance. No authentication required.",
				"tags": ["Platform Statistics"],
				"responses": {
					"200": {
						"description": "The total number of resumes created.",
						"content": {
							"application/json": {
								"schema": {
									"type": "number",
									"description": "The total number of resumes created."
								}
							}
						}
					}
				}
			}
		},
		"/statistics/github/stars": {
			"get": {
				"operationId": "getGitHubStarCount",
				"summary": "Get GitHub star count",
				"description": "Returns the number of GitHub stars for the Reactive Resume repository. The count is cached for up to 6 hours and falls back to a last-known value if the GitHub API is unavailable. No authentication required.",
				"tags": ["Platform Statistics"],
				"responses": {
					"200": {
						"description": "The number of GitHub stars for the Reactive Resume repository.",
						"content": {
							"application/json": {
								"schema": {
									"type": "number",
									"description": "The number of GitHub stars."
								}
							}
						}
					}
				}
			}
		}
	}
}
