{ "swagger": "2.0", "info": { "description": "Multi-tenant media platform backend API.", "title": "ApiDoc", "termsOfService": "http://swagger.io/terms/", "contact": { "name": "UserName", "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" }, "host": "localhost:8080", "basePath": "/t/{tenantCode}/v1", "paths": { "/super/v1/auth/login": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "parameters": [ { "description": "form", "name": "form", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.LoginForm" } } ], "responses": { "200": { "description": "成功", "schema": { "$ref": "#/definitions/dto.LoginResponse" } } } } }, "/super/v1/auth/token": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "responses": { "200": { "description": "成功", "schema": { "$ref": "#/definitions/dto.LoginResponse" } } } } }, "/super/v1/tenants": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "summary": "租户列表", "parameters": [ { "type": "string", "description": "Asc specifies comma-separated field names to sort ascending by.", "name": "asc", "in": "query" }, { "type": "string", "description": "Desc specifies comma-separated field names to sort descending by.", "name": "desc", "in": "query" }, { "type": "integer", "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).", "name": "limit", "in": "query" }, { "type": "string", "name": "name", "in": "query" }, { "type": "integer", "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.", "name": "page", "in": "query" }, { "enum": [ "pending_verify", "verified", "banned" ], "type": "string", "x-enum-varnames": [ "TenantStatusPendingVerify", "TenantStatusVerified", "TenantStatusBanned" ], "name": "status", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/requests.Pager" }, { "type": "object", "properties": { "items": { "$ref": "#/definitions/dto.TenantItem" } } } ] } } } } }, "/super/v1/tenants/statuses": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "summary": "租户状态列表", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/requests.KV" } } } } } }, "/super/v1/tenants/{tenantID}": { "patch": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "summary": "更新过期时间", "parameters": [ { "type": "integer", "format": "int64", "description": "TenantID", "name": "tenantID", "in": "path", "required": true }, { "description": "Form", "name": "form", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.TenantExpireUpdateForm" } } ], "responses": {} } }, "/super/v1/tenants/{tenantID}/status": { "patch": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "summary": "更新租户状态", "parameters": [ { "type": "integer", "format": "int64", "description": "TenantID", "name": "tenantID", "in": "path", "required": true }, { "description": "Form", "name": "form", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.TenantStatusUpdateForm" } } ], "responses": {} } }, "/super/v1/users": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "summary": "租户列表", "parameters": [ { "type": "string", "description": "Asc specifies comma-separated field names to sort ascending by.", "name": "asc", "in": "query" }, { "type": "string", "description": "Desc specifies comma-separated field names to sort descending by.", "name": "desc", "in": "query" }, { "type": "integer", "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).", "name": "limit", "in": "query" }, { "type": "integer", "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.", "name": "page", "in": "query" }, { "enum": [ "pending_verify", "verified", "banned" ], "type": "string", "x-enum-varnames": [ "UserStatusPendingVerify", "UserStatusVerified", "UserStatusBanned" ], "name": "status", "in": "query" }, { "type": "integer", "name": "tenantID", "in": "query" }, { "type": "string", "name": "username", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/requests.Pager" }, { "type": "object", "properties": { "items": { "$ref": "#/definitions/dto.UserItem" } } } ] } } } } }, "/super/v1/users/statistics": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "summary": "用户统计信息", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/dto.UserStatistics" } } } } } }, "/super/v1/users/statuses": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "summary": "用户状态列表", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/requests.KV" } } } } } }, "/super/v1/users/{userID}/status": { "patch": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Super" ], "summary": "更新用户状态", "parameters": [ { "type": "integer", "format": "int64", "description": "UserID", "name": "userID", "in": "path", "required": true }, { "description": "Form", "name": "form", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.UserStatusUpdateForm" } } ], "responses": {} } }, "/t/{tenantCode}/v1/admin/contents": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "创建内容(草稿)", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true }, { "description": "Form", "name": "form", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.ContentCreateForm" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Content" } } } } }, "/t/{tenantCode}/v1/admin/contents/{contentID}": { "patch": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "更新内容(标题/描述/状态等)", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true }, { "type": "integer", "format": "int64", "description": "ContentID", "name": "contentID", "in": "path", "required": true }, { "description": "Form", "name": "form", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.ContentUpdateForm" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.Content" } } } } }, "/t/{tenantCode}/v1/admin/contents/{contentID}/assets": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "绑定媒体资源到内容(main/cover/preview)", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true }, { "type": "integer", "format": "int64", "description": "ContentID", "name": "contentID", "in": "path", "required": true }, { "description": "Form", "name": "form", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.ContentAssetAttachForm" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ContentAsset" } } } } }, "/t/{tenantCode}/v1/admin/contents/{contentID}/price": { "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "设置内容价格与折扣", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true }, { "type": "integer", "format": "int64", "description": "ContentID", "name": "contentID", "in": "path", "required": true }, { "description": "Form", "name": "form", "in": "body", "required": true, "schema": { "$ref": "#/definitions/dto.ContentPriceUpsertForm" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.ContentPrice" } } } } }, "/t/{tenantCode}/v1/contents": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "内容列表(已发布)", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true }, { "type": "string", "description": "Keyword filters by title keyword (LIKE).", "name": "keyword", "in": "query" }, { "type": "integer", "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).", "name": "limit", "in": "query" }, { "type": "integer", "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.", "name": "page", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/requests.Pager" }, { "type": "object", "properties": { "items": { "$ref": "#/definitions/dto.ContentItem" } } } ] } } } } }, "/t/{tenantCode}/v1/contents/{contentID}": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "内容详情(可见性+权益校验)", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true }, { "type": "integer", "format": "int64", "description": "ContentID", "name": "contentID", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.ContentDetail" } } } } }, "/t/{tenantCode}/v1/contents/{contentID}/assets": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "获取正片资源(main role,需要已购或免费)", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true }, { "type": "integer", "format": "int64", "description": "ContentID", "name": "contentID", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.ContentAssetsResponse" } } } } }, "/t/{tenantCode}/v1/contents/{contentID}/preview": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "获取试看资源(preview role)", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true }, { "type": "integer", "format": "int64", "description": "ContentID", "name": "contentID", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.ContentAssetsResponse" } } } } }, "/t/{tenantCode}/v1/me": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Tenant" ], "summary": "当前租户上下文信息", "parameters": [ { "type": "string", "description": "Tenant Code", "name": "tenantCode", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/dto.MeResponse" } } } } } }, "definitions": { "consts.ContentAssetRole": { "type": "string", "enum": [ "main", "cover", "preview" ], "x-enum-varnames": [ "ContentAssetRoleMain", "ContentAssetRoleCover", "ContentAssetRolePreview" ] }, "consts.ContentStatus": { "type": "string", "enum": [ "draft", "reviewing", "published", "unpublished", "blocked" ], "x-enum-varnames": [ "ContentStatusDraft", "ContentStatusReviewing", "ContentStatusPublished", "ContentStatusUnpublished", "ContentStatusBlocked" ] }, "consts.ContentVisibility": { "type": "string", "enum": [ "public", "tenant_only", "private" ], "x-enum-varnames": [ "ContentVisibilityPublic", "ContentVisibilityTenantOnly", "ContentVisibilityPrivate" ] }, "consts.Currency": { "type": "string", "enum": [ "CNY" ], "x-enum-varnames": [ "CurrencyCNY" ] }, "consts.DiscountType": { "type": "string", "enum": [ "none", "percent", "amount" ], "x-enum-varnames": [ "DiscountTypeNone", "DiscountTypePercent", "DiscountTypeAmount" ] }, "consts.MediaAssetStatus": { "type": "string", "enum": [ "uploaded", "processing", "ready", "failed", "deleted" ], "x-enum-varnames": [ "MediaAssetStatusUploaded", "MediaAssetStatusProcessing", "MediaAssetStatusReady", "MediaAssetStatusFailed", "MediaAssetStatusDeleted" ] }, "consts.MediaAssetType": { "type": "string", "enum": [ "video", "audio", "image" ], "x-enum-varnames": [ "MediaAssetTypeVideo", "MediaAssetTypeAudio", "MediaAssetTypeImage" ] }, "consts.Role": { "type": "string", "enum": [ "user", "super_admin" ], "x-enum-varnames": [ "RoleUser", "RoleSuperAdmin" ] }, "consts.TenantStatus": { "type": "string", "enum": [ "pending_verify", "verified", "banned" ], "x-enum-varnames": [ "TenantStatusPendingVerify", "TenantStatusVerified", "TenantStatusBanned" ] }, "consts.TenantUserRole": { "type": "string", "enum": [ "member", "tenant_admin" ], "x-enum-varnames": [ "TenantUserRoleMember", "TenantUserRoleTenantAdmin" ] }, "consts.UserStatus": { "type": "string", "enum": [ "pending_verify", "verified", "banned" ], "x-enum-varnames": [ "UserStatusPendingVerify", "UserStatusVerified", "UserStatusBanned" ] }, "dto.ContentAssetAttachForm": { "type": "object", "properties": { "asset_id": { "description": "AssetID is the media asset id to attach.", "type": "integer" }, "role": { "description": "Role indicates how this asset is used (main/cover/preview).", "allOf": [ { "$ref": "#/definitions/consts.ContentAssetRole" } ] }, "sort": { "description": "Sort controls ordering under the same role.", "type": "integer" } } }, "dto.ContentAssetsResponse": { "type": "object", "properties": { "assets": { "description": "Assets is the list of media assets for the requested role (preview/main).", "type": "array", "items": { "$ref": "#/definitions/models.MediaAsset" } }, "content": { "description": "Content is the content entity.", "allOf": [ { "$ref": "#/definitions/models.Content" } ] }, "preview_seconds": { "description": "PreviewSeconds indicates the max preview duration (only meaningful for preview response).", "type": "integer" } } }, "dto.ContentCreateForm": { "type": "object", "properties": { "description": { "description": "Description is the content description.", "type": "string" }, "preview_seconds": { "description": "PreviewSeconds controls preview duration (defaults to 60 when omitted).", "type": "integer" }, "title": { "description": "Title is the content title.", "type": "string" }, "visibility": { "description": "Visibility controls who can view the content detail (main assets still require free/purchase).", "allOf": [ { "$ref": "#/definitions/consts.ContentVisibility" } ] } } }, "dto.ContentDetail": { "type": "object", "properties": { "content": { "description": "Content is the content entity.", "allOf": [ { "$ref": "#/definitions/models.Content" } ] }, "has_access": { "description": "HasAccess indicates whether current user can access main assets (free/owner/purchased).", "type": "boolean" }, "price": { "description": "Price is the current price settings for the content (may be nil if not set).", "allOf": [ { "$ref": "#/definitions/models.ContentPrice" } ] } } }, "dto.ContentItem": { "type": "object", "properties": { "content": { "description": "Content is the content entity.", "allOf": [ { "$ref": "#/definitions/models.Content" } ] }, "has_access": { "description": "HasAccess indicates whether current user can access main assets (free/owner/purchased).", "type": "boolean" }, "price": { "description": "Price is the current price settings for the content (may be nil if not set).", "allOf": [ { "$ref": "#/definitions/models.ContentPrice" } ] } } }, "dto.ContentPriceUpsertForm": { "type": "object", "properties": { "currency": { "description": "Currency is fixed to CNY for now.", "allOf": [ { "$ref": "#/definitions/consts.Currency" } ] }, "discount_end_at": { "description": "DiscountEndAt disables discount after this time (optional).", "type": "string" }, "discount_start_at": { "description": "DiscountStartAt enables discount from this time (optional).", "type": "string" }, "discount_type": { "description": "DiscountType defines the discount algorithm (none/percent/amount).", "allOf": [ { "$ref": "#/definitions/consts.DiscountType" } ] }, "discount_value": { "description": "DiscountValue is interpreted based on DiscountType.", "type": "integer" }, "price_amount": { "description": "PriceAmount is the base price in cents (CNY 分).", "type": "integer" } } }, "dto.ContentUpdateForm": { "type": "object", "properties": { "description": { "description": "Description updates the description when provided.", "type": "string" }, "preview_seconds": { "description": "PreviewSeconds updates preview duration when provided (must be \u003e 0).", "type": "integer" }, "status": { "description": "Status updates the content status when provided (e.g. publish/unpublish).", "allOf": [ { "$ref": "#/definitions/consts.ContentStatus" } ] }, "title": { "description": "Title updates the title when provided.", "type": "string" }, "visibility": { "description": "Visibility updates the visibility when provided.", "allOf": [ { "$ref": "#/definitions/consts.ContentVisibility" } ] } } }, "dto.LoginForm": { "type": "object", "properties": { "password": { "type": "string" }, "username": { "type": "string" } } }, "dto.LoginResponse": { "type": "object", "properties": { "token": { "type": "string" } } }, "dto.MeResponse": { "type": "object", "properties": { "tenant": { "description": "Tenant is the resolved tenant by `tenantCode`.", "allOf": [ { "$ref": "#/definitions/models.Tenant" } ] }, "tenant_user": { "description": "TenantUser is the membership record of the authenticated user within the tenant.", "allOf": [ { "$ref": "#/definitions/models.TenantUser" } ] }, "user": { "description": "User is the authenticated user derived from JWT `user_id`.", "allOf": [ { "$ref": "#/definitions/models.User" } ] } } }, "dto.TenantExpireUpdateForm": { "type": "object", "required": [ "duration" ], "properties": { "duration": { "type": "integer", "enum": [ 7, 30, 90, 180, 365 ] } } }, "dto.TenantItem": { "type": "object", "properties": { "code": { "type": "string" }, "config": { "type": "array", "items": { "type": "integer" } }, "created_at": { "type": "string" }, "expired_at": { "type": "string" }, "id": { "type": "integer" }, "name": { "type": "string" }, "status": { "$ref": "#/definitions/consts.TenantStatus" }, "status_description": { "type": "string" }, "updated_at": { "type": "string" }, "user_balance": { "type": "integer" }, "user_count": { "type": "integer" }, "user_id": { "type": "integer" }, "users": { "type": "array", "items": { "$ref": "#/definitions/models.User" } }, "uuid": { "type": "string" } } }, "dto.TenantStatusUpdateForm": { "type": "object", "required": [ "status" ], "properties": { "status": { "enum": [ "normal", "disabled" ], "allOf": [ { "$ref": "#/definitions/consts.TenantStatus" } ] } } }, "dto.UserItem": { "type": "object", "properties": { "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "id": { "type": "integer" }, "metas": { "type": "array", "items": { "type": "integer" } }, "owned": { "$ref": "#/definitions/models.Tenant" }, "password": { "type": "string" }, "roles": { "type": "array", "items": { "$ref": "#/definitions/consts.Role" } }, "status": { "$ref": "#/definitions/consts.UserStatus" }, "status_description": { "type": "string" }, "tenants": { "type": "array", "items": { "$ref": "#/definitions/models.Tenant" } }, "updated_at": { "type": "string" }, "username": { "type": "string" }, "verified_at": { "type": "string" } } }, "dto.UserStatistics": { "type": "object", "properties": { "count": { "type": "integer" }, "status": { "$ref": "#/definitions/consts.UserStatus" }, "status_description": { "type": "string" } } }, "dto.UserStatusUpdateForm": { "type": "object", "required": [ "status" ], "properties": { "status": { "enum": [ "normal", "disabled" ], "allOf": [ { "$ref": "#/definitions/consts.UserStatus" } ] } } }, "gorm.DeletedAt": { "type": "object", "properties": { "time": { "type": "string" }, "valid": { "description": "Valid is true if Time is not NULL", "type": "boolean" } } }, "models.Content": { "type": "object", "properties": { "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "description": { "type": "string" }, "id": { "type": "integer" }, "preview_downloadable": { "type": "boolean" }, "preview_seconds": { "type": "integer" }, "published_at": { "type": "string" }, "status": { "$ref": "#/definitions/consts.ContentStatus" }, "tenant_id": { "type": "integer" }, "title": { "type": "string" }, "updated_at": { "type": "string" }, "user_id": { "type": "integer" }, "visibility": { "$ref": "#/definitions/consts.ContentVisibility" } } }, "models.ContentAsset": { "type": "object", "properties": { "asset_id": { "type": "integer" }, "content_id": { "type": "integer" }, "created_at": { "type": "string" }, "id": { "type": "integer" }, "role": { "$ref": "#/definitions/consts.ContentAssetRole" }, "sort": { "type": "integer" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" }, "user_id": { "type": "integer" } } }, "models.ContentPrice": { "type": "object", "properties": { "content_id": { "type": "integer" }, "created_at": { "type": "string" }, "currency": { "$ref": "#/definitions/consts.Currency" }, "discount_end_at": { "type": "string" }, "discount_start_at": { "type": "string" }, "discount_type": { "$ref": "#/definitions/consts.DiscountType" }, "discount_value": { "type": "integer" }, "id": { "type": "integer" }, "price_amount": { "type": "integer" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" }, "user_id": { "type": "integer" } } }, "models.MediaAsset": { "type": "object", "properties": { "bucket": { "type": "string" }, "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "id": { "type": "integer" }, "meta": { "type": "array", "items": { "type": "integer" } }, "object_key": { "type": "string" }, "provider": { "type": "string" }, "status": { "$ref": "#/definitions/consts.MediaAssetStatus" }, "tenant_id": { "type": "integer" }, "type": { "$ref": "#/definitions/consts.MediaAssetType" }, "updated_at": { "type": "string" }, "user_id": { "type": "integer" } } }, "models.Tenant": { "type": "object", "properties": { "code": { "type": "string" }, "config": { "type": "array", "items": { "type": "integer" } }, "created_at": { "type": "string" }, "expired_at": { "type": "string" }, "id": { "type": "integer" }, "name": { "type": "string" }, "status": { "$ref": "#/definitions/consts.TenantStatus" }, "updated_at": { "type": "string" }, "user_id": { "type": "integer" }, "users": { "type": "array", "items": { "$ref": "#/definitions/models.User" } }, "uuid": { "type": "string" } } }, "models.TenantUser": { "type": "object", "properties": { "balance": { "type": "integer" }, "created_at": { "type": "string" }, "id": { "type": "integer" }, "role": { "type": "array", "items": { "$ref": "#/definitions/consts.TenantUserRole" } }, "status": { "$ref": "#/definitions/consts.UserStatus" }, "tenant_id": { "type": "integer" }, "updated_at": { "type": "string" }, "user_id": { "type": "integer" } } }, "models.User": { "type": "object", "properties": { "created_at": { "type": "string" }, "deleted_at": { "$ref": "#/definitions/gorm.DeletedAt" }, "id": { "type": "integer" }, "metas": { "type": "array", "items": { "type": "integer" } }, "owned": { "$ref": "#/definitions/models.Tenant" }, "password": { "type": "string" }, "roles": { "type": "array", "items": { "$ref": "#/definitions/consts.Role" } }, "status": { "$ref": "#/definitions/consts.UserStatus" }, "tenants": { "type": "array", "items": { "$ref": "#/definitions/models.Tenant" } }, "updated_at": { "type": "string" }, "username": { "type": "string" }, "verified_at": { "type": "string" } } }, "requests.KV": { "type": "object", "properties": { "key": { "description": "Key is a machine-readable value, usually an enum string.", "type": "string" }, "value": { "description": "Value is the label payload, often a human-readable string." } } }, "requests.Pager": { "type": "object", "properties": { "items": { "description": "Items is the paged result list; concrete type depends on endpoint." }, "limit": { "description": "Limit is page size; only values in {10,20,50,100} are accepted (otherwise defaults to 10).", "type": "integer" }, "page": { "description": "Page is 1-based page index; values \u003c= 0 are normalized to 1.", "type": "integer" }, "total": { "description": "Total is the total number of items matching current filter (before paging).", "type": "integer" } } } }, "securityDefinitions": { "BasicAuth": { "type": "basic" } }, "externalDocs": { "description": "OpenAPI", "url": "https://swagger.io/resources/open-api/" } }