{ "schemes": [ "http", "https" ], "swagger": "2.0", "info": { "description": "API for base application", "title": "Base API", "termsOfService": "http://swagger.io/terms/", "contact": { "name": "API Support", "url": "http://www.abric.io/support", "email": "support@abric.io" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "1.0.0" }, "host": "localhost:8101", "basePath": "/", "paths": { "/api/specialists/v1/page-sections": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Specialist" ], "summary": "get page sections", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.PageSectionsResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/specialists/v1/page-sections/contact": { "put": { "security": [ { "Bearer": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Specialist" ], "summary": "update contact section", "parameters": [ { "description": "contact section", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.ContactDTO" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/specialists/v1/page-sections/hero": { "put": { "security": [ { "Bearer": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Specialist" ], "summary": "update hero section", "parameters": [ { "description": "hero section", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.HeroDTO" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/specialists/v1/page-sections/skills": { "put": { "security": [ { "Bearer": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Specialist" ], "summary": "update skills section", "parameters": [ { "description": "skills section", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.SkillsUpdateRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/specialists/v1/profile": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Specialist" ], "summary": "get specialist profile", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.ProfileResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/assets": { "post": { "description": "create a new asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Asset" ], "summary": "create asset", "parameters": [ { "description": "create asset request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.CreateAssetRequest" } } ], "responses": { "201": { "description": "asset response", "schema": { "$ref": "#/definitions/dto.AssetResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "category not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/assets/categories": { "get": { "description": "returns all asset categories", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Asset" ], "summary": "list asset categories", "responses": { "200": { "description": "list of categories", "schema": { "$ref": "#/definitions/dto.ListCategoriesResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/assets/categories/preview": { "post": { "description": "returns asset categories, each with up to N sample assets (default 8). Use for carousels and landing previews.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Asset" ], "summary": "list categories with preview assets", "parameters": [ { "description": "filter options", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.CategoriesPreviewRequest" } } ], "responses": { "200": { "description": "categories with preview assets", "schema": { "$ref": "#/definitions/dto.CategoriesPreviewResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/assets/categories/{id}/assets": { "get": { "description": "returns paginated assets for the given category. Use after fetching categories from GET /assets/categories.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Asset" ], "summary": "list assets by category ID", "parameters": [ { "type": "string", "description": "category UUID", "name": "id", "in": "path", "required": true }, { "type": "integer", "description": "max items per page (default 10)", "name": "limit", "in": "query" }, { "type": "integer", "description": "page number (default 1)", "name": "page", "in": "query" } ], "responses": { "200": { "description": "paginated assets for category", "schema": { "$ref": "#/definitions/dto.ListAssetsByCategoryIDResponse" } }, "400": { "description": "invalid category ID", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "category not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/assets/{id}": { "get": { "description": "get asset by ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Asset" ], "summary": "get asset by ID", "parameters": [ { "type": "string", "description": "asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "asset response", "schema": { "$ref": "#/definitions/dto.AssetResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "asset not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } }, "put": { "description": "update an existing asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Asset" ], "summary": "update asset", "parameters": [ { "type": "string", "description": "asset ID", "name": "id", "in": "path", "required": true }, { "description": "update asset request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.UpdateAssetRequest" } } ], "responses": { "200": { "description": "asset response", "schema": { "$ref": "#/definitions/dto.AssetResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "asset not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } }, "delete": { "description": "delete an asset", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Asset" ], "summary": "delete asset", "parameters": [ { "type": "string", "description": "asset ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "success response", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "asset not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/login": { "post": { "description": "login with email and password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "login with credentials", "parameters": [ { "description": "login request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.LoginRequest" } } ], "responses": { "200": { "description": "token response", "schema": { "$ref": "#/definitions/dto.TokenResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "401": { "description": "invalid credentials", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/oauth/callback": { "post": { "description": "handle OAuth callback and authenticate user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "oauth callback", "parameters": [ { "description": "oauth callback request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.OAuthCallbackRequest" } } ], "responses": { "200": { "description": "oauth callback response", "schema": { "$ref": "#/definitions/dto.OAuthCallbackResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/oauth/redirect-url": { "post": { "description": "get OAuth redirect URL for the specified provider", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "get oauth redirect url", "parameters": [ { "description": "oauth redirect url request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.OAuthRedirectURLRequest" } } ], "responses": { "200": { "description": "oauth redirect url response", "schema": { "$ref": "#/definitions/dto.OAuthRedirectURLResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/refresh-token": { "post": { "description": "refresh access token using refresh token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "refresh token", "parameters": [ { "description": "refresh token request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.RefreshTokenRequest" } } ], "responses": { "200": { "description": "token response", "schema": { "$ref": "#/definitions/dto.TokenResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "401": { "description": "invalid refresh token", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/register": { "post": { "description": "register a new user with email and password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "register with credentials", "parameters": [ { "description": "register request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.RegisterRequest" } } ], "responses": { "200": { "description": "token response", "schema": { "$ref": "#/definitions/dto.TokenResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/reset-password": { "post": { "description": "reset password with reset code", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "reset password", "parameters": [ { "description": "reset password request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.ResetPasswordRequest" } } ], "responses": { "200": { "description": "token response", "schema": { "$ref": "#/definitions/dto.TokenResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/send-reset-password-email": { "post": { "description": "send password reset email", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "send reset password email", "parameters": [ { "description": "send reset password email request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.SendResetPasswordEmailRequest" } } ], "responses": { "200": { "description": "success response", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/send-verification-email": { "post": { "security": [ { "Bearer": [] } ], "description": "send verification email to the authenticated user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "send verification email", "parameters": [ { "description": "send verification email request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.SendVerificationEmailRequest" } } ], "responses": { "200": { "description": "success response", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/auth/verify-account": { "post": { "security": [ { "Bearer": [] } ], "description": "verify account with verification code", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Public" ], "summary": "verify account", "parameters": [ { "description": "verify account request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.VerifyAccountRequest" } } ], "responses": { "200": { "description": "success response", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/backoffice/profile-roles": { "get": { "description": "returns all profile roles (id, title, status)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "BackOffice" ], "summary": "list profile roles", "responses": { "200": { "description": "list of profile roles", "schema": { "type": "array", "items": { "$ref": "#/definitions/dto.ProfileRole" } } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } }, "post": { "security": [ { "BearerAuth": [] } ], "description": "create a new profile role", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "BackOffice" ], "summary": "create profile role", "parameters": [ { "description": "create request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.CreateProfileRoleRequest" } } ], "responses": { "201": { "description": "created profile role", "schema": { "$ref": "#/definitions/dto.ProfileRole" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "401": { "description": "unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/backoffice/profile-roles/{id}": { "get": { "description": "get profile role by ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "BackOffice" ], "summary": "get profile role by ID", "parameters": [ { "type": "string", "description": "profile role ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "profile role", "schema": { "$ref": "#/definitions/dto.ProfileRole" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } }, "put": { "security": [ { "BearerAuth": [] } ], "description": "update an existing profile role", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "BackOffice" ], "summary": "update profile role", "parameters": [ { "type": "string", "description": "profile role ID", "name": "id", "in": "path", "required": true }, { "description": "update request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.UpdateProfileRoleRequest" } } ], "responses": { "200": { "description": "updated profile role", "schema": { "$ref": "#/definitions/dto.ProfileRole" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "401": { "description": "unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } }, "delete": { "security": [ { "BearerAuth": [] } ], "description": "delete a profile role", "produces": [ "application/json" ], "tags": [ "BackOffice" ], "summary": "delete profile role", "parameters": [ { "type": "string", "description": "profile role ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "success", "schema": { "$ref": "#/definitions/dto.Response" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "401": { "description": "unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/landing": { "get": { "description": "returns landing page with categories, specialist roles, assets by category, specialists, and blogs", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Landing" ], "summary": "get landing page", "responses": { "200": { "description": "landing page data", "schema": { "$ref": "#/definitions/dto.Landing" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/platform/overview/discovery": { "get": { "security": [ { "BearerAuth": [] } ], "description": "overview for browsing users (latest assets, recently joined profiles, analytics). No profile required.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Platform" ], "summary": "get discovery overview", "responses": { "200": { "description": "overview response", "schema": { "$ref": "#/definitions/dto.OverviewFetchedResponse" } }, "401": { "description": "unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/platform/overview/specialist": { "get": { "security": [ { "BearerAuth": [] } ], "description": "get overview for specialist view with assets, profile, skills, recently joined, analytics", "produces": [ "application/json" ], "tags": [ "Platform" ], "summary": "get specialist overview", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.SpecialistOverviewFetchedResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "profile not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/platform/profile-roles": { "get": { "description": "returns all profile roles (id, title) for platform - use role_id when calling setup-profile", "produces": [ "application/json" ], "tags": [ "Platform" ], "summary": "list profile roles", "responses": { "200": { "description": "list of profile roles", "schema": { "type": "array", "items": { "$ref": "#/definitions/dto.ProfileRole" } } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/platform/skills": { "get": { "description": "returns all skills from the catalog for profile update skill selection", "produces": [ "application/json" ], "tags": [ "Platform" ], "summary": "list skills", "responses": { "200": { "description": "list of skills", "schema": { "type": "array", "items": { "$ref": "#/definitions/dto.Skill" } } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/platform/user/info": { "get": { "security": [ { "Bearer": [] } ], "description": "returns user and profile_id for the authenticated user", "produces": [ "application/json" ], "tags": [ "Platform" ], "summary": "get account info", "responses": { "200": { "description": "account info", "schema": { "$ref": "#/definitions/dto.UserInfoResponse" } }, "401": { "description": "unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "user not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/profiles": { "get": { "description": "list profiles with filtering and pagination", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "list profiles", "parameters": [ { "type": "string", "description": "role ID", "name": "role_id", "in": "query" }, { "type": "string", "description": "first name", "name": "first_name", "in": "query" }, { "type": "string", "description": "last name", "name": "last_name", "in": "query" }, { "type": "string", "description": "company", "name": "company", "in": "query" }, { "type": "string", "description": "skill name", "name": "skill_name", "in": "query" }, { "type": "integer", "default": 1, "description": "page number", "name": "page", "in": "query" }, { "type": "integer", "default": 10, "description": "page size", "name": "page_size", "in": "query" }, { "type": "string", "description": "sort field", "name": "sorted_by", "in": "query" }, { "type": "boolean", "default": false, "description": "ascending order", "name": "ascending", "in": "query" } ], "responses": { "200": { "description": "list profiles response", "schema": { "$ref": "#/definitions/dto.ListProfilesResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } }, "post": { "description": "create a new profile", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "create profile", "parameters": [ { "description": "create profile request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.CreateProfileRequest" } } ], "responses": { "201": { "description": "profile response", "schema": { "$ref": "#/definitions/dto.ProfileResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/profiles/handle/{handle}": { "get": { "description": "get profile by handle", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "get profile by handle", "parameters": [ { "type": "string", "description": "profile handle", "name": "handle", "in": "path", "required": true } ], "responses": { "200": { "description": "profile response", "schema": { "$ref": "#/definitions/dto.ProfileResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "profile not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/profiles/{id}": { "get": { "description": "get profile by ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "get profile by ID", "parameters": [ { "type": "string", "description": "profile ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "profile response", "schema": { "$ref": "#/definitions/dto.ProfileResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "profile not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } }, "put": { "description": "update an existing profile", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "update profile", "parameters": [ { "type": "string", "description": "profile ID", "name": "id", "in": "path", "required": true }, { "description": "update profile request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.UpdateProfileRequest" } } ], "responses": { "200": { "description": "profile response", "schema": { "$ref": "#/definitions/dto.ProfileResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "profile not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } }, "delete": { "description": "delete a profile", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Profile" ], "summary": "delete profile", "parameters": [ { "type": "string", "description": "profile ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "success response", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "profile not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/profiles/{id}/assets": { "get": { "description": "list all assets for a profile", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Asset" ], "summary": "list assets by profile ID", "parameters": [ { "type": "string", "description": "profile ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "list assets response", "schema": { "$ref": "#/definitions/dto.ListAssetsResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } }, "/api/v1/user/platform/setup-profile": { "post": { "security": [ { "Bearer": [] } ], "description": "complete profile with handle, role, level, and short bio. Requires authentication.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Platform" ], "summary": "setup profile after registration", "parameters": [ { "description": "setup profile request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.SetupProfileRequest" } } ], "responses": { "200": { "description": "success response", "schema": { "$ref": "#/definitions/dto.SuccessResponse" } }, "400": { "description": "invalid request", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "401": { "description": "unauthorized", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "404": { "description": "user not found", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "409": { "description": "profile already exists or handle already taken", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } }, "500": { "description": "internal server error", "schema": { "$ref": "#/definitions/dto.ErrorResponse" } } } } } }, "definitions": { "dto.AboutDTO": { "type": "object", "properties": { "about": { "type": "string" }, "achievements": { "type": "array", "items": { "$ref": "#/definitions/dto.AchievementDTO" } }, "profile_picture": { "type": "string" } } }, "dto.AchievementDTO": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "title": { "type": "string" }, "value": { "type": "string" } } }, "dto.AchievementItemDTO": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "value": { "type": "string" } } }, "dto.AnalyticsDTO": { "type": "object", "properties": { "total_assets": { "type": "integer" }, "total_profiles": { "type": "integer" } } }, "dto.AssetResponse": { "type": "object", "properties": { "asset_category_id": { "type": "string" }, "category": { "$ref": "#/definitions/dto.CategoryDTO" }, "cover_image": { "type": "string" }, "created_at": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "link": { "type": "string" }, "owner_id": { "type": "string" }, "profile_id": { "type": "string" }, "status": { "type": "integer" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "dto.Blog": { "type": "object", "properties": { "author": { "type": "string" }, "category": { "type": "object", "properties": { "id": { "type": "string" }, "title": { "type": "string" } } }, "category_id": { "type": "string" }, "content": { "type": "string" }, "content_html": { "type": "string" }, "content_json": {}, "cover_image": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "is_featured": { "type": "boolean" }, "meta_tags": {}, "slug": { "type": "string" }, "status": { "type": "string" }, "summary": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" }, "view_count": { "type": "integer" } } }, "dto.CategoriesPreviewRequest": { "type": "object", "properties": { "assets_per_category": { "type": "integer" }, "category_ids": { "type": "array", "items": { "type": "string" } }, "featured_only": { "type": "boolean" } } }, "dto.CategoriesPreviewResponse": { "type": "object", "properties": { "categories": { "type": "array", "items": { "$ref": "#/definitions/dto.CategoryWithPreviewAssetsDTO" } } } }, "dto.CategoryDTO": { "type": "object", "properties": { "card_type": { "type": "string" }, "color": { "type": "string" }, "description": { "type": "string" }, "featured": { "type": "boolean" }, "icon": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" } } }, "dto.CategoryWithPreviewAssetsDTO": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/dto.AssetResponse" } }, "category": { "$ref": "#/definitions/dto.CategoryDTO" }, "has_more": { "type": "boolean" }, "total_assets": { "type": "integer" } } }, "dto.ContactDTO": { "type": "object", "properties": { "email": { "type": "string" }, "phone": { "type": "string" }, "social_links": { "type": "array", "items": { "$ref": "#/definitions/dto.SocialLinkDTO" } } } }, "dto.CreateAssetRequest": { "type": "object", "properties": { "asset_category_id": { "type": "string" }, "description": { "type": "string" }, "link": { "type": "string" }, "profile_id": { "type": "string" }, "title": { "type": "string" } } }, "dto.CreateProfileRequest": { "type": "object", "properties": { "about": { "$ref": "#/definitions/dto.AboutDTO" }, "contact": { "$ref": "#/definitions/dto.ContactDTO" }, "handle": { "type": "string" }, "hero": { "$ref": "#/definitions/dto.HeroDTO" }, "page_section_order": { "type": "object", "additionalProperties": { "type": "integer" } }, "page_setting": { "$ref": "#/definitions/dto.PageSettingDTO" }, "skills": { "type": "array", "items": { "$ref": "#/definitions/dto.SkillDTO" } } } }, "dto.CreateProfileRoleRequest": { "type": "object", "properties": { "title": { "type": "string" } } }, "dto.ErrorResponse": { "type": "object", "properties": { "message": { "type": "string" }, "status": { "type": "integer", "example": 400 } } }, "dto.FlatProfileDTO": { "type": "object", "properties": { "about": { "type": "string" }, "achievements": { "type": "object", "additionalProperties": { "$ref": "#/definitions/dto.AchievementItemDTO" } }, "background_image": { "type": "string" }, "contact_email": { "type": "string" }, "contact_phone": { "type": "string" }, "country": { "type": "string" }, "created_at": { "type": "string" }, "cta_action": { "type": "string" }, "cta_enabled": { "type": "boolean" }, "current_company": { "type": "string" }, "custom_roles": { "type": "string" }, "display_name": { "type": "string" }, "first_name": { "type": "string" }, "handle_updated_at": { "type": "string" }, "id": { "type": "string" }, "last_name": { "type": "string" }, "profile_handle": { "type": "string" }, "profile_picture": { "type": "string" }, "resume_link": { "type": "string" }, "role": { "$ref": "#/definitions/dto.RoleDTO" }, "role_id": { "type": "string" }, "role_level": { "type": "string" }, "short_description": { "type": "string" }, "social_links": { "type": "array", "items": { "$ref": "#/definitions/dto.SocialLinkDTO" } }, "status": { "type": "string" }, "updated_at": { "type": "string" } } }, "dto.HeroDTO": { "type": "object", "properties": { "avatar": { "type": "string" }, "company": { "type": "string" }, "cta_enabled": { "type": "boolean" }, "first_name": { "type": "string" }, "last_name": { "type": "string" }, "resume_link": { "type": "string" }, "role_id": { "type": "string" }, "role_level": { "type": "string" }, "short_description": { "type": "string" } } }, "dto.Landing": { "type": "object", "properties": { "data": { "$ref": "#/definitions/dto.LandingPageData" }, "message": { "type": "string" } } }, "dto.LandingAssetData": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/dto.AssetResponse" } }, "icon": { "type": "string" }, "id": { "type": "string" }, "title": { "type": "string" } } }, "dto.LandingPageData": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/dto.LandingAssetData" } }, "blogs": { "type": "array", "items": { "$ref": "#/definitions/dto.Blog" } }, "categories": { "type": "array", "items": { "$ref": "#/definitions/dto.CategoryDTO" } }, "specialist_roles": { "type": "array", "items": { "$ref": "#/definitions/dto.ProfileRole" } }, "specialists": { "type": "array", "items": { "$ref": "#/definitions/dto.Specialist" } } } }, "dto.ListAssetsByCategoryIDResponse": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/dto.AssetResponse" } }, "category": { "$ref": "#/definitions/dto.CategoryDTO" }, "page": { "type": "integer" }, "page_size": { "type": "integer" }, "total": { "type": "integer" }, "total_pages": { "type": "integer" } } }, "dto.ListAssetsResponse": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/definitions/dto.AssetResponse" } } } }, "dto.ListCategoriesResponse": { "type": "object", "properties": { "categories": { "type": "array", "items": { "$ref": "#/definitions/dto.CategoryDTO" } } } }, "dto.ListProfilesResponse": { "type": "object", "properties": { "page": { "type": "integer" }, "page_size": { "type": "integer" }, "profiles": { "type": "array", "items": { "$ref": "#/definitions/dto.ProfileResponse" } }, "total": { "type": "integer" } } }, "dto.LoginRequest": { "type": "object", "properties": { "email": { "type": "string" }, "password": { "type": "string" } } }, "dto.OAuthCallbackRequest": { "type": "object", "properties": { "code": { "type": "string" }, "provider": { "$ref": "#/definitions/oauth.Provider" } } }, "dto.OAuthCallbackResponse": { "type": "object", "properties": { "access_token": { "type": "string" }, "is_new_user": { "type": "boolean" }, "refresh_token": { "type": "string" } } }, "dto.OAuthRedirectURLRequest": { "type": "object", "properties": { "provider": { "$ref": "#/definitions/oauth.Provider" } } }, "dto.OAuthRedirectURLResponse": { "type": "object", "properties": { "redirect_url": { "type": "string" } } }, "dto.OverviewAssetDTO": { "type": "object", "properties": { "asset_category": { "$ref": "#/definitions/dto.CategoryDTO" }, "asset_category_id": { "type": "string" }, "content": { "type": "string" }, "cover_image": { "type": "string" }, "created_at": { "type": "string" }, "currency": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "link": { "type": "string" }, "owner_id": { "type": "string" }, "price": { "type": "integer" }, "profile": {}, "profile_id": { "type": "string" }, "rating": { "type": "integer" }, "status": { "type": "string" }, "title": { "type": "string" }, "updated_at": { "type": "string" } } }, "dto.OverviewFetchedDataDTO": { "type": "object", "properties": { "analytics": { "$ref": "#/definitions/dto.AnalyticsDTO" }, "assets": { "type": "array", "items": { "$ref": "#/definitions/dto.OverviewAssetDTO" } }, "recently_joined": { "type": "array", "items": { "$ref": "#/definitions/dto.FlatProfileDTO" } } } }, "dto.OverviewFetchedResponse": { "type": "object", "properties": { "data": { "$ref": "#/definitions/dto.OverviewFetchedDataDTO" }, "message": { "type": "string" } } }, "dto.PageSectionsResponse": { "type": "object", "properties": { "contact": { "$ref": "#/definitions/dto.ContactDTO" }, "hero": { "$ref": "#/definitions/dto.HeroDTO" }, "page_section_order": { "type": "object", "additionalProperties": { "type": "integer" } }, "skills": { "type": "array", "items": { "$ref": "#/definitions/dto.SkillDTO" } } } }, "dto.PageSettingDTO": { "type": "object", "properties": { "visibility_level": { "type": "string" } } }, "dto.ProfileResponse": { "type": "object", "properties": { "about": { "$ref": "#/definitions/dto.AboutDTO" }, "contact": { "$ref": "#/definitions/dto.ContactDTO" }, "handle": { "type": "string" }, "hero": { "$ref": "#/definitions/dto.HeroDTO" }, "id": { "type": "string" }, "page_section_order": { "type": "object", "additionalProperties": { "type": "integer" } }, "page_setting": { "$ref": "#/definitions/dto.PageSettingDTO" }, "skills": { "type": "array", "items": { "$ref": "#/definitions/dto.SkillDTO" } } } }, "dto.ProfileRole": { "type": "object", "properties": { "id": { "type": "string" }, "title": { "type": "string" } } }, "dto.RefreshTokenRequest": { "type": "object", "properties": { "refresh_token": { "type": "string" } } }, "dto.RegisterRequest": { "type": "object", "properties": { "email": { "type": "string" }, "first_name": { "type": "string" }, "last_name": { "type": "string" }, "password": { "type": "string" }, "phone_number": { "type": "string" } } }, "dto.ResetPasswordRequest": { "type": "object", "properties": { "code": { "type": "string" }, "email": { "type": "string" }, "password": { "type": "string" } } }, "dto.Response": { "type": "object", "properties": { "data": {}, "message": { "type": "string" }, "status": { "type": "integer" } } }, "dto.RoleDTO": { "type": "object", "properties": { "ID": { "type": "string" }, "Name": { "type": "string" } } }, "dto.SendResetPasswordEmailRequest": { "type": "object", "properties": { "email": { "type": "string" } } }, "dto.SendVerificationEmailRequest": { "type": "object", "properties": { "email": { "type": "string" } } }, "dto.SetupProfileRequest": { "type": "object", "properties": { "handle": { "type": "string" }, "role_id": { "type": "string" }, "role_level": { "type": "string" }, "short_description": { "type": "string" } } }, "dto.Skill": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "dto.SkillDTO": { "type": "object", "properties": { "level": { "type": "string" }, "skill_name": { "type": "string" } } }, "dto.SkillsUpdateRequest": { "type": "object", "properties": { "skills": { "type": "array", "items": { "$ref": "#/definitions/dto.SkillDTO" } } } }, "dto.SocialLinkDTO": { "type": "object", "properties": { "link": { "type": "string" }, "link_type": { "type": "string" } } }, "dto.Specialist": { "type": "object", "properties": { "avatar": { "type": "string" }, "handle": { "type": "string" }, "id": { "type": "string" } } }, "dto.SpecialistOverviewFetchedDataDTO": { "type": "object", "properties": { "analytics": { "$ref": "#/definitions/dto.AnalyticsDTO" }, "assets": { "type": "array", "items": { "$ref": "#/definitions/dto.OverviewAssetDTO" } }, "completionPercent": { "type": "integer" }, "profile": { "$ref": "#/definitions/dto.ProfileResponse" }, "recently_joined": { "type": "array", "items": { "$ref": "#/definitions/dto.FlatProfileDTO" } }, "skills": { "type": "array", "items": { "$ref": "#/definitions/dto.SkillDTO" } }, "tasks": { "$ref": "#/definitions/dto.TasksDTO" } } }, "dto.SpecialistOverviewFetchedResponse": { "type": "object", "properties": { "data": { "$ref": "#/definitions/dto.SpecialistOverviewFetchedDataDTO" }, "message": { "type": "string" } } }, "dto.SuccessResponse": { "type": "object", "properties": { "message": { "type": "string" }, "status": { "type": "integer", "example": 200 } } }, "dto.TasksDTO": { "type": "object", "properties": { "about_action": { "type": "boolean" }, "profile_action": { "type": "boolean" }, "publish_action": { "type": "boolean" }, "skills_action": { "type": "boolean" }, "social_action": { "type": "boolean" }, "works_action": { "type": "boolean" } } }, "dto.TokenResponse": { "type": "object", "properties": { "access_token": { "type": "string" }, "refresh_token": { "type": "string" } } }, "dto.UpdateAssetRequest": { "type": "object", "properties": { "asset_category_id": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "link": { "type": "string" }, "status": { "type": "integer" }, "title": { "type": "string" } } }, "dto.UpdateProfileRequest": { "type": "object", "properties": { "about": { "$ref": "#/definitions/dto.AboutDTO" }, "contact": { "$ref": "#/definitions/dto.ContactDTO" }, "handle": { "type": "string" }, "hero": { "$ref": "#/definitions/dto.HeroDTO" }, "id": { "type": "string" }, "page_section_order": { "type": "object", "additionalProperties": { "type": "integer" } }, "page_setting": { "$ref": "#/definitions/dto.PageSettingDTO" }, "skills": { "type": "array", "items": { "$ref": "#/definitions/dto.SkillDTO" } } } }, "dto.UpdateProfileRoleRequest": { "type": "object", "properties": { "id": { "type": "string" }, "title": { "type": "string" } } }, "dto.UserInfoResponse": { "type": "object", "properties": { "email": { "type": "string" }, "email_verified": { "type": "boolean" }, "first_name": { "type": "string" }, "id": { "type": "string" }, "last_name": { "type": "string" }, "phone_number": { "type": "string" }, "profile_id": { "type": "string" }, "status": { "type": "string" } } }, "dto.VerifyAccountRequest": { "type": "object", "properties": { "code": { "type": "string" }, "email": { "type": "string" } } }, "oauth.Provider": { "type": "integer", "enum": [ 0, 1, 2, 3, 4, 5 ], "x-enum-varnames": [ "Unknown", "Credentials", "Google", "GitHub", "Linkedin", "Mock" ] } }, "securityDefinitions": { "Bearer": { "description": "Type \"Bearer\" followed by a space and JWT token.", "type": "apiKey", "name": "Authorization", "in": "header" } } }