definitions: company.AddTagsForm: properties: categories: items: type: string type: array certifications: items: type: string type: array cpv_codes: items: type: string type: array keywords: items: type: string type: array specializations: items: type: string type: array type: object company.Address: properties: city: type: string country: type: string postal_code: type: string state: type: string street: type: string type: object company.AddressForm: properties: city: type: string country: type: string postal_code: type: string state: type: string street: type: string type: object company.AssignCustomerForm: properties: customer_id: type: string type: object company.CPVCodeCount: properties: count: type: integer cpv_code: type: string type: object company.CategoryCount: properties: category: type: string count: type: integer type: object company.CompanyListResponse: properties: companies: items: $ref: '#/definitions/company.CompanyResponse' type: array limit: type: integer offset: type: integer total: type: integer total_pages: type: integer type: object company.CompanyResponse: properties: address: $ref: '#/definitions/company.Address' annual_revenue: type: number compliance_notes: type: string contact_person: $ref: '#/definitions/company.ContactPerson' created_at: type: integer created_by: type: string currency: type: string customer_id: type: string description: type: string email: type: string employee_count: type: integer founded_year: type: integer id: type: string industry: type: string is_compliant: type: boolean is_verified: type: boolean language: type: string name: type: string phone: type: string registration_number: type: string status: type: string tags: $ref: '#/definitions/company.CompanyTags' tax_id: type: string timezone: type: string type: type: string updated_at: type: integer updated_by: type: string website: type: string type: object company.CompanyStatsResponse: properties: active_companies: type: integer companies_by_industry: additionalProperties: format: int64 type: integer type: object companies_by_status: additionalProperties: format: int64 type: integer type: object companies_by_type: additionalProperties: format: int64 type: integer type: object companies_with_customer: type: integer top_categories: items: $ref: '#/definitions/company.CategoryCount' type: array top_cpv_codes: items: $ref: '#/definitions/company.CPVCodeCount' type: array total_companies: type: integer verified_companies: type: integer type: object company.CompanyTags: properties: categories: description: Categories items: type: string type: array certifications: description: Certifications items: type: string type: array cpv_codes: description: CPV codes (Common Procurement Vocabulary) items: type: string type: array keywords: description: Keywords for search and matching items: type: string type: array specializations: description: Specializations items: type: string type: array type: object company.CompanyTagsForm: properties: categories: items: type: string type: array certifications: items: type: string type: array cpv_codes: items: type: string type: array keywords: items: type: string type: array specializations: items: type: string type: array type: object company.ContactPerson: properties: email: type: string first_name: type: string full_name: type: string is_primary: type: boolean last_name: type: string mobile: type: string phone: type: string position: type: string type: object company.ContactPersonForm: properties: email: type: string first_name: type: string full_name: type: string is_primary: type: boolean last_name: type: string mobile: type: string phone: type: string position: type: string type: object company.CreateCompanyForm: properties: address: allOf: - $ref: '#/definitions/company.AddressForm' description: Address information annual_revenue: type: number contact_person: allOf: - $ref: '#/definitions/company.ContactPersonForm' description: Contact information currency: type: string customer_id: description: Customer assignment (for login credentials) type: string description: type: string email: type: string employee_count: description: Business information type: integer founded_year: type: integer industry: type: string language: description: Settings type: string name: type: string phone: type: string registration_number: type: string tags: allOf: - $ref: '#/definitions/company.CompanyTagsForm' description: Tags for categorization and search tax_id: type: string timezone: type: string type: type: string website: type: string type: object company.RemoveTagsForm: properties: categories: items: type: string type: array certifications: items: type: string type: array cpv_codes: items: type: string type: array keywords: items: type: string type: array specializations: items: type: string type: array type: object company.SuspendCompanyForm: properties: reason: type: string type: object company.UpdateCompanyForm: properties: address: allOf: - $ref: '#/definitions/company.AddressForm' description: Address information annual_revenue: type: number contact_person: allOf: - $ref: '#/definitions/company.ContactPersonForm' description: Contact information currency: type: string customer_id: description: Customer assignment (for login credentials) type: string description: type: string email: type: string employee_count: description: Business information type: integer founded_year: type: integer industry: type: string language: description: Settings type: string name: type: string phone: type: string registration_number: type: string tags: allOf: - $ref: '#/definitions/company.CompanyTagsForm' description: Tags for categorization and search tax_id: type: string timezone: type: string type: type: string website: type: string type: object company.UpdateCompanyStatusForm: properties: status: type: string type: object company.UpdateCompanyTagsForm: properties: tags: $ref: '#/definitions/company.CompanyTagsForm' type: object company.UpdateCompanyVerificationForm: properties: compliance_notes: type: string is_compliant: type: boolean is_verified: type: boolean type: object customer.Address: properties: address_type: description: billing, shipping, etc. type: string city: type: string country: type: string is_default: type: boolean postal_code: type: string state: type: string street: type: string type: object customer.AddressForm: properties: address_type: type: string city: type: string country: type: string is_default: type: boolean postal_code: type: string state: type: string street: type: string type: object customer.AuthResponse: properties: access_token: type: string customer: $ref: '#/definitions/customer.CustomerResponse' expires_at: type: integer refresh_token: type: string type: object customer.ContactPerson: properties: email: type: string first_name: type: string full_name: type: string is_primary: type: boolean last_name: type: string mobile: type: string phone: type: string position: type: string type: object customer.ContactPersonForm: properties: email: type: string first_name: type: string full_name: type: string is_primary: type: boolean last_name: type: string mobile: type: string phone: type: string position: type: string type: object customer.CreateCustomerForm: properties: address: allOf: - $ref: '#/definitions/customer.AddressForm' description: Address information annual_revenue: type: number business_type: description: Business information type: string company_id: type: string company_name: description: Company customer fields type: string contact_person: allOf: - $ref: '#/definitions/customer.ContactPersonForm' description: Contact person (for company customers) currency: type: string email: type: string employee_count: type: integer first_name: description: Individual customer fields type: string founded_year: type: integer full_name: type: string industry: type: string language: description: Preferences and settings type: string last_name: type: string mobile: type: string password: type: string phone: type: string registration_number: type: string tax_id: type: string timezone: type: string type: type: string username: type: string type: object customer.CustomerListResponse: properties: customers: items: $ref: '#/definitions/customer.CustomerResponse' type: array limit: type: integer offset: type: integer total: type: integer total_pages: type: integer type: object customer.CustomerResponse: properties: address: $ref: '#/definitions/customer.Address' annual_revenue: type: number business_type: type: string company_id: type: string company_name: type: string compliance_notes: type: string contact_person: $ref: '#/definitions/customer.ContactPerson' created_at: type: integer created_by: type: string currency: type: string email: type: string employee_count: type: integer first_name: type: string founded_year: type: integer full_name: type: string id: type: string industry: type: string is_compliant: type: boolean is_verified: type: boolean language: type: string last_name: type: string mobile: type: string phone: type: string registration_number: type: string status: type: string tax_id: type: string timezone: type: string type: type: string updated_at: type: integer updated_by: type: string username: type: string type: object customer.LoginForm: properties: password: type: string username: type: string type: object customer.RefreshTokenForm: properties: refresh_token: type: string type: object customer.SuspendCustomerForm: properties: reason: type: string type: object customer.UpdateCustomerForm: properties: address: allOf: - $ref: '#/definitions/customer.AddressForm' description: Address information annual_revenue: type: number business_type: description: Business information type: string company_id: type: string company_name: description: Company customer fields type: string contact_person: allOf: - $ref: '#/definitions/customer.ContactPersonForm' description: Contact person (for company customers) currency: type: string email: type: string employee_count: type: integer first_name: description: Individual customer fields type: string founded_year: type: integer full_name: type: string industry: type: string language: description: Preferences and settings type: string last_name: type: string mobile: type: string phone: type: string registration_number: type: string tax_id: type: string timezone: type: string type: type: string username: type: string type: object customer.UpdateCustomerStatusForm: properties: status: type: string type: object customer.UpdateCustomerVerificationForm: properties: compliance_notes: type: string is_compliant: type: boolean is_verified: type: boolean type: object main.HealthResponse: properties: status: type: string time: type: integer version: type: string type: object response.APIError: properties: code: type: string details: type: string message: type: string type: object response.APIResponse: properties: data: {} error: $ref: '#/definitions/response.APIError' message: type: string meta: $ref: '#/definitions/response.Meta' success: type: boolean type: object response.Meta: properties: limit: type: integer offset: type: integer page: type: integer pages: type: integer total: type: integer type: object user.AuthResponse: properties: access_token: type: string expires_at: type: integer refresh_token: type: string user: $ref: '#/definitions/user.UserResponse' type: object user.ChangePasswordForm: properties: new_password: type: string old_password: type: string type: object user.CreateUserForm: properties: company_id: type: string department: type: string email: type: string full_name: type: string password: type: string phone: type: string position: type: string profile_image: type: string role: type: string username: type: string type: object user.LoginForm: properties: password: type: string username: type: string type: object user.RefreshTokenForm: properties: refresh_token: type: string type: object user.ResetPasswordForm: properties: email: type: string type: object user.UpdateUserForm: properties: company_id: type: string department: type: string email: type: string full_name: type: string phone: type: string position: type: string profile_image: type: string role: type: string status: type: string username: type: string type: object user.UpdateUserRoleForm: properties: role: type: string type: object user.UpdateUserStatusForm: properties: status: type: string type: object user.UserListResponse: properties: limit: type: integer offset: type: integer total: type: integer total_pages: type: integer users: items: $ref: '#/definitions/user.UserResponse' type: array type: object user.UserResponse: properties: company_id: type: string created_at: type: integer created_by: type: string department: type: string email: type: string full_name: type: string id: type: string is_verified: type: boolean last_login_at: type: integer phone: type: string position: type: string profile_image: type: string role: type: string status: type: string updated_at: type: integer updated_by: type: string username: type: string type: object host: localhost:8081 info: contact: email: support@swagger.io name: API Support url: http://www.swagger.io/support description: This is the API documentation for the Tender Management System. license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: http://swagger.io/terms/ title: Tender Management API version: 1.0.0 paths: /admin/v1/change-password: put: consumes: - application/json description: Change current user password parameters: - description: Password change data in: body name: password required: true schema: $ref: '#/definitions/user.ChangePasswordForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Change password tags: - Users /admin/v1/companies: get: consumes: - application/json description: Retrieve a paginated list of companies with advanced filtering options including search, type, status, industry, verification status, tags, and business criteria. Supports sorting and pagination. parameters: - description: Search term to filter companies by name, description, or industry in: query name: search type: string - description: Filter by company type enum: - private - public - government - ngo - startup in: query name: type type: string - description: Filter by company status enum: - active - inactive - suspended - pending in: query name: status type: string - description: Filter by industry in: query name: industry type: string - description: Filter by verification status in: query name: is_verified type: boolean - description: Filter by compliance status in: query name: is_compliant type: boolean - description: Filter by customer assignment status in: query name: has_customer type: boolean - description: Filter by CPV codes in: query name: cpv_codes type: array - description: Filter by categories in: query name: categories type: array - description: Filter by keywords in: query name: keywords type: array - description: Filter by specializations in: query name: specializations type: array - description: Minimum employee count in: query name: employee_count_min type: integer - description: Maximum employee count in: query name: employee_count_max type: integer - description: Minimum annual revenue in: query name: annual_revenue_min type: number - description: Maximum annual revenue in: query name: annual_revenue_max type: number - description: Minimum founded year in: query name: founded_year_min type: integer - description: Maximum founded year in: query name: founded_year_max type: integer - default: 20 description: Number of companies per page (1-100) in: query maximum: 100 minimum: 1 name: limit type: integer - default: 0 description: Number of companies to skip for pagination in: query minimum: 0 name: offset type: integer - default: created_at description: Field to sort by enum: - name - type - industry - created_at - updated_at - status - employee_count - annual_revenue in: query name: sort_by type: string - default: desc description: Sort order enum: - asc - desc in: query name: sort_order type: string produces: - application/json responses: "200": description: Companies retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/company.CompanyListResponse' type: object "400": description: Bad request - Invalid query parameters schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid query parameters schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: List companies with filters and pagination tags: - Companies-Admin post: consumes: - application/json description: Create a new company with comprehensive information including business details, address, tags, and customer assignment. This endpoint is used by the web panel for full company registration. parameters: - description: Company information including type, business details, address, tags, and optional customer assignment in: body name: company required: true schema: $ref: '#/definitions/company.CreateCompanyForm' produces: - application/json responses: "201": description: Company created successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/company.CompanyResponse' type: object "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "409": description: Conflict - Company with this name/registration/tax ID already exists schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Create a new company tags: - Companies-Admin /admin/v1/companies/{id}: delete: consumes: - application/json description: Soft delete a company by setting status to inactive parameters: - description: Company ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Company deleted successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid company ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Delete company tags: - Companies-Admin get: consumes: - application/json description: Retrieve detailed company information by company ID parameters: - description: Company ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Company retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/company.CompanyResponse' type: object "400": description: Bad request - Invalid company ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get company by ID tags: - Companies-Admin put: consumes: - application/json description: Update company information including business details, address, tags, and customer assignment parameters: - description: Company ID in: path name: id required: true type: string - description: Company update information in: body name: company required: true schema: $ref: '#/definitions/company.UpdateCompanyForm' produces: - application/json responses: "200": description: Company updated successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/company.CompanyResponse' type: object "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "409": description: Conflict - Company with this name/registration/tax ID already exists schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update company information tags: - Companies-Admin /admin/v1/companies/{id}/activate: post: consumes: - application/json description: Activate a suspended company account parameters: - description: Company ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Company activated successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid company ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Activate company tags: - Companies-Admin /admin/v1/companies/{id}/assign-customer: post: consumes: - application/json description: Assign a customer to a company for login credentials parameters: - description: Company ID in: path name: id required: true type: string - description: Customer assignment information in: body name: assignment required: true schema: $ref: '#/definitions/company.AssignCustomerForm' produces: - application/json responses: "200": description: Customer assigned successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "409": description: Conflict - Customer already assigned schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Assign customer to company tags: - Companies-Admin /admin/v1/companies/{id}/status: patch: consumes: - application/json description: Update company account status (active, inactive, suspended, pending) parameters: - description: Company ID in: path name: id required: true type: string - description: New company status in: body name: status required: true schema: $ref: '#/definitions/company.UpdateCompanyStatusForm' produces: - application/json responses: "200": description: Company status updated successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update company status tags: - Companies-Admin /admin/v1/companies/{id}/suspend: post: consumes: - application/json description: Suspend a company account with reason parameters: - description: Company ID in: path name: id required: true type: string - description: Suspension information in: body name: suspension required: true schema: $ref: '#/definitions/company.SuspendCompanyForm' produces: - application/json responses: "200": description: Company suspended successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Suspend company tags: - Companies-Admin /admin/v1/companies/{id}/tags: put: consumes: - application/json description: Update company tags (CPV, categories, keywords, specializations, certifications) parameters: - description: Company ID in: path name: id required: true type: string - description: Tags update information in: body name: tags required: true schema: $ref: '#/definitions/company.UpdateCompanyTagsForm' produces: - application/json responses: "200": description: Company tags updated successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update company tags tags: - Companies-Admin /admin/v1/companies/{id}/tags/add: post: consumes: - application/json description: Add specific tags to a company parameters: - description: Company ID in: path name: id required: true type: string - description: Tags to add in: body name: tags required: true schema: $ref: '#/definitions/company.AddTagsForm' produces: - application/json responses: "200": description: Tags added successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Add tags to company tags: - Companies-Admin /admin/v1/companies/{id}/tags/remove: post: consumes: - application/json description: Remove specific tags from a company parameters: - description: Company ID in: path name: id required: true type: string - description: Tags to remove in: body name: tags required: true schema: $ref: '#/definitions/company.RemoveTagsForm' produces: - application/json responses: "200": description: Tags removed successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Remove tags from company tags: - Companies-Admin /admin/v1/companies/{id}/unassign-customer: post: consumes: - application/json description: Remove customer assignment from a company parameters: - description: Company ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Customer unassigned successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid company ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Unassign customer from company tags: - Companies-Admin /admin/v1/companies/{id}/verification: patch: consumes: - application/json description: Update company verification and compliance status parameters: - description: Company ID in: path name: id required: true type: string - description: Verification status update in: body name: verification required: true schema: $ref: '#/definitions/company.UpdateCompanyVerificationForm' produces: - application/json responses: "200": description: Company verification updated successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update company verification status tags: - Companies-Admin /admin/v1/companies/{id}/verify: post: consumes: - application/json description: Mark a company as verified parameters: - description: Company ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Company verified successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid company ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Company not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Verify company tags: - Companies-Admin /admin/v1/companies/industry/{industry}: get: consumes: - application/json description: Retrieve companies filtered by their industry parameters: - description: Industry in: path name: industry required: true type: string - default: 20 description: Number of companies per page (1-100) in: query maximum: 100 minimum: 1 name: limit type: integer - default: 0 description: Number of companies to skip for pagination in: query minimum: 0 name: offset type: integer produces: - application/json responses: "200": description: Companies retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: items: $ref: '#/definitions/company.CompanyResponse' type: array meta: $ref: '#/definitions/response.Meta' type: object "400": description: Bad request - Invalid industry schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get companies by industry tags: - Companies-Admin /admin/v1/companies/search: get: consumes: - application/json description: Search companies with advanced filtering capabilities including tags, business criteria, and location parameters: - description: Search query in: query name: q type: string - description: CPV codes filter in: query name: cpv_codes type: array - description: Categories filter in: query name: categories type: array - description: Keywords filter in: query name: keywords type: array - description: Specializations filter in: query name: specializations type: array - description: Industry filter in: query name: industry type: string - description: Location filter in: query name: location type: string - description: Minimum employees in: query name: min_employees type: integer - description: Maximum employees in: query name: max_employees type: integer - description: Minimum revenue in: query name: min_revenue type: number - description: Maximum revenue in: query name: max_revenue type: number - description: Verification status in: query name: is_verified type: boolean - description: Compliance status in: query name: is_compliant type: boolean - default: 20 description: Limit in: query name: limit type: integer - default: 0 description: Offset in: query name: offset type: integer produces: - application/json responses: "200": description: Companies search completed schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/company.CompanyListResponse' type: object "400": description: Bad request - Invalid query parameters schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid query parameters schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Advanced search for companies tags: - Companies-Admin /admin/v1/companies/stats: get: consumes: - application/json description: Get comprehensive company statistics for dashboard produces: - application/json responses: "200": description: Company statistics retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/company.CompanyStatsResponse' type: object "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get company statistics tags: - Companies-Admin /admin/v1/companies/status/{status}: get: consumes: - application/json description: Retrieve companies filtered by their status (active, inactive, suspended, pending) parameters: - description: Company status enum: - active - inactive - suspended - pending in: path name: status required: true type: string - default: 20 description: Number of companies per page (1-100) in: query maximum: 100 minimum: 1 name: limit type: integer - default: 0 description: Number of companies to skip for pagination in: query minimum: 0 name: offset type: integer produces: - application/json responses: "200": description: Companies retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: items: $ref: '#/definitions/company.CompanyResponse' type: array meta: $ref: '#/definitions/response.Meta' type: object "400": description: Bad request - Invalid company status schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get companies by status tags: - Companies-Admin /admin/v1/companies/type/{type}: get: consumes: - application/json description: Retrieve companies filtered by their type (private, public, government, ngo, startup) parameters: - description: Company type enum: - private - public - government - ngo - startup in: path name: type required: true type: string - default: 20 description: Number of companies per page (1-100) in: query maximum: 100 minimum: 1 name: limit type: integer - default: 0 description: Number of companies to skip for pagination in: query minimum: 0 name: offset type: integer produces: - application/json responses: "200": description: Companies retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: items: $ref: '#/definitions/company.CompanyResponse' type: array meta: $ref: '#/definitions/response.Meta' type: object "400": description: Bad request - Invalid company type schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get companies by type tags: - Companies-Admin /admin/v1/customers: get: consumes: - application/json description: Retrieve a paginated list of customers with advanced filtering options including search, type, status, company, industry, verification status, and compliance status. Supports sorting and pagination. parameters: - description: Search term to filter customers by name, email, or company name in: query name: search type: string - description: Filter by customer type enum: - individual - company - government in: query name: type type: string - description: Filter by customer status enum: - active - inactive - suspended - pending in: query name: status type: string - description: Filter by company ID format: uuid in: query name: company_id type: string - description: Filter by industry in: query name: industry type: string - description: Filter by verification status in: query name: is_verified type: boolean - description: Filter by compliance status in: query name: is_compliant type: boolean - description: Filter by preferred language in: query name: language type: string - description: Filter by preferred currency in: query name: currency type: string - default: 20 description: Number of customers per page (1-100) in: query maximum: 100 minimum: 1 name: limit type: integer - default: 0 description: Number of customers to skip for pagination in: query minimum: 0 name: offset type: integer - default: created_at description: Field to sort by enum: - email - company_name - created_at - updated_at - status in: query name: sort_by type: string - default: desc description: Sort order enum: - asc - desc in: query name: sort_order type: string produces: - application/json responses: "200": description: Customers retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/customer.CustomerListResponse' type: object "400": description: Bad request - Invalid query parameters schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid query parameters schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: List customers with filters and pagination tags: - Customers-Admin post: consumes: - application/json description: Create a new customer with comprehensive information including personal details, company information, address, and business details. This endpoint is used by the web panel for full customer registration. parameters: - description: Customer information including type (individual|company|government), personal details, company info, address, and business details in: body name: customer required: true schema: $ref: '#/definitions/customer.CreateCustomerForm' produces: - application/json responses: "201": description: Customer created successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/customer.CustomerResponse' type: object "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "409": description: Conflict - Customer with this email/company already exists schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Create a new customer tags: - Customers-Admin /admin/v1/customers/{id}: delete: consumes: - application/json description: Soft delete a customer by setting status to inactive parameters: - description: Customer ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Customer deleted successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid customer ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Delete customer tags: - Customers-Admin get: consumes: - application/json description: Retrieve detailed customer information by customer ID parameters: - description: Customer ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Customer retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/customer.CustomerResponse' type: object "400": description: Bad request - Invalid customer ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get customer by ID tags: - Customers-Admin put: consumes: - application/json description: Update customer information including personal details, company information, address, and business details parameters: - description: Customer ID in: path name: id required: true type: string - description: Updated customer information in: body name: customer required: true schema: $ref: '#/definitions/customer.UpdateCustomerForm' produces: - application/json responses: "200": description: Customer updated successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/customer.CustomerResponse' type: object "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "409": description: Conflict - Customer with this email/company already exists schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update customer information tags: - Customers-Admin /admin/v1/customers/{id}/activate: post: consumes: - application/json description: Activate a suspended customer account parameters: - description: Customer ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Customer activated successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid customer ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Activate customer tags: - Customers-Admin /admin/v1/customers/{id}/status: patch: consumes: - application/json description: Update customer account status (active, inactive, suspended, pending) parameters: - description: Customer ID in: path name: id required: true type: string - description: New customer status in: body name: status required: true schema: $ref: '#/definitions/customer.UpdateCustomerStatusForm' produces: - application/json responses: "200": description: Customer status updated successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update customer status tags: - Customers-Admin /admin/v1/customers/{id}/suspend: post: consumes: - application/json description: Suspend a customer account with optional reason parameters: - description: Customer ID in: path name: id required: true type: string - description: Suspension information in: body name: suspension required: true schema: $ref: '#/definitions/customer.SuspendCustomerForm' produces: - application/json responses: "200": description: Customer suspended successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Suspend customer tags: - Customers-Admin /admin/v1/customers/{id}/verification: patch: consumes: - application/json description: Update customer verification and compliance status parameters: - description: Customer ID in: path name: id required: true type: string - description: Verification status update in: body name: verification required: true schema: $ref: '#/definitions/customer.UpdateCustomerVerificationForm' produces: - application/json responses: "200": description: Customer verification updated successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update customer verification status tags: - Customers-Admin /admin/v1/customers/{id}/verify: post: consumes: - application/json description: Mark a customer as verified parameters: - description: Customer ID in: path name: id required: true type: string produces: - application/json responses: "200": description: Customer verified successfully schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad request - Invalid customer ID schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Verify customer tags: - Customers-Admin /admin/v1/customers/company/{companyId}: get: consumes: - application/json description: Retrieve all customers associated with a specific company parameters: - description: Company ID in: path name: companyId required: true type: string - description: 'Number of customers to return (default: 10, max: 100)' in: query name: limit type: integer - description: 'Number of customers to skip (default: 0)' in: query name: offset type: integer produces: - application/json responses: "200": description: Customers retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: items: $ref: '#/definitions/customer.CustomerResponse' type: array type: object "400": description: Bad request - Invalid company ID schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get customers by company ID tags: - Customers-Admin /admin/v1/customers/status/{status}: get: consumes: - application/json description: Retrieve customers filtered by their account status (active, inactive, suspended, or pending). Useful for administrative monitoring and management. parameters: - description: Customer status enum: - active - inactive - suspended - pending in: path name: status required: true type: string - default: 20 description: Number of customers per page (1-100) in: query maximum: 100 minimum: 1 name: limit type: integer - default: 0 description: Number of customers to skip for pagination in: query minimum: 0 name: offset type: integer produces: - application/json responses: "200": description: Customers retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: items: $ref: '#/definitions/customer.CustomerResponse' type: array meta: $ref: '#/definitions/response.Meta' type: object "400": description: Bad request - Invalid customer status schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get customers by status tags: - Customers-Admin /admin/v1/customers/type/{type}: get: consumes: - application/json description: Retrieve customers filtered by their type (individual, company, or government). Useful for administrative reporting and management. parameters: - description: Customer type enum: - individual - company - government in: path name: type required: true type: string - default: 20 description: Number of customers per page (1-100) in: query maximum: 100 minimum: 1 name: limit type: integer - default: 0 description: Number of customers to skip for pagination in: query minimum: 0 name: offset type: integer produces: - application/json responses: "200": description: Customers retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: items: $ref: '#/definitions/customer.CustomerResponse' type: array meta: $ref: '#/definitions/response.Meta' type: object "400": description: Bad request - Invalid customer type schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get customers by type tags: - Customers-Admin /admin/v1/health: get: consumes: - application/json description: Get server health status produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/main.HealthResponse' summary: Health check tags: - Health /admin/v1/login: post: consumes: - application/json description: Authenticate user with username and password parameters: - description: Login credentials in: body name: login required: true schema: $ref: '#/definitions/user.LoginForm' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/user.AuthResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Login user tags: - Authorization /admin/v1/logout: delete: consumes: - application/json description: Logout current user and invalidate tokens produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Logout user tags: - Users /admin/v1/profile: get: consumes: - application/json description: Get current user profile information produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/user.UserResponse' type: object "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "404": description: Not Found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get user profile tags: - Users put: consumes: - application/json description: Update current user profile information parameters: - description: Profile update data in: body name: profile required: true schema: $ref: '#/definitions/user.UpdateUserForm' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/user.UserResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update user profile tags: - Users /admin/v1/refresh-token: post: consumes: - application/json description: Refresh access token using refresh token parameters: - description: Refresh token in: body name: refresh required: true schema: $ref: '#/definitions/user.RefreshTokenForm' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/user.AuthResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Refresh access token tags: - Authorization /admin/v1/reset-password: post: consumes: - application/json description: Send password reset email to user parameters: - description: Password reset request in: body name: reset required: true schema: $ref: '#/definitions/user.ResetPasswordForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Reset password tags: - Authorization /admin/v1/users: get: consumes: - application/json description: List users with search and filters (admin only) parameters: - description: Search term in: query name: search type: string - description: User status filter in: query name: status type: string - description: User role filter in: query name: role type: string - description: Company ID filter in: query name: company_id type: string - description: Limit results in: query name: limit type: integer - description: Offset results in: query name: offset type: integer - description: Sort field in: query name: sort_by type: string - description: Sort order in: query name: sort_order type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/user.UserListResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: List users tags: - Users post: consumes: - application/json description: Create a new user (admin only) parameters: - description: User creation data in: body name: user required: true schema: $ref: '#/definitions/user.CreateUserForm' produces: - application/json responses: "201": description: Created schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/user.UserResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Create user tags: - Users /admin/v1/users/{id}: delete: consumes: - application/json description: Delete a user (admin only) parameters: - description: User ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "404": description: Not Found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Delete user tags: - Users get: consumes: - application/json description: Get user details by ID (admin only) parameters: - description: User ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/user.UserResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "404": description: Not Found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get user by ID tags: - Users put: consumes: - application/json description: Update user information (admin only) parameters: - description: User ID in: path name: id required: true type: string - description: User update data in: body name: user required: true schema: $ref: '#/definitions/user.UpdateUserForm' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/user.UserResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "404": description: Not Found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update user tags: - Users /admin/v1/users/{id}/role: put: consumes: - application/json description: Update user role (admin only) parameters: - description: User ID in: path name: id required: true type: string - description: Role update data in: body name: role required: true schema: $ref: '#/definitions/user.UpdateUserRoleForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "404": description: Not Found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update user role tags: - Users /admin/v1/users/{id}/status: put: consumes: - application/json description: Update user account status (admin only) parameters: - description: User ID in: path name: id required: true type: string - description: Status update data in: body name: status required: true schema: $ref: '#/definitions/user.UpdateUserStatusForm' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "404": description: Not Found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Update user status tags: - Users /admin/v1/users/company/{company_id}: get: consumes: - application/json description: Get users belonging to a specific company (admin only) parameters: - description: Company ID in: path name: company_id required: true type: string - description: Limit results in: query name: limit type: integer - description: Offset results in: query name: offset type: integer produces: - application/json responses: "200": description: Users with pagination metadata schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: additionalProperties: true type: object type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get users by company ID tags: - Users /admin/v1/users/role/{role}: get: consumes: - application/json description: Get users with a specific role (admin only) parameters: - description: User role in: path name: role required: true type: string - description: Limit results in: query name: limit type: integer - description: Offset results in: query name: offset type: integer produces: - application/json responses: "200": description: Users with pagination metadata schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: additionalProperties: true type: object type: object "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get users by role tags: - Users /api/v1/login: post: consumes: - application/json description: Authenticate customer with username (email) and password. Returns access token, refresh token, and customer information upon successful authentication. parameters: - description: Login credentials (username/email and password) in: body name: login required: true schema: $ref: '#/definitions/customer.LoginForm' produces: - application/json responses: "200": description: Login successful schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/customer.AuthResponse' type: object "400": description: Bad request - Invalid input data schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized - Invalid credentials or inactive account schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' summary: Customer login tags: - Customers-Authorization /api/v1/logout: delete: consumes: - application/json description: Logout customer and invalidate access token produces: - application/json responses: "200": description: Logout successful schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized - Invalid or missing token schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Customer logout tags: - Customers-Authorization /api/v1/profile: get: consumes: - application/json description: Retrieve current customer profile information produces: - application/json responses: "200": description: Profile retrieved successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/customer.CustomerResponse' type: object "401": description: Unauthorized - Invalid or missing token schema: $ref: '#/definitions/response.APIResponse' "404": description: Not found - Customer not found schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' security: - BearerAuth: [] summary: Get customer profile tags: - Customers-Authorization /api/v1/refresh-token: post: consumes: - application/json description: Refresh access token using a valid refresh token. This allows customers to maintain their session without re-authentication. parameters: - description: Refresh token for generating new access token in: body name: refresh required: true schema: $ref: '#/definitions/customer.RefreshTokenForm' produces: - application/json responses: "200": description: Token refreshed successfully schema: allOf: - $ref: '#/definitions/response.APIResponse' - properties: data: $ref: '#/definitions/customer.AuthResponse' type: object "400": description: Bad request - Invalid refresh token or feature not implemented schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized - Invalid or expired refresh token schema: $ref: '#/definitions/response.APIResponse' "422": description: Validation error - Invalid request data schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal server error schema: $ref: '#/definitions/response.APIResponse' summary: Refresh customer access token tags: - Customers-Authorization securityDefinitions: BearerAuth: description: Type "Bearer" followed by a space and JWT token. in: header name: Authorization type: apiKey swagger: "2.0" tags: - description: User management operations including authentication, profile management, and admin operations name: Users - description: Authentication operations including login, logout, and token management name: Authorization - description: Customer management operations including authentication, profile management, and admin operations name: Customers-Admin - description: Customer authentication operations including login, logout, and token management name: Customers-Authorization - description: Company management operations for web panel including CRUD, customer assignment, and tag management name: Companies-Admin - description: Health check operations name: Health