{
    "openapi": "3.0.0",
    "info": {
        "title": "Perfex CRM REST API Playground by themesic",
        "version": "2.0.8",
        "x-hidden-headers": ["playground"]
    },
    "security": [
        {
            "x-api-key": []
        },
        {
            "playground": []
        }
    ],
    "paths": {
        "/api/calendar": {
            "get": {
                "summary": "Get all calendar events",
                "description": "Retrieves a list of all calendar events",
                "tags": [
                    "Calendar Events"
                ],
                "parameters": [
                ],
                "responses": {
                    "200": {
                        "description": "Successful operation",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/CalendarEvent"
                                    }
                                },
                                "examples": {
                                    "success": {
                                        "value": [
                                            {
                                                "eventid": "1",
                                                "title": "Hello",
                                                "description": "test",
                                                "userid": "1",
                                                "start": "2023-12-12 07:00:00",
                                                "end": "2023-12-12 07:00:00",
                                                "public": "1",
                                                "color": "#03a9f4",
                                                "isstartnotified": "0",
                                                "reminder_before": "30",
                                                "reminder_before_type": "minutes"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "No events found",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": false,
                                    "message": "No data were found"
                                }
                            }
                        }
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimitExceeded"
                    }
                }
            },
            "post": {
                "summary": "Create a new calendar event",
                "description": "Adds a new event to the calendar",
                "tags": [
                    "Calendar Events"
                ],
                "parameters": [
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "title",
                                    "start",
                                    "reminder_before",
                                    "reminder_before_type",
                                    "userid",
                                    "isstartnotified",
                                    "public"
                                ],
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "example": "Team Meeting"
                                    },
                                    "description": {
                                        "type": "string",
                                        "example": "Test description"
                                    },
                                    "start": {
                                        "type": "string",
                                        "format": "date-time",
                                        "example": "2023/12/12 07:00"
                                    },
                                    "end": {
                                        "type": "string",
                                        "format": "date-time",
                                        "example": "2023/12/12 07:00"
                                    },
                                    "reminder_before": {
                                        "type": "number",
                                        "example": 10
                                    },
                                    "reminder_before_type": {
                                        "type": "string",
                                        "example": "minutes"
                                    },
                                    "color": {
                                        "type": "string",
                                        "example": "red"
                                    },
                                    "userid": {
                                        "type": "number",
                                        "example": 1
                                    },
                                    "isstartnotified": {
                                        "type": "number",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "example": 0
                                    },
                                    "public": {
                                        "type": "number",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "example": 1
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Event created successfully",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": true,
                                    "message": "Data Added Successfully"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid input",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": false,
                                    "error": {
                                        "title": "Title is required"
                                    },
                                    "message": "Validation errors"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Creation failed",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": false,
                                    "message": "Data Creation Failed"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/calendar/{id}": {
            "get": {
                "summary": "Get event by ID",
                "description": "Returns a single event by its ID",
                "tags": [
                    "Calendar Events"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "ID of the event to retrieve",
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful operation",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/CalendarEvent"
                                    }
                                },
                                "example": [
                                    {
                                        "eventid": "1",
                                        "title": "Hello",
                                        "description": "test",
                                        "userid": "1",
                                        "start": "2023-12-12 07:00:00",
                                        "end": "2023-12-12 07:00:00",
                                        "public": "1",
                                        "color": "#03a9f4",
                                        "isstartnotified": "0",
                                        "reminder_before": "30",
                                        "reminder_before_type": "minutes"
                                    }
                                ]
                            }
                        }
                    },
                    "404": {
                        "description": "Event not found",
                        "content": {
                            "application/json": {
                                "examples": {
                                    "notFound": {
                                        "value": {
                                            "status": false,
                                            "message": "No data were found"
                                        }
                                    },
                                    "invalidId": {
                                        "value": {
                                            "status": false,
                                            "message": "Invalid ID"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Update an event",
                "description": "Updates an existing calendar event",
                "tags": [
                    "Calendar Events"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "ID of the event to update",
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "example": "Updated Meeting"
                                    },
                                    "description": {
                                        "type": "string",
                                        "example": "Updated description"
                                    },
                                    "start": {
                                        "type": "string",
                                        "format": "date-time",
                                        "example": "2023/12/12 08:00"
                                    },
                                    "end": {
                                        "type": "string",
                                        "format": "date-time",
                                        "example": "2023/12/12 09:00"
                                    },
                                    "reminder_before": {
                                        "type": "number",
                                        "example": 15
                                    },
                                    "reminder_before_type": {
                                        "type": "string",
                                        "example": "minutes"
                                    },
                                    "color": {
                                        "type": "string",
                                        "example": "blue"
                                    },
                                    "userid": {
                                        "type": "number",
                                        "example": 1
                                    },
                                    "isstartnotified": {
                                        "type": "number",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "example": 1
                                    },
                                    "public": {
                                        "type": "number",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "example": 0
                                    }
                                }
                            },
                            "example": {
                                "title": "Hello",
                                "start": "2023/12/12 07:00",
                                "end": "2023/12/12 07:00",
                                "reminder_before": "10",
                                "reminder_before_type": "minutes",
                                "color": "red",
                                "description": "for test",
                                "userid": 6,
                                "public": 1,
                                "isstartnotified": 1
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Event updated successfully",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": true,
                                    "message": "Data Update Successful."
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid input",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": false,
                                    "message": "Data Not Acceptable OR Not Provided"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Update failed",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": false,
                                    "message": "Data Update Fail."
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Delete an event",
                "description": "Deletes a calendar event by ID",
                "tags": [
                    "Calendar Events"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "ID of the event to delete",
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Event deleted successfully",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": true,
                                    "message": "Data Deleted Successfully"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Deletion failed",
                        "content": {
                            "application/json": {
                                "examples": {
                                    "notFound": {
                                        "value": {
                                            "status": false,
                                            "message": "Delete Fail."
                                        }
                                    },
                                    "invalidId": {
                                        "value": {
                                            "status": false,
                                            "message": "Invalid ID"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "CalendarEvent": {
                "type": "object",
                "properties": {
                    "eventid": {
                        "type": "string",
                        "example": "1"
                    },
                    "title": {
                        "type": "string",
                        "example": "Hello"
                    },
                    "description": {
                        "type": "string",
                        "example": "test"
                    },
                    "userid": {
                        "type": "string",
                        "example": "1"
                    },
                    "start": {
                        "type": "string",
                        "format": "date-time",
                        "example": "2023-12-12 07:00:00"
                    },
                    "end": {
                        "type": "string",
                        "format": "date-time",
                        "example": "2023-12-12 07:00:00"
                    },
                    "public": {
                        "type": "string",
                        "example": "1"
                    },
                    "color": {
                        "type": "string",
                        "example": "#03a9f4"
                    },
                    "isstartnotified": {
                        "type": "string",
                        "example": "0"
                    },
                    "reminder_before": {
                        "type": "string",
                        "example": "30"
                    },
                    "reminder_before_type": {
                        "type": "string",
                        "example": "minutes"
                    }
                }
            }
        },
        "responses": {
            "RateLimitExceeded": {
                "description": "Too many requests",
                "headers": {
                    "X-RateLimit-Limit": {
                        "description": "Request limit per minute",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    "X-RateLimit-Remaining": {
                        "description": "Remaining requests in current window",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    "X-RateLimit-Reset": {
                        "description": "UTC timestamp when rate limit resets",
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    },
                    "Retry-After": {
                        "description": "Seconds to wait before next request",
                        "schema": {
                            "type": "integer"
                        }
                    }
                },
                "content": {
                    "application/json": {
                        "example": {
                            "error": "Rate limit exceeded",
                            "message": "You have exceeded your 100 requests per minute limit.",
                            "retryAfter": 30
                        }
                    }
                }
            }
        },
        "securitySchemes": {
            "x-api-key": {
                "type": "apiKey",
                "in": "header",
                "name": "x-api-key",
                "description": "Authentication token from admin area"
            },
            "playground": {
                "type": "string",
                "default": "yes",
                "in": "header",
                "name": "playground",
                "description": "For API Test",
                "x-hidden": true
            }
        }
    },
    "x-quota": {
        "dailyLimit": 1000,
        "monthlyLimit": 30000,
        "perUser": true
    }
}