{ "openapi": "3.0.3", "info": { "title": "pantry", "version": "0.0.1", "description": "Manage your household: shared checklists, photo boards, and notes.", "license": { "name": "agpl" } }, "components": { "securitySchemes": { "basic_auth": { "type": "http", "scheme": "basic" }, "bearer_auth": { "type": "http", "scheme": "bearer" } }, "schemas": { "Category": { "type": "object", "required": [ "id", "houseId", "name", "icon", "color", "sortOrder", "createdAt", "updatedAt" ], "properties": { "id": { "type": "integer", "format": "int64" }, "houseId": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "icon": { "$ref": "#/components/schemas/CategoryIcon" }, "color": { "$ref": "#/components/schemas/CategoryColor" }, "sortOrder": { "type": "integer", "format": "int64" }, "createdAt": { "type": "integer", "format": "int64" }, "updatedAt": { "type": "integer", "format": "int64" } } }, "CategoryColor": { "type": "string", "enum": [ "#ef4444", "#f97316", "#eab308", "#22c55e", "#14b8a6", "#0ea5e9", "#6366f1", "#a855f7", "#ec4899", "#78716c" ] }, "CategoryIcon": { "type": "string", "enum": [ "tag", "food", "fruit", "vegetable", "bakery", "dairy", "meat", "fish", "snacks", "cookie", "drinks", "coffee", "frozen", "household", "pets", "baby", "home", "leaf", "pizza", "clipboard-check", "clipboard-list", "format-list-checks", "cart", "basket", "star", "heart", "calendar", "bell", "flag", "bookmark", "pin", "map-marker", "briefcase", "wrench", "silverware", "gift", "book", "school", "palette", "camera", "music", "gamepad", "run", "dumbbell", "pill", "paw", "flower", "tree", "broom", "lightbulb", "package", "car", "bike", "beach" ] }, "ChecklistIcon": { "type": "string", "enum": [ "clipboard-check", "clipboard-list", "format-list-checks", "cart", "basket", "star", "heart", "home", "calendar", "bell", "flag", "bookmark", "pin", "map-marker", "briefcase", "wrench", "silverware", "coffee", "gift", "book", "school", "palette", "camera", "music", "gamepad", "run", "dumbbell", "pill", "paw", "flower", "tree", "broom", "lightbulb", "package", "car", "bike", "beach", "tag" ] }, "House": { "type": "object", "required": [ "id", "name", "description", "ownerUid", "createdAt", "updatedAt", "role" ], "properties": { "id": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "description": { "type": "string", "nullable": true }, "ownerUid": { "type": "string" }, "createdAt": { "type": "integer", "format": "int64" }, "updatedAt": { "type": "integer", "format": "int64" }, "role": { "type": "string" } } }, "HousePrefs": { "type": "object", "required": [ "imageFolder", "photoSort", "photoFoldersFirst", "noteSort", "checklistItemSort", "notifyPhoto", "notifyNoteCreate", "notifyNoteEdit", "notifyItemAdd", "notifyItemRecur", "notifyItemDone" ], "properties": { "imageFolder": { "type": "string" }, "photoSort": { "type": "string" }, "photoFoldersFirst": { "type": "boolean" }, "noteSort": { "type": "string" }, "checklistItemSort": { "type": "string" }, "notifyPhoto": { "type": "boolean" }, "notifyNoteCreate": { "type": "boolean" }, "notifyNoteEdit": { "type": "boolean" }, "notifyItemAdd": { "type": "boolean" }, "notifyItemRecur": { "type": "boolean" }, "notifyItemDone": { "type": "boolean" } } }, "List": { "type": "object", "required": [ "id", "houseId", "name", "description", "icon", "sortOrder", "createdAt", "updatedAt" ], "properties": { "id": { "type": "integer", "format": "int64" }, "houseId": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "description": { "type": "string", "nullable": true }, "icon": { "$ref": "#/components/schemas/ChecklistIcon" }, "sortOrder": { "type": "integer", "format": "int64" }, "createdAt": { "type": "integer", "format": "int64" }, "updatedAt": { "type": "integer", "format": "int64" } } }, "ListItem": { "type": "object", "required": [ "id", "listId", "name", "description", "categoryId", "quantity", "done", "doneAt", "doneBy", "rrule", "repeatFromCompletion", "deleteOnDone", "nextDueAt", "imageFileId", "imageUploadedBy", "sortOrder", "createdAt", "updatedAt", "deletedAt" ], "properties": { "id": { "type": "integer", "format": "int64" }, "listId": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "description": { "type": "string", "nullable": true }, "categoryId": { "type": "integer", "format": "int64", "nullable": true }, "quantity": { "type": "string", "nullable": true }, "done": { "type": "boolean" }, "doneAt": { "type": "integer", "format": "int64", "nullable": true }, "doneBy": { "type": "string", "nullable": true }, "rrule": { "type": "string", "nullable": true }, "repeatFromCompletion": { "type": "boolean" }, "deleteOnDone": { "type": "boolean" }, "nextDueAt": { "type": "integer", "format": "int64", "nullable": true }, "imageFileId": { "type": "integer", "format": "int64", "nullable": true }, "imageUploadedBy": { "type": "string", "nullable": true }, "sortOrder": { "type": "integer", "format": "int64" }, "createdAt": { "type": "integer", "format": "int64" }, "updatedAt": { "type": "integer", "format": "int64" }, "deletedAt": { "type": "integer", "format": "int64", "nullable": true } } }, "Member": { "type": "object", "required": [ "id", "houseId", "userId", "displayName", "role", "joinedAt" ], "properties": { "id": { "type": "integer", "format": "int64" }, "houseId": { "type": "integer", "format": "int64" }, "userId": { "type": "string" }, "displayName": { "type": "string" }, "role": { "type": "string" }, "joinedAt": { "type": "integer", "format": "int64" } } }, "Note": { "type": "object", "required": [ "id", "houseId", "title", "content", "color", "createdBy", "sortOrder", "createdAt", "updatedAt" ], "properties": { "id": { "type": "integer", "format": "int64" }, "houseId": { "type": "integer", "format": "int64" }, "title": { "type": "string" }, "content": { "type": "string", "nullable": true }, "color": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/NoteColor" } ] }, "createdBy": { "type": "string" }, "sortOrder": { "type": "integer", "format": "int64" }, "createdAt": { "type": "integer", "format": "int64" }, "updatedAt": { "type": "integer", "format": "int64" } } }, "NoteColor": { "type": "string", "enum": [ "#f44336", "#e91e63", "#9c27b0", "#673ab7", "#3f51b5", "#2196f3", "#03a9f4", "#00bcd4", "#009688", "#4caf50", "#8bc34a", "#cddc39", "#ffeb3b", "#ffc107", "#ff9800", "#ff5722" ] }, "OCSMeta": { "type": "object", "required": [ "status", "statuscode" ], "properties": { "status": { "type": "string" }, "statuscode": { "type": "integer" }, "message": { "type": "string" }, "totalitems": { "type": "string" }, "itemsperpage": { "type": "string" } } }, "Photo": { "type": "object", "required": [ "id", "houseId", "folderId", "fileId", "caption", "uploadedBy", "sortOrder", "createdAt", "updatedAt" ], "properties": { "id": { "type": "integer", "format": "int64" }, "houseId": { "type": "integer", "format": "int64" }, "folderId": { "type": "integer", "format": "int64", "nullable": true }, "fileId": { "type": "integer", "format": "int64" }, "caption": { "type": "string", "nullable": true }, "uploadedBy": { "type": "string" }, "sortOrder": { "type": "integer", "format": "int64" }, "createdAt": { "type": "integer", "format": "int64" }, "updatedAt": { "type": "integer", "format": "int64" } } }, "PhotoFolder": { "type": "object", "required": [ "id", "houseId", "name", "sortOrder", "createdAt", "updatedAt" ], "properties": { "id": { "type": "integer", "format": "int64" }, "houseId": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "sortOrder": { "type": "integer", "format": "int64" }, "createdAt": { "type": "integer", "format": "int64" }, "updatedAt": { "type": "integer", "format": "int64" } } }, "Success": { "type": "object", "required": [ "success" ], "properties": { "success": { "type": "boolean", "enum": [ true ] } } }, "UserPrefs": { "type": "object", "required": [ "lastHouseId", "firstDayOfWeek", "tapRowToComplete" ], "properties": { "lastHouseId": { "type": "integer", "format": "int64", "nullable": true }, "firstDayOfWeek": { "type": "integer", "format": "int64" }, "tapRowToComplete": { "type": "boolean" } } } } }, "paths": { "/ocs/v2.php/apps/pantry/api/houses/{houseId}/categories": { "get": { "operationId": "category-index", "summary": "List all categories in a house", "tags": [ "category" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "limit", "in": "query", "description": "Maximum number of categories to return.", "schema": { "type": "integer", "format": "int64", "default": 100, "minimum": 1, "maximum": 500 } }, { "name": "offset", "in": "query", "description": "Number of categories to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Categories returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/Category" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "post": { "operationId": "category-create", "summary": "Create a category", "tags": [ "category" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "icon", "color" ], "properties": { "name": { "type": "string", "description": "Category name." }, "icon": { "type": "string", "description": "Icon key from the palette." }, "color": { "type": "string", "description": "Hex color (e.g. \"#4caf50\")." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Category created", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Category" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/categories/{categoryId}": { "patch": { "operationId": "category-update", "summary": "Update a category", "tags": [ "category" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "nullable": true, "default": null, "description": "New name." }, "icon": { "type": "string", "nullable": true, "default": null, "description": "New icon key." }, "color": { "type": "string", "nullable": true, "default": null, "description": "New hex color." }, "sortOrder": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "New sort order." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "categoryId", "in": "path", "description": "Category id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Category updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Category" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "category-destroy", "summary": "Delete a category", "description": "Detaches any items that reference it.", "tags": [ "category" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "categoryId", "in": "path", "description": "Category id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Category deleted", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists": { "get": { "operationId": "checklist-index-lists", "summary": "List all checklists in a house", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "limit", "in": "query", "description": "Maximum number of lists to return.", "schema": { "type": "integer", "format": "int64", "default": 100, "minimum": 1, "maximum": 500 } }, { "name": "offset", "in": "query", "description": "Number of lists to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Lists returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/List" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "post": { "operationId": "checklist-create-list", "summary": "Create a checklist in a house", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "List name." }, "description": { "type": "string", "nullable": true, "default": null, "description": "Optional description." }, "icon": { "type": "string", "nullable": true, "default": null, "description": "Optional icon key." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "List created", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/List" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}": { "get": { "operationId": "checklist-show-list", "summary": "Get a checklist", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "List returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/List" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "patch": { "operationId": "checklist-update-list", "summary": "Update a checklist", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "nullable": true, "default": null, "description": "New name." }, "description": { "type": "string", "nullable": true, "default": null, "description": "New description." }, "icon": { "type": "string", "nullable": true, "default": null, "description": "New icon key." }, "sortOrder": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "New sort order." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "List updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/List" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "checklist-delete-list", "summary": "Delete a checklist", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "List deleted", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}/items": { "get": { "operationId": "checklist-index-items", "summary": "List items in a checklist", "description": "Auto-reopens recurring items whose next occurrence has arrived.", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "sortBy", "in": "query", "description": "Sort mode (custom, newest, oldest, name_asc, name_desc, category).", "schema": { "type": "string", "default": "custom" } }, { "name": "limit", "in": "query", "description": "Maximum number of items to return.", "schema": { "type": "integer", "format": "int64", "default": 200, "minimum": 1, "maximum": 1000 } }, { "name": "offset", "in": "query", "description": "Number of items to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Items returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ListItem" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "post": { "operationId": "checklist-add-item", "summary": "Add an item to a list", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Item name." }, "description": { "type": "string", "nullable": true, "default": null, "description": "Optional description." }, "categoryId": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "Optional category id (must belong to the same house)." }, "quantity": { "type": "string", "nullable": true, "default": null, "description": "Optional quantity string." }, "rrule": { "type": "string", "nullable": true, "default": null, "description": "Optional RFC 5545 RRULE for recurrence." }, "repeatFromCompletion": { "type": "boolean", "default": false, "description": "If true, the next occurrence is measured from when the item is marked done; if false, the schedule is anchored at item creation." }, "deleteOnDone": { "type": "boolean", "default": false, "description": "If true, the item is deleted when marked done." }, "sortOrder": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "Optional sort order." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Item added", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/ListItem" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}/items/trash": { "get": { "operationId": "checklist-index-deleted-items", "summary": "List soft-deleted items in a checklist (trash)", "description": "Returns items whose deleted_at is set, most recently deleted first.", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "limit", "in": "query", "description": "Maximum number of items to return.", "schema": { "type": "integer", "format": "int64", "default": 200, "minimum": 1, "maximum": 1000 } }, { "name": "offset", "in": "query", "description": "Number of items to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Deleted items returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ListItem" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "checklist-empty-trash", "summary": "Empty a list's trash, permanently deleting every soft-deleted item", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Trash emptied", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}/items/{itemId}": { "patch": { "operationId": "checklist-update-item", "summary": "Update an item", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "nullable": true, "default": null, "description": "New name." }, "description": { "type": "string", "nullable": true, "default": null, "description": "New description (empty string clears)." }, "categoryId": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "New category id (0 or negative clears)." }, "quantity": { "type": "string", "nullable": true, "default": null, "description": "New quantity (empty string clears)." }, "rrule": { "type": "string", "nullable": true, "default": null, "description": "New RRULE (empty string clears)." }, "repeatFromCompletion": { "type": "boolean", "nullable": true, "default": null, "description": "New recurrence anchor mode." }, "deleteOnDone": { "type": "boolean", "nullable": true, "default": null, "description": "If true, the item is deleted when marked done." }, "imageFileId": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "File id of attached image (0 or negative clears)." }, "sortOrder": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "New sort order." }, "targetListId": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "Move item to a different list (must belong to the same house)." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "itemId", "in": "path", "description": "Item id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Item updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/ListItem" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "checklist-delete-item", "summary": "Delete an item", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "itemId", "in": "path", "description": "Item id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Item deleted", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}/items/{itemId}/toggle": { "post": { "operationId": "checklist-toggle-item", "summary": "Toggle an item's done status", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "itemId", "in": "path", "description": "Item id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Item toggled", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/ListItem" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}/items/{itemId}/restore": { "post": { "operationId": "checklist-restore-item", "summary": "Restore a soft-deleted item back into the active list", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "itemId", "in": "path", "description": "Item id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Item restored", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/ListItem" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}/items/{itemId}/permanent": { "delete": { "operationId": "checklist-permanently-delete-item", "summary": "Permanently delete an item, bypassing the trash", "description": "Works on both live items and items already in trash.", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "itemId", "in": "path", "description": "Item id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Item permanently deleted", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}/items/reorder": { "post": { "operationId": "checklist-reorder-items", "summary": "Batch reorder items in a list", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "default": [], "description": "Reorder entries.", "items": { "type": "object", "required": [ "id", "sortOrder" ], "properties": { "id": { "type": "integer", "format": "int64" }, "sortOrder": { "type": "integer", "format": "int64" } } } } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Items reordered", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/lists/{listId}/items/{itemId}/image": { "post": { "operationId": "checklist-upload-item-image", "summary": "Upload an image for an item", "description": "Expects a multipart/form-data request with the image file in a field named **image**.", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "itemId", "in": "path", "description": "Item id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Image uploaded and attached", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/ListItem" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "checklist-clear-item-image", "summary": "Clear the image attached to an item", "tags": [ "checklist" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "listId", "in": "path", "description": "List id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "itemId", "in": "path", "description": "Item id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Image cleared", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/ListItem" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses": { "get": { "operationId": "house-index", "summary": "List houses the current user belongs to", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "limit", "in": "query", "description": "Maximum number of houses to return.", "schema": { "type": "integer", "format": "int64", "default": 100, "minimum": 1, "maximum": 500 } }, { "name": "offset", "in": "query", "description": "Number of houses to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Houses returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/House" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "post": { "operationId": "house-create", "summary": "Create a new house", "description": "The caller becomes the owner.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "House name." }, "description": { "type": "string", "nullable": true, "default": null, "description": "Optional description." } } } } } }, "parameters": [ { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "House created", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/House" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}": { "get": { "operationId": "house-show", "summary": "Fetch a single house", "description": "The caller must be a member.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "House returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/House" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "patch": { "operationId": "house-update", "summary": "Update a house", "description": "Requires admin or owner role.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "nullable": true, "default": null, "description": "New name." }, "description": { "type": "string", "nullable": true, "default": null, "description": "New description." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "House updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/House" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "house-destroy", "summary": "Delete a house and all of its data", "description": "Owner only. Removes all lists, items, photos, notes and member records.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "House deleted", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/members": { "get": { "operationId": "house-list-members", "summary": "List members of a house", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "limit", "in": "query", "description": "Maximum number of members to return.", "schema": { "type": "integer", "format": "int64", "default": 100, "minimum": 1, "maximum": 500 } }, { "name": "offset", "in": "query", "description": "Number of members to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Members returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/Member" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "post": { "operationId": "house-add-member", "summary": "Add a member to a house", "description": "Requires admin or owner role.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "userId" ], "properties": { "userId": { "type": "string", "description": "Nextcloud user id to add." }, "role": { "type": "string", "description": "Role: \"admin\" or \"member\"." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Member added", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Member" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/members/{memberId}": { "patch": { "operationId": "house-update-member", "summary": "Change a member's role", "description": "Requires admin or owner role. The owner's role cannot be changed.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "role" ], "properties": { "role": { "type": "string", "description": "New role." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "memberId", "in": "path", "description": "Member id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Role updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Member" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "house-remove-member", "summary": "Remove a member from a house", "description": "Requires admin or owner role. The owner cannot be removed.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "memberId", "in": "path", "description": "Member id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Member removed", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/leave": { "post": { "operationId": "house-leave", "summary": "Leave a house", "description": "Any non-owner member may call this. The owner must transfer ownership first.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Left house", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/users/autocomplete": { "get": { "operationId": "house-autocomplete-users", "summary": "Search Nextcloud users for autocomplete", "description": "Excludes the current user from results.", "tags": [ "house" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "search", "in": "query", "description": "Search query.", "schema": { "type": "string", "default": "" } }, { "name": "limit", "in": "query", "description": "Maximum results.", "schema": { "type": "integer", "format": "int64", "default": 10, "minimum": 1, "maximum": 50 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Users returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "type": "object", "required": [ "id", "label" ], "properties": { "id": { "type": "string" }, "label": { "type": "string" } } } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/photos/{photoId}/preview": { "get": { "operationId": "image-photo-preview", "summary": "Serve a photo board image preview", "tags": [ "image" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "photoId", "in": "path", "description": "Photo record id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "size", "in": "query", "description": "Preview size (longest edge).", "schema": { "type": "integer", "format": "int64", "default": 300 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Preview returned", "content": { "*/*": { "schema": { "type": "string", "format": "binary" } } } }, "404": { "description": "Image not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "object", "required": [ "error" ], "properties": { "error": { "type": "string" } } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/image-preview": { "get": { "operationId": "image-item-image-preview", "summary": "Serve a checklist item image preview", "tags": [ "image" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "fileId", "in": "query", "description": "Nextcloud file id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "owner", "in": "query", "description": "File owner uid.", "required": true, "schema": { "type": "string" } }, { "name": "size", "in": "query", "description": "Preview size (longest edge).", "schema": { "type": "integer", "format": "int64", "default": 300 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Preview returned", "content": { "*/*": { "schema": { "type": "string", "format": "binary" } } } }, "404": { "description": "Image not found", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "object", "required": [ "error" ], "properties": { "error": { "type": "string" } } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/notes": { "get": { "operationId": "note-index-notes", "summary": "List all notes in a house", "tags": [ "note" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "sortBy", "in": "query", "description": "Sort mode (custom, newest, oldest, title_asc, title_desc).", "schema": { "type": "string", "default": "custom" } }, { "name": "limit", "in": "query", "description": "Maximum number of notes to return.", "schema": { "type": "integer", "format": "int64", "default": 100, "minimum": 1, "maximum": 500 } }, { "name": "offset", "in": "query", "description": "Number of notes to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Notes returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/Note" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "post": { "operationId": "note-create-note", "summary": "Create a note", "tags": [ "note" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "title" ], "properties": { "title": { "type": "string", "description": "Note title." }, "content": { "type": "string", "nullable": true, "default": null, "description": "Markdown content." }, "color": { "type": "string", "nullable": true, "default": null, "description": "Hex color (#RRGGBB)." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Note created", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Note" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/notes/{noteId}": { "patch": { "operationId": "note-update-note", "summary": "Update a note", "tags": [ "note" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "title": { "type": "string", "nullable": true, "default": null, "description": "New title." }, "content": { "type": "string", "nullable": true, "default": null, "description": "New content (empty string clears)." }, "color": { "type": "string", "nullable": true, "default": null, "description": "New color (empty string clears)." }, "sortOrder": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "New sort order." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "noteId", "in": "path", "description": "Note id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Note updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Note" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "note-delete-note", "summary": "Delete a note", "tags": [ "note" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "noteId", "in": "path", "description": "Note id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Note deleted", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/notes/reorder": { "post": { "operationId": "note-reorder-notes", "summary": "Batch reorder notes", "tags": [ "note" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "default": [], "description": "Reorder entries.", "items": { "type": "object", "required": [ "id", "sortOrder" ], "properties": { "id": { "type": "integer", "format": "int64" }, "sortOrder": { "type": "integer", "format": "int64" } } } } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Notes reordered", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/photos/folders": { "get": { "operationId": "photo-index-folders", "summary": "List all photo folders in a house", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "sortBy", "in": "query", "description": "Sort mode (custom, newest, oldest, description_asc, description_desc).", "schema": { "type": "string", "default": "custom" } }, { "name": "limit", "in": "query", "description": "Maximum number of folders to return.", "schema": { "type": "integer", "format": "int64", "default": 100, "minimum": 1, "maximum": 500 } }, { "name": "offset", "in": "query", "description": "Number of folders to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Folders returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/PhotoFolder" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "post": { "operationId": "photo-create-folder", "summary": "Create a photo folder", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Folder name." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Folder created", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/PhotoFolder" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/photos/folders/{folderId}": { "patch": { "operationId": "photo-update-folder", "summary": "Update a photo folder", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "nullable": true, "default": null, "description": "New name." }, "sortOrder": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "New sort order." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "folderId", "in": "path", "description": "Folder id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Folder updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/PhotoFolder" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "photo-delete-folder", "summary": "Delete a photo folder", "description": "When deleteContents is false (default), photos are moved to the board root. When true, the folder and all its photos (including files) are permanently deleted.", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "folderId", "in": "path", "description": "Folder id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "deleteContents", "in": "query", "description": "Whether to also delete photos inside the folder.", "schema": { "type": "boolean", "default": false } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Folder deleted", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/photos/folders/reorder": { "post": { "operationId": "photo-reorder-folders", "summary": "Batch reorder folders", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "default": [], "description": "Reorder entries.", "items": { "type": "object", "required": [ "id", "sortOrder" ], "properties": { "id": { "type": "integer", "format": "int64" }, "sortOrder": { "type": "integer", "format": "int64" } } } } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Folders reordered", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/photos": { "get": { "operationId": "photo-index-photos", "summary": "List all photos in a house", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "sortBy", "in": "query", "description": "Sort mode (custom, newest, oldest, description_asc, description_desc).", "schema": { "type": "string", "default": "custom" } }, { "name": "limit", "in": "query", "description": "Maximum number of photos to return.", "schema": { "type": "integer", "format": "int64", "default": 200, "minimum": 1, "maximum": 1000 } }, { "name": "offset", "in": "query", "description": "Number of photos to skip.", "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": 0 } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Photos returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/Photo" } } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "post": { "operationId": "photo-upload-photo", "summary": "Upload a photo", "description": "Expects a multipart/form-data request with the image file in a field named **image**. The optional folderId and caption may be sent as additional form fields.", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "folderId": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "Optional folder id to place the photo in." }, "caption": { "type": "string", "nullable": true, "default": null, "description": "Optional caption." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Photo uploaded", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Photo" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/photos/{photoId}": { "patch": { "operationId": "photo-update-photo", "summary": "Update a photo", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "caption": { "type": "string", "nullable": true, "default": null, "description": "New caption (empty string clears)." }, "folderId": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "New folder id (0 or negative moves to root)." }, "sortOrder": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "New sort order." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "photoId", "in": "path", "description": "Photo id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Photo updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Photo" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "delete": { "operationId": "photo-delete-photo", "summary": "Delete a photo", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "photoId", "in": "path", "description": "Photo id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Photo deleted", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/photos/reorder": { "post": { "operationId": "photo-reorder-photos", "summary": "Batch reorder photos", "tags": [ "photo" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "default": [], "description": "Reorder entries.", "items": { "type": "object", "required": [ "id", "sortOrder" ], "properties": { "id": { "type": "integer", "format": "int64" }, "sortOrder": { "type": "integer", "format": "int64" } } } } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Photos reordered", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/Success" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/prefs": { "get": { "operationId": "prefs-get-user-prefs", "summary": "Get all user-level preferences (not scoped to a house)", "tags": [ "prefs" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Prefs returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/UserPrefs" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "put": { "operationId": "prefs-set-user-prefs", "summary": "Update user-level preferences", "description": "Only the fields present in the request body are updated; omitted fields are left unchanged.", "tags": [ "prefs" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "lastHouseId": { "type": "integer", "format": "int64", "nullable": true, "default": null, "description": "Last-used house id, or null to clear." }, "tapRowToComplete": { "type": "boolean", "nullable": true, "default": null, "description": "Whether clicking anywhere on a checklist row marks it done." } } } } } }, "parameters": [ { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Prefs updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/UserPrefs" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } }, "/ocs/v2.php/apps/pantry/api/houses/{houseId}/prefs": { "get": { "operationId": "prefs-get-house-prefs", "summary": "Get all per-house preferences for the current user", "tags": [ "prefs" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Prefs returned", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/HousePrefs" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } }, "put": { "operationId": "prefs-set-house-prefs", "summary": "Update per-house preferences for the current user", "description": "Only the fields present in the request body are updated; omitted fields are left unchanged.", "tags": [ "prefs" ], "security": [ { "bearer_auth": [] }, { "basic_auth": [] } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "imageFolder": { "type": "string", "nullable": true, "default": null, "description": "Image upload folder path." }, "photoSort": { "type": "string", "nullable": true, "default": null, "description": "Photo sort mode." }, "photoFoldersFirst": { "type": "boolean", "nullable": true, "default": null, "description": "Whether folders appear first in photo board." }, "noteSort": { "type": "string", "nullable": true, "default": null, "description": "Note sort mode." }, "checklistItemSort": { "type": "string", "nullable": true, "default": null, "description": "Checklist item sort mode." }, "notifyPhoto": { "type": "boolean", "nullable": true, "default": null, "description": "Photo upload notifications." }, "notifyNoteCreate": { "type": "boolean", "nullable": true, "default": null, "description": "Note creation notifications." }, "notifyNoteEdit": { "type": "boolean", "nullable": true, "default": null, "description": "Note edit notifications." }, "notifyItemAdd": { "type": "boolean", "nullable": true, "default": null, "description": "Checklist item added notifications." }, "notifyItemRecur": { "type": "boolean", "nullable": true, "default": null, "description": "Recurring item reappeared notifications." }, "notifyItemDone": { "type": "boolean", "nullable": true, "default": null, "description": "Item completed notifications." } } } } } }, "parameters": [ { "name": "houseId", "in": "path", "description": "House id.", "required": true, "schema": { "type": "integer", "format": "int64" } }, { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", "required": true, "schema": { "type": "boolean", "default": true } } ], "responses": { "200": { "description": "Prefs updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": { "$ref": "#/components/schemas/HousePrefs" } } } } } } } }, "401": { "description": "Current user is not logged in", "content": { "application/json": { "schema": { "type": "object", "required": [ "ocs" ], "properties": { "ocs": { "type": "object", "required": [ "meta", "data" ], "properties": { "meta": { "$ref": "#/components/schemas/OCSMeta" }, "data": {} } } } } } } } } } } }, "tags": [ { "name": "image", "description": "Serve images from the owner's storage so any house member can view them, regardless of Nextcloud sharing settings." } ] }