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