{ "openapi": "3.1.0", "info": { "title": "Aetoskia Blog API", "description": "\n This is the **Aetoskia Blog API**, part of the personal service network.\n\n Provides:\n - Article CRUD operations\n - User comment management\n - Tag-based search\n\n Fully async, secured via JWT auth.\n ", "termsOfService": "https://aetoskia.com/terms", "contact": { "name": "Aetoskia Dev Team", "url": "https://dev.aetoskia.com/contact", "email": "dev@aetoskia.com" }, "license": { "name": "MIT License", "url": "https://opensource.org/licenses/MIT" }, "version": "0.2.0" }, "servers": [ { "url": "https://api.aetoskia.com/blogs", "description": "Production server" }, { "url": "http://server-pi:9001", "description": "Staging environment for internal testing" }, { "url": "http://localhost:8000", "description": "Local development server" } ], "paths": { "/authors": { "post": { "tags": [ "blog", "authors" ], "summary": "Create Author", "operationId": "create_author_authors_post", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Author" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Author" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "get": { "tags": [ "blog", "authors" ], "summary": "List Authors", "operationId": "list_authors_authors_get", "parameters": [ { "name": "skip", "in": "query", "required": false, "schema": { "type": "integer", "default": 0, "title": "Skip" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "default": 10, "title": "Limit" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Author" }, "title": "Response List Authors Authors Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/authors/{author_id}": { "get": { "tags": [ "blog", "authors" ], "summary": "Get Author", "operationId": "get_author_authors__author_id__get", "parameters": [ { "name": "author_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Author Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Author" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "put": { "tags": [ "blog", "authors" ], "summary": "Update Author", "operationId": "update_author_authors__author_id__put", "parameters": [ { "name": "author_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Author Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Author" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Author" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": [ "blog", "authors" ], "summary": "Delete Author", "operationId": "delete_author_authors__author_id__delete", "parameters": [ { "name": "author_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Author Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/articles": { "post": { "tags": [ "blog", "articles" ], "summary": "Create Article", "operationId": "create_article_articles_post", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Article" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Article" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "get": { "tags": [ "blog", "articles" ], "summary": "List Articles", "operationId": "list_articles_articles_get", "parameters": [ { "name": "skip", "in": "query", "required": false, "schema": { "type": "integer", "default": 0, "title": "Skip" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "default": 10, "title": "Limit" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ArticleResponse" }, "title": "Response List Articles Articles Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/articles/{article_id}": { "get": { "tags": [ "blog", "articles" ], "summary": "Get Article", "operationId": "get_article_articles__article_id__get", "parameters": [ { "name": "article_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Article Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ArticleResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "put": { "tags": [ "blog", "articles" ], "summary": "Update Article", "operationId": "update_article_articles__article_id__put", "parameters": [ { "name": "article_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Article Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Article" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Article" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": [ "blog", "articles" ], "summary": "Delete Article", "operationId": "delete_article_articles__article_id__delete", "parameters": [ { "name": "article_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Article Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/auth/register": { "post": { "tags": [ "auth" ], "summary": "Create User", "operationId": "create_user_auth_register_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserAuth" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublicUser" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/auth/login": { "post": { "tags": [ "auth" ], "summary": "Login", "operationId": "login_auth_login_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserAuth" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/auth/me": { "get": { "tags": [ "auth" ], "summary": "Read Users Me", "operationId": "read_users_me_auth_me_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublicUser" } } } } }, "security": [ { "OAuth2PasswordBearer": [] } ] } }, "/auth/logout": { "post": { "tags": [ "auth" ], "summary": "Logout", "operationId": "logout_auth_logout_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/health": { "get": { "summary": "Health Check", "operationId": "health_check_health_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } } }, "components": { "schemas": { "Article": { "properties": { "_id": { "anyOf": [ { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, { "type": "null" } ], "title": "Id" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "updated_at": { "type": "string", "format": "date-time", "title": "Updated At" }, "img": { "type": "string", "title": "Img" }, "tag": { "type": "string", "title": "Tag" }, "title": { "type": "string", "title": "Title" }, "description": { "type": "string", "title": "Description" }, "content": { "type": "string", "title": "Content" }, "authors": { "items": { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, "type": "array", "title": "Authors" } }, "type": "object", "required": [ "img", "tag", "title", "description", "content", "authors" ], "title": "Article", "example": { "created_at": "2024-01-01T00:00:00", "updated_at": "2024-01-01T00:00:00" } }, "ArticleResponse": { "properties": { "_id": { "anyOf": [ { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, { "type": "null" } ], "title": "Id" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "updated_at": { "type": "string", "format": "date-time", "title": "Updated At" }, "img": { "type": "string", "title": "Img" }, "tag": { "type": "string", "title": "Tag" }, "title": { "type": "string", "title": "Title" }, "description": { "type": "string", "title": "Description" }, "content": { "type": "string", "title": "Content" }, "authors": { "items": { "$ref": "#/components/schemas/Author" }, "type": "array", "title": "Authors" } }, "type": "object", "required": [ "img", "tag", "title", "description", "content", "authors" ], "title": "ArticleResponse", "example": { "created_at": "2024-01-01T00:00:00", "updated_at": "2024-01-01T00:00:00" } }, "Author": { "properties": { "_id": { "anyOf": [ { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, { "type": "null" } ], "title": "Id" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "updated_at": { "type": "string", "format": "date-time", "title": "Updated At" }, "username": { "type": "string", "maxLength": 50, "minLength": 3, "title": "Username" }, "email": { "anyOf": [ { "type": "string", "format": "email" }, { "type": "null" } ], "title": "Email" }, "is_active": { "type": "boolean", "title": "Is Active", "default": true }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "avatar": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Avatar" } }, "type": "object", "required": [ "username" ], "title": "Author", "example": { "created_at": "2024-01-01T00:00:00", "updated_at": "2024-01-01T00:00:00" } }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "PublicUser": { "properties": { "_id": { "anyOf": [ { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, { "type": "null" } ], "title": "Id" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "updated_at": { "type": "string", "format": "date-time", "title": "Updated At" }, "username": { "type": "string", "maxLength": 50, "minLength": 3, "title": "Username" }, "email": { "anyOf": [ { "type": "string", "format": "email" }, { "type": "null" } ], "title": "Email" }, "is_active": { "type": "boolean", "title": "Is Active", "default": true } }, "type": "object", "required": [ "username" ], "title": "PublicUser", "example": { "created_at": "2024-01-01T00:00:00", "updated_at": "2024-01-01T00:00:00" } }, "UserAuth": { "properties": { "_id": { "anyOf": [ { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, { "type": "null" } ], "title": "Id" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "updated_at": { "type": "string", "format": "date-time", "title": "Updated At" }, "username": { "type": "string", "maxLength": 50, "minLength": 3, "title": "Username" }, "email": { "anyOf": [ { "type": "string", "format": "email" }, { "type": "null" } ], "title": "Email" }, "is_active": { "type": "boolean", "title": "Is Active", "default": true }, "password": { "type": "string", "minLength": 6, "title": "Password" } }, "type": "object", "required": [ "username", "password" ], "title": "UserAuth", "example": { "created_at": "2024-01-01T00:00:00", "updated_at": "2024-01-01T00:00:00" } }, "ValidationError": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" } }, "securitySchemes": { "OAuth2PasswordBearer": { "type": "oauth2", "flows": { "password": { "scopes": {}, "tokenUrl": "/auth/login" } } } } }, "tags": [ { "name": "Articles", "description": "Operations for creating, reading, updating, and deleting blog articles." }, { "name": "Users", "description": "User management and authentication endpoints." } ] }