{
    "openapi": "3.1.0",
    "info": {
        "title": "Laravel",
        "version": "0.0.1"
    },
    "servers": [
        {
            "url": "https:\/\/app.solidtime.io\/api",
            "description": "Production"
        },
        {
            "url": "https:\/\/app.staging.solidtime.io\/api",
            "description": "Staging"
        },
        {
            "url": "https:\/\/soldtime.test\/api",
            "description": "Local"
        }
    ],
    "security": [
        {
            "oauth2": []
        }
    ],
    "paths": {
        "\/v1\/organization\/{organization}\/projects": {
            "get": {
                "operationId": "getProjects",
                "summary": "Get projects",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ProjectCollection`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectCollection"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    }
                }
            },
            "post": {
                "operationId": "createProject",
                "summary": "Create project",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "color": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "name",
                                    "color"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/organization\/{organization}\/projects\/{project}": {
            "get": {
                "operationId": "getProject",
                "summary": "Get project",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "description": "The project ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    }
                }
            },
            "put": {
                "operationId": "updateProject",
                "summary": "Update project",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "description": "The project ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "color": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "name",
                                    "color"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`ProjectResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ProjectResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "v1.projects.destroy",
                "summary": "Delete project",
                "tags": [
                    "Project"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "project",
                        "in": "path",
                        "required": true,
                        "description": "The project ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "null"
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    }
                }
            }
        },
        "\/v1\/organization\/{organization}\/time-entries": {
            "get": {
                "operationId": "v1.time-entries.index",
                "summary": "Get time entries",
                "tags": [
                    "TimeEntry"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "user_id",
                        "in": "query",
                        "description": "Filter by user ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "before",
                        "in": "query",
                        "description": "Filter only time entries that have a start date before (not including) the given date (example: 2021-12-31)",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ]
                        }
                    },
                    {
                        "name": "after",
                        "in": "query",
                        "description": "Filter only time entries that have a start date after (not including) the given date (example: 2021-12-31)",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ]
                        }
                    },
                    {
                        "name": "active",
                        "in": "query",
                        "description": "Filter only time entries that are active (have no end date, are still running)",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "Limit the number of returned time entries",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 500
                        }
                    },
                    {
                        "name": "only_full_dates",
                        "in": "query",
                        "description": "Filter makes sure that only time entries of a whole date are returned",
                        "schema": {
                            "type": "boolean"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "`TimeEntryCollection`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/TimeEntryCollection"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "post": {
                "operationId": "v1.time-entries.store",
                "summary": "Create time entry",
                "tags": [
                    "TimeEntry"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "user_id": {
                                        "type": "string",
                                        "format": "uuid",
                                        "description": "ID of the user that the time entry should belong to"
                                    },
                                    "task_id": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "uuid",
                                        "description": "ID of the task that the time entry should belong to"
                                    },
                                    "start": {
                                        "type": "string",
                                        "description": "Start of time entry (ISO 8601 format, UTC timezone)"
                                    },
                                    "end": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "description": "End of time entry (ISO 8601 format, UTC timezone)"
                                    },
                                    "description": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "description": "Description of time entry"
                                    },
                                    "tags": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "description": "List of tag IDs",
                                        "items": {
                                            "type": "string",
                                            "format": "uuid"
                                        }
                                    }
                                },
                                "required": [
                                    "user_id",
                                    "start",
                                    "end"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`TimeEntryResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/TimeEntryResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/v1\/organization\/{organization}\/time-entries\/{timeEntry}": {
            "put": {
                "operationId": "v1.time-entries.update",
                "summary": "Update time entry",
                "tags": [
                    "TimeEntry"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "timeEntry",
                        "in": "path",
                        "required": true,
                        "description": "The time entry ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "task_id": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "uuid",
                                        "description": "ID of the task that the time entry should belong to"
                                    },
                                    "start": {
                                        "type": "string",
                                        "description": "Start of time entry (ISO 8601 format, UTC timezone)"
                                    },
                                    "end": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "description": "End of time entry (ISO 8601 format, UTC timezone)"
                                    },
                                    "description": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "description": "Description of time entry"
                                    },
                                    "tags": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "description": "List of tag IDs",
                                        "items": {
                                            "type": "string",
                                            "format": "uuid"
                                        }
                                    }
                                },
                                "required": [
                                    "start",
                                    "end"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "`TimeEntryResource`",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/TimeEntryResource"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "v1.time-entries.destroy",
                "summary": "Delete time entry",
                "tags": [
                    "TimeEntry"
                ],
                "parameters": [
                    {
                        "name": "organization",
                        "in": "path",
                        "required": true,
                        "description": "The organization ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "timeEntry",
                        "in": "path",
                        "required": true,
                        "description": "The time entry ID",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "204": {
                        "description": "No content",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "null"
                                }
                            }
                        }
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "oauth2": {
                "type": "oauth2",
                "flows": {
                    "authorizationCode": {
                        "authorizationUrl": "https:\/\/solidtime.test\/oauth\/authorize"
                    }
                }
            }
        },
        "schemas": {
            "ProjectCollection": {
                "type": "array",
                "items": {
                    "$ref": "#\/components\/schemas\/ProjectResource"
                },
                "title": "ProjectCollection"
            },
            "ProjectResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "description": "ID of project"
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of project"
                    },
                    "color": {
                        "type": "string",
                        "description": "Color of project"
                    },
                    "client_id": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "ID of client"
                    }
                },
                "required": [
                    "id",
                    "name",
                    "color",
                    "client_id"
                ],
                "title": "ProjectResource"
            },
            "TimeEntryCollection": {
                "type": "array",
                "items": {
                    "$ref": "#\/components\/schemas\/TimeEntryResource"
                },
                "title": "TimeEntryCollection"
            },
            "TimeEntryResource": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "description": "ID of time entry"
                    },
                    "start": {
                        "type": "string",
                        "description": "Start of time entry (ISO 8601 format, UTC timezone, example: 2024-02-26T17:17:17Z)"
                    },
                    "end": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "End of time entry (ISO 8601 format, UTC timezone, example: 2024-02-26T17:17:17Z)"
                    },
                    "duration": {
                        "type": "integer",
                        "description": "Duration of time entry in seconds"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Description of time entry"
                    },
                    "task_id": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "ID of task"
                    },
                    "project_id": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "ID of project"
                    },
                    "user_id": {
                        "type": "string",
                        "description": "ID of user"
                    },
                    "tags": {
                        "type": "array",
                        "description": "List of tag IDs",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "id",
                    "start",
                    "end",
                    "duration",
                    "description",
                    "task_id",
                    "project_id",
                    "user_id",
                    "tags"
                ],
                "title": "TimeEntryResource"
            }
        },
        "responses": {
            "AuthorizationException": {
                "description": "Authorization error",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Error overview."
                                }
                            },
                            "required": [
                                "message"
                            ]
                        }
                    }
                }
            },
            "ModelNotFoundException": {
                "description": "Not found",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Error overview."
                                }
                            },
                            "required": [
                                "message"
                            ]
                        }
                    }
                }
            },
            "ValidationException": {
                "description": "Validation error",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Errors overview."
                                },
                                "errors": {
                                    "type": "object",
                                    "description": "A detailed description of each field that failed validation.",
                                    "additionalProperties": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    }
                                }
                            },
                            "required": [
                                "message",
                                "errors"
                            ]
                        }
                    }
                }
            }
        }
    }
}
