Files
tm_back/cmd/web/docs/swagger.json
T
n.nakhostin 566fa07574 Update API documentation to reflect customer authorization changes
- Changed tags from "Customers-Mobile" to "Customers-Authorization" in Swagger documentation for customer logout and profile retrieval endpoints.
- Updated the Company entity to replace CustomerID with OwnerCustomerID to better represent ownership.
- Removed obsolete customer assignment methods and related forms from the company domain, streamlining the codebase.
- Adjusted customer forms to include CompanyID instead of CompanyName for better consistency in customer management.
- Enhanced Swagger documentation to accurately reflect the new structure and authorization details for customer-related endpoints.
2025-08-11 16:24:28 +03:30

5490 lines
194 KiB
JSON

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