{
    "openapi": "3.0.3",
    "info": {
        "title": "Notes CRUD API",
        "version": "1.0.0",
        "description": "Class-based CRUD API for cake_info table."
    },
    "servers": [
        {
            "url": "https://george.manage-my.site/php-cms"
        }
    ],
    "paths": {
        "/api/notes": {
            "get": {
                "summary": "List notes",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 500
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of notes"
                    },
                    "400": {
                        "description": "Validation error"
                    },
                    "500": {
                        "description": "Server error"
                    }
                }
            },
            "post": {
                "summary": "Create note",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "notes"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 100
                                    },
                                    "notes": {
                                        "type": "string",
                                        "maxLength": 5000
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created"
                    },
                    "400": {
                        "description": "Validation error"
                    },
                    "500": {
                        "description": "Server error"
                    }
                }
            }
        },
        "/api/notes/{id}": {
            "get": {
                "summary": "Get note by id",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Note found"
                    },
                    "404": {
                        "description": "Note not found"
                    }
                }
            },
            "put": {
                "summary": "Replace note",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "notes"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 100
                                    },
                                    "notes": {
                                        "type": "string",
                                        "maxLength": 5000
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated"
                    },
                    "400": {
                        "description": "Validation error"
                    },
                    "404": {
                        "description": "Note not found"
                    }
                }
            },
            "patch": {
                "summary": "Partially update note",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 100
                                    },
                                    "notes": {
                                        "type": "string",
                                        "maxLength": 5000
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Patched"
                    },
                    "400": {
                        "description": "Validation error"
                    },
                    "404": {
                        "description": "Note not found"
                    }
                }
            },
            "delete": {
                "summary": "Delete note",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Deleted"
                    },
                    "404": {
                        "description": "Note not found"
                    }
                }
            }
        },
        "/api/diagnostics/env": {
            "get": {
                "summary": "Check environment configuration (safe metadata only)",
                "responses": {
                    "200": {
                        "description": "Environment status and key source metadata"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                }
            }
        }
    }
}