{
    "openapi": "3.0.3",
    "info": {
        "title": "Pharmacy Scheduler Assistant API",
        "description": "API enabling AI agents (Meta Muse, Claude, ChatGPT, etc.) to query employee shifts, store operating hours, coworkers, open shifts, and submit or delete schedule/time-off requests (read and write capabilities).",
        "version": "1.0.0"
    },
    "servers": [
        {
            "url": "https://34-46-245-21.sslip.io/api/v1",
            "description": "Demo Health Scheduling API"
        }
    ],
    "components": {
        "securitySchemes": {
            "BearerAuth": {
                "type": "http",
                "scheme": "bearer",
                "description": "Personal API token (psk_...) sent as Authorization: Bearer <token>. Associates create one by logging into the Pharmacy Scheduler and opening My Account -> Connect AI Assistant (/users/agentConnect.php). Tokens are not accepted in the URL."
            }
        }
    },
    "security": [
        {
            "BearerAuth": []
        }
    ],
    "paths": {
        "/schedule.php": {
            "get": {
                "summary": "Execute Schedule Action or Query",
                "operationId": "getSchedule",
                "description": "Dispatches queries for associate shifts, coworkers, store schedules, open shifts, period status, or schedule requests.",
                "parameters": [
                    {
                        "name": "action",
                        "in": "query",
                        "required": true,
                        "description": "Action to perform: my_schedule, coworkers, store_schedule, open_shifts, period_status, add_request, my_requests, or delete_request.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "my_schedule",
                                "coworkers",
                                "store_schedule",
                                "open_shifts",
                                "period_status",
                                "add_request",
                                "my_requests",
                                "delete_request"
                            ],
                            "default": "my_schedule"
                        }
                    },
                    {
                        "name": "start",
                        "in": "query",
                        "required": false,
                        "description": "Start date (YYYY-MM-DD) for my_schedule, open_shifts, or my_requests.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "end",
                        "in": "query",
                        "required": false,
                        "description": "End date (YYYY-MM-DD) for my_schedule, open_shifts, or my_requests.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "date",
                        "in": "query",
                        "required": false,
                        "description": "Date (YYYY-MM-DD) for coworkers, store_schedule, or add_request.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "comment",
                        "in": "query",
                        "required": false,
                        "description": "Details or reason for add_request (e.g. Vacation, Doctor appointment, Need off).",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "request_id",
                        "in": "query",
                        "required": false,
                        "description": "ID of request to delete for delete_request.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "store_id",
                        "in": "query",
                        "required": false,
                        "description": "Store ID (e.g. 101, 102, 116, 122, 123).",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful JSON response with requested schedule data."
                    },
                    "201": {
                        "description": "Request created successfully."
                    },
                    "401": {
                        "description": "Unauthorized. Invalid or missing token."
                    },
                    "403": {
                        "description": "Forbidden. Period is locked or missing permissions."
                    }
                }
            },
            "post": {
                "summary": "Submit Schedule Action or Time-Off Request (Write Path)",
                "operationId": "submitScheduleAction",
                "description": "Write path for schedule mutations: writes/inserts new time-off requests into the database (action: add_request) or cancels existing requests (action: delete_request). Also supports queries via POST JSON body.",
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "action": {
                                        "type": "string",
                                        "enum": [
                                            "add_request",
                                            "my_requests",
                                            "delete_request",
                                            "my_schedule",
                                            "coworkers",
                                            "store_schedule",
                                            "open_shifts"
                                        ],
                                        "description": "Use 'add_request' to write a new schedule/time-off request or 'delete_request' to remove one."
                                    },
                                    "date": {
                                        "type": "string",
                                        "example": "2026-10-15",
                                        "description": "Target date for the request (YYYY-MM-DD)"
                                    },
                                    "comment": {
                                        "type": "string",
                                        "example": "Doctor appointment in afternoon",
                                        "description": "Reason or description for the request"
                                    },
                                    "request_id": {
                                        "type": "integer",
                                        "example": 3995,
                                        "description": "Request ID to delete when action is delete_request"
                                    },
                                    "start": {
                                        "type": "string",
                                        "example": "2026-10-01"
                                    },
                                    "end": {
                                        "type": "string",
                                        "example": "2026-10-31"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Success (Query executed or request deleted)"
                    },
                    "201": {
                        "description": "Created (Schedule request successfully written to database)"
                    },
                    "400": {
                        "description": "Bad Request (Missing parameters, past date, or invalid format)"
                    },
                    "401": {
                        "description": "Unauthorized (Invalid or missing Bearer token)"
                    },
                    "403": {
                        "description": "Forbidden (Period locked or permission denied)"
                    }
                }
            }
        }
    }
}